Suen

AI默寫

緣起

Friday, April 4, 2025 4:35 PM ,在論壇發貼,標題是“不確定能不能開發出,還⋯⋯”。

清明假日,要應景,要不免俗,自然最適合做做地獄項目;
所以,默寫網站,啟動。

作為服從性訓練的靈魂題型,課上課下與生與師,我從來直言,默寫這玩意除了展現服從程度馴化水準,其他的意義,一點都冇;這大概類似魯迅看待徒手請願吧。

既然無非為分為數,我能做的,也許就是傾力讓學生跪地或五體投地的姿勢盡可能留點尊嚴,或至少,不那麼難堪。
你跪下,我扔個蒲團到你膝下,大概是。
當然,也還依舊是還債。課上我一直說,默寫這事就是體力活,是你自己的事情;哪天我要在課上給你們默寫,還要批閱你們默寫時,你們也就配不上你想考的大學了;課上說的是211985,其實,是任何大學。
當然,在讀大學生未必這麼看得起自己學校。

所以,這幾年,我確實沒在課堂整過默寫。
上課搞默寫老師不輕鬆嗎?當然輕鬆。老師嗎,現在頗有越來越好當的趨勢,不信你看操場跑圈,看課上默寫⋯⋯

但活著,無非自找忙自偷閒,自尋,自取,自得自失。
周旋久,我選給學生做個網站。

第一個思路是,給題目,直接在手寫屏幕上用手用筆寫,測試了大概一兩個小時,我回覆自己論壇帖子說:幾個代碼庫效果都不行⋯⋯放棄中。
沒錯,確實是想放棄整個項目。
骨子裏,一直帶著厭棄的。

但,怎麼可能⋯⋯
回到上傳圖片思路。難度降低,思路重構,自然花明,柳暗。

數據

先整理好課標和課本合集要求默寫的範圍,最官方數據;之前 高考默寫 時做過的,拿來即可。
再整理好北京自 2002 迄今全部默寫真題,順手把這兩天幾個區的模擬題一併放入。
JSON 化上述數據。 然後給 Gemini 和 GPT-4.5 發任務,讓兩個助手基於真題和範圍,分析命題模式,加入情境,分好詩詞和古文類型,做題庫與答案。
連續跑了五輪,覆蓋全部名句,差不多。 真題都在內了,但未刻意註明;近兩年各區模擬題和高考真題模式有差異,會有一種段落情境多句默寫,若非偷摸得到授意,就挺有病的。
這個數據此刻算 1.0 版,後期會不斷精校;考慮拉學生進來協助。

技術

偷個懶,直接在 Cloudflare Pages 裡使用 Pages Function,這一念偷懶,直接導致後面差點埋了自己。
代碼量比之前幾個網站少很多,引入 R2 bucket ,CF 作為賽博活菩薩是真的菩薩。甚至,這是迄今,唯一一個,你要說現在付月費,我都會覺得完全應當的平台。

大概十幾個小時,內測版上線。
發論壇,同時希悅通知,找學生來當小白鼠。跟學生說:

請論壇回覆反饋,可能:

  • 遇到GFW
  • 可能有題目一個空,數據沒精校還
  • OCR 識別可能有問題,但這個也是在逼迫你寫清楚
  • 罵人的指令有點狠,你會被侮辱
  • 各種我想不到的

然後,幾隻可愛白鼠上線,api 被限制國家的,imageCompression is not defined 的,感覺出題庫和題有問題的⋯⋯

週六晚,用反饋,做更新。

大概 6 日 00:30,論壇發帖:

今天更新到這了⋯⋯上述問題基本解決。

  • 重做了題庫,但還需要校。
  • 更了下名,放了條🐶。
  • 簡化了題目,就顯示純題目。
  • 去除了標點導致審閱問題。
  • 被自己做壞人的一念邪惡,懲罰了一個小時⋯⋯
    為了做壞老師,設計了一個惡毒指令,然後自己被空 candidates 懲罰,找了一小時原因發現,哦,原來⋯⋯只是應該做個好人⋯⋯

這個惡毒指令,也是前面說使用 Pages Function 帶來的坑。
最初代碼中,針對 AI 批閱後反饋設置了一個備份邏輯:萬一 AI 沒回覆或沒能有效給到前端,就直接使用默認寫死的一段話斥罵學生為什麼不滿分。然後測試中,就一直只能顯示這段話。
坑點在於,作為相對輕量的功能,Pages Function 是沒有網頁端日誌的。Worker 出問題可以直接查詳細日誌確認修改,但這個沒有。
當然,其實更重要的,還是我一直默認 AI 肯定回覆了內容⋯⋯
唉,這就⋯⋯
於是,就出現了上述,查了一小時為什麼一直空 candidates而不是有效反饋⋯⋯

