第八章:當 AI 失控了怎麼辦?預防幻覺與無限迴圈
在上一章,我們學會了如何把 Agent 變得極度聰明且充滿個性。 但當你給這個聰明的 Agent 發放了太多外部工具 (例如 Google 搜尋、Wikipedia 查詢、資料庫爬蟲) 之後,有時候你會在終端機看到一個令人冒冷汗的恐怖畫面:
Agent 用 Google 查了一個關鍵字,覺得搜出來的結果不滿意; 於是他換個關鍵字再查一次,還是找不到完美答案; 就這樣,他查了 10 次、20 次、50 次... 他陷入了一個死胡同,卡在「查資料 -> 不滿意 -> 換字查」的無限迴圈 (Infinite Loop) 裡出不來!
這不只會讓你的系統卡死、浪費使用者大量的等待時間,更可怕的是,他每一次使用工具,都在瘋狂消耗你的 OpenAI API 費用 (這可是真金白銀啊!)。如果你把這套系統上線給 1000 個人用,一個晚上的無限迴圈可能就會刷爆你的信用卡。
🎯 本章目標
- 認識 AI 的兩種失控狀態:幻覺 (Hallucination) 與無限迴圈 (Infinite Loop)。
- 學習設定 Agent 的
max_iter(最大思考次數) 護欄。 - 學習設定 Crew 的
max_rpm(每分鐘請求限制) 來保護錢包。
🛑 第一道防線:設定 Agent 最大思考次數 (Max Iterations)
CrewAI 預設情況下,Agent 為了完美達成你設定的目標,他會極度固執地嘗試思考 25 次 (Iterations)。 對於簡單的商業任務來說,25 次實在太浪費算力了。我們必須像一個嚴格的老闆一樣,強制規定他:「想不出來就放棄,直接給我你目前手上有的破爛資料,交給下一個人去煩惱!」
🔥【Vibe Prompt 實戰咒語】
在 CrewAI 中,我發現我的 Researcher Agent 會陷入使用搜尋工具的無限迴圈。請教我如何在建立 Agent 的參數中設定 max_iter,將其嚴格限制為 5 次。並請告訴我,當他達到次數上限時,CrewAI 預設會怎麼處理?
修改你的 Agent 程式碼:
researcher = Agent(
role='初階市場研究員',
goal='收集 2026 年最新手機規格資料',
backstory='你很勤奮,但有時候會鑽牛角尖。',
tools=[search_tool],
# 🛡️ 關鍵防護罩:最多只能嘗試 5 個 Action (包含思考與使用工具)
max_iter=5
)
[底層機制解析]:
當 Agent 嘗試了 5 次搜尋依然找不到他認為完美的答案時,他會在終端機印出 Max iterations reached 的警告。接著,他會被迫停止思考,並將他這 5 次搜尋過程中「湊合著收集到的資料」,直接總結並輸出給下一個 Agent。
這能保證整個 Crew 的工作流程不會因為一個固執的員工而徹底卡死。
⏱️ 第二道防線:保護你的錢包 (Max RPM)
除了無限迴圈,還有一個常見的問題:API 速率限制 (Rate Limits)。
如果你的 Crew 裡面有 5 個 Agent 在瘋狂討論,他們可能會在 10 秒內向 OpenAI 發送了 30 次請求。對於一般等級的 OpenAI 帳號,這會立刻觸發 429 Too Many Requests 錯誤,導致程式直接崩潰 (Crash)。
我們可以在建立最外層的 Crew 時,設定一個全域的「降速限制」。
crew = Crew(
agents=[researcher, writer, reviewer],
tasks=[research_task, write_task, review_task],
process=Process.sequential,
# 🛡️ 錢包護城河:限制整個團隊每分鐘最多只能向 OpenAI 發出 15 次 API 請求
max_rpm=15,
)
設定 max_rpm (Requests Per Minute) 後,CrewAI 在底層會自動幫你計算發送頻率。當他發現快要超速時,他會聰明地讓 Agent sleep (暫停休息) 幾秒鐘,確保請求穩定且不會爆預算。
🧠 第三道防線:對付「AI 幻覺 (Hallucination)」
有時候 Agent 找不到資料,他不會陷入迴圈,而是選擇了更糟的做法:「他自己瞎掰一個資料給你」。這在業界稱為 AI 幻覺。 例如你叫他查某個不存在的藝人的年紀,他查不到,為了交差,他可能會煞有其事地告訴你對方 35 歲。
要防範幻覺,最有效的方法不是靠參數,而是回到上一章的 Prompting (提示詞)。
你必須在 Agent 的 backstory 或 Task 的 description 中加上致命的限制:
「【嚴格警告】:如果你使用工具後,在搜尋結果中找不到確切的答案,請你務必直接回答『我目前無法找到相關資訊』。絕對不允許你編造、猜測或捏造任何不存在的數據。如果我發現你造假,你將會被立刻開除。」
當 AI 讀到這段充滿壓迫感的 Prompt 時,他瞎掰的機率會大幅度降低 90% 以上。
✅ 本章小結
給予 AI 聰明的腦袋和強大的工具是好事,但身為一個架構師,我們最重要的責任是設定好「護欄 (Guardrails)」。
當你準備把這套 CrewAI 系統上線部署到正式主機 (Production) 上時,確保加上 max_iter 與 max_rpm,是你保護公司商譽與信用卡安全最重要的一個步驟!
下一章,我們將討論一種更極端的保護機制:在 AI 發送電子郵件或刪除資料庫之前,強制讓他停下來「詢問老闆 (人類)」的意見!