把前四篇的能力全部串起来,从零搭建一个可观测、可评估、可恢复的企业级 Agent 平台
前面四篇分别讲了单 Agent 能力扩展、Supervisor 主管模式、Swarm 移交模式、子图与层级架构。这篇是系列三收官,目标是把这些能力全部串起来,搭一个能上线、能监控、能评估、能恢复的生产级 Agentic RAG 系统。
一、全景架构:五层生产级栈
┌─────────────────────────────────────────────────────┐
│ 接入层:Gateway / 限流 / 鉴权 / 流式输出 │
├─────────────────────────────────────────────────────┤
│ 编排层:LangGraph 状态机 / Supervisor / Swarm / 子图│
├─────────────────────────────────────────────────────┤
│ 能力层:RAG 管道 / 工具执行 / MCP / 记忆管理 │
├─────────────────────────────────────────────────────┤
│ 数据层:向量库 / 文档库 / Checkpointer / 长期记忆 │
├─────────────────────────────────────────────────────┤
│ 可观测层:Trace / 评估 / 成本监控 / 告警 / 审计 │
└─────────────────────────────────────────────────────┘
每一层都有"不上线就出事"的坑。下面逐层拆解。
二、持久化:Agent 崩溃后怎么续跑
生产环境里 Agent 一定会崩溃:服务器重启、网络中断、用户关掉浏览器。没有持久化,一切归零。
LangGraph 的 Checkpointer 在每一步执行后自动保存状态快照,用 thread_id 标识会话。
ini
from langgraph.checkpoint.postgres import PostgresSaver
from langgraph.graph import StateGraph, START, END
# 生产环境推荐 Postgres,支持多实例共享和 SQL 审计
DB_URL = "postgresql://user:pass@localhost:5432/langgraph"
with PostgresSaver.from_conn_string(DB_URL) as checkpointer:
checkpointer.setup() # 首次运行建表
app = workflow.compile(checkpointer=checkpointer)
# 第一次调用
config = {"configurable": {"thread_id": "session-001"}}
result = app.invoke({"messages": [{"role": "user", "content": "分析 Q3 财报"}]}, config=config)
# 如果中途崩溃,用同一个 thread_id 恢复,从断点继续
result = app.invoke(None, config=config) # 传入 None 表示从上次 checkpoint 恢复
选型指南:
| Checkpointer | 适用场景 | 生产可用 |
|---|---|---|
| InMemorySaver | 开发调试 | 否 |
| SqliteSaver | 单机轻量部署 | 部分 |
| PostgresSaver | 企业级生产 | 是 |
| RedisSaver | 高并发实时会话 | 是 |
| DynamoDBSaver | AWS 云原生 | 是(大状态自动转 S3) |
关键实践 :把 thread_id 作为全链路关联 ID,贯穿日志、Trace、客服工单。用户报障时,用 thread_id 直接回放完整状态转换。
三、人机协同:高危操作必须有人点头
全自动 Agent 在生产环境是 liability。LangGraph 的 interrupt() 原生支持 Human-in-the-Loop。
python
from langgraph.types import interrupt, Command
def publish_report(state: ReportState):
draft = generate_draft(state)
# 暂停,等待人工审批
approval = interrupt({
"question": "请审核报告草稿",
"draft": draft,
})
if approval.lower() != "approved":
return {"draft": draft, "critique": approval, "status": "needs_revision"}
return {"draft": draft, "status": "published"}
分层自主策略(tiered autonomy):
python
def route_by_confidence(state):
confidence = state.get("confidence_score", 0)
if confidence > 0.9:
return "auto_approve" # 低风险自动通过
elif confidence > 0.7:
return "notify_human" # 中风险标记待审
else:
return "require_approval" # 高风险强制审批
四、可观测性:从"黑箱"到"白盒"
2026 年的 Agent 可观测性已经从"打日志"演进为四层体系。
第 1 层:基础监控
服务可用性、延迟、错误率、资源指标。告诉你"出问题了"。
第 2 层:链路追踪(Trace)
把 Agent 的完整执行链路记录下来,支持嵌套与执行图还原。
ini
[USER REQUEST]
└─ [LLM CALL #1 - 250ms] (model=gpt-4o, tokens=1200)
└─ [TOOL CALL: search_web] - 800ms
└─ [HTTP REQUEST] - 600ms
└─ [TOOL CALL: query_db] - 200ms
└─ [LLM CALL #2 - 400ms]
└─ [FINAL RESPONSE]
必须采集的六类 Agent 特有数据:
- Prompt / 回复 / 推理链(CoT)
- 工具调用(参数 / 结果 / 耗时 / 状态)
- Token / 延迟 / 成本
- 多 Agent 交接信息
- 记忆读写操作
- 护栏与策略裁决记录
第 3 层:质量评估
离线评估 + 在线采样 + 用户反馈闭环。
第 4 层:根因分析
自动诊断"为什么失败"------是工具选错?Prompt 有问题?还是模型能力不够?
工具选型(2026 年主流组合):
| 工具 | 特点 | 适用 |
|---|---|---|
| LangSmith | LangChain 生态原生集成 | LangChain/LangGraph 团队首选 |
| Langfuse | 开源、可自部署 | 数据合规要求高的企业 |
| Arize Phoenix | 开源、Embedding 可视化 | MLOps 团队 |
| Helicone | 反向代理、零侵入 | 快速集成 |
| Braintrust | 评估闭环最强 | Notion/Stripe/Zapier 在用 |
推荐组合:核心可观测用 Langfuse/LangSmith,质量评估用 Braintrust,成本治理用 Datadog 或自建。
五、评估体系:把"感觉还行"变成数字
黄金测试集(Golden Dataset)
准备覆盖正常、边界、异常场景的测试用例,每次代码变更自动回测。
ini
# 用 RAGAS 指标族做离线评估
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_relevancy
result = evaluate(
dataset=golden_dataset,
metrics=[faithfulness, answer_relevancy, context_relevancy],
)
print(result)
# faithfulness: 0.92 ← 答案是否忠实于检索上下文
# answer_relevancy: 0.88 ← 回答是否切题
# context_relevancy: 0.85 ← 检索内容是否相关
Trace-to-Eval 闭环
2026 年的最佳实践:生产事故自动转化为回归测试用例。
线上失败 Trace → 自动提取为评估用例 → 加入 CI 回归测试 → PR 合并前自动检测质量退化
Notion 和 Zapier 已经在用这套流程------测试覆盖随着事故而增长,Agent 越跑越稳定。
评估指标体系
| 维度 | 指标 | 说明 |
|---|---|---|
| 检索质量 | Context Precision / Recall | 召回的文档是否相关、是否完整 |
| 生成质量 | Faithfulness | 答案是否忠实于上下文,有无幻觉 |
| 回答相关性 | Answer Relevancy | 是否切题、完整 |
| 事实准确性 | Groundedness | 答案是否有据可查 |
| 业务指标 | 任务完成率 / 用户满意度 | 最终业务价值 |
六、成本监控:别让 Agent 一夜烧光预算
不加护栏的生产 Agent 平均超额消耗 30% 以上。 最隐蔽的问题是死循环:工具返回异常 → Agent 重试 → 仍然不对 → 换工具 → 还是不对 → 回到第一步。一晚上能烧掉一个月的预算。
三层防护:
perl
# 1. 单步 Token 上限
llm = ChatOpenAI(model="gpt-4o", max_tokens=2000)
# 2. 工作流总预算限制
MAX_WORKFLOW_COST = 5.0 # 美元
def check_budget(state):
current_cost = sum(step["cost"] for step in state["cost_log"])
if current_cost > MAX_WORKFLOW_COST:
return {"status": "budget_exceeded", "final_report": "成本超限,终止执行。"}
# 3. 循环次数熔断
MAX_ROUNDS = 10
if state["round"] > MAX_ROUNDS:
return {"status": "loop_detected", "final_report": "检测到循环,终止执行。"}
成本归因:实现 Session 和 Step 粒度的成本追踪,实时看到"哪个用户、哪个功能、哪一步最烧钱"。
七、错误分类体系:把"Agent 又犯傻了"变成工程问题
2026 年行业已收敛出六层错误分类,方便统计、分派和回归验证。
| 层级 | 错误类型 | 典型表现 | 排查方向 |
|---|---|---|---|
| 1 | 任务理解错误 | 意图分类错、实体提取漏 | Prompt / 路由模型 |
| 2 | 规划与路由错误 | 选错工具、派错 Agent | 路由决策日志 |
| 3 | 知识与上下文错误 | 检索词不准、文档过时 | 检索管道 / 知识库版本 |
| 4 | 模型推理错误 | 上下文正确但结论错 | 模型版本 / 结构化输出 |
| 5 | 工具与环境错误 | 参数错、超时、权限不足 | 工具日志 / 下游系统 |
| 6 | 状态与控制错误 | 忘记前一步、死循环 | Checkpoint / 循环计数 |
八、完整代码骨架:把一切串起来
python
from langgraph.graph import StateGraph, START, END
from langgraph.checkpoint.postgres import PostgresSaver
from langgraph.types import interrupt, Command
from langchain_openai import ChatOpenAI
from langfuse.callback import CallbackHandler # 可观测性
# ===== 1. 可观测性 =====
langfuse_handler = CallbackHandler()
# ===== 2. 持久化 =====
DB_URL = "postgresql://user:pass@localhost:5432/langgraph"
with PostgresSaver.from_conn_string(DB_URL) as checkpointer:
checkpointer.setup()
# ===== 3. 定义状态 =====
class AgentState(TypedDict):
messages: Annotated[list, add_messages]
round: int
cost_log: list[float]
# ===== 4. 定义节点(含成本监控) =====
llm = ChatOpenAI(model="gpt-4o", temperature=0)
def research_node(state: AgentState):
if state["round"] > 10:
return {"status": "loop_detected"}
# ... 执行研究逻辑
return {"messages": [...], "round": state["round"] + 1}
def review_node(state: AgentState):
approval = interrupt({"question": "审核草稿", "draft": state["draft"]})
return {"status": "approved" if approval == "approved" else "needs_revision"}
# ===== 5. 组装图 =====
builder = StateGraph(AgentState)
builder.add_node("research", research_node)
builder.add_node("review", review_node)
builder.add_edge(START, "research")
builder.add_edge("research", "review")
builder.add_edge("review", END)
app = builder.compile(checkpointer=checkpointer)
# ===== 6. 运行(带 Trace) =====
config = {
"configurable": {"thread_id": "session-001"},
"callbacks": [langfuse_handler],
}
result = app.invoke(
{"messages": [{"role": "user", "content": "分析 AI Agent 市场趋势"}], "round": 0, "cost_log": []},
config=config,
)
九、生产级 Checklist(最终版)
架构
- 分层架构:接入 / 编排 / 能力 / 数据 / 可观测
- 子图封装团队模块,接口对齐即可独立演进
- Supervisor 管部门,Swarm 管团队内部转接
持久化
- 生产环境用 PostgresSaver / RedisSaver,不用 InMemory
thread_id贯穿全链路,作为关联 ID- 开启 Checkpointer 支持断点续跑和人机协同
可观测性
- 接入 Langfuse / LangSmith,自动采集 Trace
- 六类 Agent 特有数据全采集(Prompt / 工具 / Token / 交接 / 记忆 / 护栏)
- 决策与动作分离记录,区分"思考错"和"执行错"
评估
- 建立黄金测试集,CI/CD 自动回测
- Trace-to-Eval 闭环:生产事故自动转为回归用例
- 监控 Faithfulness / Groundedness / Answer Relevancy
成本
- 单步 Token 上限 + 工作流总预算 + 循环熔断
- Session / Step 粒度成本归因
- 实时告警,不等月底账单
安全
- 高危操作
interrupt()人工审批 - 分层自主策略:低风险自动、高风险强制审批
- 审计日志记录每次决策和动作
十、系列三收官总结
系列三五篇完整脉络:
| 篇次 | 主题 | 核心能力 |
|---|---|---|
| 第1篇 | 单 Agent 能力扩展 | 工具调用 / 记忆 / 规划 / 反思 |
| 第2篇 | Supervisor 模式 | 中央主管动态路由 + 三道保险 |
| 第3篇 | Swarm 模式 | 去中心化移交 + Handoff 工具 |
| 第4篇 | 子图与层级架构 | 模块封装 / 状态隔离 / 团队协作 |
| 第5篇 | 生产级全景 | 持久化 / 可观测 / 评估 / 成本 / 安全 |
一句话总结 :Agentic RAG 的核心不是"让模型更聪明",而是用工程手段把不可控的 LLM 变成可控、可测、可恢复的生产系统。