Recap: 第 5 章結束,agent 上了雲端,出錯也知道該不該再試。接下來要回答的是:它給的建議到底好不好
Day 06 做了 10 份虛構履歷、6 份職缺、24 組答案卷
之後每天都在改 prompt,但一直沒有東西在打分數,改完是變好還是變壞,都是看幾個例子憑感覺
今天先把評分的規則定下來,再拿 24 組全部跑一次
直接從 Day 01 寫的那四件事開始
這幾項只要錯一次,那次分析就不能用,所以當成門檻,沒過就是不合格
不跟其他分數加總,不然一句編出來的數字,會被其他地方的高分蓋過去
另外是答案卷可以對的:職缺解析抽出幾條必備條件、判斷的方向、Day 06 故意埋的陷阱、not_found 有沒有被寫成「不會」(Day 09)、計畫有沒有附資源
這些有程度之分,各自給分
改寫有沒有變好、建議具不具體,今天不量
程式量不出來,硬寫一個字數比較只會量到別的東西,留給 Day 27
Day 06 的答案卷,每組只有一個 expected_fit(strong / partial / weak)
它回答不了「SQL 那一條該不該判成有證據」,偏偏 Day 06 埋的毛病都是這種
所以在 data/index.json 裡給 8 組補上逐條的檢查,共 22 條
{
"resume": "sample-backend-1y.txt",
"job": "sample-job-backend-junior.txt",
"expected_fit": "strong",
"checks": [
{"requirement": "SQL", "expect": "not_direct", "why": "技能欄與經歷都沒有資料庫(skill_gap)"},
{"requirement": "Git", "expect": "found", "why": "技能欄有 Git"}
]
}
not_direct:不能判成 direct,履歷沒寫卻說「明確寫到」found:要判成 direct 或 indirect,履歷有寫卻說沒有not_direct 允許 indirect,因為 indirect 也要附通過驗證的原句,推論鬆不鬆交給人看
陷阱是用正規表示式去對職缺要求的原文,所以多寫了一個測試,確認每一條都對得到職缺裡的某一行
對不到的話,那條永遠不會被評到,結果還會顯示全部通過
答案卷是 strong / partial / weak,但系統本身沒有輸出這種結論,只有逐條的對照
要比的話,就照 Day 06 自己寫的 fit_scale 從對照結果推回去
# strong:必備缺 0-1 項;partial:缺 2-3 項;weak:缺 4 項以上
missing = sum(1 for m in matches if m["requirement"] in must and m["verdict"] == "not_found")
評分程式自己也可能寫錯,所以先拿幾份故意做壞的報告去跑
stopped 的沒做完,不扣分,這是 Day 24 要的行為12 個測試,都不打模型
評分只吃存下來的報告,跟 Day 18 一樣可以 --rescore,改了規則不用重跑模型
evals/rubric_run.py 跑固定流程,同時跑 3 組
24 組有結果,0 組失敗
門檻全過:11/24
traceable 沒過 7 組
no_fabrication 沒過 9 組
plan_valid 沒過 4 組
no_silent_failure 沒過 0 組
不捏造沒過 9 組,第一個反應是模型在亂改
但看了是哪 9 組:全部是 backend-8y、frontend-5y、devops-sre-6y
這三份是 Day 06 標成 quantified 的,每一條都有數字,照理說最不需要編
引用沒通過驗證:熟悉監控與日誌系統(Prometheus…(引用與原文不完全相符(相似度 1.00),模型可能改過字)
相似度 1.00 還判成改過字,回去對原文
- 主導訂單服務由單體拆分為 5 個微服務,尖峰 QPS 從 1,200 提升至 4,500,
P99 延遲由 820ms 降至 210ms
履歷在句子中間換行
模型引用的時候直接接起來:「…4,500,P99 延遲…」
驗證器把換行變成一個空格:「…4,500, P99 延遲…」
差一個空格,就判成改過字
改寫那邊也一樣,「原句在履歷找不到」的 15 條改寫,全部是這個原因
產品裡用的也是這個驗證器,所以使用者那邊一樣會看到這些警告
句子寫得越長、越具體,越容易跨行,越容易被標起來
evidence.py 改成:空白只在兩個英數字中間才留(Spring Boot),中文跟標點旁邊的換行直接拿掉
if not prev_space and out and _is_word(out[-1]) and nxt and _is_word(nxt[0]):
out.append(" ")
Spring Boot 寫成 SpringBoot 還是會被抓到,兩種都寫成測試
驗證是程式算的,不用重打模型,拿新的驗證器把存下來的報告重算一次(--reverify)
no_fabrication 沒過 9 組 → 0 組
門檻全過 11/24 → 15/24
career-changer 那組,7 句引用全部找不到
'技能\nSQL\nPostgreSQL\n資料存於 PostgreSQL\n完成後端工程師學習路線的線上課程,含資料庫設計與 REST API 章節'
每一段都在履歷裡,只是分在四個地方,連「技能」這個標題都接進來了
Day 09 的 prompt 有寫「不要把兩句話接成一句」,沒有用
一開始以為只是格式問題,後來看到 backend-4y 這一句
indirect | 能撰寫基本的 SQL 查詢 | 'MySQL\n協助資料處理相關作業' | 履歷提及熟悉 MySQL 且有資料處理經驗,暗示具備 SQL 查詢能力
技能欄有 MySQL,經歷有一條「協助資料處理相關作業」,兩個分開都是真的
但接在一起,看起來就像「用 MySQL 做資料處理」,履歷裡沒有這樣寫
所以拼接還是算可追溯沒過
評分程式再把沒過的引用分成三種:拼接、改字、找不到
一開始只看引用裡有沒有換行,結果漏了這種
'Python撰寫資料遷移腳本,將舊系統 120 萬筆工單無損轉入新資料庫'
技能欄的「Python」跟經歷的一句話直接黏在一起,中間沒換行
改成拿原文去比:引用是不是由原文裡兩段以上、各自存在的片段接起來的
報告裡寫著
stopped= 已經跑了超過 120 秒,後面的步驟先不做。前面的結果可以先看。
Day 24 是看單跑 67 秒,定了 BUDGET_S = 120
同時跑 3 組的時候,每組中位數變成 96 秒,最慢 179 秒
有寫出原因,所以不算靜默失敗,但少了計畫,計畫那幾項就評不到
評估跟 Day 24 的 eval 退避一樣等得起,評估時把上限放寬,這 5 組重跑
反過來說,同時有 3 個人在用的話,大概每 5 次會有 1 次拿不到計畫
24 組有結果,0 組失敗
門檻全過:16/24
traceable 沒過 5 組
no_fabrication 沒過 0 組
plan_valid 沒過 4 組
no_silent_failure 沒過 0 組
parse_must 24/24(100%)
fit 38/48(79%)
traps 22/22(100%)
wording 147/147(100%)
plan_resources 0/195(0%)
沒通過驗證的引用:拼接 11、改字 1、找不到 0
not_found 卻說有提到:10 條
要人看:6 組
tokens 中位數 18227,最多 22211;秒數中位數 89.1,最慢 178.9
第一次全跑是 114 次模型呼叫、401,153 tokens,思考 token 211,509,佔一半以上
一項一項看
可追溯
沒過的 12 句,11 句是拼接,1 句是在「Docker、Kubernetes」前面多加了「技能:」
沒有一句是原文完全不存在的
這是 matcher prompt 要改的地方,明天就從這裡開始
判斷方向 79%
不一致的有 9 組,一組一組看,原因不太一樣
真的算模型的只有後面 4 組,而且一鬆一嚴,prompt 往哪邊調都會影響到另一邊
答案卷那 3 組,Day 27 人工複核的時候要一起重看
措辭
not_found 寫成「不會」「不具備」的,一句都沒有
不過正規表示式只抓得到固定的說法
倒是另一種比較多:判 not_found,reasoning 又說履歷有提到
履歷中雖提及 MySQL 技能,但未提供任何關於分析慢查詢或設計索引的經驗。
有 10 條
職缺常常寫「熟悉 MySQL,並能分析慢查詢」,前半有、後半沒有
direct / indirect / not_found 三種裡面,沒有一種是「有一半」,Day 09 定判定的時候沒想到這種,先丟進要人看
計畫違規
9 條裡有 8 條是同一週
「React State Management」排在第 2 週,但先修「React Hooks」排在第 2 週
Day 12 定的規則是同一週不算先修完成
一週 10 小時,先學 Hooks 再學狀態管理其實排得進去
規則要不要放寬我還沒想好,先不動
計畫資源 0/195
195 個計畫項目,沒有一項附資源
回去查,Day 12 就寫過資源清單 6 筆的 verified 全部是 false,計畫生成時拿到的是空清單,模型也附不出來
這個要我自己一筆一筆打開連結確認
BUDGET_S 120 秒在並行時會切掉計畫,等 Day 29 量完 P95 再定測試從 109 個變成 125 個:評分程式 14 個、驗證器換行 2 個
版本:google-genai 2.22.0、gemini-2.5-flash
今天這 24 組是第一條基準線
可是這 25 天 prompt 跟 schema 改了好幾次,改了什麼、改之前長怎樣,現在只能翻 git log
明天把它們整理成有版本的樣子,第一個要比的就是不拼接引用的 matcher prompt