iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0

昨天講了想修正這個系統。今天開始動手,第一個要修的是導師 Agent。
我以為這是三個 Agent 裡最單純的一個:不就是把學生的程式碼丟給 Gemini,
叫它回答問題嗎?結果它是目前為止最難搞的一個——難的不是讓它會講話,
而是讓它閉嘴。
做到一半實際跑起來測,遇到一個很莫名的狀況:
我把一份正確的解答貼進去,導師還是說程式碼有問題,
而且在我的「弱點累積」裡記了一筆根本不存在的錯誤。
一開始以為是模型不夠聰明(我用的是免費額度比較寬的 lite 版本)。
後來把 prompt 整個印出來看,才發現問題在我自己寫的字上面:
本輪只能反問一個問題,引導學生自己發現問題所在。

LEVEL_RULES = {
    0: "本輪只能反問一個問題,引導學生自己發現問題所在。不可出現任何程式概念的名詞。",
    1: "本輪可以點出學生該往哪個概念方向思考,但不可解釋那個概念是什麼。",
    2: "本輪可以解釋那個概念本身是什麼,但仍不可寫出本題的解法。",
}

​
三級規則都預設「有問題存在」。 level 0 字面上就是命令它「引導學生發現
問題所在」——程式碼沒問題的時候,這條指令根本無法誠實達成,模型只好
編一個出來。
而且偵測錯誤觀念那段我還寫了:
只有在程式碼已經正確、看不出問題時才回空陣列。
「只有⋯⋯才」讀起來像是例外狀況,等於又推了一把。
修正方法

NO_FAULT_RULE = "\n".join([
    "若你看不出程式碼有明顯問題,不要為了引導而編造一個。",
    "  直說你看不出問題,並建議他按「送出程式碼」讓評測看看,misconceptions 回空陣列。",
    "  你沒有執行過這支程式,所以不可以宣稱它一定會通過——你能說的只是「我看不出問題」。",
    "  想追問邊界情況可以,但不可暗示程式碼有錯。",
])

​
第三行
導師沒有執行過任何程式碼,所以它能說的只有「我看不出問題」,
不能說「這樣就對了」。這條界線之後會一直出現——整個系統的原則是
沒做到的事就不要宣稱做到了。
什麼時候可以說「答對了」?
有評測結果的時候。
系統裡的評測 Agent,它會推測每組測資會不會通過。
當它判定全部通過,導師手上就有依據了,這時才可以說:
這一題已經通過了。直接告訴學生已答對,先肯定他一句,
再說他可以按「換一題」練下一題。
差別在於:這是轉述別人的結論,不是導師自己憑空下判斷。
沒有判定的時候,它仍然只能說「我看不出問題」。

小結
今天最大的收穫不是寫了多少程式,而是發現:
prompt 裡的每一個字都是規格。 「引導學生發現問題所在」這八個字,
在我腦中是「引導的風格」,在模型眼中卻是「必須找出一個問題」的硬性要求。
我寫的時候完全沒意識到自己下了這個假設。
Debug 的關鍵也不是改模型或調參數,而是把實際送出去的 prompt 整個印出來讀一遍。
問題就明明白白寫在那裡。

今天差不多了,剩下的下期再繼續
目前還差:
出題 Agent
沙盒系統


上一篇
Day 17:Agent & 儀錶板 改版
系列文
基於 Multi-Agent 協作之蘇格拉底式程式學習與自動化評測系統 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言