ADK Sub-agent STOP 錯誤:停用 Thinking Mode

使用 Gemini 2.5 Flash 模型時,若 sub-agent 啟用思考模式(Thinking Mode),有時會導致該 sub-agent 回傳空的 content,觸發 ADK 的 STOP 錯誤,整個對話流程中斷。

錯誤現象

  • Sub-agent 被 transfer 進來後無回應
  • Log 顯示 finish_reason 為 STOP 但 content 為空
  • 問題只在 sub-agent 上出現,root agent 不受影響

根本原因

Gemini 2.5 Flash 的思考模式會在回應中產生內部推理(thinking tokens),但在 ADK 的 multi-agent 架構中,sub-agent 的思考輸出有時無法正確轉換為可回傳的 content,導致空回應。

解決方案:對 Sub-agent 停用思考模式

在建立 sub-agent 時,透過 GenerateContentConfigThinkingBudget 設為 0

1
2
3
4
5
6
7
8
9
10
11
12
13
thinkingBudget := int32(0)

subAgent, err := llmagent.New(llmagent.Config{
Name: "sub_agent",
Model: llmModel,
Description: "...",
Instruction: "...",
GenerateContentConfig: &genai.GenerateContentConfig{
ThinkingConfig: &genai.ThinkingConfig{
ThinkingBudget: &thinkingBudget, // 0 = 停用思考模式
},
},
})

⚠️ Root agent 不需要停用,只需對有問題的 sub-agent 套用即可。

關鍵重點

  • 問題只發生在 sub-agent,root agent 不受影響
  • ThinkingBudget = 0 停用思考模式,不影響回應品質
  • 此為 Gemini 2.5 Flash 特有問題,其他模型(如 Gemini 1.5)不需處理
  • 若日後 ADK 修復此問題,可移除此設定讓 sub-agent 恢復思考模式