引言
当一个 AI Agent 从 Demo 走向 7×24 小时的生产环境后,团队最先遇到的问题往往不是“模型不够聪明”,而是“我不知道它到底在干什么”。传统的 APM(应用性能监控)只能捕获 HTTP 延迟与错误码,却无法回答几个关键问题:
- 这次回答为什么花了 12 秒?是检索慢、模型慢,还是工具调用重试了三次?
- 同一个问题昨天答案正确,今天为什么错了?是 prompt 漂移还是记忆污染?
- 这次调用烧掉了多少 token、花了多少美元?哪个子 Agent 是成本黑洞?
要回答这些,需要一套面向 Agent 的可观测性与在线评估体系。本文基于 2026 年的生产实践,梳理其核心架构、OpenTelemetry 语义约定、LLM-as-Judge 在线评估流水线以及指标体系。
一、为什么 Agent 可观测性比传统 APM 更难
Agent 的一次请求不再是简单的“服务→数据库→返回”,而是一条非确定性、多分支、可自循环的执行图:
- 非确定性:同样的输入可能走不同的推理路径,Trace 无法用固定模板匹配。
- 多层级嵌套:Orchestrator → Worker → 工具调用 → 子 LLM 调用,形成多层 Span 树。
- 长尾与自循环:Agent 可能自我反思、重试、回溯,单次请求的 Span 数从个位数到上百不等。
- 语义正确性:延迟低不代表成功,“快速给出错误答案”是最危险的失败模式。
因此,Agent 可观测性必须同时覆盖性能(Performance)与正确性(Correctness)两个维度。
二、OpenTelemetry 语义约定:Span / Trace / Event 三层模型
2026 年最主流的做法是复用 OpenTelemetry(OTel)协议,并对 Agent 场景扩展一层语义约定:
- Trace(链路):一次用户请求的完整生命周期。
- Span(跨度):一个原子操作单元,如一次 LLM 调用、一次工具执行、一次检索。
- Event(事件):Span 内的离散时点,如
token_stream_start、tool_retry、guardrail_blocked。
from opentelemetry import trace
tracer = trace.get_tracer("littlecorn.agent")
def run_agent_task(task_id: str, user_input: str):
# 根 Span:整个 Agent 任务
with tracer.start_as_current_span("agent.task") as root:
root.set_attribute("agent.task_id", task_id)
root.set_attribute("agent.input_tokens_estimate", len(user_input) // 4)
# 子 Span:规划阶段
with tracer.start_as_current_span("agent.plan") as plan:
plan.set_attribute("agent.phase", "planning")
steps = planner(user_input)
plan.set_attribute("agent.plan_steps", len(steps))
# 子 Span:工具调用(可循环)
for i, step in enumerate(steps):
with tracer.start_as_current_span(f"agent.tool.{step.name}") as span:
span.set_attribute("tool.name", step.name)
span.set_attribute("tool.attempt", i)
try:
result = execute_tool(step)
span.set_attribute("tool.status", "ok")
except Exception as exc:
span.add_event("tool_retry", {"error": str(exc)})
span.set_attribute("tool.status", "error")
raise
return result
关键实践:
- 统一属性命名:如
agent.task_id、llm.model、llm.prompt_tokens、tool.name,便于跨服务聚合。 - 记录 token 与成本而非仅耗时:在 LLM Span 上直接写入
llm.cost_usd。 - 采样策略分层:正常链路按 5% 采样,错误链路与超长链路 100% 保留。
三、LLM-as-Judge 在线评估流水线
性能指标可以靠 Trace,但“答案对不对”需要在线评估(Online Evaluation)。2026 年生产级方案通常采用双轨评估:
1. 规则与断言(Deterministic Checks)
对结构化输出、格式约束、禁止词、工具调用合法性做零成本确定性检查,作为第一道闸门。
2. LLM-as-Judge(语义评分)
用一个更强的“评委模型”对 Agent 输出进行多维度打分,维度通常包括:
- 忠实度(Faithfulness):答案是否有检索依据,有无幻觉。
- 相关性(Relevance):是否真正回答了用户问题。
- 完整性(Completeness):是否遗漏关键步骤或边界条件。
- 安全性(Safety):是否触碰护栏与合规红线。
JUDGE_PROMPT = """你是严格的评审专家。请依据【用户问题】【检索证据】【Agent 回答】
对回答的忠实度、相关性、安全性各打 1-5 分,并只用 JSON 输出:
{"faithfulness": int, "relevance": int, "safety": int, "reason": str}"""
def online_evaluate(sample: dict) -> dict:
resp = judge_llm.chat(JUDGE_PROMPT.format(**sample), temperature=0.0)
score = parse_json(resp)
# 低于阈值即进入人工复核队列
if score["faithfulness"] < 3 or score["safety"] < 4:
push_to_review_queue(sample, score)
return score
3. 采样而非全量
Judge 调用本身有成本,因此只对关键流量(高价值用户、付费场景、随机 1%~5% 抽样)做语义评估,其余依赖确定性检查。
四、生产指标体系与告警阈值
一套可落地的 Agent 指标体系可归纳为四层:
| 层级 | 代表指标 | 典型阈值 |
|---|---|---|
| 可用性 | 任务成功率、工具错误率 | 成功率 < 95% 告警 |
| 性能 | P50/P95 端到端延迟、Span 深度 | P95 > 30s 告警 |
| 成本 | 单任务 token 数、单任务美元成本 | 环比突增 50% 告警 |
| 质量 | Judge 忠实度均值、护栏拦截率 | 忠实度 < 3.5 告警 |
经验法则:质量指标必须以滑动窗口 + 环比方式监控,单点绝对值极易被流量结构变化误导。
五、与多智能体容错架构的协同
可观测性不是孤立的监控,而应与多智能体协作与容错架构形成闭环:
- Trace 驱动自愈:当某个 Worker 的
tool.error_rate连续 3 个窗口超阈值,调度器自动将其降级或隔离。 - 评估驱动演进:Judge 分数周报回流至 Prompt 与 RAG 语料优化,形成“评估→优化→再评估”飞轮。
- 成本驱动路由:结合
llm.cost_usd与质量分,动态为不同任务选择性价比最优的模型。
六、总结与展望
AI Agent 的可观测性与在线评估,本质上是把“黑盒智能”转变为“可度量、可归因、可自愈”的工程系统。通过 OpenTelemetry 语义约定、LLM-as-Judge 在线评估以及四层指标体系,团队第一次能够像运营分布式微服务一样运营 Agent。
未来,随着标准化 Agent Trace 协议与可解释评估模型的成熟,我们有望实现完全自动化的质量回归检测与根因定位,让自主智能体真正成为可信赖的生产力基础设施。