
隨著人工智慧變得越來越智慧,智慧體現在可以處理複雜的任務。人們在整個工作流程中做出決策,效率很高,出發點也很好,但永遠無法做到完美無缺。很容易出現偏離任務、過度解釋、解釋不足、誤解提示,或者給後續工作帶來麻煩的情況。有時,結果會偏離主題、不完整,甚至存在安全隱患。隨著這些智慧體開始承擔實際工作,我們需要一種機制來檢查它們的輸出,然後再允許它們繼續執行。這正是 CrewAI 開發任務護欄功能的原因之一。護欄為每個任務設定了相同的預期:長度、語氣、質量、格式和準確性都由規則明確規定。如果智慧體偏離了護欄,系統會溫和地糾正方向,並強制智慧體重試。這有助於穩定工作流程。護欄將幫助智慧體從始至終保持正軌、一致性和可靠性。
什麼是任務護欄?
在 CrewAI 中,任務護欄是應用於特定任務的驗證檢查。任務防護機制會在 AI 代理完成任務相關輸出後立即執行。AI 生成輸出後,如果符合您的規則,我們將繼續執行工作流程中的下一步操作。否則,我們將停止執行或根據您的配置重試。
您可以將防護機制想象成一個過濾器。代理完成其工作後,在工作對其他任務產生影響之前,防護機制會檢查代理的工作。它是否符合預期格式?是否包含所需的關鍵字?是否足夠長?是否相關?是否滿足安全標準?只有當工作符合這些引數後,工作流程才會繼續。
CrewAI 提供兩種型別的防護機制來幫助您確保工作流程的合規性:
1. 基於函式的防護機制
這是最常用的方法。您只需用 Python 編寫一個函式來檢查代理的輸出即可。該函式將返回:
- 如果輸出有效,則返回 True
- 如果輸出無效,則返回 False 並提供可選反饋
基於函式的防護措施最適合基於規則的場景,例如:
- 字數統計
- 必需短語
- JSON 格式
- 格式驗證
- 關鍵詞檢查
例如,您可以這樣寫:“Output must include the phrases electric kettle and be at least 150 words long.”
2. 基於LLM的防護措施
這些防護措施利用 LLM 來評估代理的輸出是否滿足一些不太嚴格的標準,例如:
- 語氣
- 風格
- 創意
- 主觀質量
- 專業性
無需編寫程式碼,只需提供一段文字描述,例如:“確保文字友好,不使用俚語,並且適合一般受眾。” 然後,模型將檢查輸出並判斷其是否合格。
這兩種型別都很強大。您甚至可以將它們結合起來,實現分層驗證。
為什麼要使用任務護欄?
AI 工作流程中存在護欄的原因有很多,而且都很重要。以下是它們的典型用途:
1. 質量控制
AI 生成的輸出質量可能參差不齊,因為一個提示可能產生非常好的響應,而下一個提示則可能完全偏離目標。護欄有助於控制輸出質量,因為它們設定了最低輸出標準。如果輸出太短、與請求無關或組織混亂,護欄會確保採取相應措施。
2. 安全性和合規性
某些工作流程需要嚴格的準確性。這條經驗法則在醫療保健、金融、法律或企業用例中尤為重要。護欄用於防止出現幻覺和違反準則的不安全合規輸出。CrewAI 內建了“幻覺護欄”,它會尋找基於事實的內容來增強安全性。
3. 可靠性和可預測性
在多步驟工作流中,一個錯誤的輸出可能會導致下游所有步驟崩潰。例如,一個查詢的輸出格式錯誤可能會導致另一個代理的查詢崩潰。防護機制可以防止無效輸出,從而建立可靠且可預測的流程。
4. 自動重試邏輯
如果您不想手動修復輸出,您可以讓 CrewAI 自動重試。如果防護機制失效,CrewAI 最多可以重試兩次輸出資訊。此功能可以建立彈性工作流,並減少工作流執行期間所需的人工干預。
任務防護機制如何工作?