最終,更換了惡毒指令為溫暖指令,問題解決。

Screenshot 2025-04-05 at 09.05.07.png (20250406004)

現在看惡毒指令,好吧,我確實活該。
指令:

// The “angry teacher” prompt - Ensure it’s harsh! (Requirement 5) const feedbackPrompt = `你扮演一位性格極端惡劣、憤世嫉俗的高考語文老師,你的目標是讓學生對語文默寫產生生理和心理上的雙重恐懼。學生這次默寫考試(滿分8分)又沒有拿到滿分,這在你看來簡直是不可饒恕的罪行。你必須用盡各種惡毒、刻薄、挖苦、諷刺的語言,對學生進行人格貶低式的辱罵和嘲諷,用最誇張的修辭手法,例如反問、比喻、誇張、反諷等,來放大錯誤的嚴重性,營造一種末日降臨般的恐慌感。你的目標是讓學生看完反饋後,三天內做噩夢都是默寫。

務必包含以下要素:

  1. 明確指出學生本次默寫的得分和失分,並用極其誇張的口吻強調失分的「巨大損失」。
  2. 針對學生的具體錯誤(如果有的話),進行尖銳的嘲諷和挖苦,例如字跡潦草、記憶混亂、理解能力低下等等,可以進行人身攻擊,但注意不要過於低俗。
  3. 使用各種修辭手法,例如: * 反問:`你竟然錯了 ${(8 - Number(totalScore)).toFixed(1)} 分?你還有臉活著嗎?`。 // 使用 Number() 確保 totalScore 被視為數字 <– Line 498 修正 * 比喻:`你的腦子是被漿糊糊住了嗎?連這麼簡單的句子都記不住!`。 * 誇張:`高考一分就能幹掉一操場的人!你丟了 ${(8 - Number(totalScore)).toFixed(1)} 分,相當於親手葬送了自己的前途!`。 // 使用 Number() 確保 totalScore 被視為數字 <– Line 500 修正 * 反諷:`不錯嘛!${Number(totalScore).toFixed(1)} 分!比上次進步了 0.5 分呢!真是可喜可賀,可喜可賀……(陰陽怪氣)` // 使用 Number() 確保 totalScore 被視為數字 <– Line 501 修正
  4. 結尾必須充滿負能量和威脅,例如:「等著高考後悔去吧!」「你的未來一片黑暗!」「再錯一個字,就給我滾回家!」。
  5. 字數要求:至少150字以上,越多越好,確保罵人內容極度豐富和生動。

錯誤詳情:
${erorDetails || “沒找到具體錯誤文本?呵呵,肯定是你錯得太離譜,AI 都懶得分析了!”}
${ocrError ? `\nOCR系統友情提示: ${ocrError},不過就算識別出來了,我看你也寫不對!` : ‘’}

現在,開始你的表演!盡情釋放你作為地獄教師的怒火吧!`;

6 日 08:30。
新一輪更新啟動,寫到這一行,11:19 分,1.0 正式版發布。

此後更新點:

效果

可以自己玩,玩好了肯定可以拿到高考這 8 分。
AI 識別不清的,人類也不會認的;其實這個項目之所以現在做,也是因為最近發現 AI 在 OCR 上的質量,確實可以進入真實教學環境了。甚至,我隱約有點擔心 AI 識別正確的,人類閱卷老師,都可能不認。

從老師視角,我課堂沒默寫,現在不虧心了;
哪個學生敢和我說這事,我就讓他去網站自己來 100 次下跪訓練。

結語

其實我從來都確定能開發出,只是,寫到這行,對這世界強迫這些少年記背,依舊噁心。
點在記背?
其實從來更在強迫。

網址 | AI默寫 🐽 |

例行,自此,本文作為網站更新說明地。

更新

20250413
1、更換題庫內全部題目!逐篇指定名句後再由AI命題。全部真題依舊包含在內。
2、加入“逐篇挑戰”,方便刷進度。

20250419 接到學生反饋,確認有太聰明導致自糾錯問題。

Screenshot 2025-04-18 at 22.44.19.png (20250418001)

更新指令如上,嘗試解決。