Day 24 讓 n8n 自動把對話丟給 LLM,拿回一份結構化的分析結果:每一句使用者說的英文,都有原句、修正版、更自然的說法。技術上算是通了,但站在使用者的角度想一下:對話結束後,他看到的如果是一大包 JSON,那根本沒有任何意義。
今天要做的,就是把這份分析結果整理成真正能讀、能複習的「學習報告」,也就是 Day 1 專題一句話定義裡最後那個關鍵字:自動產生個人化學習報告。
先決定報告要長什麼樣子
動手之前,先回頭看最初專題計畫書裡規劃的報告內容:常犯文法錯誤、新單字、實用片語、不自然的表達與更自然的說法、本次對話重點、建議複習內容。
但今天重新思考了一個問題:這些項目,哪些是 AI 分析對話後就能直接給的,哪些需要額外處理?
整理之後分成兩類:
Day 24 的分析結果已經包含的:不自然的表達、修正後的句子、更自然的說法
需要額外歸納的:常犯的文法錯誤類型(要從多句錯誤中看出規律)、值得記起來的新單字與片語、建議複習什麼
後面這一類沒辦法靠逐句分析得到,因為它需要 AI「看完整場對話」之後做彙整判斷,這也代表今天的流程不能只是單純排版,要再多一次 LLM 呼叫。
流程設計:分兩階段,不要一次做完
今天在這裡花了最多時間思考,最後決定把報告生成拆成兩個階段,而不是塞進一個超長的 Prompt:
第一階段(Day 24 已完成):逐句分析,產出每個句子的修正與自然說法
第二階段(今天新增):拿第一階段的結果,再丟給 LLM 做歸納,整理出:
本次對話裡最常出現的 1 至 3 種文法問題類型
3 至 5 個值得學的單字
3 至 5 個實用片語或句型
一段簡短的本次對話重點與建議複習方向
這樣拆的理由跟 Day 12 想過的邏輯一樣——一個任務一個明確目標,LLM 遵循指令的穩定度會比同時塞好幾個任務高。如果把逐句分析和歸納整理塞在同一個 Prompt 裡,很容易兩邊都做得半吊子。
歸納用 Prompt 的設計重點
第二階段的 Prompt 也沿用前面累積的經驗,但有幾個針對性調整:
輸入內容是「分析結果」而不是「原始對話」:直接讓 AI 看已經整理好的修正清單,它歸納起來更精準,也省去重複分析一次的 token 成本
用數量限制避免輸出失控:Day 14 測試時發現 AI 有時候一口氣列出十幾個單字,使用者根本不可能全記住,所以明確規定數量上限,寧可少而精
文法問題要「歸類」而不是「列舉」:如果使用者三句話都在冠詞用錯,報告應該寫「冠詞使用」這一類問題,而不是列三條幾乎一樣的錯誤,這點直接對應專題計畫書範例報告裡的「Grammar:冠詞使用」寫法
輸出一樣要求結構化 JSON,後面才能套用固定的報告版型
排版:把 JSON 變成人看得懂的報告
拿到第二階段的 JSON 之後,再用 n8n 的節點把資料套進一個固定的報告版型。版型直接參考專題計畫書一開始就設計好的格式:
Vocabulary:今天學到的單字
Grammar:這次最需要注意的文法類型
Natural Expressions:實用的母語者表達
Your Sentence / More Natural:使用者自己說的一句話,對照更自然的版本
「Your Sentence → More Natural」這個對照特別重要,因為它是整份報告裡最有說服力的一塊——使用者能直接看到「我說的」跟「母語者會說的」之間的差距,比任何抽象的文法解釋都有感。今天決定從逐句分析結果裡,挑出差距最明顯的 1 到 2 句放在報告裡,不要全部列出來。
今天遇到的兩個狀況
狀況一:兩次 LLM 呼叫之間的資料格式對不上
第一階段輸出的 JSON 欄位名稱,跟第二階段 Prompt 預期收到的格式不完全一致,導致第二階段 AI 有時候讀不到某些內容。這個問題又讓我想到 Day 23 的心得:節點與節點之間的資料格式要先講好。今天花了一些時間把兩邊的欄位名稱對齊,並且在中間加一個轉換節點,確保格式固定。
狀況二:對話太短的時候,報告內容空洞
拿一段只有兩三句話的短對話測試,AI 為了湊滿「3 到 5 個單字」的數量要求,會硬生出一些跟對話無關的單字。這也是 Day 14 就發現過的類似現象。今天先在 Prompt 裡加上一條規則:「如果對話內容不足以歸納出這麼多項目,寧可少列,不要為了湊數量而編造」,效果有改善,但還不是百分之百穩定,先記下來待後續優化。