CrewAI 除錯指南:新手最常爆的 8 個雷與最快排查路徑

7 min read

真相時間:Agent 開發不是最難的部分,除錯才是

你會花不少時間盯著輸出想「為什麼這次格式又不一樣」、「明明有工具但 Agent 沒用它」、「第二個 Task 怎麼什麼都不知道」。這篇幫你把最常踩的雷整理成一張地圖,讓你少繞一些彎路。

8 個最常見問題快速對照

現象 常見原因 快速解法
輸出格式每次不同 expected_output 太模糊 加入明確格式規範,或改用 output_pydantic
後續 Task 拿不到前面資料 context 在 tasks.yaml 或 Task 物件明確加入 context
Tool 完全沒被呼叫 Task 描述沒提到工具使用條件 在 description 裡加「Use the X tool first」
成本暴增 Task 太長、重複呼叫模型 任務拆小、縮短 prompt、加快取機制
回答幻覺嚴重 缺來源約束 要求 expected_output 包含 source URL
流程卡在某個步驟 router 回傳值沒有對應的 listener 檢查所有可能的 router 回傳值,確認都有 listener
啟動就報錯 環境變數未設定 檢查 .env 裡的 API Key,確認 crewai install 跑完
表現忽好忽壞 測試輸入每次不固定 建立固定測試輸入與驗收規則,用同一份輸入做比較

除錯要按順序,別一出問題就怪模型

很多人碰到問題,第一反應是「是不是模型不夠聰明」或者「要不要換 GPT-4o」——這個直覺大多數時候是錯的。

按這個順序查,命中率最高:

第一步:查配置
先看 agents.yamltasks.yaml。角色設定是不是有意義?Task 描述是不是清楚?expected_output 有沒有格式要求?context 有沒有串好?80% 的問題在這裡。

第二步:查輸入
inputs 的資料是不是穩定的?如果你用動態資料做測試,你根本沒辦法判斷輸出是否變好或變差。先用固定輸入,確認行為可重現。

第三步:查工具
Tool 有沒有被呼叫(看 verbose 輸出)?參數對不對?回傳格式有沒有模型能解析的結構?

第四步:才考慮模型
確認前三步都沒問題了,再考慮是否要調模型的溫度、上下文長度,或換一個模型試試。

順序不要反過來。大部分的「模型問題」,查下去都是 YAML 少一行或者 Task 描述太模糊。

一個被低估的除錯技巧

每個 Task 加一個「輸出自我檢查」的要求,像這樣:

research_task:
  expected_output: >
    A markdown bullet list with 8-10 items.
    Each item MUST include: title, summary (2 sentences), and source URL.
    At the end, add a one-line self-check: "✅ All items have title, summary, and source."

讓模型在完成任務之後自己確認輸出是否符合格式,是一種低成本的「流程內單元測試」。不是 100% 可靠,但可以抓到很多格式不符的情況。

另一個有效的做法是加「負面要求」——明確告訴模型什麼不要做:

description: >
  Research {topic}. Use the search tool to find current information.
  Do NOT include information published before 2025.
  Do NOT make up sources — if you don't have a URL, write "source not found".

這兩種寫法比「加長 expected_output 到 200 字」效果好很多。

verbose 模式:開著,永遠開著

開發期間 verbose=True 一定要開——它會讓你在終端看到每個 Agent 的思考過程、工具呼叫記錄、和每個 Task 的輸出。沒有這個,你只能看到最終結果,完全不知道哪一步出了問題。

生產環境可以關掉,開發和測試期間這個開關值那個 API 費的。

常見問題

Q:expected_output 寫很詳細了,輸出還是會飄,怎麼辦?
試試 output_pydantic——把格式從「文字描述」變成「強制 schema 驗證」。如果連 Pydantic 也過不了,才要考慮是不是任務本身太複雜需要拆分。

Q:Tool 有被呼叫,但回傳的資料 Agent 沒有用到,怎麼辦?
可能是 Tool 回傳的格式太難解析。把 Tool 的回傳改成清楚的結構化字串,並在 Task description 裡說明「根據工具回傳的 X 欄位來...」。

Q:流程有時候會突然超出 context window,怎麼辦?
把任務拆小,每個 Task 只做一件事,不要讓單一任務的輸出太長。有些情況也可以加 max_iter(最大迭代次數)來限制模型的回答長度。

Q:同一個流程,今天跑和明天跑結果差很多,怎麼辦?
兩個方向:一是固定測試輸入,確認是輸入造成的差異還是模型本身的隨機性;二是調低模型溫度(temperature),降低輸出的隨機程度。

下一步

雷大概都知道在哪了。最後一篇把前面全部串起來,看看一個可以真正上線的 CrewAI 系統長什麼樣:
👉 上線最佳實踐