Spaces:
Sleeping
Sleeping
import json | |
class EducationalMaterial: | |
""" | |
A class to generate educational content based on provided parameters. | |
Attributes: | |
context (str): Context or transcript of the content. | |
topic (str): The topic of the content. | |
grade (str): The grade level for the content. | |
level (str): The difficulty level of the content. | |
specific_feature (str): A specific feature of the content. | |
content_type (str): The type of content to generate ('worksheet' or 'lesson_plan'). | |
""" | |
def __init__(self, context, topic, grade, level, specific_feature, content_type): | |
""" | |
Initializes the EducationalMaterial with provided parameters. | |
Parameters: | |
context (str): Context or transcript of the content. | |
topic (str): The topic of the content. | |
grade (str): The grade level for the content. | |
level (str): The difficulty level of the content. | |
specific_feature (str): A specific feature of the content. | |
content_type (str): The type of content to generate ('worksheet' or 'lesson_plan'). | |
""" | |
self.context = self._prepare_context(context) | |
self.topic = topic | |
self.grade = grade | |
self.level = level | |
self.specific_feature = specific_feature | |
self.content_type = content_type # 'worksheet' or 'lesson_plan' | |
self.system_content = "你是一個擅長資料分析跟影片教學備課的老師,請精讀資料文本,自行判斷資料的種類,使用 zh-TW" | |
def _prepare_context(self, context): | |
context_json = json.loads(context) | |
for entry in context_json: | |
entry.pop('embed_url', None) | |
entry.pop('screenshot_path', None) | |
processed_context = json.dumps(context_json, ensure_ascii=False, indent=2) | |
return processed_context | |
def generate_content_prompt(self): | |
if self.content_type == 'worksheet': | |
return self._generate_worksheet_prompt() | |
elif self.content_type == 'lesson_plan': | |
return self._generate_lesson_plan_prompt() | |
def _generate_worksheet_prompt(self): | |
bloom_worksheet_prompt = """ | |
你是個專業的教師,熟悉布魯姆(Benjamin Bloom, 1964) 的認知理論。布魯姆認為人類的能力,大致可分為三個領域(domains),即認知領域(cognitive domain)、情意領域(affective domain)、技能領域 (psychomotor domain)。 | |
【認知領域】涉及知能及其運作,著重心智、學習以及問題解決的工作。認知目標從簡單的認識或記憶能力到複雜的評鑑能力。大部分的教育目標都屬於這個領域。認知領域的目標分為六個層次,每個層次代表不同的心智功能。 | |
- 📖 知識:在認知目標中知識是最低層次的能力,包括名詞、事實、規則和原理原則等的認識和記憶。用來表示此種能力的行為動詞有:指出、寫出、界定、說明、舉例、命名、認明等。例:能在地圖上指出長江流經的省分。 | |
- 🤔 理解:理解是指能把握所學過知識或概念的意義,包含轉譯、解釋、推論等能力。代表此能力的行為動詞有:解釋、說明、區別、舉例、摘要、歸納等。例:能解釋光合作用。 | |
- 🛠️ 應用:應用是指將所學到的規則、方法、步驟、原理、原則和概念,應用到新情境的能力。用來表示此能力的行為動詞有:預測、證明、解決、修改、表現、應用等。例:學生能預測抽出容器內之氣體對容器的影響。 | |
- 🔍 分析:分析是指將所學到的概念或原則,分析為各個構成的部分,或找出各部分之間的相互關係,包括要素、關係及組織原理等的分析。用以表示此種能力的行為動詞有:選出、分析、判斷:區分、指出某些組成要素、指出某些的相互關係等。例:讀完某篇文章後,學生能區分事實和意見。 | |
- 🌐 綜合:綜合是指將所學到的片斷概念或知識、原理原則或事實,統整成新的整體。用來表示此種能力的行為動詞有:設計、組織、綜合、創造、歸納、聯合等。例:讀完一篇有關防治汙染的文章後,學生能綜合防治汙染的各種方法。 | |
- 🏅 評鑑:評鑑是認知目標中最高層次的能力,指依據某項標準做價值的判斷的能力。用來表示此能力的行為動詞有:評鑑、判斷、評論、比較、批判等。例:學生能評斷辯論中的謬論。 | |
學習單包含以下的內容,將以布魯姆教育目標來建構提問的架構;請用 markdown 格式來呈現。 | |
- 📝 主題:請使用上傳檔案的檔名作為標題 | |
- 🔑 重點: 和影片有關重要知識摘要 | |
- 💭 概念:概念性問題 - 布魯姆的知識層級;數學知識的建構 | |
- 📊 計算:程序性問題 - 布魯姆的理解層級;和影片相同的例題,類似的練習題 → 計算與步驟操作 | |
- 🚀 延伸與應用 - 布魯姆的應用、分析、綜合、評鑑層級 → 延伸思考與應用 | |
其中,「重點」的題目請用挖空的填空題;在「計算」的程序性問題請以單選題或填空題的形式來建立,需要 3 個題目;「延伸與應用」請使用問答題的形式來建立,一題即可。 | |
題目和題目之間要換行,並加上 point 符號,像是 "-" 或是 "1." 等等 | |
這是範例格式: | |
🌐【主題】:認識公里 | |
🎓【對象】 | |
科目: 數學 | |
年級: 三年級 | |
難度: 基礎 | |
🏞️【情境描述】 | |
狐狸貓和家人出遊,過程中認識測量較長距離的單位「公里」。 | |
🔑【影片重點】 | |
- 公里是用來測量長距離的單位,通常用於測量很遠的距離。 | |
- 1公里等於___公尺,也稱為千米。 | |
- 公里的英文簡寫是 ____。 | |
🌟【概念】 | |
- 請問公里通常用於測量什麼類型的距離? | |
- 如果一圈操場是200公尺,那跑5圈是多少公尺?多少公里? | |
- 為什麼我們需要使用公里這個單位來測量距離? | |
🔢【計算】 | |
1. 一圈操場是200公尺,跑10圈是多少公里?(A) 1公里 (B) 2公里 (C) 3公里 (D) 4公里 | |
2. 如果你跑了5圈操場,運動手環上會顯示你跑了多少公里? | |
3. 6000公尺等於多少公里? | |
💡【延伸與應用】 | |
- 假設你參加一場慈善路跑活動,全程是5公里。如果你已經跑了3公里,還剩下多少公里?你覺得這樣的活動對你的體能有什麼影響? | |
""" | |
Polya_worksheet_prompt = """ | |
你是個專業的教師,熟悉 George Polya(1945) 的數學問題解決策略。 | |
Polya提出了一個四步驟的數學問題解決策略,在他影響深遠的經典著作 How to solve it《如何解題》中指出解難過程可分為四個階段: | |
(1) 理解問題 (understanding the problem) | |
(2) 設計解題策略 (devising a plan) | |
(3) 按步解題 (carrying out the plan) | |
(4) 回顧解答 (looking back) (edited) | |
請以此設計學習單並依據文本跟難度給予題目 | |
請一定要使用 zh-TW | |
這是範例格式: | |
🌐 主題:【概念】認識公里 | |
🎓【對象】 | |
科目: 數學 | |
年級: 三年級 | |
難度: 基礎 | |
🏞️【情境描述】 | |
狐狸貓和家人出遊,過程中認識測量較長距離的單位「公里」。 | |
❓【給出問題】 | |
- 如果日月潭環潭自行車道共30公里,狐狸貓騎行了13.7公里後休息,剩餘多少公里尚未騎行? | |
🤔【理解問題】 | |
首先,我們必須完全理解問題的所有細節。在此情境中,我們需要釐清以下幾點: | |
- 日月潭環潭自行車道的總長度為30公里。 | |
- 狐狸貓已經騎行了13.7公里。 | |
- 我們的目標是計算狐狸貓還剩下多少公里未騎行。 | |
🧭【設計解題策略】 | |
接下來,根據我們對問題的理解來設計解決問題的計劃。在此步驟中,我們決定採用哪種策略來解決問題。對於這個問題,最直接的計劃是使用算術減法: | |
- 總公里數(30公里)減去已騎行的公里數(13.7公里)。 | |
📝【按步解題】 | |
按照設計的計劃執行解題步驟。在這裡我們執行減法運算: | |
30−13.7=16.3 | |
這意味著狐狸貓還有16.3公里未騎行。 | |
✨【回顧解答】 | |
最後,解題完成後,我們回顧和反思整個解題過程。在這一步,我們驗證計算的結果是否符合邏輯,是否正確解決了原問題。 | |
同時,考慮是否有更有效或簡便的方法來解決類似的問題。在這個例子中,使用直接減法是最簡單直接的方法。 | |
但在其他情境下,可能需要考慮使用圖形、表格或代數表達式等其他策略來解決問題。 | |
""" | |
# CRA教學法 | |
cra_worksheet_prompt = """ | |
你是個專業的教師,熟悉CRA教學法,CRA教學法是一種教學策略, | |
CRA正是一種用來促進學生學習和記憶數學的三步教學法,它闡明瞭用這種方式進行教學的具體步驟。 | |
CRA的三個步驟互相依賴,運用CRA能建立起一種概念結構,從而形成知識的意義關聯。 | |
CRA策略的第一個階段, 即實例(C)階段,是一個“做”的階段。在這一階段,教師用加工材料建模,這些材料包括彩色圓片、立方體、十進位積木、六形六色積木,以及分數積木,等等。在使用這些材料時,必須考慮到兒童的視覺、觸覺及動感經驗。 | |
階段二,即描述(R)階段,是一個“看”的階段。在這一-階段,具體的模型被改成了圖片展示,教師可用手繪圖片或貼紙來對概念進行解釋。 | |
最後一個階段,即抽象(A)階段,是一個抽象的“符號”階段, 在這一階段, 教師使用數字、字母等數學符號(如:2, 6, 3x, +,-等)來進行教學。 | |
運用CRA的前提是學生在學習“規則”前必須學會概念。使用過加工材料的學生,其思維更加明確,更容易理解該方式,同時其學習動機、專注行爲、 理解力以及對這些概念的運用能力也會得到較大改善( Hrrison & Harison, 1986 )。 | |
CRA策略可以有效地幫助學生理解以下幾個概念:早期數量關係、位值、計算、分數、小數、測量、幾何、貨幣、百分數、數基、應用題、概率以及統計等 | |
這是範例格式: | |
🌐 主題:【概念】認識公里 | |
🎓【對象】 | |
科目: 數學 | |
年級: 三年級 | |
難度: 基礎 | |
【實例(C)階段】 | |
1. 用彩色圓片來解釋什麼是分數? | |
2. 用立方體來解釋什麼是體積? | |
3. 用十進位積木來解釋什麼是小數? | |
【描述(R)階段】 | |
1. 用手繪圖片來解釋什麼是分數? | |
2. 用貼紙來解釋什麼是體積? | |
3. 用手繪圖片來解釋什麼是小數? | |
【抽象(A)階段】 | |
1. 用數字來解釋什麼是分數? | |
2. 用字母來解釋什麼是體積? | |
3. 用數字來解釋什麼是小數? | |
""" | |
algorithm = self.specific_feature | |
case = { | |
"Bloom認知階層理論": bloom_worksheet_prompt, | |
"Polya數學解題法": Polya_worksheet_prompt, | |
"CRA教學法": cra_worksheet_prompt | |
} | |
worksheet_prompt = case.get(algorithm, "Bloom認知階層理論") | |
return worksheet_prompt | |
def _generate_lesson_plan_prompt(self): | |
lesson_plan_prompt = """ | |
你是一位專業教師, | |
請根據以上要教學的項目細節 | |
幫我安排一個 lesson plan | |
規則如下,請嚴格遵守 | |
1. 請使用 zh-TW | |
2. 該換行就換行,盡量滿足 word .doc 的格式 | |
3. 【課程大綱】的工作項目請嚴格遵守【課程時間】的時間長度,總和時間不要超過或不足 | |
4. 時間安排盡量以五分鐘的倍數為一個單位 | |
5. 並且根據課程目標安排教學內容 | |
範例: | |
【課程主題】計算面積的創意設計 | |
【課程目標】 | |
- 理解不同形狀(正方形、長方形、三角形)的面積計算方法。 | |
- 學會如何通過對摺改變形狀並計算新形狀的面積。 | |
- 鼓勵創造力和實際操作,將數學知識應用於創作中。 | |
【年級】國小三年級 | |
【難度】基礎 | |
【課程時間】60 分鐘 | |
【課程大綱】 | |
- 開場介紹 (5 分鐘) | |
簡短介紹今天的課程主題和目標。 | |
- 講解與示範 (15 分鐘) | |
形狀與面積:介紹基本幾何形狀(正方形、長方形、三角形)的面積計算公式。 | |
對摺技巧:示範如何通過對摺正方形貼紙創造新的形狀(半正方形、三角形)並解釋面積如何改變。 | |
應用討論:討論如何使用這些形狀創造不同的圖案或設計,特別是斜屋頂的設計。 | |
- 實作活動 (25 分鐘) | |
材料準備:每位學生發放正方形貼紙、剪刀、膠水和紙張。 | |
創意剪貼:學生使用對摺技巧製作不同的幾何形狀,並將它們組合成一個有關斜屋頂的圖案或其他創意設計。 | |
面積計算:學生計算他們設計中每種形狀的面積,以及整體設計的總面積。 | |
- 分享與討論 (10 分鐘) | |
學生展示他們的創作並分享他們的設計過程,包括面積如何影響他們的設計選擇。 | |
討論學生在創作過程中遇到的挑戰和他們如何解決。 | |
- 總結 (5 分鐘) | |
回顧課程學到的主要概念。 | |
鼓勵學生在家中嘗試更多的創意組合和面積計算。 | |
- 課後活動 | |
建議學生使用家中的材料(如報紙、雜誌等)進行更多的創意剪貼,並嘗試計算不同形狀的面積,進一步鞏固今天學到的知識。 | |
【教學策略總結】 | |
通過這個課程計劃,學生不僅能夠學習數學知識,還能夠將這些知識應用於實際生活中,從而增強他們的創造力和問題解決能力。 | |
""" | |
return lesson_plan_prompt | |
def create_ai_content(self, ai_client, request_payload): | |
user_content = self.build_user_content() | |
messages = self.build_messages(user_content) | |
request_payload['messages'] = messages | |
response_content = self.send_ai_request(ai_client, request_payload) | |
return response_content | |
def build_user_content(self): | |
if self.content_type == 'worksheet': | |
specific_feature_text = f"理論模型: {self.specific_feature}" | |
elif self.content_type == 'lesson_plan': | |
specific_feature_text = f"時間: {self.specific_feature}分鐘" | |
# 根据属性构建用户内容 | |
user_content = f""" | |
課程脈絡 or 逐字稿:{self.context} | |
主題:{self.topic} | |
年級:{self.grade} | |
難度:{self.level} | |
{specific_feature_text} | |
請根據逐字稿進行以下工作: | |
不要提到 【逐字稿】 這個詞,直接給出工作內容即可 | |
如果是中文素材,請嚴格使用 zh-TW | |
{self.generate_content_prompt()} | |
""" | |
print("====User content====") | |
print(user_content) | |
print("====User content====") | |
return user_content | |
def build_messages(self, user_content): | |
messages = [{"role": "system", "content": self.system_content}, | |
{"role": "user", "content": user_content}] | |
return messages | |
def send_ai_request(self, ai_client, request_payload): | |
try: | |
response = ai_client.chat.completions.create(**request_payload) | |
response_content = response.choices[0].message.content.strip() | |
return response_content | |
except Exception as e: | |
print(f"An error occurred: {e}") | |
return "Error generating content." | |
def build_fine_tune_user_content(self, original_prompt, result, fine_tune_prompt): | |
user_content = f""" | |
這是逐字稿:{self.context} | |
--- | |
這是預設的 prompt | |
{original_prompt} | |
--- | |
產生了以下的結果: | |
{result} | |
--- | |
但我不是很滿意,請根據以下的調整,產生新的結果 | |
{fine_tune_prompt} | |
""" | |
return user_content |