youngtsai commited on
Commit
a7f852c
·
1 Parent(s): a00cecb

update code

Browse files
Files changed (2) hide show
  1. educational_material.py +308 -0
  2. requirements.txt +1 -2
educational_material.py ADDED
@@ -0,0 +1,308 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+
3
+ class EducationalMaterial:
4
+ """
5
+ A class to generate educational content based on provided parameters.
6
+
7
+ Attributes:
8
+ context (str): Context or transcript of the content.
9
+ topic (str): The topic of the content.
10
+ grade (str): The grade level for the content.
11
+ level (str): The difficulty level of the content.
12
+ specific_feature (str): A specific feature of the content.
13
+ content_type (str): The type of content to generate ('worksheet' or 'lesson_plan').
14
+ """
15
+ def __init__(self, context, topic, grade, level, specific_feature, content_type):
16
+ """
17
+ Initializes the EducationalMaterial with provided parameters.
18
+
19
+ Parameters:
20
+ context (str): Context or transcript of the content.
21
+ topic (str): The topic of the content.
22
+ grade (str): The grade level for the content.
23
+ level (str): The difficulty level of the content.
24
+ specific_feature (str): A specific feature of the content.
25
+ content_type (str): The type of content to generate ('worksheet' or 'lesson_plan').
26
+ """
27
+ self.context = self._prepare_context(context)
28
+ self.topic = topic
29
+ self.grade = grade
30
+ self.level = level
31
+ self.specific_feature = specific_feature
32
+ self.content_type = content_type # 'worksheet' or 'lesson_plan'
33
+ self.system_content = "你是一個擅長資料分析跟影片教學備課的老師,請精讀資料文本,自行判斷資料的種類,使用 zh-TW"
34
+
35
+ def _prepare_context(self, context):
36
+ context_json = json.loads(context)
37
+ for entry in context_json:
38
+ entry.pop('embed_url', None)
39
+ entry.pop('screenshot_path', None)
40
+ processed_context = json.dumps(context_json, ensure_ascii=False, indent=2)
41
+ return processed_context
42
+
43
+ def generate_content_prompt(self):
44
+ if self.content_type == 'worksheet':
45
+ return self._generate_worksheet_prompt()
46
+ elif self.content_type == 'lesson_plan':
47
+ return self._generate_lesson_plan_prompt()
48
+
49
+ def _generate_worksheet_prompt(self):
50
+ bloom_worksheet_prompt = """
51
+ 你是個專業的教師,熟悉布魯姆(Benjamin Bloom, 1964) 的認知理論。布魯姆認為人類的能力,大致可分為三個領域(domains),即認知領域(cognitive domain)、情意領域(affective domain)、技能領域 (psychomotor domain)。
52
+
53
+ 【認知領域】涉及知能及其運作,著重心智、學習以及問題解決的工作。認知目標從簡單的認識或記憶能力到複雜的評鑑能力。大部分的教育目標都屬於這個領域。認知領域的目標分為六個層次,每個層次代表不同的心智功能。
54
+ - 📖 知識:在認知目標中知識是最低層次的能力,包括名詞、事實、規則和原理原則等的認識和記憶。用來表示此種能力的行為動詞有:指出、寫出、界定、說明、舉例、命名、認明等。例:能在地圖上指出長江流經的省分。
55
+ - 🤔 理解:理解是指能把握所學過知識或概念的意義,包含轉譯、解釋、推論等能力。代表此能力的行為動詞有:解釋、說明、區別、舉例、摘要、歸納等。例:能解釋光合作用。
56
+ - 🛠️ 應用:應用是指將所學到的規則、方法、步驟、原理、原則和概念,應用到新情境的能力。用來表示此能力的行為動詞有:預測、證明、解決、修改、表現、應用等。例:學生能預測抽出容器內之氣體對容器的影響。
57
+ - 🔍 分析:分析是指將所學到的概念或原則,分析為各個構成的部分,或找出各部分之間的相互關係,包括要素、關係及組織原理等的分析。用以表示此種能力的行為動詞有:選出、分析、判斷:區分、指出某些組成要素、指出某些的相互關係等。例:讀完某篇文章後,學生能區分事實和意見。
58
+ - 🌐 綜合:綜合是指將所學到的片斷概念或知識、原理原則或事實,統整成新的整體。用來表示此種能力的行為動詞有:設計、組織、綜合、創造、歸納、聯合等。例:讀完一篇有關防治汙染的文章後,學生能綜合防治汙染的各種方法。
59
+ - 🏅 評鑑:評鑑是認知目標中最高層次的能力,指依據某項標準做價值的判斷的能力。用來表示此能力的行為動詞有:評鑑、判斷、評論、比較、批判等。例:學生能評斷辯論中的謬論。
60
+
61
+ 學習單包含以下的內容,將以布魯姆教育目標來建構提問的架構;請用 markdown 格式來呈現。
62
+ - 📝 主題:請使用上傳檔案的檔名作為標題
63
+ - 🔑 重點: 和影片有關重要知識摘要
64
+ - 💭 概念:概念性問題 - 布魯姆的知識層級;數學知識的建構
65
+ - 📊 計算:程序性問題 - 布魯姆的理��層級;和影片相同的例題,類似的練習題 → 計算與步驟操作
66
+ - 🚀 延伸與應用 - 布魯姆的應用、分析、綜合、評鑑層級 → 延伸思考與應用
67
+
68
+ 其中,「重點」的題目請用挖空的填空題;在「計算」的程序性問題請以單選題或填空題的形式來建立,需要 3 個題目;「延伸與應用」請使用問答題的形式來建立,一題即可。
69
+ 題目和題目之間要換行,並加上 point 符號,像是 "-" 或是 "1." 等等
70
+
71
+ 這是範例格式:
72
+ 🌐【主題】:認識公里
73
+
74
+ 🎓【對象】
75
+ 科目: 數學
76
+ 年級: 三年級
77
+ 難度: 基礎
78
+
79
+ 🏞️【情境描述】
80
+ 狐狸貓和家人出遊,過程中認識測量較長距離的單位「公里」。
81
+
82
+ 🔑【影片重點】
83
+ - 公里是用來測量長距離的單位,通常用於測量很遠的距離。
84
+ - 1公里等於___公尺,也稱為千米。
85
+ - 公里的英文簡寫是 ____。
86
+
87
+ 🌟【概念】
88
+ - 請問公里通常用於測量什麼類型的距離?
89
+ - 如果一圈操場是200公尺,那跑5圈是多少公尺?多少公里?
90
+ - 為什麼我們需要使用公里這個單位來測量距離?
91
+
92
+ 🔢【計算】
93
+ 1. 一圈操場是200公尺,跑10圈是多少公里?(A) 1公里 (B) 2公里 (C) 3公里 (D) 4公里
94
+ 2. 如果你跑了5圈操場,運動手環上會顯示你跑了多少公里?
95
+ 3. 6000公尺等於多少公里?
96
+
97
+ 💡【延伸與應用】
98
+ - 假設你參加一場慈善路跑活動,全程是5公里。如果你已經跑了3公里,還剩下多少公里?你覺得這樣的活動對你的體能有什麼影響?
99
+ """
100
+
101
+ Polya_worksheet_prompt = """
102
+ 你是個專業的教師,熟悉 George Polya(1945) 的數學問題解決策略。
103
+ Polya提出了一個四步驟的數學問題解決策略,在他影響深遠的經典著作 How to solve it《如何解題》中指出解難過程可分為四個階段:
104
+ (1) 理解問題 (understanding the problem)
105
+ (2) 設計解題策略 (devising a plan)
106
+ (3) 按步解題 (carrying out the plan)
107
+ (4) 回顧解答 (looking back) (edited)
108
+
109
+ 請以此設計學習單並依據文本跟難度給予題目
110
+ 請一定要使用 zh-TW
111
+
112
+ 這是範例格式:
113
+ 🌐 主題:【概念】認識公里
114
+
115
+ 🎓【對象】
116
+ 科目: 數學
117
+ 年級: 三年級
118
+ 難度: 基礎
119
+
120
+ 🏞️【情境描述】
121
+ 狐狸貓和家人出遊,過程中認識測量較長距離的單位「公里」。
122
+
123
+ ❓【給出問題】
124
+ - 如果日月潭環潭自行車道共30公里,狐狸貓騎行了13.7公里後休息,剩餘多少公里尚未騎行?
125
+
126
+ 🤔【理解問題】
127
+ 首先,我們必須完全理解問題的所有細節。在此情境中,我們需要釐清以下幾點:
128
+ - 日月潭環潭自行車道的總長度為30公里。
129
+ - 狐狸貓已經騎行了13.7公里。
130
+ - 我們的目標是計算狐狸貓還剩下多少公里未騎行。
131
+
132
+ 🧭【設計解題策略】
133
+ 接下來,根據我們對問題的理解來設計解決問題的計劃。在此步驟中,我們決定採用哪種策略來解決問題。對於這個問題,最直接的計劃是使用算術減法:
134
+ - 總公里數(30公里)減去已騎行的公里數(13.7公里)。
135
+
136
+ 📝【按步解題】
137
+ 按照設計的計劃執行解題步驟。在這裡我們執行減法運算:
138
+ 30−13.7=16.3
139
+ 這意味著狐狸貓還有16.3公里未騎行。
140
+
141
+ ✨【回顧解答】
142
+ 最後,解題完成後,我們回顧和反思整個解題過程。在這一步,我們驗證計算的結果是否符合邏輯,是否正確解決了原問題。
143
+ 同時,考慮是否有更有效或簡便的方法來解決類似的問題。在這個例子中,使用直接減法是最簡單直接的方法。
144
+ 但在其他情境下,可能需要考慮使用圖形、表格或代數表達式等其他策略來解決問題。
145
+ """
146
+
147
+ # CRA教學法
148
+ cra_worksheet_prompt = """
149
+ 你是個專業的教師,熟悉CRA教學法,CRA教學法是一種教學策略,
150
+ CRA正是一種用來促進學生學習和記憶數學的三步教學法,它闡明瞭用這種方式進行教學的具體步驟。
151
+ CRA的三個步驟互相依賴,運用CRA能建立起一種概念結構,從而形成知識的意義關聯。
152
+ CRA策略的第一個階段, 即實例(C)階段,是一個“做”的階段。在這一階段,教師用加工材料建模,這些材料包括彩色圓片、立方體、十進位積木、六形六色積木,以及分數積木,等等。在使用這些材料時,必須考慮到兒童的視覺、���覺及動感經驗。
153
+ 階段二,即描述(R)階段,是一個“看”的階段。在這一-階段,具體的模型被改成了圖片展示,教師可用手繪圖片或貼紙來對概念進行解釋。
154
+ 最後一個階段,即抽象(A)階段,是一個抽象的“符號”階段, 在這一階段, 教師使用數字、字母等數學符號(如:2, 6, 3x, +,-等)來進行教學。
155
+ 運用CRA的前提是學生在學習“規則”前必須學會概念。使用過加工材料的學生,其思維更加明確,更容易理解該方式,同時其學習動機、專注行爲、 理解力以及對這些概念的運用能力也會得到較大改善( Hrrison & Harison, 1986 )。
156
+ CRA策略可以有效地幫助學生理解以下幾個概念:早期數量關係、位值、計算、分數、小數、測量、幾何、貨幣、百分數、數基、應用題、概率以及統計等
157
+ 這是範例格式:
158
+ 🌐 主題:【概念】認識公里
159
+
160
+ 🎓【對象】
161
+ 科目: 數學
162
+ 年級: 三年級
163
+ 難度: 基礎
164
+
165
+ 【實例(C)階段】
166
+ 1. 用彩色圓片來解釋什麼是分數?
167
+ 2. 用立方體來解釋什麼是體積?
168
+ 3. 用十進位積木來解釋什麼是小數?
169
+
170
+ 【描述(R)階段】
171
+ 1. 用手繪圖片來解釋什麼是分數?
172
+ 2. 用貼紙來解釋什麼是體積?
173
+ 3. 用手繪圖片來解釋什麼是小數?
174
+
175
+ 【抽象(A)階段】
176
+ 1. 用數字來解釋什麼是分數?
177
+ 2. 用字母來解釋什麼是體積?
178
+ 3. 用數字來解釋什麼是小數?
179
+
180
+ """
181
+ algorithm = self.specific_feature
182
+ case = {
183
+ "Bloom認知階層理論": bloom_worksheet_prompt,
184
+ "Polya數學解題法": Polya_worksheet_prompt,
185
+ "CRA教學法": cra_worksheet_prompt
186
+ }
187
+ worksheet_prompt = case.get(algorithm, "Bloom認知階層理論")
188
+
189
+ return worksheet_prompt
190
+
191
+ def _generate_lesson_plan_prompt(self):
192
+ lesson_plan_prompt = """
193
+ 你是一位專業教師,
194
+ 請根據以上要教學的項目細節
195
+ 幫我安排一個 lesson plan
196
+
197
+ 規則如下,請嚴格遵守
198
+ 1. 請使用 zh-TW
199
+ 2. 該換行就換行,盡量滿足 word .doc 的格式
200
+ 3. 【課程大綱】的工作項目請嚴格遵守【課程時間】的時間長度,總和時間不要超過或不足
201
+ 4. 時間安排盡量以五分鐘的倍數為一個單位
202
+ 5. 並且根據課程目標安排教學內容
203
+
204
+ 範例:
205
+ 【課程主題】計算面積的創意設計
206
+
207
+ 【課程目標】
208
+ - 理解不同形狀(正方形、長方形、三角形)的面積計算方法。
209
+ - 學會如何通過對摺改變形狀並計算新形狀的面積。
210
+ - 鼓勵創造力和實際操作,將數學知識應用於創作中。
211
+
212
+ 【年級】國小三年級
213
+
214
+ 【難度】基礎
215
+
216
+ 【課程時間】60 分鐘
217
+
218
+ 【課程大綱】
219
+ - 開場介紹 (5 分鐘)
220
+ 簡短介紹今天的課程主題和目標。
221
+
222
+ - 講解與示範 (15 分鐘)
223
+ 形狀與面積:介紹基本幾何形狀(正方形、長方形、三角形)的面積計算公式。
224
+ 對摺技巧:示範如何通過對摺正方形貼紙創造新的形狀(半正方形、三角形)並解釋面積如何改變。
225
+ 應用討論:討論如何使用這些形狀創造不同的圖案或設計,特別是斜屋頂的設計。
226
+
227
+ - 實作活動 (25 分鐘)
228
+ 材料準備:每位學生發放正方形貼紙、剪刀、膠水和紙張。
229
+ 創意剪貼:學生使用對摺技巧製作不同的幾何形狀,並將它們組合成一個有關斜屋頂的圖案或其他創意設計。
230
+ 面積計算:學生計算他們設計中每種形狀的面積,以及整體設計的總面積。
231
+
232
+ - 分享與討論 (10 分鐘)
233
+ 學生展示他們的創作並分享他們的設計過程,包括面積如何影響他們的設計選擇。
234
+ 討論學生在創作過程中遇到的挑戰和他們如何解決。
235
+
236
+ - 總結 (5 分鐘)
237
+ 回顧課程學到的主要概念。
238
+ 鼓勵學生在家中嘗試更多的創意組合和面積計算。
239
+
240
+ - 課後活動
241
+ 建議學生使用家中的材料(如報紙、雜誌等)進行更多的創意剪貼,並嘗試計算不同形狀的面積,進一步鞏固今天學到的知識。
242
+
243
+ 【教學策略總結】
244
+ 通過這個課程計劃,學生不僅能夠學習數學知識,還能夠將這些知識應用於實際生活中,從而增強他們的創造力和問題解決能力。
245
+ """
246
+
247
+ return lesson_plan_prompt
248
+
249
+ def create_ai_content(self, ai_client, request_payload):
250
+ user_content = self.build_user_content()
251
+ messages = self.build_messages(user_content)
252
+ request_payload['messages'] = messages
253
+ response_content = self.send_ai_request(ai_client, request_payload)
254
+
255
+ return response_content
256
+
257
+ def build_user_content(self):
258
+ if self.content_type == 'worksheet':
259
+ specific_feature_text = f"理論模型: {self.specific_feature}"
260
+ elif self.content_type == 'lesson_plan':
261
+ specific_feature_text = f"時間: {self.specific_feature}分鐘"
262
+
263
+ # 根据属性构建用户内容
264
+ user_content = f"""
265
+ 課程脈絡 or 逐字稿:{self.context}
266
+ 主題:{self.topic}
267
+ 年級:{self.grade}
268
+ 難度:{self.level}
269
+ {specific_feature_text}
270
+
271
+ 請根據逐字稿進行以下工作:
272
+ 不要提到 【逐字稿】 這個詞,直接給出工作內容即可
273
+ 如果是中文素材,請嚴格使用 zh-TW
274
+ {self.generate_content_prompt()}
275
+ """
276
+ print("====User content====")
277
+ print(user_content)
278
+ print("====User content====")
279
+ return user_content
280
+
281
+ def build_messages(self, user_content):
282
+ messages = [{"role": "system", "content": self.system_content},
283
+ {"role": "user", "content": user_content}]
284
+ return messages
285
+
286
+ def send_ai_request(self, ai_client, request_payload):
287
+ try:
288
+ response = ai_client.chat.completions.create(**request_payload)
289
+ response_content = response.choices[0].message.content.strip()
290
+ return response_content
291
+ except Exception as e:
292
+ print(f"An error occurred: {e}")
293
+ return "Error generating content."
294
+
295
+ def build_fine_tune_user_content(self, original_prompt, result, fine_tune_prompt):
296
+ user_content = f"""
297
+ 這是逐字稿:{self.context}
298
+ ---
299
+ 這是預設的 prompt
300
+ {original_prompt}
301
+ ---
302
+ 產生了以下的結果:
303
+ {result}
304
+ ---
305
+ 但我不是很滿意,請根據以下的調整,產生新的結果
306
+ {fine_tune_prompt}
307
+ """
308
+ return user_content
requirements.txt CHANGED
@@ -12,6 +12,5 @@ google-api-python-client
12
  google-auth-httplib2
13
  google-auth-oauthlib
14
  google-cloud-storage
15
-
16
  groq
17
-
 
12
  google-auth-httplib2
13
  google-auth-oauthlib
14
  google-cloud-storage
 
15
  groq
16
+ yt_dlp