Agent 可观测性平台:Langfuse、Phoenix 与 Opik 本节摘要:第 23 节的 OTel GenAI 给了你 span 的模式(schema),但你还需要一个平台——它要摄取 span、跑评估、存提示版本、浮现回归。2026 年,三个开源平台主导了这个领域,各自强调生命周期的不同部分。Langfuse(MIT 许可,每月 600 万+ SDK 安装、1.9 万+ GitHub star)是全能型:追踪 + 带版本与 playground 的提示管理 + 评估(LLM-as-judge、用户反馈、自定义)+ 会话回放;2025 年 6 月起,原商用模块(LLM-as-judge、标注队列、提示实验、Playground)在 MIT 下开源。
本节摘要:第 23 节的 OTel GenAI 给了你 span 的模式(schema),但你还需要一个平台——它要摄取 span、跑评估、存提示版本、浮现回归。2026 年,三个开源平台主导了这个领域,各自强调生命周期的不同部分。Langfuse(MIT 许可,每月 600 万+ SDK 安装、1.9 万+ GitHub star)是全能型:追踪 + 带版本与 playground 的提示管理 + 评估(LLM-as-judge、用户反馈、自定义)+ 会话回放;2025 年 6 月起,原商用模块(LLM-as-judge、标注队列、提示实验、Playground)在 MIT 下开源。Arize Phoenix(Elastic License 2.0)做更深的 Agent 专用评估:追踪聚类、异常检测、RAG 检索相关性,带原生 OpenInference 自动仪表化,定位是配合更宽平台的「漂移/行为回归」工具(无提示版本管理)。Comet Opik(Apache 2.0)主打优化循环:经 A/B 实验的自动提示优化、护栏(PII 脱敏、话题约束)、LLM-judge 幻觉检测。据 Maxim(2026 年现场分析),89% 的组织已部署 Agent 可观测性,质量问题是头号生产障碍(32% 受访者提及)。本节吃透三者取舍,并用标准库实现一个「追踪采集 + LLM-judge 评估」流水线,产出失败率、失败原因 Top、评估分分布的仪表盘式摘要。读完本节,你应能避免「只追踪不评估、自造 LLM-judge 无锚定、提示版本不挂追踪」三种陷阱。
对应原课程:Phase 14 · Lesson 24 ·
agent-observability-platforms(原英文phases/14-agent-engineering/24-agent-observability-platforms/docs/en.md)。前置:第 23 节(OTel GenAI)。
阅读完本节,你应当能够:
OTel GenAI(第 23 节)给了你模式——span 该长什么样。但你还需要平台:谁来摄取这些 span、跑评估、存提示版本、在生产回归时告诉你「是哪个提示改动导致的」?
这正是 Langfuse、Phoenix、Opik 三个 contenders 解决的问题。它们都消费 OTel GenAI span(所以底层一致),但在生命周期侧重不同:
据 Maxim(2026 年现场分析):89% 的组织已部署 Agent 可观测性;质量问题是头号生产障碍(32% 受访者提及)。这意味着「没有可观测性的 Agent」在 2026 年已属少数——可观测性是入场券,不是加分项。
| 需求 | 选 |
|---|---|
| 全能 + 提示管理 | Langfuse |
| 深度 RAG 评估 + 漂移 | Phoenix |
| 自动优化 + 护栏 | Opik |
| 开源许可、不要 ELv2 | Langfuse(MIT)或 Opik(Apache 2.0) |
| Datadog / New Relic 集成 | 任一——都导出 OTel |
⚠️ 三种失败模式:① 无评估策略——只追踪不评估,等于昂贵的日志;追踪的价值在于回答「这次运行好不好」,这必须靠评估。② 自造 LLM-judge 无锚定——第 05 节 CRITIC 模式适用:judge 需要外部工具做事实核验,纯语言自评会幻觉。③ 提示版本不挂追踪——生产回归时,你无法二分定位到是哪个提示改动导致的。
原课程 code/main.py 实现一个标准库追踪采集器 + LLM-judge 评估器:
class TraceCollector: def __init__(self): self.sessions = defaultdict(list) def ingest(self, span): sid = span.attrs.get("session_id", "default") self.sessions[sid].append(span) def failures(self, session): return [s for s in self.sessions[session] if s.attrs.get("error") or s.attrs.get("guardrail_trip")]
RUBRIC = { "factual": "响应在事实层面正确吗?(1-5)", "scope": "响应是否停留在范围内,未越界?(1-5)", "complete": "响应是否完整回答了请求?(1-5)", } def llm_judge(response, request): # 真实版用第二个 LLM 按量表打分;这里脚本化 return {k: script_score(response, request, v) for k, v in RUBRIC.items()}
def dashboard(collector, judge): fails = sum(len(collector.failures(s)) for s in collector.sessions) total = sum(len(v) for v in collector.sessions.values()) reasons = Counter(s.attrs.get("fail_reason") for s in all_fails(collector)) scores = [judge(r.response, r.request)["factual"] for r in completed_runs(collector)] return {"failure_rate": fails/total, "top_reasons": reasons.most_common(3), "eval_dist": histogram(scores)}
运行 python3 code/main.py 会输出每 session 的评估分与失败分类,匹配 Langfuse/Phoenix/Opik 会展示的东西。
💡 设计要点:可观测性的价值不在「看见」,而在「判断好坏 + 定位回归」。这三个动作——追踪、评估、提示版本挂 trace——缺一不可。只追踪是昂贵日志;追踪 + 评估能判断好坏;再加提示版本挂 trace,才能在生产回归时二分定位。
| 平台 | 许可证 | 最强项 | 弱项 |
|---|---|---|---|
| Langfuse | MIT | 全能 + 提示管理闭环 + 会话回放 | 深度 RAG 评估弱于 Phoenix |
| Arize Phoenix | ELv2 | RAG 相关性 + 漂移 + 聚类 + 自动仪表化 | 无提示版本管理 |
| Comet Opik | Apache 2.0 | 自动优化循环 + 护栏 + 幻觉检测 | 提示管理弱于 Langfuse |
| Datadog LLM Obs | 商业 | 混合运维+ML 团队、已跑 Datadog | 绑 Datadog 生态 |
三者都消费 OTel GenAI span(第 23 节),所以底层可互换——换平台不必改 Agent 代码,只改导出目标。
原课程 outputs/skill-obs-platform-wiring.md:为给定平台把追踪 + 评估 + 提示版本接进一个已有 Agent,含许可证检查(是否接受 ELv2)、自动仪表化配置、LLM-judge 量表模板。
下一节,我们看多智能体如何通过**辩论(debate)**提升答案质量——多个 Agent 各自独立作答、互相批判、收敛到更鲁棒的结论,以及它在什么条件下真正有效、何时只是浪费 token。