打造有界限的 LangGraph Agent,診斷 API 事件
打造 LangGraph 事件診斷 Agent,呼叫唯讀診斷工具、限制執行範圍、揭露失敗,並在執行高風險操作前暫停。
摘要 · TL;DR
實用的事件 Agent 應蒐集證據,而不是不受控地採取行動。本教學介紹一種 LangGraph 工作流程,包含唯讀診斷工具、明確的失敗訊號、有界限的執行方式,以及在修復前進行人工審核。
重點
- 診斷工具應維持唯讀,並回傳結構化證據,包含失敗資訊。
- 設定執行上限,並將其視為安全界線,而不是對事件原因的判斷。
- 使用會變更正式環境狀態的工具前,必須先取得人工核准。
- 使用 interrupts 時,請保存圖狀態,讓暫停的執行可以恢復。
- 應回報工具失敗與不完整證據,而非把猜測當成調查結果。
文章目錄 (8)
決策:自動診斷,審慎修復
API 事件 Agent 可以透過蒐集記錄、健康檢查和近期部署中繼資料,節省調查時間。但它不應在未告知的情況下重新啟動服務、回復版本或變更設定。較安全的設計會將唯讀診斷與會產生副作用的修復操作分開、限制 Agent 的工作範圍,並讓操作人員看見失敗或缺漏的證據。
這是實務設計範例,不代表已測試的整合,也不是可直接用於正式環境的服務。以下工具本體僅供說明;請改用你自己的觀測系統用戶端,並設定驗證與最低必要權限。
先備條件與工作流程
你需要 Python、已在應用程式中設定且相容於 LangGraph 的聊天模型,以及現有診斷系統的用戶端函式。本範例假設這些用戶端函式會回傳資料或引發例外,不假設特定模型供應商、端點或工具整合方式。
實用的事件處理流程應採用受限迴圈:
- 為受影響的服務與時間範圍,蒐集少量且預先定義的訊號。
- 將每項結果標示為成功、失敗或無法取得。
- 請模型摘要證據,並指出仍有哪些未知事項。
- 在達到圖步驟上限後停止;任何會變更狀態的操作,都應先交由人工審核。
狀態欄位的用途在於維持營運上的清晰度:記錄查詢失敗,不應看起來像是成功搜尋但沒有符合條件的事件。
明確標示失敗狀態的診斷工具
工具契約應保持精簡。要求提供服務名稱與有限的時間範圍;若固定查詢已足夠,就不要讓模型任意查詢。回傳結構化結果,讓下游節點和事件報告能區分「沒有證據」與「工具失敗」。
from typing import Literal, TypedDict
from langchain.tools import tool
class Signal(TypedDict):
status: Literal["ok", "error", "unavailable"]
source: str
data: str
error: str | None
def query_logs(service: str, minutes: int) -> Signal:
if not 1 <= minutes <= 60:
return {
"status": "error", "source": "logs", "data": "",
"error": "minutes must be between 1 and 60",
}
try:
# Replace with a read-only, scoped observability client call.
rows = logs_client.search(service=service, minutes=minutes)
return {
"status": "ok", "source": "logs",
"data": str(rows), "error": None,
}
except TimeoutError as exc:
return {
"status": "unavailable", "source": "logs", "data": "",
"error": f"timeout: {exc}",
}
@tool
def inspect_api(service: str, minutes: int = 15) -> dict:
"""Collect scoped, read-only API incident signals."""
return query_logs(service, minutes)
如需健康檢查或部署中繼資料,請新增獨立工具並沿用相同的結果格式。不要攔截所有例外後只回傳空字串:應保留足夠的錯誤脈絡,以便診斷整合問題,同時避免在記錄或模型脈絡中暴露密鑰或敏感負載。
限制執行範圍,揭露未完成的執行
如果使用 LangGraph 的 create_agent 建立 Agent,請在呼叫時設定圖的遞迴上限。此上限限制圖步驟數量,但不保證能得到有用的答案,也不能取代工具層級的逾時設定。請在外層應用程式處理達到上限的情況,並清楚標示執行狀態為「未完成」,而不是將其視為已完成的診斷。
from langchain.agents import create_agent
agent = create_agent(
model=your_configured_chat_model,
tools=[inspect_api],
system_prompt=(
"Diagnose API incidents using available evidence. "
"Report each source as ok, error, or unavailable. "
"Do not claim a cause without supporting evidence. "
"Do not perform remediation."
),
)
try:
result = agent.invoke(
{"messages": [{"role": "user", "content":
"Investigate elevated errors for payments-api over the last 15 minutes."}]},
config={"recursion_limit": 12},
)
except Exception as exc:
# Map known graph-limit and provider/tool failures to your app's
# incident-run status; do not expose credentials or raw secrets.
result = {"status": "incomplete", "reason": type(exc).__name__}
此上限值僅為範例,並非通用建議。請依允許使用的工具數量與模型回合數選擇適當值,並在工具層和應用程式層加入逾時與請求大小限制。記錄執行 ID、選定的服務與時間範圍、嘗試過的工具、工具狀態及終止原因。操作人員便能分辨「沒有發現錯誤」與「記錄後端逾時」。
在修復前加入人工審核
如果之後新增會改變正式環境狀態的工具,請使用 LangChain 的人在迴路中介軟體與 checkpointer,為這些工具加上審核關卡。文件所述的中介軟體可以暫停符合條件的工具呼叫,等待核准、編輯、拒絕或直接回覆。其狀態會先保存,待決策後即可恢復執行;正式環境應使用持久化 checkpointer,而非以下原型示範中的記憶體選項。請參閱 LangChain 人在迴路文件。
實務上的政策可以是:唯讀診斷不需中斷,而重新啟動、回復版本或變更設定的工具則必須取得核准。拒絕提議的操作時,應選擇拒絕;文件提醒,「respond」是代表工具採取行動,不是拒絕會產生副作用的呼叫。請在自己的工具實作中驗證編輯後的引數:文件指出,中介軟體不會依照畫面顯示的 schema 驗證編輯內容。
設計時應考量的失敗情況
- 結果為空: 回報「沒有收到符合條件的事件」,而不是「服務正常」。
- 工具逾時或授權失敗: 保留失敗來源與錯誤類別;不要無限期地悄悄重試。
- 重複呼叫工具: 限制圖的執行範圍並約束工具輸入。若加入重試,應設定明確且次數偏少的重試政策,並呈現嘗試次數。
- 中斷後無法恢復: 確認已設定 checkpointer,並在恢復時使用相同的 thread identifier。來源文件指出,人工審核需要 checkpointing。
- 容易誤導的最終摘要: 要求報告中的主張引用已蒐集的訊號,並列出無法取得的來源與尚未解決的問題。
事件執行檢查清單
部署前,請確認診斷工具為唯讀且範圍受限;時間範圍與查詢量受到限制;工具錯誤仍可被觀察;圖的執行設有上限;每項會產生副作用的操作都會暫停並等待人工決策。請測試逾時、空結果、拒絕操作和中斷後恢復等流程。優質的 Agent 不只是提出看似合理的根本原因,也會顯示實際取得了哪些證據,以及診斷範圍止於何處。
資料來源
- LangChain:人在迴路中介軟體 — 中斷後的決策、依條件審核工具、checkpointing,以及恢復暫停的執行。
常見問題
如何限制 LangGraph Agent 的執行範圍?
在呼叫設定中設定遞迴上限,並在外層應用程式處理達到上限或執行階段失敗的情況。同時也要設定工具層級的逾時與輸入範圍;圖的上限不保證能完成診斷。
事件 Agent 應如何回報診斷工具失敗?
回傳結構化狀態,例如 error 或 unavailable,並附上安全的錯誤類別與來源名稱。這必須與查詢成功但未找到符合條件事件的情況區分開來。
如何要求 LangGraph 工具在變更正式環境前取得核准?
使用人在迴路中介軟體中斷指定的工具呼叫,並設定 checkpointer,讓圖可以暫停與恢復。唯讀工具可直接執行;會產生副作用的工具則必須先經審核。
人在迴路中介軟體會驗證編輯後的工具引數嗎?
所提供的文件指出,中介軟體不會依照畫面顯示的回應 schema 檢查編輯內容。執行操作前,請在工具或應用程式中驗證引數。
相關文章
指南
使用工具呼叫、人工作業核准與執行限制,建立 LangGraph 客戶支援代理
以實務導向的 LangGraph 模式建構客戶支援分流:路由請求、呼叫查詢工具、暫停退款流程等待人工核准,並限制圖形執行範圍。
指南
建立具備人工核准與測試驗證的 n8n 程式碼變更工作流程
設計 n8n 工作流程,提出程式碼儲存庫變更、請人工核准寫入,並以測試驗證產生的提交。
指南
LangGraph Agentic RAG:工具呼叫、來源歸屬與有界執行
建立 LangGraph 文件問答代理,讓它決定何時擷取資料、評估上下文、重試效果不佳的搜尋,並在不進行無限執行的情況下,返回附有來源歸屬的答案。
指南
建立 n8n 客服分流工作流程,加入人工核准
了解如何建立 n8n 客服分流工作流程:使用相容於 OpenAI 的 API 草擬建議,再由人工審核決定是否回覆或升級處理。