踐:從個(gè)性化學(xué)習(xí)路徑到自動(dòng)批改的全流程落地)
把一個(gè)班級(jí)四十個(gè)人的錯(cuò)題逐題看完再給每個(gè)人畫(huà)出“下一條該做的題”這個(gè)工作量換成任何一位老師都需要加班到深夜。我兩年前開(kāi)始做“教育 Agent”這個(gè)方向時(shí)目標(biāo)很直接能不能讓系統(tǒng)自己完成“診斷—推薦—批改—反饋”這個(gè)循環(huán)把“個(gè)性化學(xué)習(xí)路徑”和“自動(dòng)批改”這兩個(gè)聽(tīng)起來(lái)很宏大的概念落到一套能跑通的工程實(shí)現(xiàn)上。這篇文章把我從架構(gòu)設(shè)計(jì)到上線(xiàn)跑數(shù)據(jù)這一路的思考、選擇和踩坑完整寫(xiě)出來(lái)用到的方案不一定最先進(jìn)但都是實(shí)測(cè)下來(lái)能穩(wěn)定工作的。如果你正準(zhǔn)備做類(lèi)似的教學(xué)系統(tǒng)、智能題庫(kù)或者學(xué)習(xí)助手這篇內(nèi)容應(yīng)該能幫你避開(kāi)不少?gòu)澛贰?. 做之前先說(shuō)清這個(gè)Agent到底要解決什么問(wèn)題1.1 學(xué)生端的核心痛點(diǎn)我最早接觸這個(gè)項(xiàng)目是因?yàn)榭吹揭环萁萄蟹治鰣?bào)告一個(gè)班級(jí)在同一章節(jié)的測(cè)驗(yàn)里成績(jī)分布非常分散——有人十分鐘交卷滿(mǎn)分有人盯著第一道題發(fā)了半小時(shí)呆。傳統(tǒng)課堂只能用“中位數(shù)的節(jié)奏”推進(jìn)講快了后面的人跟不住講慢了前面的人閑著。個(gè)性化學(xué)習(xí)路徑要解決的就是這個(gè)“教學(xué)節(jié)奏與個(gè)體能力不匹配”的問(wèn)題。但個(gè)性化不能停留在“正確率高的學(xué)生多給難題”這種表面邏輯上。真正有價(jià)值的個(gè)性化至少要做到三層層一知道學(xué)生“當(dāng)前會(huì)什么”即知識(shí)點(diǎn)掌握度。不是一次考試的分而是分知識(shí)點(diǎn)、分技能維度的估計(jì)值。層二知道學(xué)生“下一步最適合學(xué)什么”即學(xué)習(xí)路徑中下一個(gè)節(jié)點(diǎn)的推薦。這需要考慮前置知識(shí)是否具備、難度是否合適、同類(lèi)題型是否已經(jīng)鞏固。層三知道學(xué)生“做錯(cuò)了為什么錯(cuò)”即錯(cuò)誤歸因。是概念不清、公式記錯(cuò)、審題偏差還是純粹粗心。這決定了下一次推薦是重新講解概念還是換一道相似題鞏固。1.2 老師端真正需要省下的時(shí)間自動(dòng)批改的目標(biāo)也得分清楚。老師最耗時(shí)的環(huán)節(jié)不是判選擇題而是主觀(guān)題、應(yīng)用題、過(guò)程性作業(yè)。尤其理科的過(guò)程分一道題掃一眼就得看公式、看步驟、看最終答案一個(gè)班五十份作業(yè)就是五十次重復(fù)勞動(dòng)。批改系統(tǒng)要替老師做的不是“替代判斷”而是“預(yù)判復(fù)核”。系統(tǒng)先把每份作業(yè)的得分、錯(cuò)因標(biāo)注、講解建議全部生成好老師只需要抽查有爭(zhēng)議的幾份。這樣老師省下的時(shí)間不是用來(lái)休息的而是去做更有價(jià)值的事設(shè)計(jì)課堂活動(dòng)、找學(xué)生面談、調(diào)整備課方案。1.3 我最終劃定的兩個(gè)功能邊界很多團(tuán)隊(duì)做教育Agent失敗是因?yàn)橐婚_(kāi)始就想什么都做。組會(huì)討論時(shí)經(jīng)常出現(xiàn)“最好還能自動(dòng)生成教案”“最好還能當(dāng)情緒導(dǎo)師”這類(lèi)需求。我的經(jīng)驗(yàn)是第一版只做兩個(gè)閉環(huán)——學(xué)習(xí)路徑閉環(huán)和批改與反饋閉環(huán)這兩個(gè)功能可以共用一套數(shù)據(jù)而且彼此強(qiáng)耦合。路徑推薦需要知道學(xué)生當(dāng)前的薄弱點(diǎn)而這恰恰是批改結(jié)果提供的。批改反饋需要給出下一步學(xué)習(xí)建議建議的生成依據(jù)又來(lái)自路徑規(guī)劃模塊。兩個(gè)模塊共享同一個(gè)“知識(shí)圖譜”和同一個(gè)“學(xué)生畫(huà)像”系統(tǒng)結(jié)構(gòu)非常清晰。其他功能比如課堂報(bào)告、家長(zhǎng)通知、班級(jí)學(xué)情看板都是這兩個(gè)閉環(huán)的副產(chǎn)品等核心跑通了再往上搭成本很低。2. 個(gè)性化學(xué)習(xí)路徑核心算法與數(shù)據(jù)設(shè)計(jì)2.1 學(xué)習(xí)者畫(huà)像要做到什么粒度剛開(kāi)始我犯過(guò)一個(gè)典型錯(cuò)誤把所有做題記錄匯總成一個(gè)“綜合掌握率”存進(jìn)學(xué)生表里。結(jié)果推薦出來(lái)的題目亂七八糟——明明代數(shù)基礎(chǔ)薄弱的學(xué)生因?yàn)閹缀晤}做得比較多綜合正確率被拉高了系統(tǒng)給他推了更難的幾何題。后來(lái)我改成知識(shí)點(diǎn)粒度的畫(huà)像。每個(gè)知識(shí)點(diǎn)知識(shí)節(jié)點(diǎn)獨(dú)立維護(hù)掌握度并且?guī)r(shí)間戳和置信度。數(shù)據(jù)結(jié)構(gòu)類(lèi)似這樣student_knowledge_state ( student_id varchar(32), knowledge_id varchar(32), mastery float, -- 0.0 ~ 1.0 confidence float, -- 當(dāng)前估計(jì)的可靠程度 last_exercise_time timestamp, wrong_count int, right_count int, primary key (student_id, knowledge_id) )掌握度不是簡(jiǎn)單地把“做對(duì)的題數(shù)/總題數(shù)”算個(gè)百分比而是帶權(quán)重的更新。我的做法是新做對(duì)的題會(huì)讓掌握度向當(dāng)前值和高值之間移動(dòng)新做錯(cuò)的題會(huì)讓掌握度顯著下降下降幅度取決于這道題的難度和題型權(quán)重。置信度則隨做題目數(shù)量增加而上升同時(shí)隨時(shí)間衰減——十天內(nèi)沒(méi)有練習(xí)記錄的節(jié)點(diǎn)置信度要打折因?yàn)橛洃洉?huì)遺忘。2.2 基礎(chǔ)框架知識(shí)圖譜怎么搭個(gè)性化路徑的底層依賴(lài)是知識(shí)圖譜也就是“知識(shí)點(diǎn)之間的前驅(qū)后繼關(guān)系”。我見(jiàn)過(guò)有人一上來(lái)就畫(huà)了一千多個(gè)節(jié)點(diǎn)的超細(xì)圖譜結(jié)果維護(hù)和分析成本極高很多邊的可靠性也沒(méi)有驗(yàn)證。我的建議是先搭主干再長(zhǎng)枝葉。具體順序分步走對(duì)照課程標(biāo)準(zhǔn)和主流教材的章節(jié)順序梳理出一級(jí)知識(shí)點(diǎn)和二級(jí)知識(shí)點(diǎn)。比如“一元二次方程”下掛“配方法”“公式法”“判別式與根的關(guān)系”等。對(duì)每個(gè)二級(jí)知識(shí)點(diǎn)標(biāo)注前置條件。判別式與根的關(guān)系前置必須是“實(shí)數(shù)運(yùn)算”和“一元一次方程求解”。這條邊很重要它決定了路徑能否穿越。嵌入AI輔助抽取拿一批真題和講義讓大模型抽“題目涉及的知識(shí)點(diǎn)”然后人工抽查修正。這一步能幫我們快速覆蓋題庫(kù)但不建議完全放手讓模型自動(dòng)建邊——它會(huì)把“相關(guān)”和“前置”混為一談。知識(shí)圖譜的數(shù)據(jù)結(jié)構(gòu)不用復(fù)雜鄰接表模型就夠了knowledge_node ( node_id varchar(32), node_name varchar(128), subject varchar(32), grade int, difficulty int, -- 1~5 est_minutes int -- 建議學(xué)習(xí)時(shí)長(zhǎng) ) knowledge_edge ( source_node_id varchar(32), target_node_id varchar(32), relation varchar(16), -- prerequisite / reinforce / similar weight float )這里有個(gè)很關(guān)鍵的判別標(biāo)準(zhǔn)只有“前置關(guān)系”才能作為路徑規(guī)劃的硬約束“相關(guān)關(guān)系”和“相似關(guān)系”只能作為排序的軟加權(quán)。如果分不清這兩種邊路徑規(guī)劃會(huì)出現(xiàn)環(huán)或者繞遠(yuǎn)路——我在測(cè)試階段確實(shí)見(jiàn)過(guò)系統(tǒng)給學(xué)生推了五次“概念辨析”題才放行到計(jì)算題原因就是相關(guān)關(guān)系的權(quán)重壓過(guò)了前置關(guān)系的約束。2.3 路徑規(guī)劃怎么做從規(guī)則到狀態(tài)機(jī)規(guī)劃“下一個(gè)節(jié)點(diǎn)做什么”其實(shí)不需要一開(kāi)始就上強(qiáng)化學(xué)習(xí)?;谥R(shí)圖譜的狀態(tài)機(jī)配合一套明確的轉(zhuǎn)換規(guī)則在大部分K12學(xué)科場(chǎng)景下已經(jīng)能取得很好的效果。我用的方案核心是三個(gè)動(dòng)作類(lèi)似有限狀態(tài)機(jī)狀態(tài)“未開(kāi)始”如果所有前置節(jié)點(diǎn)掌握度都達(dá)到0.6以上進(jìn)入“待學(xué)習(xí)”否則保持等待并推薦前置節(jié)點(diǎn)中的薄弱項(xiàng)。狀態(tài)“學(xué)習(xí)中”學(xué)生剛做完第一次練習(xí)系統(tǒng)不急著推進(jìn)而是看練習(xí)結(jié)果。做對(duì)了且掌握度上升進(jìn)入“鞏固中”做錯(cuò)了連續(xù)兩次回退到“復(fù)習(xí)前置”。狀態(tài)“待鞏固”按照間隔重復(fù)的邏輯安排復(fù)習(xí)間隔天數(shù)依次是1天、3天、7天、14天。這個(gè)策略參考了艾賓浩斯遺忘曲線(xiàn)但做了工程化簡(jiǎn)化。路徑推薦的排序規(guī)則可以寫(xiě)成一段偽代碼candidates 所有“前置已達(dá)標(biāo)且當(dāng)前狀態(tài)為待學(xué)習(xí)”的節(jié)點(diǎn) if candidates 為空: 考慮下一章節(jié)的新節(jié)點(diǎn) else: 按以下優(yōu)先級(jí)排序: 1. 前置節(jié)點(diǎn)中掌握度最低的學(xué)科薄弱點(diǎn) 2. 上次練習(xí)距今最久的待復(fù)習(xí)節(jié)點(diǎn) 3. 當(dāng)前最近一次練習(xí)正確率低于60%的同類(lèi)題這套規(guī)則看起來(lái)簡(jiǎn)單但實(shí)際跑起來(lái)效率很高。它的好處是可解釋——學(xué)生可以看到“為什么推薦這道題”頁(yè)面上的文案是“因?yàn)槟闵洗巍浞椒ā蛔鰧?duì)了1/3我們先復(fù)習(xí)一下配方法再繼續(xù)”而不是冷冰冰的“推薦題目”??山忉屝栽诮逃龍?chǎng)景里極其重要家長(zhǎng)和老師都需要知道系統(tǒng)建議的依據(jù)。2.4 動(dòng)態(tài)調(diào)整的時(shí)機(jī)與策略路徑規(guī)劃不是一次性算完就固定住而是一個(gè)每輪練習(xí)后都要重算的過(guò)程。我設(shè)置的重算時(shí)機(jī)有三個(gè)每次批改結(jié)果生成后立即更新學(xué)生知識(shí)點(diǎn)狀態(tài)并重算“下一個(gè)推薦節(jié)點(diǎn)”。連續(xù)答錯(cuò)達(dá)到3題時(shí)觸發(fā)“降級(jí)模式”系統(tǒng)主動(dòng)把難度下調(diào)一檔并插入一段概念講解內(nèi)容。連續(xù)答對(duì)達(dá)到5題且每道題都屬于中等及以上難度時(shí)觸發(fā)“升級(jí)挑戰(zhàn)”推薦一道跨章節(jié)綜合題。動(dòng)態(tài)調(diào)整最忌頻繁切換容易讓學(xué)生覺(jué)得系統(tǒng)“飄”。我的做法是給每次推薦附帶一個(gè)“最低完成數(shù)量”——比如推薦了一個(gè)薄弱點(diǎn)復(fù)習(xí)包學(xué)生必須先做完里面的6道題系統(tǒng)才能重新規(guī)劃。這不是限制自由度而是保證每次調(diào)整都基于足夠的觀(guān)測(cè)樣本避免一兩道題偶然失手就推翻整條路徑。3. 自動(dòng)批改不只是“打個(gè)分”要能定位錯(cuò)因3.1 題型分級(jí)與處理方案我一開(kāi)始試圖讓一個(gè)大模型統(tǒng)一處理所有題型的批改結(jié)果成本高、延遲高、效果還參差不齊。后來(lái)改成“分級(jí)分流”的思路把題型按結(jié)構(gòu)化程度分成了三類(lèi)每類(lèi)用不同的技術(shù)路線(xiàn)題型類(lèi)別代表題型批改方案關(guān)鍵難點(diǎn)強(qiáng)結(jié)構(gòu)單選、多選、判斷、填空題第一空標(biāo)準(zhǔn)答案比對(duì) 輕量改寫(xiě)匹配同義表述、單位換算、大小寫(xiě)半結(jié)構(gòu)填空多空、列式計(jì)算、簡(jiǎn)單證明規(guī)則引擎 公式歸一化 LLM步驟校驗(yàn)數(shù)學(xué)符號(hào)等價(jià)、中間步驟不全弱結(jié)構(gòu)簡(jiǎn)答、應(yīng)用題書(shū)寫(xiě)過(guò)程、小作文LLM按詳細(xì)評(píng)分標(biāo)準(zhǔn)評(píng)閱另加二次校驗(yàn)評(píng)分標(biāo)準(zhǔn)一致性、幻覺(jué)糾錯(cuò)每一類(lèi)都有專(zhuān)門(mén)的處理管線(xiàn)互不干擾。強(qiáng)結(jié)構(gòu)題的處理速度要快到毫秒級(jí)弱結(jié)構(gòu)題可以接受幾秒延遲。把所有題都交給大模型逐字推理是性能災(zāi)難也是成本災(zāi)難。3.2 LLM主觀(guān)題批改的工程化弱結(jié)構(gòu)題是自動(dòng)批改的核心難點(diǎn)我在這塊花的時(shí)間最多。第一版直接甩給大模型“請(qǐng)給這道題打分”結(jié)果一塌糊涂評(píng)分隨意浮動(dòng)、不給過(guò)程說(shuō)明、經(jīng)常自己腦補(bǔ)出學(xué)生根本沒(méi)寫(xiě)的步驟。后來(lái)才把工程化流程理順現(xiàn)在穩(wěn)定很多?,F(xiàn)在的流程是分四步走第一步預(yù)先定義評(píng)分標(biāo)準(zhǔn)rubric。每道題對(duì)應(yīng)的標(biāo)準(zhǔn)分為若干個(gè)可獨(dú)立評(píng)分項(xiàng)比如“公式正確2分”“代入過(guò)程正確3分”“最終結(jié)果正確1分”“書(shū)寫(xiě)規(guī)范1分”。大模型只做“按項(xiàng)評(píng)分”不做“整體印象分”。第二步向大模型注入結(jié)構(gòu)化prompt要求輸出JSON格式里面包含每個(gè)評(píng)分項(xiàng)的得分、扣分原因、知識(shí)點(diǎn)標(biāo)簽。為了穩(wěn)定解析我把輸出格式示例寫(xiě)死在提示詞里并讓模型先輸出“思考過(guò)程”再輸出結(jié)果但不把思考過(guò)程展示給學(xué)生。第三步隨機(jī)打亂學(xué)生作答順序分多次調(diào)用模型取同一評(píng)分項(xiàng)的中位數(shù)作為最終得分。這樣做是為了避免“批改疲勞”帶來(lái)的順序偏差——我實(shí)測(cè)發(fā)現(xiàn)批到后半段時(shí)模型會(huì)明顯變松。第四步設(shè)置校驗(yàn)規(guī)則兜底。如果模型給出某評(píng)分項(xiàng)滿(mǎn)分但學(xué)生的相關(guān)公式出現(xiàn)明顯低級(jí)錯(cuò)誤校驗(yàn)?zāi)K會(huì)強(qiáng)制扣分并觸發(fā)人工復(fù)核。主觀(guān)題批改的準(zhǔn)確性不能只看“最終分是否接近老師的分”還要看“錯(cuò)因是否一致”。我做過(guò)一個(gè)對(duì)照實(shí)驗(yàn)同一份50份卷子模型批改結(jié)果與教研組老師批改結(jié)果對(duì)比最終分相關(guān)性能做到0.91但錯(cuò)因一致率只有0.76。這說(shuō)明模型在“給分”上進(jìn)步快在“歸因”上仍需大量打磨。3.3 錯(cuò)誤歸因與反饋生成自動(dòng)批改的真正價(jià)值在反饋。批改頁(yè)面上除了一個(gè)紅叉和正確答案至少應(yīng)該給出三樣?xùn)|西錯(cuò)因標(biāo)簽知識(shí)缺失、概念混淆、計(jì)算失誤、審題偏差、方法不當(dāng)。針對(duì)性的講解片段這個(gè)概念一句話(huà)講清楚配合一個(gè)評(píng)估過(guò)的同類(lèi)例題。下一步做什么是重做原題、做同類(lèi)題還是先看前置知識(shí)點(diǎn)講解。錯(cuò)誤歸因的實(shí)現(xiàn)我用的是“歸因矩陣”題目在入庫(kù)時(shí)就由教研人員標(biāo)注了“該題主要考察的知識(shí)點(diǎn)”和“常見(jiàn)錯(cuò)誤選項(xiàng)對(duì)應(yīng)的錯(cuò)誤類(lèi)型”。選擇題錯(cuò)了直接用選項(xiàng)對(duì)應(yīng)關(guān)系歸因主觀(guān)題錯(cuò)了讓大模型在評(píng)分時(shí)同時(shí)輸出“錯(cuò)誤可能的知識(shí)點(diǎn)根因”再和題庫(kù)的標(biāo)注做交集。反饋生成里面有兩條紅線(xiàn)我吃了虧才記住。第一不能直接給學(xué)生貼“笨”“差”“粗心大王”這類(lèi)的標(biāo)簽不能強(qiáng)化負(fù)面身份認(rèn)同。我見(jiàn)過(guò)一個(gè)學(xué)生連續(xù)錯(cuò)五道計(jì)算題后系統(tǒng)文案變成了“你最近有點(diǎn)心浮氣躁”家長(zhǎng)看到后直接投訴。第二講解片段必須經(jīng)過(guò)審核或生成后校驗(yàn)不能讓模型自己編造一個(gè)“課本上沒(méi)有的公式”。后面這個(gè)坑我會(huì)在常見(jiàn)問(wèn)題里展開(kāi)講。4. 從零落地一個(gè)最小閉環(huán)架構(gòu)、數(shù)據(jù)模型與Prompt設(shè)計(jì)4.1 系統(tǒng)架構(gòu)與模塊劃分我落地的第一版系統(tǒng)架構(gòu)非常樸素拆成五個(gè)模塊每個(gè)模塊都可以獨(dú)立替換接入層接收學(xué)生作答、題目信息、學(xué)習(xí)行為日志。批改服務(wù)按題型分流調(diào)用不同評(píng)分器。強(qiáng)結(jié)構(gòu)題走本地規(guī)則引擎弱結(jié)構(gòu)題走LLM評(píng)分服務(wù)。知識(shí)服務(wù)維護(hù)知識(shí)圖譜、題目難度、推薦候選集是路徑規(guī)劃的基礎(chǔ)數(shù)據(jù)源。路徑引擎讀取學(xué)生最新畫(huà)像執(zhí)行狀態(tài)機(jī)規(guī)則輸出下一個(gè)待學(xué)/待練節(jié)點(diǎn)。反饋服務(wù)把批改結(jié)果和路徑推薦組裝成學(xué)生端展示內(nèi)容包括錯(cuò)因標(biāo)簽、講解內(nèi)容、鼓勵(lì)文案。模塊之間只通過(guò)消息交互不共享內(nèi)部狀態(tài)。批改服務(wù)不知道學(xué)生畫(huà)像路徑引擎也不會(huì)直接改分。這個(gè)設(shè)計(jì)讓我后面換模型、換評(píng)分策略時(shí)不需要?jiǎng)悠渌K非常省心。4.2 關(guān)鍵數(shù)據(jù)模型與表結(jié)構(gòu)除了前面提到的知識(shí)點(diǎn)畫(huà)像表還有兩張表是整個(gè)系統(tǒng)的支柱。第一張是題目表它不只是存題干和答案還存了豐富的元信息question ( question_id varchar(32), content text, answer text, subject varchar(32), knowledge_node varchar(32), -- 主考察知識(shí)點(diǎn) related_nodes json, -- 相關(guān)知識(shí)點(diǎn)數(shù)組 difficulty int, -- 1~5 type varchar(16), -- choice / fill / subjective rubric json, -- 評(píng)分標(biāo)準(zhǔn)主觀(guān)題使用 wrong_meta json, -- 常見(jiàn)錯(cuò)誤選項(xiàng)與錯(cuò)因映射 status int -- 啟用/停用 )第二張是作答記錄表這是產(chǎn)生畫(huà)像的原始素材也是所有畫(huà)像更新的觸發(fā)源attempt_log ( record_id bigserial, student_id varchar(32), question_id varchar(32), student_answer text, is_correct boolean, score float, max_score float, error_type varchar(32), response_ms int, -- 作答耗時(shí) created_at timestamp, review_status int -- 正常 / 待人工復(fù)核 / 已復(fù)核 )每次批改完成后都會(huì)寫(xiě)入一張attempt_log再觸發(fā)一個(gè)異步任務(wù)去更新student_knowledge_state。這個(gè)異步更新必須做冪等因?yàn)榇竽P驮u(píng)分是異步返回的可能出現(xiàn)同一個(gè)record被重復(fù)處理的情況。我當(dāng)時(shí)在這里吃了一次數(shù)據(jù)錯(cuò)亂的虧后來(lái)加了“按record_id去重更新”的邏輯才解決。4.3 核心Prompt的設(shè)計(jì)思路弱結(jié)構(gòu)題的批改Prompt是整個(gè)系統(tǒng)的關(guān)鍵。我第一次寫(xiě)Prompt走的是“自由發(fā)揮”路線(xiàn)效果很差。后來(lái)總結(jié)出一套相對(duì)穩(wěn)定的模板核心原則是“先定標(biāo)準(zhǔn)再評(píng)步驟最后輸出結(jié)構(gòu)”。以“一元二次方程應(yīng)用題”為例簡(jiǎn)化后的Prompt如下你是數(shù)學(xué)作業(yè)批改助手。下面是一道應(yīng)用題和一位學(xué)生的作答。 請(qǐng)嚴(yán)格按照評(píng)分標(biāo)準(zhǔn)進(jìn)行評(píng)判先自行推導(dǎo)正確解法再對(duì)比學(xué)生的作答。 題目 {question} 參考答案 {answer} 評(píng)分標(biāo)準(zhǔn)rubric 1. 設(shè)未知數(shù)正確1分 2. 列出正確方程3分 3. 方程求解正確2分 4. 檢驗(yàn)并下結(jié)論1分 要求 - 先簡(jiǎn)要寫(xiě)出學(xué)生的關(guān)鍵步驟再逐項(xiàng)評(píng)分。 - 如果某個(gè)步驟缺失但后文沿用該結(jié)果依然按缺失項(xiàng)扣分。 - 輸出JSON格式如下 { method_summary: 學(xué)生采用的方法簡(jiǎn)述, scores: { step1: {score: 1, reason: 設(shè)未知數(shù)正確}, step2: {score: 2, reason: 方程漏寫(xiě)二次項(xiàng)系數(shù)}, step3: {score: 2, reason: 解法正確但中間計(jì)算跳步}, step4: {score: 0, reason: 未檢驗(yàn)} }, total_score: 5, knowledge_tags: [一元二次方程, 應(yīng)用題建模], main_error_type: 步驟不全, main_error_reason: 學(xué)生在求解過(guò)程中跳步且未做結(jié)果檢驗(yàn) }這個(gè)Prompt達(dá)到的效果是解析穩(wěn)定性從最初的82%提升到99%以上。模型不再輸出大段散文而是完全按JSON結(jié)構(gòu)返回后端直接反序列化拿字段。后續(xù)要在學(xué)生端展示就直接用reason字段加工成一句話(huà)說(shuō)明。注意這個(gè)Prompt里的“參考答案”和“評(píng)分標(biāo)準(zhǔn)”必須分開(kāi)不能把標(biāo)準(zhǔn)藏在答案里否則模型會(huì)把寫(xiě)法和參考答案不一致但等價(jià)的過(guò)程誤判成錯(cuò)誤。4.4 效果評(píng)估怎么才算“批改得準(zhǔn)”產(chǎn)品上線(xiàn)前必須有量化指標(biāo)否則后面沒(méi)法迭代。我搭建的評(píng)估體系分三個(gè)維度準(zhǔn)確率模型評(píng)分與教研老師評(píng)分的差值在1分以?xún)?nèi)視為準(zhǔn)確目標(biāo)大于90%錯(cuò)因標(biāo)簽一致率目標(biāo)大于80%。穩(wěn)定性同一份答卷反復(fù)批改5次評(píng)分的方差要小于0.4。這個(gè)指標(biāo)控制“同卷不同分”的問(wèn)題。延遲和成本弱結(jié)構(gòu)題p95延遲控制在8秒以?xún)?nèi)單份卷子的平均批改成本要低于人工成本的40%否則產(chǎn)品沒(méi)法規(guī)?;?。穩(wěn)定性問(wèn)題最容易在評(píng)測(cè)時(shí)暴露。我記得第一版試跑時(shí)同一份作文式簡(jiǎn)答題連批三次最低給6分最高給9分滿(mǎn)分10分方差驚人。原因就是評(píng)分標(biāo)準(zhǔn)沒(méi)有被拆成足夠小的子項(xiàng)模型每次“整體感受”不同。把rubric拆細(xì)之后方差明顯下降后來(lái)加入了多次采樣取中位數(shù)才徹底穩(wěn)定。5. 實(shí)戰(zhàn)避坑記錄這些坑我踩過(guò)你不要再踩5.1 大模型幻覺(jué)它真的會(huì)“編造”學(xué)生的錯(cuò)誤最讓我后怕的一次是調(diào)試主觀(guān)題批改時(shí)大模型給一份寫(xiě)得挺好的解答挑了一堆“錯(cuò)誤”說(shuō)學(xué)生第二步漏了一個(gè)負(fù)號(hào)但實(shí)際學(xué)生寫(xiě)得清清楚楚是模型自己看串行看漏了。還有一次更離譜模型指出學(xué)生用了一個(gè)“課本里不存在的定理”可那道題根本不需要任何定理正確答案是直接代入計(jì)算。那次我意識(shí)到如果放任幻覺(jué)輸出教育Agent會(huì)嚴(yán)重誤導(dǎo)學(xué)生甚至摧毀信任基礎(chǔ)。我的補(bǔ)救方案有三層第一層把學(xué)生作答和標(biāo)準(zhǔn)答案原文都切成小塊在Prompt里用明顯的標(biāo)記分段要求模型“在引用學(xué)生原文后才能打分”。第二層在后端做“答案重寫(xiě)校驗(yàn)”模型輸出的reason里如果包含可驗(yàn)證的公式或步驟就用規(guī)則解析出來(lái)和原文比對(duì)不一致的直接標(biāo)記為待人工復(fù)核。第三層設(shè)置“低置信度拒答”機(jī)制。當(dāng)不同采樣次數(shù)給出的評(píng)分差異超過(guò)閾值系統(tǒng)不自動(dòng)反饋轉(zhuǎn)人工。這個(gè)成本值得花寧可讓老師多看幾份也不能批量輸出錯(cuò)誤講解。5.2 批改標(biāo)準(zhǔn)的“松緊漂移”同一道題今天批得嚴(yán)明天批得松這種漂移會(huì)讓畫(huà)像更新出現(xiàn)抖動(dòng)。如果某天模型把“步驟不全”的答案給了滿(mǎn)分學(xué)生掌握度被虛高更新后面推薦的題目難度就會(huì)偏大學(xué)生練起來(lái)非常受挫。我在排查中發(fā)現(xiàn)漂移的主要來(lái)源是Prompt中評(píng)分標(biāo)準(zhǔn)的描述不夠精確。比如“步驟齊全”這個(gè)詞太模糊。后來(lái)我改成給每個(gè)評(píng)分項(xiàng)配示例評(píng)分項(xiàng)“列出正確方程”3分 - 滿(mǎn)分示例設(shè)所求數(shù)為x則(x3)(x-2)0 - 不得分示例設(shè)一個(gè)數(shù)然后寫(xiě)了x(x3)0 - 部分得分方程列式正確但未知數(shù)設(shè)置不清晰給正反示例比解釋性文字有效得多。實(shí)測(cè)下來(lái)加了示例后模型批改的“當(dāng)天一致性”和“跨天一致性”都明顯提升特別是跨天一致性是決定畫(huà)像能否長(zhǎng)期穩(wěn)定的關(guān)鍵。5.3 冷啟動(dòng)沒(méi)有數(shù)據(jù)時(shí)怎么開(kāi)張新學(xué)生沒(méi)有任何作答記錄畫(huà)像全是空的這時(shí)候個(gè)性化推薦就是無(wú)源之水。我采用了兩階段冷啟動(dòng)方案階段一定位測(cè)試。新學(xué)生進(jìn)來(lái)先做一份短診斷卷卷子每個(gè)知識(shí)點(diǎn)只出2道題題目難度覆蓋該知識(shí)點(diǎn)的基礎(chǔ)、中等、偏上三個(gè)檔位總時(shí)間控制在20分鐘以?xún)?nèi)。用這份卷子的結(jié)果初始化畫(huà)像。階段二試探性學(xué)習(xí)。初始畫(huà)像只產(chǎn)生“低置信度的推薦”給新學(xué)生推薦默認(rèn)難度中等、每個(gè)節(jié)點(diǎn)只推薦3~5題的保守路徑。等積累夠20道題的作答記錄后畫(huà)像置信度上來(lái)再切到正常推薦。冷啟動(dòng)階段特別忌諱一來(lái)就推薦“薄弱點(diǎn)專(zhuān)項(xiàng)”因?yàn)樵\斷卷只有2道題不能確定學(xué)生是真的不會(huì)還是看錯(cuò)了題。我給每個(gè)節(jié)點(diǎn)同時(shí)標(biāo)注了“置信度”置信度低于0.5的知識(shí)點(diǎn)不會(huì)進(jìn)入推薦列表只會(huì)顯示在“待觀(guān)察”區(qū)。5.4 延遲與成本輕量模型和重模型的搭配剛開(kāi)始我所有題型都用同一個(gè)大模型批改選擇題也走LLM單次調(diào)用雖然只要幾百毫秒但并發(fā)一高成本立刻失控。后面我做了分流改造效果立竿見(jiàn)影整體成本下降了大約70%。現(xiàn)在的策略是四個(gè)字按題分級(jí)。強(qiáng)結(jié)構(gòu)題本地規(guī)則直接判零成本、毫秒級(jí)返回。規(guī)則處理不了的邊界情況才兜底調(diào)用模型。半結(jié)構(gòu)題用中等規(guī)模的模型只做“公式歸一化步驟關(guān)鍵點(diǎn)校驗(yàn)”這類(lèi)有限推理。弱結(jié)構(gòu)題才用最強(qiáng)大的模型走完整評(píng)分流程開(kāi)啟推理過(guò)程蒸餾和JSON結(jié)構(gòu)化輸出。任何模型調(diào)用前都先查緩存。同一道題、同一個(gè)學(xué)生的近似作答在短時(shí)間內(nèi)可以直接復(fù)用上次批改結(jié)果并進(jìn)行簡(jiǎn)易校驗(yàn)。延遲方面弱結(jié)構(gòu)題如果一次調(diào)用需要5秒就不要同步等結(jié)果。我的做法是前端先顯示“批改中”后臺(tái)異步評(píng)分完成后推送提示。這也是很多教育產(chǎn)品能做到體驗(yàn)穩(wěn)定的原因——不是模型快了而是交互流程兼容了模型延遲。6. 數(shù)據(jù)閉環(huán)與用戶(hù)信任Agent越用越準(zhǔn)但底線(xiàn)不能碰6.1 學(xué)習(xí)數(shù)據(jù)閉環(huán)是Agent進(jìn)化的燃料個(gè)性化推薦的本質(zhì)是對(duì)學(xué)生狀態(tài)做預(yù)測(cè)預(yù)測(cè)的準(zhǔn)確率取決于數(shù)據(jù)量。每次作答、每次批改反饋、每次路徑推薦都要回寫(xiě)到日志里。我的系統(tǒng)會(huì)定期離線(xiàn)分析這些日志用來(lái)做幾件事發(fā)現(xiàn)知識(shí)圖譜的標(biāo)注錯(cuò)誤。如果大量學(xué)生在過(guò)了“知識(shí)點(diǎn)A”之后做“知識(shí)點(diǎn)B”依然普遍失敗說(shuō)明A到B的前置關(guān)系可能標(biāo)錯(cuò)了或者A的掌握度閾值設(shè)置得太低。發(fā)現(xiàn)推薦的偏差。如果某個(gè)難度檔位的題目推薦率極高但完成率極低說(shuō)明難度標(biāo)定或?qū)W生能力估計(jì)有系統(tǒng)偏差。生成新的訓(xùn)練樣本。人工復(fù)核過(guò)的批改記錄里老師修正了模型的評(píng)分這些數(shù)據(jù)積累下來(lái)可以微調(diào)模型或讓規(guī)則引擎更完善。我提醒做這塊的同行日志埋點(diǎn)一定要在架構(gòu)初期就做后期補(bǔ)意味著會(huì)漏掉大量歷史數(shù)據(jù)非??上?。6.2 隱私與數(shù)據(jù)落盤(pán)的底線(xiàn)教育場(chǎng)景涉及大量未成年人數(shù)據(jù)底線(xiàn)非常清楚。我在項(xiàng)目一開(kāi)始就確定了幾個(gè)原則學(xué)習(xí)行為數(shù)據(jù)必須脫敏存儲(chǔ)、學(xué)生個(gè)人畫(huà)像數(shù)據(jù)不能外傳用于任何其他業(yè)務(wù)、家長(zhǎng)和老師有權(quán)查看系統(tǒng)基于哪些數(shù)據(jù)給出了推薦數(shù)據(jù)可解釋性。系統(tǒng)里的“學(xué)生ID”盡量用系統(tǒng)內(nèi)部映射ID不直接使用真實(shí)姓名、證件號(hào)等原始標(biāo)識(shí)。對(duì)外輸出到分析報(bào)表的只有聚合統(tǒng)計(jì)不涉及個(gè)體明細(xì)。6.3 人機(jī)協(xié)同的邊界教育Agent再怎么智能也不能替代老師的最終決定權(quán)。我在系統(tǒng)里保留了三個(gè)強(qiáng)制人工環(huán)節(jié)弱結(jié)構(gòu)題評(píng)分置信度低時(shí)自動(dòng)轉(zhuǎn)人工、學(xué)生連續(xù)三次被標(biāo)記為同一錯(cuò)因時(shí)通知老師介入、任何“負(fù)面標(biāo)簽”的生成和展示都必須經(jīng)過(guò)老師確認(rèn)。這不是防御性設(shè)計(jì)而是產(chǎn)品價(jià)值的必要部分——機(jī)器負(fù)責(zé)提效老師負(fù)責(zé)育人這個(gè)邊界不能越界。7. 長(zhǎng)期迭代方向把這個(gè)過(guò)程變得更聰明也更有溫度這套系統(tǒng)跑通之后我從第一批真實(shí)使用數(shù)據(jù)里得到一些很明確的迭代方向分享給正在做或準(zhǔn)備做教育Agent的朋友。方向一是“路徑推薦的可解釋可視化”。學(xué)生端展示的不是一句“為你推薦三道題”而是一張可點(diǎn)擊的知識(shí)地圖標(biāo)明“你已經(jīng)掌握哪些節(jié)點(diǎn)、正在學(xué)習(xí)哪些節(jié)點(diǎn)、下個(gè)節(jié)點(diǎn)是什么”。教育場(chǎng)景的推薦越透明學(xué)生的主動(dòng)感越強(qiáng)堅(jiān)持學(xué)習(xí)的意愿越高。我觀(guān)察到的數(shù)據(jù)顯示打開(kāi)知識(shí)地圖的學(xué)生完成推薦練習(xí)的比例比只看文字提示的學(xué)生高出不少。方向二是“自適應(yīng)測(cè)試與路徑動(dòng)態(tài)調(diào)整的深度融合”。第一版是做完一組題再更新畫(huà)像實(shí)時(shí)性不夠。后續(xù)可以做“答題中途實(shí)時(shí)調(diào)整”——比如學(xué)生已經(jīng)連續(xù)做對(duì)五道中等難度題系統(tǒng)在前端就立刻插入一道挑戰(zhàn)題而不必等到本輪練習(xí)結(jié)束。方向三是“批改反饋的個(gè)性化語(yǔ)言風(fēng)格”。同樣的錯(cuò)因外向一點(diǎn)的學(xué)生需要鼓勵(lì)式語(yǔ)氣謹(jǐn)慎型學(xué)生需要干脆直接的分析。這個(gè)不是給Prompt加角色設(shè)定那么簡(jiǎn)單而是需要沉淀一套“反饋風(fēng)格偏好”數(shù)據(jù)并不斷測(cè)試哪種語(yǔ)氣對(duì)行為轉(zhuǎn)化最有效。最后再分享一個(gè)小技巧教育Agent做反饋文案時(shí)別用“有些學(xué)生”這種模糊主語(yǔ)一定要用“你”。實(shí)測(cè)下來(lái)“你漏掉了這一步里的負(fù)號(hào)建議檢查符號(hào)問(wèn)題”比“部分學(xué)生會(huì)在這一步漏掉負(fù)號(hào)”更有效。原因是自動(dòng)批改本身已經(jīng)承擔(dān)了教師的一部分獨(dú)特性反饋角色反饋語(yǔ)言越直接指向個(gè)體行為學(xué)生越覺(jué)得系統(tǒng)是在幫他而不是在訓(xùn)他。這個(gè)細(xì)節(jié)不大但對(duì)學(xué)生留存率的影響一點(diǎn)都不小。