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