ll7098ll commited on
Commit
fabb74d
โ€ข
1 Parent(s): 97144fc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -49
app.py CHANGED
@@ -1,70 +1,79 @@
1
  import os
 
 
2
  import google.generativeai as genai
3
  import gradio as gr
4
- import time
5
 
 
6
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
7
 
8
- # ๋ชจ๋ธ ์„ค์ •์„ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ด๋™
9
- def generate_curriculum(prompt):
10
- generation_config = {
11
  "temperature": 1,
12
  "top_p": 0.95,
13
  "top_k": 64,
14
  "max_output_tokens": 15000,
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
- safety_settings = [
18
- {
19
- "category": "HARM_CATEGORY_HARASSMENT",
20
- "threshold": "BLOCK_NONE"
21
- },
22
- {
23
- "category": "HARM_CATEGORY_HATE_SPEECH",
24
- "threshold": "BLOCK_NONE"
25
- },
26
- {
27
- "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
28
- "threshold": "BLOCK_NONE"
29
- },
30
- {
31
- "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
32
- "threshold": "BLOCK_NONE"
33
- },
34
- ]
35
 
36
- # ์„ธ์…˜๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ชจ๋ธ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
37
- model = genai.GenerativeModel(model_name="gemini-1.5-pro",
38
- generation_config=generation_config,
39
- safety_settings=safety_settings)
40
 
41
- prompt_parts = [
42
- "Concept-based inquiry learning expert",
43
- "ํ•™์Šต์ฃผ์ œ ํ•™์Šต์ฃผ์ œ",
44
- "์ฃผ์ œ์— ๋Œ€ํ•œ ๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต ๊ตฌ์ฒด์  ์ˆ˜์—… ๊ณ„ํš 0. ํ•™์Šต์ฃผ์ œ์— ๋Œ€ํ•œ ๋งคํฌ๋กœ ๊ฐœ๋…(๊ฐœ๋…์  ๋ Œ์ฆˆ), ๋งˆ์ดํฌ๋กœ ๊ฐœ๋…(๊ต๊ณผ๊ฐœ๋…), ์ผ๋ฐ˜ํ™”(๊ฐœ๋…์  ์ดํ•ด)\n\n1. ๊ด€๊ณ„๋งบ๊ธฐ: ์ง€์  ์ •์„œ์  ์ˆ˜์—…์ฐธ์—ฌ, ์‚ฌ์ „์ง€์‹ ์œ ๋„\n\n2. ์ง‘์ค‘ํ•˜๊ธฐ: ๊ต๊ณผ๊ฐœ๋… ์กฐ์‚ฌ, ๊ด€๋ จ ์‚ฌ์‹ค์  ์˜ˆ ์ค‘ 1-2๊ฐœ ์†Œ๊ฐœํ•˜๊ธฐ\n\n3. ์กฐ์‚ฌํ•˜๊ธฐ: ๊ฐœ๋… ๊ด€๋ จ ์‚ฌ๋ก€๋“ค ์กฐ์‚ฌํ•˜๊ธฐ, ์‚ฌ๋ก€ ์ถ”๊ฐ€์ œ์‹œ๋กœ ๊ฐœ๋…์ดํ•ด ํ™•์žฅํ•˜๊ธฐ \n\n4. ์กฐ์ง ๋ฐ ์ •๋ฆฌํ•˜๊ธฐ: ์‚ฌ์‹ค์  ๊ฐœ๋…์  ์ˆ˜์ค€์—์„œ ์ƒ๊ฐ ๊ตฌ์„ฑํ•˜๊ธฐ, ๋‹ค๋ฅธ ์ž๋ฃŒ๋กœ, ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ต๊ณผ๋กœ ๊ฐœ๋…๊ณผ ์ƒ๊ฐ ๋‚˜ํƒ€๋‚ด๊ธฐ\n\n5. ์ผ๋ฐ˜ํ™”: ์‚ฌ์‹ค์  ์˜ˆ์‹œ์—์„œ ํŒจํ„ด ๋ฐœ๊ฒฌํ•˜๊ณ , ์—ฐ๊ฒฐ์„ฑ ์ฐพ๊ธฐ, ์ผ๋ฐ˜ํ™” ๋ช…๋ฃŒํ™”ํ•˜๊ธฐ\n\n6.์ „์ด: ์ผ๋ฐ˜ํ™” ์œ ํšจ์„ฑ๊ฒ€์ฆํ•˜๊ณ  ์ •๋‹นํ™”ํ•˜๊ธฐ, ์ƒˆ๋กœ์šด ์ƒํ™ฉ์— ์ ์šฉ, ํ•™์Šต์— ๋Œ€ํ•ด ์˜๋ฏธ์žˆ๋Š” ํ–‰๋™ ์ทจํ•˜๊ธฐ, ์˜ˆ์ธก, ๊ฐ€์ •์„ ํ˜•์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฝํ—˜๊ณผ ์ดํ•ด ํ™œ์šฉํ•˜๊ธฐ\n\n7. ์„ฑ์ฐฐํ•˜๊ธฐ: ํ•™์Šต์ฃผ์ฒด์ž„์„ ์ธ์‹ํ•˜๊ธฐ, ์ž์‹  ํ•™์Šต๊ณผ์ • ๊ณ„ํšํ•˜๊ณ  ํ†ต์ œํ•˜๊ธฐ, ๊ณผ์ • ํ‰๊ฐ€ํ•˜๊ธฐ\n\n8. ํ‰๊ฐ€ ๊ณ„ํš ๋ฐ ์ˆ˜ํ–‰๊ณผ์ œ(GRASPS), ํ‰๊ฐ€ ๋ฃจ๋ธŒ๋ฆญ(์ƒ, ์ค‘, ํ•˜ ํ‰์–ด)\n\n9. ํ•™์ƒ์˜ ํƒ๊ตฌ๋ฅผ ์œ„ํ•œ ํŒ",
45
- prompt,
46
- "๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต",
47
- ]
48
 
49
- full_text = ""
50
- yield full_text # ์ดˆ๊ธฐ ๋นˆ ํ…์ŠคํŠธ ์ถœ๋ ฅ
 
 
 
51
 
52
- try:
53
- response = model.generate_content(prompt_parts, stream=True)
54
- for chunk in response:
55
- full_text += chunk.text
56
- yield full_text
57
- time.sleep(0.05) # ์•ฝ๊ฐ„์˜ ์ง€์—ฐ ์ถ”๊ฐ€
58
- except Exception as e:
59
- yield f"์—๋Ÿฌ ๋ฐœ์ƒ: {str(e)}"
60
 
61
- # ์ธํ„ฐํŽ˜์ด์Šค ์„ค์ • (๋ณ€๊ฒฝ ์—†์Œ)
62
  iface = gr.Interface(
63
  fn=generate_curriculum,
64
- inputs=gr.Textbox(lines=1, label="ํ•™์Šต์ฃผ์ œ ์ž…๋ ฅ"),
65
- outputs=gr.Textbox(lines=20, label="๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต"),
66
- title="๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต ์ฑ—๋ด‡",
67
- description="ํ•™์Šต์ฃผ์ œ ์ž…๋ ฅํ•˜๋ฉด ๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค."
68
  )
69
 
 
70
  iface.launch()
 
1
  import os
2
+ import time
3
+
4
  import google.generativeai as genai
5
  import gradio as gr
 
6
 
7
+ # Google Gemini API ํ‚ค ์„ค์ •
8
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
9
 
10
+ # ๋ชจ๋ธ ์„ค์ •
11
+ generation_config = {
 
12
  "temperature": 1,
13
  "top_p": 0.95,
14
  "top_k": 64,
15
  "max_output_tokens": 15000,
16
+ "response_mime_type": "text/plain",
17
+ }
18
+
19
+ model = genai.GenerativeModel(
20
+ model_name="gemini-1.5-pro",
21
+ generation_config=generation_config,
22
+ )
23
+
24
+ # ํ”„๋กฌํ”„ํŠธ ์„ค์ •
25
+ SYSTEM_PROMPT = """
26
+ ๋‹น์‹ ์€ Concept-based inquiry learning expert, ๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต ์„ค๊ณ„ ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
27
+ ์ดˆ๋“ฑํ•™๊ต ๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต ์ˆ˜์—…์„ ์ฒด๊ณ„์ ์œผ๋กœ ์„ค๊ณ„ํ•ด ์ฃผ์„ธ์š”.
28
+ ๋‹ค์Œ์€ ๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต ์„ค๊ณ„์— ํ•„์š”ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.
29
+
30
+ **๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต ๊ตฌ์„ฑ ์š”์†Œ:**
31
+ 1. **์„ฑ์ทจ๊ธฐ์ค€์— ๋Œ€ํ•œ ๋งคํฌ๋กœ ๊ฐœ๋…(๊ฐœ๋…์  ๋ Œ์ฆˆ), ๋งˆ์ดํฌ๋กœ ๊ฐœ๋…(๊ต๊ณผ๊ฐœ๋…), ์ผ๋ฐ˜ํ™”(๊ฐœ๋…์  ์ดํ•ด)**
32
+ 2. **๊ด€๊ณ„๋งบ๊ธฐ: ์ง€์  ์ •์„œ์  ์ˆ˜์—…์ฐธ์—ฌ, ์‚ฌ์ „์ง€์‹ ์œ ๋„**
33
+ 3. **์ง‘์ค‘ํ•˜๊ธฐ: ๊ต๊ณผ๊ฐœ๋… ์กฐ์‚ฌ, ๊ด€๋ จ ์‚ฌ์‹ค์  ์˜ˆ ์ค‘ 2~3๊ฐœ ์†Œ๊ฐœํ•˜๊ธฐ**
34
+ 4. **์กฐ์‚ฌํ•˜๊ธฐ: ๊ฐœ๋… ๊ด€๋ จ ์‚ฌ๋ก€๋“ค ์กฐ์‚ฌํ•˜๊ธฐ, ์‚ฌ๋ก€ ์ถ”๊ฐ€์ œ์‹œ๋กœ ๊ฐœ๋…์ดํ•ด ํ™•์žฅํ•˜๊ธฐ **
35
+ 5. **์กฐ์ง ๋ฐ ์ •๋ฆฌํ•˜๊ธฐ: ์‚ฌ์‹ค์  ๊ฐœ๋…์  ์ˆ˜์ค€์—์„œ ์ƒ๊ฐ ๊ตฌ์„ฑํ•˜๊ธฐ, ๋‹ค๋ฅธ ์ž๋ฃŒ๋กœ, ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ต๊ณผ๋กœ ๊ฐœ๋…๊ณผ ์ƒ๊ฐ ๋‚˜ํƒ€๋‚ด๊ธฐ**
36
+ 6. **์ผ๋ฐ˜ํ™”: ์‚ฌ์‹ค์  ์˜ˆ์‹œ์—์„œ ํŒจํ„ด ๋ฐœ๊ฒฌํ•˜๊ณ , ์—ฐ๊ฒฐ์„ฑ ์ฐพ๊ธฐ, ์ผ๋ฐ˜ํ™” ๋ช…๋ฃŒํ™”ํ•˜๊ธฐ**
37
+ 7. **์ „์ด: ์ผ๋ฐ˜ํ™” ์œ ํšจ์„ฑ๊ฒ€์ฆํ•˜๊ณ  ์ •๋‹นํ™”ํ•˜๊ธฐ, ์ƒˆ๋กœ์šด ์ƒํ™ฉ์— ์ ์šฉ, ํ•™์Šต์— ๋Œ€ํ•ด ์˜๋ฏธ์žˆ๋Š” ํ–‰๋™ ์ทจํ•˜๊ธฐ, ์˜ˆ์ธก, ๊ฐ€์ •์„ ํ˜•์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฝํ—˜๊ณผ ์ดํ•ด ํ™œ์šฉํ•˜๊ธฐ**
38
+ 8. **์„ฑ์ฐฐํ•˜๊ธฐ: ํ•™์Šต์ฃผ์ฒด์ž„์„ ์ธ์‹ํ•˜๊ธฐ, ์ž์‹  ํ•™์Šต๊ณผ์ • ๊ณ„ํšํ•˜๊ณ  ํ†ต์ œํ•˜๊ธฐ, ๊ณผ์ • ํ‰๊ฐ€ํ•˜๊ธฐ**
39
+ 9. **ํ‰๊ฐ€ ๊ณ„ํš ๋ฐ ์ˆ˜ํ–‰๊ณผ์ œ(GRASPS), ํ‰๊ฐ€ ๋ฃจ๋ธŒ๋ฆญ(์ƒ, ์ค‘, ํ•˜ ํ‰์–ด)**
40
+ 10. **ํ•™์ƒ์˜ ํƒ๊ตฌ๋ฅผ ์œ„ํ•œ ํŒ**
41
+ """
42
 
43
+ def generate_curriculum(achievement_standard):
44
+ """
45
+ ์„ฑ์ทจ๊ธฐ์ค€์„ ์ž…๋ ฅ๋ฐ›์•„ ๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
46
+ ์•„์›ƒํ’‹์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
+ Args:
49
+ achievement_standard (str): ์„ฑ์ทจ๊ธฐ์ค€
 
 
50
 
51
+ Returns:
52
+ str: ์ƒ์„ฑ๋œ ๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต
53
+ """
 
 
 
 
54
 
55
+ prompt = [
56
+ SYSTEM_PROMPT,
57
+ f"**์„ฑ์ทจ๊ธฐ์ค€:** {achievement_standard}",
58
+ "**๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต:**",
59
+ ]
60
 
61
+ response = model.generate_content(prompt, stream=True)
62
+ collected_text = ""
63
+ for token in response:
64
+ chunk = token.text
65
+ collected_text += chunk
66
+ yield collected_text # ์‹ค์‹œ๊ฐ„ ์ถœ๋ ฅ์„ ์œ„ํ•ด yield ์‚ฌ์šฉ
67
+ time.sleep(0.03) # ์ถœ๋ ฅ ์†๋„ ์กฐ์ ˆ
 
68
 
69
+ # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์„ค์ •
70
  iface = gr.Interface(
71
  fn=generate_curriculum,
72
+ inputs=gr.Textbox(lines=3, label="์„ฑ์ทจ๊ธฐ์ค€ ์ž…๋ ฅ"),
73
+ outputs=gr.Textbox(lines=10, label="๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต"),
74
+ title="๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต ์„ค๊ณ„ ๋„์šฐ๋ฏธ",
75
+ description="์ดˆ๋“ฑํ•™๊ต ๊ต์œก๊ณผ์ •์— ๋งž๋Š” ๊ฐœ๋…๊ธฐ๋ฐ˜ ํƒ๊ตฌํ•™์Šต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.",
76
  )
77
 
78
+ # ์ธํ„ฐํŽ˜์ด์Šค ์‹คํ–‰
79
  iface.launch()