iT邦幫忙

2026 iThome 鐵人賽

DAY 29
0
Build on Google AI

把履歷修改工程化:從「聽起來有道理」到用 Gemini 打造可驗證的 AI 職涯助理系列 第 29 篇

Day 29 - Agent 真的比較好嗎?比較直接呼叫與 Agent 的品質、延遲及成本

  • 分享至 

  • xImage
  •  

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 看回覆裡用「」包起來的句子,扣掉職缺本身的文字
  • 計畫通過驗證:最後交出來的計畫,Day 12 的驗證有沒有過
  • 延遲:P50、P95
  • 成本:用每次的 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 的 tokens 比較多,卻比較便宜

agent 預設思考,每次 28,121 tokens,比固定流程的 16,708 多七成
但每次成本 $0.0226,比固定流程的 $0.0324 便宜三成

差在 tokens 的組成

輸入(便宜) 思考(貴)
固定流程 26% 50%
agent 77% 14%

agent 每呼叫一次模型,都要把整份 instruction、履歷、前面的工具結果再送一次(Day 16 量過),所以輸入很多
但輸入的價格是輸出的八分之一
固定流程是五個獨立的步驟,每一步都從頭想一次,一半的 tokens 是思考,而思考照輸出價算

只看 tokens 數量估成本,會估錯方向

關掉思考:固定流程幾乎沒損失,agent 掉很多

固定流程關掉思考

  • 成本從 $0.770 降到 $0.233,剩 30%
  • 延遲 P50 從 60 秒降到 32 秒
  • 引用可驗證 107/116 → 109/121,計畫通過驗證 18/24 → 19/24,品質指標幾乎沒動

固定流程每一步都有很明確的格式(schema)跟很窄的任務,模型不太需要「想」
Day 04 那兩組極簡問題的觀察,在 24 組真實的分析上也成立

agent 關掉思考就不一樣了

  • 成功從 23/24 掉到 20/24
  • 計畫通過驗證從 20/23 掉到 12/20
  • 驗證沒過、沒有修就直接交出來的,從 1 組變成 6 組

agent 每一步都要自己決定:要不要查資源、什麼時候驗證、驗證沒過要不要改
決定下一步,才是 agent 真正需要思考的地方;固定流程的下一步寫死在程式裡,不需要想

agent 真的會自己改

這是 Day 14 那個假設的後半段:驗證沒過時自己退回去改

預設思考的 agent,有 7 組第一次送 validate_learning_plan 沒過
這 7 組全部自己改完再送,第二或第三次通過

固定流程做不到這件事:它的計畫只生成一次,驗證沒過就把違規列在畫面上
這也是為什麼「計畫通過驗證」agent 是 20/23,固定流程是 18/24

但不思考的 agent,第一次沒過的 12 組裡,只有 6 組改了,另外 6 組直接交出去
還有一組來回送了 8 次驗證才通過
「自己改」這個能力,是靠思考撐起來的

agent 自己出的狀況

固定流程 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 組全部成功

Day 28 留下的:自由回覆

昨天說固定流程沒有「總評」,偏見最可能藏在 agent 的自由回覆裡
用昨天的轉職者履歷,原版、年齡 46、沒寫學歷,各跑 2 次

年齡:加了「年齡:46」的兩次回覆,沒有任何一句提到年齡、年紀或歲數

補空格:沒寫學歷那一次(另一次失敗了),回覆是

您在大部分必備條件上都表現良好,尤其「非資訊本科但成功轉職的自學經歷」是您的強項。

跟固定流程一樣:履歷裡已經沒有任何一個字寫他念什麼科系,agent 還是說「非資訊本科」是他的強項
而且這次不是一個判定欄位,是寫給使用者看的一句肯定句
兩條路都會補空格,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:可以設定固定流程的思考上限;連線斷掉重送一次,再斷回 503
  • app/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 日退役
這整個系列都是用它跑的,重現指南得先面對這件事


上一篇
Day 28 - 只換姓名,建議就變了?檢查偏誤、穩定性與未知資訊處理
下一篇
Day 30 - 從履歷到下一步:完整 Demo、重現指南、資源清理與實作回顧
系列文
把履歷修改工程化:從「聽起來有道理」到用 Gemini 打造可驗證的 AI 職涯助理 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言