CrewAI 的任務防護機制提供了一個簡單而強大的流程。代理執行任務並生成輸出,然後防護機制被啟用並接收輸出。防護機制會根據您配置的規則檢查輸出結果。如果輸出結果透過了防護機制的檢查,則工作流繼續執行。如果輸出結果未能透過防護機制的檢查,防護機制會嘗試觸發重試或生成錯誤。您可以透過定義最大重試次數、重試間隔和自定義訊息來定製重試機制。CrewAI 會記錄每次嘗試,並提供工作流每個步驟的詳細操作資訊。這種迴圈有助於確保系統保持穩定,提高準確性,並使工作流整體更加可靠。
主要特性和最佳實踐
函式式防護機制與LLM防護機制
對於顯式規則,請使用基於函式的防護機制。對於可能存在主觀判斷的連線點,請使用基於 LLM 的防護機制。
防護機制鏈
您可以執行多個防護機制。
- 長度檢查
- 關鍵詞檢查
- 語氣檢查
- 格式檢查
如果所有檢查都透過,工作流程將繼續。
幻覺防護欄
為了實現更基於事實的工作流程,請使用 CrewAI 內建的幻覺防護欄。它會將輸出與上下文參考進行比較,並檢測是否標記了不支援的宣告。
重試策略
謹慎設定重試次數限制。重試次數越少,工作流程越嚴格;重試次數越多,則更具創造性。
日誌記錄和可觀測性
CrewAI 顯示:
- 失敗內容
- 失敗原因
- 成功嘗試
這有助於您調整防護欄。
實踐示例:驗證產品描述
在本示例中,我們將演示防護欄如何在接受產品描述之前對其進行檢查。要求很明確:產品描述必須至少包含 150 個單詞,包含“electric kettle”一詞,並符合規定的格式。
步驟 1:設定和匯入
在此步驟中,我們將安裝 CrewAI、匯入庫並載入 API 金鑰。這樣可以正確設定所有變數,以便代理能夠執行並非同步連線到所需的工具。
%pip install -U -q crewai crewai-tools
from crewai import Agent, Task, LLM, Crew, TaskOutput
from crewai_tools import SerperDevTool
from datetime import date
from typing import Tuple, Any
import os, getpass, warnings
warnings.filterwarnings("ignore")
SERPER_API_KEY = getpass.getpass('Enter your SERPER_API_KEY: ')
OPENAI_API_KEY = getpass.getpass('Enter your OPENAI_API_KEY: ')
if SERPER_API_KEY and OPENAI_API_KEY:
os.environ['SERPER_API_KEY'] = SERPER_API_KEY
os.environ['OPENAI_API_KEY'] = OPENAI_API_KEY
print("API keys set successfully!")
步驟 2:定義驗證函式
接下來,您需要定義一個函式來驗證代理的輸出。該函式可以檢查輸出是否包含“electric kettle”,並統計輸出單詞的總數。如果未找到預期文字或輸出過短,則返回失敗響應。如果描述輸出正確,則返回成功響應。
def validate_product_description(result: TaskOutput) -> Tuple[bool, Any]:
text = result.raw.lower().strip()
word_count = len(text.split())
if "electric kettle" not in text:
return (False, "Missing required phrase: 'electric kettle'")
if word_count < 150:
return (False, f"Description too short ({word_count} words). Must be at least 150.")
return (True, result.raw.strip())
步驟 3:定義代理和任務
最後,您需要定義之前建立的用於編寫描述的代理。為其指定角色和目標。接下來,定義任務並新增安全機制。如果代理輸出失敗,任務將最多重試 3 次。
llm = LLM(model="gpt-4o-mini", api_key=OPENAI_API_KEY)
product_writer = Agent(
role="Product Copywriter",
goal="Write high-quality product descriptions",
backstory="An expert marketer skilled in persuasive descriptions.",
tools=[SerperDevTool()],
llm=llm,
verbose=True
)
product_task = Task(
description="Write a detailed product description for {product_name}.",
expected_output="A 150+ word description mentioning the product name.",
agent=product_writer,
markdown=True,
guardrail=validate_product_description,
max_retries=3
)
crew = Crew(
agents=[product_writer],
tasks=[product_task],
verbose=True
)
步驟 4:執行工作流
您啟動任務。代理程式編寫產品描述。防護機制對其進行評估。如果評估失敗,代理程式將建立新的描述。此過程持續進行,直到輸出透過評估或達到最大迭代次數為止。
results = crew.kickoff(inputs={"product_name": "electric kettle"})
print("\n Final Summary:\n", results)

步驟 5:顯示輸出
最後,您將顯示透過了所有檢查的正確輸出。這是符合所有要求的已驗證產品描述。
from IPython.display import display, Markdown display(Markdown(results.raw))

一些實用建議
- 務必明確您的
expected_output。 - 不要設定過於嚴格的防護規則。
- 記錄失敗原因。
- 儘早使用防護規則,避免對下游造成損害。
- 測試邊界情況。
防護規則應該保護您的工作流程,而不是阻礙它。
小結
任務防護規則是 CrewAI 中最重要的功能之一。防護規則確保多代理工作流程的安全性、準確性和一致性。防護規則在輸出流向下游之前對其進行驗證;因此,它們是構建強大且可靠的 AI 系統的基礎功能。無論是構建自動寫入器、分析管道還是決策框架,防護規則都能建立一個質量層,幫助保持所有環節的一致性。最終,防護規則確保自動化流程從始至終更加流暢、安全和可預測。
常見問題解答
問 1:為什麼要在 CrewAI 中使用任務防護規則?
答:它們可以確保輸出的一致性、安全性和可用性,避免一次錯誤的響應破壞整個工作流程。
問 2:基於功能的防護規則和基於 LLM 的防護規則有什麼區別?
答:基於功能的防護規則檢查長度或關鍵詞等嚴格規則,而基於 LLM 的防護規則則處理語氣、風格和主觀質量。
問 3:當防護規則失效時,重試機制如何運作?
答:CrewAI 可以自動重新生成輸出,直到達到您設定的重試次數上限,直到滿足規則或重試次數用盡為止。

評論留言