ll7098ll commited on
Commit
4f4776f
Β·
verified Β·
1 Parent(s): abce01d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -30
app.py CHANGED
@@ -1,11 +1,13 @@
1
  import os
2
  import time
3
 
4
- import gradio as gr
5
  import google.generativeai as genai
 
6
 
7
- # Gemini API μ„€μ •
8
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
 
 
9
  generation_config = {
10
  "temperature": 1,
11
  "top_p": 0.95,
@@ -13,42 +15,61 @@ generation_config = {
13
  "max_output_tokens": 15000,
14
  "response_mime_type": "text/plain",
15
  }
 
16
  model = genai.GenerativeModel(
17
  model_name="gemini-1.5-pro",
18
  generation_config=generation_config,
19
  )
20
 
21
- def generate_response(input_text, progress=gr.Progress()):
22
- """Gemini APIλ₯Ό ν˜ΈμΆœν•˜μ—¬ 응닡을 μƒμ„±ν•˜λŠ” ν•¨μˆ˜ (μ‹€μ‹œκ°„ 좜λ ₯)"""
23
- prompt = "\n".join([
24
- "Concept-based inquiry learning expert",
25
- "ν•™μŠ΅μ£Όμ œ ν•™μŠ΅μ£Όμ œ",
26
- "μ£Όμ œμ— λŒ€ν•œ κ°œλ…κΈ°λ°˜ νƒκ΅¬ν•™μŠ΅ ꡬ체적 μˆ˜μ—… κ³„νš 0. ν•™μŠ΅μ£Όμ œμ— λŒ€ν•œ 맀크둜 κ°œλ…(κ°œλ…μ  렌즈), 마이크둜 κ°œλ…(κ΅κ³Όκ°œλ…), μΌλ°˜ν™”(κ°œλ…μ  이해)\n\n1. 관계맺기: 지적 μ •μ„œμ  μˆ˜μ—…μ°Έμ—¬, 사전지식 μœ λ„\n\n2. μ§‘μ€‘ν•˜κΈ°: κ΅κ³Όκ°œλ… 쑰사, κ΄€λ ¨ 사싀적 예 쀑 1-2개 μ†Œκ°œν•˜κΈ°\n\n3. μ‘°μ‚¬ν•˜κΈ°: κ°œλ… κ΄€λ ¨ 사둀듀 μ‘°μ‚¬ν•˜κΈ°, 사둀 μΆ”κ°€μ œμ‹œλ‘œ κ°œλ…μ΄ν•΄ ν™•μž₯ν•˜κΈ° \n\n4. 쑰직 및 μ •λ¦¬ν•˜κΈ°: 사싀적 κ°œλ…μ  μˆ˜μ€€μ—μ„œ 생각 κ΅¬μ„±ν•˜κΈ°, λ‹€λ₯Έ 자료둜, λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ, ꡐ과둜 κ°œλ…κ³Ό 생각 λ‚˜νƒ€λ‚΄κΈ°\n\n5. μΌλ°˜ν™”: 사싀적 μ˜ˆμ‹œμ—μ„œ νŒ¨ν„΄ λ°œκ²¬ν•˜κ³ , μ—°κ²°μ„± μ°ΎκΈ°, μΌλ°˜ν™” λͺ…λ£Œν™”ν•˜κΈ°\n\n6.전이: μΌλ°˜ν™” μœ νš¨μ„±κ²€μ¦ν•˜κ³  μ •λ‹Ήν™”ν•˜κΈ°, μƒˆλ‘œμš΄ 상황에 적용, ν•™μŠ΅μ— λŒ€ν•΄ μ˜λ―ΈμžˆλŠ” 행동 μ·¨ν•˜κΈ°, 예츑, 가정을 ν˜•μ„±ν•˜κΈ° μœ„ν•΄ κ²½ν—˜κ³Ό 이해 ν™œμš©ν•˜κΈ°\n\n7. μ„±μ°°ν•˜κΈ°: ν•™μŠ΅μ£Όμ²΄μž„μ„ μΈμ‹ν•˜κΈ°, μžμ‹  ν•™μŠ΅κ³Όμ • κ³„νšν•˜κ³  ν†΅μ œν•˜κΈ°, κ³Όμ • ν‰κ°€ν•˜κΈ°\n\n8. 평가 κ³„νš 및 μˆ˜ν–‰κ³Όμ œ(GRASPS), 평가 루브릭(상, 쀑, ν•˜ 평어)\n\n9. ν•™μƒμ˜ 탐ꡬλ₯Ό μœ„ν•œ 팁",
27
- "ν•™μŠ΅μ£Όμ œ λΉ›μ˜ 직진",
28
- "μ£Όμ œμ— λŒ€ν•œ κ°œλ…κΈ°λ°˜ νƒκ΅¬ν•™μŠ΅ ꡬ체적 μˆ˜μ—… κ³„νš ",
29
- input_text
30
- ])
31
-
32
- response = ""
33
- for chunk in model.generate_content([prompt], stream=True):
34
- if chunk.text:
35
- response += chunk.text
36
- # μ•½κ°„μ˜ 지연을 μΆ”κ°€ν•˜μ—¬ 타이핑 효과λ₯Ό μ—°μΆœν•©λ‹ˆλ‹€.
37
- time.sleep(0.05)
38
- yield response
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
  # Gradio μΈν„°νŽ˜μ΄μŠ€ μ„€μ •
41
  iface = gr.Interface(
42
- fn=generate_response,
43
- inputs=gr.Textbox(lines=2, label="ν•™μŠ΅ 주제 μž…λ ₯"),
44
- outputs=gr.Textbox(lines=10, label="κ°œλ…κΈ°λ°˜ νƒκ΅¬ν•™μŠ΅ μˆ˜μ—… κ³„νš"),
45
- title="κ°œλ… 기반 탐ꡬ ν•™μŠ΅ 챗봇",
46
- description="ν•™μŠ΅ μ£Όμ œμ— λŒ€ν•œ κ°œλ… 기반 탐ꡬ ν•™μŠ΅ μˆ˜μ—… κ³„νšμ„ μƒμ„±ν•©λ‹ˆλ‹€.",
47
- examples=[
48
- ["μžμ›μ˜ ν¬μ†Œμ„±"],
49
- ["λ‹€μ–‘ν•œ ν™˜κ²½μ— μ„œμ‹ν•˜λŠ” 식물"],
50
- ],
51
  )
52
 
53
- # 챗봇 μ‹€ν–‰
54
  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,
 
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 Curriculum Expert, κ°œλ…κΈ°λ°˜κ΅μœ‘κ³Όμ • 섀계 μ „λ¬Έκ°€μž…λ‹ˆλ‹€.
27
+ μ΄ˆλ“±ν•™κ΅ κ΅μœ‘κ³Όμ • λ²”μœ„ λ‚΄μ—μ„œ κ°œλ…κΈ°λ°˜ κ΅μœ‘κ³Όμ • 및 μˆ˜μ—…μ„ μ²΄κ³„μ μœΌλ‘œ 섀계해 μ£Όμ„Έμš”.
28
+ λ‹€μŒμ€ κ°œλ…κΈ°λ°˜ κ΅μœ‘κ³Όμ • 섀계에 ν•„μš”ν•œ μ •λ³΄μž…λ‹ˆλ‹€.
29
+
30
+ **κ°œλ…κΈ°λ°˜ κ΅μœ‘κ³Όμ • ꡬ성 μš”μ†Œ:**
31
+ 1. **핡심 아이디어 (μΌλ°˜ν™”λœ 지식)**
32
+ 2. **맀크둜 κ°œλ… (κ°œλ…μ  렌즈), 마이크둜 κ°œλ… (ꡐ과 κ°œλ…)**
33
+ 3. **사싀적 지식, 주제, κ°œλ…, 원리 및 μΌλ°˜ν™”, 이둠**
34
+ 4. **μŠ€νŠΈλžœλ“œμ™€ μ°¨μ‹œλ³„ ν•™μŠ΅ν™œλ™**
35
+ 5. **평가 λ‚΄μš© 및 방법, 평가 루브릭(상, 쀑, ν•˜ 평어 μ˜ˆμ‹œ 포함)**
36
+ 6. **κ°œλ…μ  이해λ₯Ό μœ„ν•œ 팁**
37
+ """
38
+
39
+ def generate_curriculum(achievement_standard):
40
+ """
41
+ 성취기쀀을 μž…λ ₯λ°›μ•„ κ°œλ…κΈ°λ°˜ κ΅μœ‘κ³Όμ •μ„ μƒμ„±ν•©λ‹ˆλ‹€.
42
+ 아웃풋을 μ‹€μ‹œκ°„μœΌλ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.
43
+
44
+ Args:
45
+ achievement_standard (str): μ„±μ·¨κΈ°μ€€
46
+
47
+ Returns:
48
+ str: μƒμ„±λœ κ°œλ…κΈ°λ°˜ κ΅μœ‘κ³Όμ •
49
+ """
50
+
51
+ prompt = [
52
+ SYSTEM_PROMPT,
53
+ f"**μ„±μ·¨κΈ°μ€€:** {achievement_standard}",
54
+ "**κ°œλ…κΈ°λ°˜ κ΅μœ‘κ³Όμ •:**",
55
+ ]
56
+
57
+ response = model.generate_content(prompt, stream=True)
58
+ collected_text = ""
59
+ for token in response:
60
+ chunk = token.text
61
+ collected_text += chunk
62
+ yield collected_text # μ‹€μ‹œκ°„ 좜λ ₯을 μœ„ν•΄ yield μ‚¬μš©
63
+ time.sleep(0.03) # 좜λ ₯ 속도 쑰절
64
 
65
  # Gradio μΈν„°νŽ˜μ΄μŠ€ μ„€μ •
66
  iface = gr.Interface(
67
+ fn=generate_curriculum,
68
+ inputs=gr.Textbox(lines=3, label="μ„±μ·¨κΈ°μ€€ μž…λ ₯"),
69
+ outputs=gr.Textbox(lines=10, label="κ°œλ…κΈ°λ°˜ κ΅μœ‘κ³Όμ •"),
70
+ title="κ°œλ…κΈ°λ°˜ κ΅μœ‘κ³Όμ • 섀계 λ„μš°λ―Έ",
71
+ description="μ΄ˆλ“±ν•™κ΅ κ΅μœ‘κ³Όμ •μ— λ§žλŠ” κ°œλ…κΈ°λ°˜ κ΅μœ‘κ³Όμ •μ„ μƒμ„±ν•©λ‹ˆλ‹€.",
 
 
 
 
72
  )
73
 
74
+ # μΈν„°νŽ˜μ΄μŠ€ μ‹€ν–‰
75
  iface.launch()