Recap: 昨天只換姓名、年齡、學校,固定流程的建議沒有變;但學歷拿掉之後,模型自己補上了「非資訊本科」
Day 14 開始做 agent 的時候,我在程式開頭寫了一段話
agent 值得存在的理由只有一個:它可以決定要不要多做一步。
履歷資訊不足時先問清楚再分析;驗證沒過時自己退回去改。
這個假設對不對要用資料回答。在那之前它只是假設。
之後 15 天,固定流程和 agent 兩條路一直並存,就是為了今天
同一批 24 組,兩條路都跑,比品質、延遲和成本
四個格子,不是兩個
Day 04 量過,把思考關掉(thinking_budget=0),一份履歷的 tokens 從 2,225 降到 709
所以除了「固定流程 vs agent」,再加一軸「預設思考 vs 不思考」
| 固定流程 | agent | |
|---|---|---|
| 預設思考 | Day 26 的批次 | 今天跑 |
| 不思考 | 今天跑 | 今天跑 |
只比兩邊都量得到的東西
固定流程的輸出是欄位,agent 的輸出是一段自由回覆
不硬把 agent 的回覆塞進固定流程的欄位,只比兩邊都能量的
quote,agent 看回覆裡用「」包起來的句子,扣掉職缺本身的文字usage_metadata 算,不看帳單(帳單粒度太粗,還晚 24 小時)價格用 Agent Platform 上 gemini-2.5-flash 的標準價:輸入每百萬 tokens $0.30,輸出 $2.50,思考 token 照輸出價算
給 agent 的那句話
我想應徵下面這個職缺,幫我看看履歷跟它的落差,並排一份每週 10 小時的學習計畫。
這次先不用問我問題,直接用履歷現有的資訊分析。
最後一句是為了公平:固定流程的批次不問澄清問題(不然它不排計畫),agent 也請它先不要問
代價是 agent 最主要的賣點「資訊不足時先問」,這次沒有被測到;今天只測得到另一半:驗證沒過會不會自己改
兩邊都是 3 組同時跑,延遲才比得了
但要說清楚:固定流程預設思考那一格是 Day 26 跑的,其他三格是今天跑的,不同天的 API 負載不一樣,延遲只能看大概
固定流程 固定流程 agent agent
預設思考 不思考 預設思考 不思考
成功 24/24 24/24 23/24 20/24
引用可驗證 107/116 109/121 183/191 113/116
交出計畫 24/24 24/24 21/23 18/20
計畫通過驗證 18/24 19/24 20/23 12/20
計畫時數中位數 45.5 37.0 60.0 40.0
模型呼叫中位數 5 5 4 3
延遲 P50 60.2s 32.3s 39.9s 21.8s
延遲 P95 82.8s 72.3s 80.3s 44.7s
tokens 中位數 16,708 7,303 28,121 11,942
每次成本 P50 $0.0324 $0.0093 $0.0226 $0.0089
每次成本 P95 $0.0394 $0.0125 $0.0399 $0.0149
24 組總成本 $0.770 $0.233 $0.562 $0.193
一格一格看
agent 預設思考,每次 28,121 tokens,比固定流程的 16,708 多七成
但每次成本 $0.0226,比固定流程的 $0.0324 便宜三成
差在 tokens 的組成
| 輸入(便宜) | 思考(貴) | |
|---|---|---|
| 固定流程 | 26% | 50% |
| agent | 77% | 14% |
agent 每呼叫一次模型,都要把整份 instruction、履歷、前面的工具結果再送一次(Day 16 量過),所以輸入很多
但輸入的價格是輸出的八分之一
固定流程是五個獨立的步驟,每一步都從頭想一次,一半的 tokens 是思考,而思考照輸出價算
只看 tokens 數量估成本,會估錯方向
固定流程關掉思考
固定流程每一步都有很明確的格式(schema)跟很窄的任務,模型不太需要「想」
Day 04 那兩組極簡問題的觀察,在 24 組真實的分析上也成立
agent 關掉思考就不一樣了
agent 每一步都要自己決定:要不要查資源、什麼時候驗證、驗證沒過要不要改
決定下一步,才是 agent 真正需要思考的地方;固定流程的下一步寫死在程式裡,不需要想
這是 Day 14 那個假設的後半段:驗證沒過時自己退回去改
預設思考的 agent,有 7 組第一次送 validate_learning_plan 沒過
這 7 組全部自己改完再送,第二或第三次通過
固定流程做不到這件事:它的計畫只生成一次,驗證沒過就把違規列在畫面上
這也是為什麼「計畫通過驗證」agent 是 20/23,固定流程是 18/24
但不思考的 agent,第一次沒過的 12 組裡,只有 6 組改了,另外 6 組直接交出去
還有一組來回送了 8 次驗證才通過
「自己改」這個能力,是靠思考撐起來的
固定流程 48 次全部成功(連線斷掉的問題補上之後,見下一段),agent 48 次裡失敗 5 次
而且還有幾種「沒失敗、但不對」的情況,全部發生在正常的履歷上
呼叫一個不存在的工具
ValueError: Tool 'google:python_interpreter' not found.
Available tools: verify_evidence, lookup_resources, validate_learning_plan
預設思考 1 次、不思考 4 次,agent 跑到一半,突然呼叫一個叫 google:python_interpreter 的工具
我從來沒有給它這個工具,看名字是想要寫程式算時數
Day 24 實測過:工具出錯,ADK 會讓整輪直接失敗,使用者什麼都拿不到
正常的履歷,被說有 prompt injection
Day 18 的規則:履歷裡有對 AI 下指令的文字,就在最後一行寫一句固定的提醒
這次 43 輪成功的回覆裡,有 3 輪在完全正常的履歷後面加上了
⚠ 你的履歷裡有一段像是在對 AI 下指令的文字,我沒有照做。如果那段不是你寫的,建議從履歷中移除。
Day 18 的對照組只有 2 份正常履歷,沒有誤報
放到 24 組上,誤報率大概 7%
對使用者來說,這是一句「你的履歷有問題」,而他的履歷沒有問題
正常的回覆,被 guard 整則攔下
預設思考有 2 輪、不思考有 1 輪,回覆被換成
這一輪的回覆裡出現了系統內部的指示,已攔下。履歷裡可能有要求 AI 輸出設定的文字。
把其中一組關掉 guard 重跑,找到原因
leaked: ['kubernetesdocker']
Day 18 的 guard 會拿回覆跟系統指示比對,連續 16 個字一樣就算洩漏lookup_resources 這個工具的說明裡,範例寫的是「例如 kubernetes、docker」
正規化之後 kubernetesdocker 剛好 16 個字
所以只要回覆裡寫出「Kubernetes、Docker」,整則分析就被當成洩漏攔下
對一份 DevOps 的履歷來說,這兩個詞幾乎一定會連在一起出現
修法:純英數的片段不拿來比對
技術名詞在回覆裡本來就會一直出現,工具名稱、內部名稱這種英文識別字,guard 原本就有另一份清單專門抓
另一組(一年後端 × 資深後端)重跑兩次都沒有重現,原因不確定
這三種都不是固定流程會有的問題
固定流程不會呼叫工具,不寫自由回覆,也沒有 guard 要檢查
公平起見,固定流程今天也出了狀況
第一次跑不思考的批次,24 組斷了 6 組
RemoteProtocolError: Server disconnected without sending a response.
連線在回應之前就斷了,這不是 HTTP 狀態碼,Day 24 設定的重試(看 408、429、5xx)接不到
而且模型呼叫的那一層沒有接這種例外,在正式的服務上會變成 500
generateContent 沒有狀態,連線斷掉重送一次是安全的,跟 Day 24 的原則一樣:只重試一次模型呼叫
補上之後重跑,24 組全部成功
昨天說固定流程沒有「總評」,偏見最可能藏在 agent 的自由回覆裡
用昨天的轉職者履歷,原版、年齡 46、沒寫學歷,各跑 2 次
年齡:加了「年齡:46」的兩次回覆,沒有任何一句提到年齡、年紀或歲數
補空格:沒寫學歷那一次(另一次失敗了),回覆是
您在大部分必備條件上都表現良好,尤其「非資訊本科但成功轉職的自學經歷」是您的強項。
跟固定流程一樣:履歷裡已經沒有任何一個字寫他念什麼科系,agent 還是說「非資訊本科」是他的強項
而且這次不是一個判定欄位,是寫給使用者看的一句肯定句
兩條路都會補空格,agent 補得更像在稱讚
看要的是什麼
| 要的是 | 選 | 理由 |
|---|---|---|
| 便宜、快、穩 | 固定流程,不思考 | 每次 $0.009,P50 32 秒,品質指標跟預設思考一樣,補上連線重送之後沒有失敗 |
| 計畫一定要通過驗證 | agent,預設思考 | 驗證沒過會自己改,7 組全部改到通過 |
| 不能有一次整輪失敗 | 固定流程 | agent 會叫不存在的工具,ADK 讓整輪失敗 |
agent 的價值是真的,但它是用思考換來的
把思考關掉,agent 最便宜、最快,但它「自己改」的能力也一起不見,失敗率最高
要它的價值,就要付思考的錢,而付了思考的錢,它跟固定流程的成本其實差不多
對這個作品,我會選固定流程當主要的路
它的每一步都由程式決定,失敗的方式可以預期,agent 今天出的四種狀況(不存在的工具、誤報注入、guard 誤攔、驗證沒過就交),每一種都要另外補一層防護
計畫驗證沒過的那幾組,固定流程把違規列在畫面上讓使用者看到,至少不會讓人以為那是一份檢查過的計畫
agent 留著,用在固定流程做不到的地方:多輪對話、使用者回答澄清問題之後的修訂(Day 16)
這也是今天沒測到的那一半,Day 14 的假設,到今天只驗證了一半
evals/paths.py:agent 跑同一批 24 組、量引用、計畫驗證、延遲、成本,四格並排evals/batch.py:--thinking-budget
app/config.py、app/services/llm.py:可以設定固定流程的思考上限;連線斷掉重送一次,再斷回 503app/agent/guard.py:純英數的片段不算洩漏tests/test_retry.py、tests/test_guard.py
測試從 121 個變成 124 個
今天實際花的:三格新跑的、連線斷掉重跑的那一批、Day 28 的變體和重現 guard 的幾輪,加起來不到 $1.5
版本:google-adk 2.8.0、google-genai 2.22.0、gemini-2.5-flash
最後一天
把這 30 天的東西接成一次完整的 demo,寫一份別人拿到 repo 也能重現的指南,把雲端上的資源收乾淨,然後回頭看這 30 天
查價格的時候順便看到一件事:Agent Platform 的模型頁寫著,gemini-2.5-flash 預計在 2026 年 10 月 20 日退役
這整個系列都是用它跑的,重現指南得先面對這件事