第八章:當 AI 失控了怎麼辦?預防幻覺與無限迴圈

在上一章,我們學會了如何把 Agent 變得極度聰明且充滿個性。 但當你給這個聰明的 Agent 發放了太多外部工具 (例如 Google 搜尋、Wikipedia 查詢、資料庫爬蟲) 之後,有時候你會在終端機看到一個令人冒冷汗的恐怖畫面:

Agent 用 Google 查了一個關鍵字,覺得搜出來的結果不滿意; 於是他換個關鍵字再查一次,還是找不到完美答案; 就這樣,他查了 10 次、20 次、50 次... 他陷入了一個死胡同,卡在「查資料 -> 不滿意 -> 換字查」的無限迴圈 (Infinite Loop) 裡出不來!

這不只會讓你的系統卡死、浪費使用者大量的等待時間,更可怕的是,他每一次使用工具,都在瘋狂消耗你的 OpenAI API 費用 (這可是真金白銀啊!)。如果你把這套系統上線給 1000 個人用,一個晚上的無限迴圈可能就會刷爆你的信用卡。

🎯 本章目標

  1. 認識 AI 的兩種失控狀態:幻覺 (Hallucination) 與無限迴圈 (Infinite Loop)。
  2. 學習設定 Agent 的 max_iter (最大思考次數) 護欄。
  3. 學習設定 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_itermax_rpm,是你保護公司商譽與信用卡安全最重要的一個步驟!

下一章,我們將討論一種更極端的保護機制:在 AI 發送電子郵件或刪除資料庫之前,強制讓他停下來「詢問老闆 (人類)」的意見!

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!