Agent Eval 调研报告
调研日期:2026-03-25 目标:系统梳理 Agent 评测方法论与工具生态,为自建评测平台提供设计参考
目录
第一部分:Agent Eval 方法论综述
1.1 为什么需要 Agent Eval
传统 LLM eval 与 Agent eval 存在本质区别:
| 维度 | 传统 LLM Eval | Agent Eval |
|---|---|---|
| 交互模式 | 单轮 prompt → response | 多轮、多步骤、状态持续演进 |
| 评估对象 | 单次输出质量 | 完整任务执行轨迹 + 最终结果 |
| 确定性 | 相对确定(同一 prompt 输出相似) | 高度不确定(同一任务多次执行路径可能完全不同) |
| 失败模式 | 输出错误/幻觉 | 错误级联传播、工具调用失败、规划失误、死循环 |
| 环境依赖 | 无(纯文本输入输出) | 强依赖外部环境(文件系统、API、数据库) |
| 评估维度 | 准确性、相关性、流畅度 | 任务完成度 + 效率 + 安全性 + 工具使用正确性 + 规划质量 |
| Grading 难度 | 相对简单(字符串匹配、LLM-as-Judge) | 需验证环境状态变更 + 多维度评分 |
Agent 的三大评测挑战:
- 非确定性 — 同一任务的成功率在多次执行间波动,需要概率性指标(pass@k, pass^k)而非单次判定
- 状态传播与错误级联 — 一个步骤的失误会在后续步骤中放大,评测需要追踪完整执行链
- 创造性解法 — Agent 可能找到超出预设 grading 范围的合理解法,过度刚性的 grader 会误判
1.2 Hamel 方法论精要
来源:Hamel Husain & Shreya Shankar — LLM Evals: Everything You Need to Know (2026-01)
核心哲学
Error Analysis 驱动一切 — 不是先定义指标再评测,而是先观察真实失败再构建评测。你的独特失败模式、领域约束和用户需求,无法被通用工具解决。
四步流程
┌─────────────────────────────────────────────────────────┐
│ Step 1: 创建数据集 │
│ 收集真实用户交互 traces(或合成数据) │
├─────────────────────────────────────────────────────────┤
│ Step 2: Open Coding(开放编码) │
│ 领域专家逐条审阅 traces,自由记录观察到的问题 │
│ 聚焦每条 trace 的「第一个上游失败」 │
│ ⚠ 此步骤绝不可外包或自动化 │
├─────────────────────────────────────────────────────────┤
│ Step 3: Axial Coding(轴向编码) │
│ 将开放笔记分类为失败分类体系 │
│ 统计每个类别的失败数量 │
│ LLM 可辅助分组,但人工必须验证 │
├─────────────────────────────────────────────────────────┤
│ Step 4: 迭代至饱和 │
│ 持续直到新 traces 不再揭示新的失败模式 │
│ 目标:审阅至少 100 条 traces │
└─────────────────────────────────────────────────────────┘
关键主张
二元评分(Binary Pass/Fail) — 强烈反对 Likert 量表(1-5 分),理由:
- 相邻分数主观性过强(3 分 vs 4 分因人而异)
- 检测统计显著性需要更大样本量
- 标注者倾向选中间值
- 二元标签迫使更清晰的决策
LLM-as-Judge 的正确用法:
- 需要 100+ 人工标注的样本来校准
- 必须测量 True Positive Rate 和 True Negative Rate
- 每周维护更新
- 应该输出 pass/fail 判定 + 理由,而非数字评分
- 若简单的代码检查(regex、格式验证)能解决,就不要用 LLM-as-Judge
反对 Eval-Driven Development — 认为不应在构建功能前就写 evaluator(与 Anthropic 相反),因为 LLM 的失败表面无限大,无法预判哪里会出问题。
Agent 评测的两阶段模型:
- Phase 1: 黑盒 — 端到端任务成功率,Agent 作为整体评估
- Phase 2: 白盒 — 步骤级诊断(工具选择、参数提取、错误恢复、上下文保持、效率)
最低可行实践
每次变更时花 30 分钟手动审阅 20-50 条输出。指定一位领域专家作为 "benevolent dictator"(质量仲裁者)。用 Notebook 做 trace 审阅。这比购买任何平台都更有效。
1.3 Anthropic 方法论精要
来源:Anthropic Engineering — Demystifying Evals for AI Agents (2026)
核心哲学
Eval-Driven Development (EDD) — 类比 TDD:先写 eval 定义期望能力,再迭代 Agent 直到通过。没有 eval 的团队 "陷入被动循环 — 只在生产中发现问题,修一个导致另一个"。
关键指标:pass@k 与 pass^k
| 指标 | 定义 | 适用场景 |
|---|---|---|
| pass@k | k 次尝试中至少一次成功的概率 | 允许人工重试的场景(如开发者重跑 coding agent) |
| pass^k | k 次尝试全部成功的概率 | 要求一致性的场景(如无人监督的自动化 agent) |
示例:若单次成功率 75%,k=3 时 pass@3 ≈ 98.4%,pass^3 ≈ 42.2%。两者在 k=1 时相同,k 增大后急剧分化。
八步路线图
| 步骤 | 要点 |
|---|---|
| Step 0: 尽早开始 | 20-50 个简单任务即可启动,来自真实失败 |
| Step 1: 从手动测试开始 | 将已有的手动检查和用户报告的 bug 转化为自动测试 |
| Step 2: 无歧义任务 + 参考解 | 标准:两个领域专家会独立得出相同的 pass/fail 判定 |
| Step 3: 构建平衡的测试集 | 同时测试正向(应触发行为)和负向(不应触发行为)用例 |
| Step 4: 构建稳健的 Eval Harness | 每次 trial 完全隔离,从干净状态启动,消除共享状态 |
| Step 5: 精心设计 Grader | 优先确定性/代码 grader,必要时用 LLM grader,评判结果而非路径 |
| Step 6: 检查 Transcripts | 阅读 agent 实际输出,验证 grader 是否在误判合理解法 |
| Step 7: 监控能力饱和 | 当 agent 通过所有可解任务时,eval 不再提供改进信号 |
| Step 8: 长期维护 | Eval 需要专人负责持续维护,是活的产物 |
三类 Grader
| 类型 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 代码 Grader | 快、便宜、客观、可复现 | 对合理变体脆弱 | 结构化输出、测试通过/失败 |
| LLM Grader | 灵活、可规模化、捕获细微差别 | 非确定性、昂贵、需人工校准 | 开放式任务、主观评估 |
| 人工 Grader | 金标准质量 | 昂贵、缓慢 | 校准 LLM grader、高风险决策 |
CORE-Bench 警示
Opus 4.5 初始得分 42%,研究者发现刚性 grader 在数字精度上误判(期望完整字符串 "96.124991..." 但 agent 输出 "96.12"),修复 grader 后得分跳升至 95%。教训:永远检查 transcripts 验证 grader 行为。
瑞士奶酪模型
没有单一评估层能捕获所有问题。组合使用:自动化 eval + 生产监控 + A/B 测试 + 用户反馈 + transcript 审查 + 人工研究。
1.4 Anthropic Harness Design 实践 — 长时运行 Agent 的评测架构
来源:Prithvi Rajasekaran (Anthropic Labs) — Harness Design for Long-Running Application Development (2026-03-24)
核心问题:朴素实现为何失败
长时运行的 Agentic Coding 存在两个持续性失败模式:
1. 上下文窗口退化(Context Window Degradation)
模型在上下文填满时丧失连贯性,并表现出"上下文焦虑"(context anxiety)— 在接近感知极限时过早结束工作。虽然压缩(compaction,即对早期对话做摘要)能保持连续性,但无法提供 agent 所需的"干净白板"。上下文重置(context reset)是必要的,但增加了编排复杂度和 token 开销。
2. 自评偏差(Self-Evaluation Bias)
"Agents tend to respond by confidently praising the work—even when, to a human observer, the quality is obviously mediocre."
Agent 倾向于自信地赞美自己的工作 — 即使在人类观察者看来质量明显平庸。将评测与生成分离使评估更可靠。调教一个独立的 evaluator 使其保持怀疑态度,比让 generator 自我批判更可行。
三 Agent 架构:Planner → Generator → Evaluator
┌─────────────────────────────────────────────────────────┐
│ Planner Agent(规划者) │
│ 将简短 prompt(1-4 句话)扩展为完整产品规格 │
│ 聚焦范围与高层技术设计,非逐行实现细节 │
│ 主动识别 AI 功能集成机会 │
├─────────────────────────────────────────────────────────┤
│ Generator Agent(生成者) │
│ 增量实现功能(React + Vite + FastAPI + PostgreSQL) │
│ 自评后交付给 QA,维护版本控制 │
├─────────────────────────────────────────────────────────┤
│ Evaluator Agent(评测者) │
│ 使用 Playwright MCP 像用户一样测试应用 │
│ 主动导航、截图、检查 UI / API / 数据库状态 │
│ 与 Generator 协商 sprint 合约,定义成功标准 │
└─────────────────────────────────────────────────────────┘
Agent 间通过文件化交接(file-based handoffs)通信 — 一个 agent 写入结构化文件,下一个 agent 读取并响应。这种方式在跨会话时保持上下文保真度,无需直接 API 链。
Sprint 合约机制
Generator 在实现前提出可交付物和成功标准,Evaluator 审核提案确保正确性后才开始编码。每个合约包含 27+ 个具体验收标准(如:"矩形填充工具允许点击拖拽,用选中的 tile 填充矩形区域")。
硬阈值判定: 任何单个标准的失败导致整个 sprint 失败,触发详细反馈驱动 Generator 迭代。
前端设计评测:让主观质量可评分
受 GAN(生成对抗网络)启发,建立了 generator-evaluator 循环,四个具体评分维度:
| 维度 | 定义 |
|---|---|
| Design Quality(设计质量) | 色彩、排版、布局、图像的连贯性,创造独特情绪 |
| Originality(原创性) | 自定义设计决策 vs 模板/素材库模式(惩罚"AI 糟粕") |
| Craft(工艺) | 层次、间距、色彩和谐、对比度等技术执行 |
| Functionality(功能性) | 可用性与任务完成度,独立于美学评判 |
校准方法: 使用 few-shot 示例 + 详细评分分解来校准 evaluator,确保判断对齐并减少跨迭代的评分漂移。
迭代行为: 5-15 轮迭代中评分持续改善后趋于平台期。Generator 在每轮评测后做策略性决策 — 趋势良好则继续优化,表现不佳则彻底转向。部分设计在第 10 轮迭代时出现意外的创造性飞跃。
实验结果
| 场景 | 模型 | 时长 | 成本 | 结果 |
|---|---|---|---|---|
| Retro Game Maker(单次运行) | Opus 4.5 | 20 分钟 | $9 | 功能可用但游戏逻辑破损 |
| Retro Game Maker(完整 Harness) | Opus 4.5 | 6 小时 | $200 | 精致、功能丰富、物理引擎和 AI 集成正常 |
| Digital Audio Workstation | Opus 4.6 | 3 小时 50 分 | $124.70 | 新模型所需脚手架更少,但 QA 仍发现关键缺陷 |
完整 Harness 产出了跨 10 个 sprint 的 16 项功能规格,而单次运行范围有限。Evaluator 捕获了单次运行完全遗漏的关键问题(如实体到运行时的连线断裂、动画系统缺失)。
关键洞察:Harness 的简化与演进
"Every component in a harness encodes an assumption about what the model can't do on its own, and those assumptions are worth stress testing." — Harness 中的每个组件都编码了关于模型无法独立完成的假设,这些假设值得压力测试。
模型能力与 Harness 复杂度的反比关系:
- Opus 4.5 → 需要 context reset、sprint 分解、多轮协商
- Opus 4.6 → 原生消除上下文焦虑,可连续工作两小时以上无需分解;Sprint 构造被成功移除,从逐 sprint 评测转为单次最终 QA
实践原则: 每次新模型发布时重新审视 harness — 系统性移除不必要的脚手架组件,同时为新出现的能力缺口添加专门 agent。
对评测方法论的启示
| 维度 | 启示 |
|---|---|
| 分离原则 | 生成与评测必须分离,自评偏差是系统性的 |
| 评测器校准 | 开箱即用的 LLM 评测无效,需多轮开发循环调教 |
| 主观→结构化 | 即使是"美观"这类主观标准,也可通过具体维度拆解使其可评分 |
| 上下文管理 | 压缩 ≠ 重置;长时 Agent 需要结构化的状态交接机制 |
| 假设时效性 | Harness 中的每个组件都编码模型能力假设,假设会随模型升级过时 |
1.5 方法论对比与互补
| 维度 | Hamel | Anthropic (EDD) | Anthropic (Harness Design) |
|---|---|---|---|
| 哲学起点 | 观察驱动(先看失败再建 eval) | 目标驱动(先定义期望再迭代) | 架构驱动(分离生成与评测,消除自评偏差) |
| 对 EDD 的态度 | 反对(失败表面无限,无法预判) | 支持(类比 TDD,先写测试后实现) | 隐式支持(sprint 合约 = 先定义验收标准) |
| 评分偏好 | 强烈推荐二元(pass/fail) | 支持多种(二元 + 部分得分 + 概率指标) | 硬阈值(单标准失败 = sprint 失败)+ 多维评分 |
| LLM-as-Judge | 谨慎使用,100+ 标注样本校准,每周维护 | 必要时使用,提供 "出口"(允许 "Unknown") | 核心依赖(Evaluator Agent = 专职 LLM judge),需多轮校准 |
| 最小起步 | 30 分钟手动审阅 20-50 条输出 | 20-50 个任务 + 简单 grader | 三 Agent 架构 + Playwright MCP + sprint 合约 |
| Agent 评测 | 两阶段(黑盒→白盒),转换失败矩阵 | 多维度(pass@k/pass^k),环境隔离 | Generator-Evaluator 对抗循环,5-15 轮迭代 |
| 数据生成 | 谨慎合成,偏向真实数据 | 手动测试起步,逐步自动化 | Planner 从简短 prompt 生成完整规格 |
| 工具态度 | 自建 > 购买,工具次要 | 框架有价值但重心在 eval 本身 | Harness = 可退化的脚手架,随模型进步移除 |
| 维护观 | 持续 error analysis 循环(2-4 周) | 专人负责,长期维护 | 每次新模型发布时压力测试假设、简化架构 |
| 统计方法 | 置信区间监控 | pass@k/pass^k + 样本量随成熟度增长 | 成本/时长/功能覆盖的量化对比($9 vs $200) |
| 上下文管理 | 未涉及 | 环境隔离(每次 trial 干净状态) | 压缩 vs 重置的显式权衡 + 结构化交接文件 |
三方互补关系: Hamel 告诉你"发现什么问题"(Error Analysis),Anthropic EDD 告诉你"如何系统化评测"(pass@k + grader 层级),Harness Design 告诉你"如何在长时运行中保持评测有效"(分离生成/评测 + 上下文管理 + 可退化架构)。三者组合覆盖了从问题发现到系统化评测再到工程化运行的完整链路。
1.6 Agent Eval 核心原则
从三篇文章中提炼出 9 条核心原则:
原则 1: Error Analysis 是基础,不是可选项
无论采用何种方法论,手动审阅真实 traces 是不可替代的第一步。只有看到真实失败,才能构建有意义的 eval。
原则 2: 评判结果(Outcome),而非路径(Trajectory)
Agent 可能找到意想不到但完全合理的解法。Grader 应验证环境最终状态(如:数据库中是否存在预期记录),而非检查是否执行了预设步骤序列。
原则 3: 确定性 Grader 优先,LLM Grader 为必要补充
成本-可靠性阶梯:代码断言 > 规则匹配 > LLM-as-Judge > 人工评审。每层都有用武之地,但从最便宜最可靠的开始。
原则 4: 非确定性是本质属性,必须用概率视角
Agent 的成功率在运行间波动。必须多次运行同一任务,用 pass@k / pass^k 等概率指标描述能力。
原则 5: 环境隔离是刚需
每次 eval trial 必须从干净状态启动。共享状态(残留文件、缓存、资源耗尽)会导致与 agent 能力无关的相关性失败。
原则 6: 永远检查 Transcripts
再好的自动化 grader 也可能误判。定期审阅 agent 实际输出 + grader 判定,是发现 grader 缺陷的唯一方式。CORE-Bench 事件(42%→95%)是最佳警示。
原则 7: Eval 是活的系统,不是一次性设置
Eval 需要持续维护:添加新任务、修复 grader、应对能力饱和、追踪标准漂移。像对待生产代码一样对待 eval 代码。
原则 8: 生成与评测必须分离
Agent 存在系统性的自评偏差 — 即使输出质量明显平庸也会自信地赞美自己的工作。将 evaluator 独立为专职角色,调教其保持怀疑态度,比让 generator 自我批判更可行、更可靠。这是 GAN 思想在工程评测中的应用。
原则 9: Harness 是可退化的脚手架
Harness 中的每个组件都编码了关于模型无法独立完成的假设。随着模型能力提升(如 Opus 4.5→4.6),应系统性地压力测试这些假设并移除不必要的复杂度。过度脚手架与不足脚手架同样有害。
第二部分:评测平台深度分析
2.1 Scale Nucleus — AI 1.0 范式
定位与设计哲学
Scale AI(2016 年创立)以数据标注起家,核心信念是 AI 质量 = 数据质量。这种"数据中心主义"渗透到其评测产品中:与 LLM 原生平台(从 prompt 工程和 trace 观测出发)不同,Scale 从 策展数据集、专家人工标注、ground-truth 对比 的角度切入评测。
产品演进线:
- Scale Nucleus(2020)— CV/ML 数据集管理与调试
- Scale GenAI Platform (SGP)(2023)— 企业级 GenAI 构建平台(RAG、微调、评测)
- SEAL / Scale Labs(2023-2026)— 公开排行榜与基准测试研究
- Scale Agentex(2025-2026)— 开源 Agent 执行框架
关键哲学: Human-in-the-Loop(HiTL)评测是不可谈判的底线。自动化指标必要但不够充分。
核心概念
| 概念 | SGP 语境 |
|---|---|
| Rubric | 动态评测标准,按任务由贡献者定义(非固定模板) |
| Turn | 顺序消息单元(用户 prompt + 模型响应 + 标注) |
| Evaluation Task | 多类型:Agent / Auto(LLM) / Agentex / Contributor(人工) / Voice |
| Span | Agent 执行中的可追踪单元 |
| Span Assessment | 附加到 span 的评论、评分或 rubric 评测 |
评测能力
- Rubric 评分体系:
no_issues/minor_issues/major_issues,标准分为objective和implicit - SEAL 排行榜方法论(研究级):
- 私有数据集防止污染/刷榜
- 专家筛选评估员(面试 + 已知答案准确性测试)
- 多轮 QA(审查层→二次求解→独立审计)
- 成对比较(每个模型每个 prompt 比较 50+ 次)
- 所有分数配置置信区间
Agent 评测支持
- ToolComp 基准: 485 个 prompt 测试依赖性工具使用(链式工具调用)
- SGP Agent Evaluation: 专用任务类型 + span 级追踪 + 分布式追踪
- Scale Agentex: 开源(Apache 2.0)Agent 执行框架,Kubernetes 原生
- 过程监督标签: 步骤级评测(不仅是最终答案)
开源与商业模式
| 组件 | 状态 |
|---|---|
| Nucleus Python SDK | MIT 开源 |
| Agentex 框架 | Apache 2.0 开源 |
| 评测平台 | 完全商业,仅 SaaS |
| SEAL 数据集 | 研究输出公开,数据集私有 |
商业模式:企业优先,定制定价(通常六位数年费)。
架构亮点
- Trust Feedback Loop — 测量→设标准→HiTL 验证→迭代→监控
- 私有数据集防污染 — SEAL 的数据集从不公开发布
- 多分辨率评测 — 数据集级→切片级→条目级→span 级
- Rubric 作为一等公民 — 动态、贡献者定义的 rubric(非硬编码指标函数)
- QueryAST — 结构化查询语言用于切片评测数据
2.2 LangSmith — LangChain 生态中心
定位与设计哲学
LangChain Inc. 的商业观测、评测与部署平台。定位为 LangChain 生态的运营控制平面,覆盖完整应用生命周期:开发调试→评测测试→生产监控→Agent 部署。
核心定位决策:
- 声称框架无关,但最深度集成仍在 LangChain/LangGraph
- 观测优先、评测其次(架构痕迹:评测结果不在 trace 视图中内联显示)
- 闭源商业 SaaS(自托管需 Enterprise 合同)
核心概念
| 概念 | 描述 |
|---|---|
| Trace | Run/Span 组成的树,共享 trace ID |
| Run (Span) | 执行步骤:LLM 调用、工具调用、chain 步骤、retriever 操作 |
| Thread | 多轮对话中的相关 run 集合 |
| Dataset | 测试用例集合,支持 splits 和版本控制 |
| Example | 单个测试用例:inputs + reference_outputs + metadata |
| Experiment | 特定应用版本 vs 数据集 + 评测器的结果快照 |
| Evaluator | 评分函数,返回 key / score / comment |
| Feedback | 附加到 run 或 experiment 的评分输出 |
评测能力
离线评测: 对策展数据集运行,用于基准测试、回归测试、单元测试
在线评测: 实时评分生产流量,失败案例自动导入离线数据集
评测器类型:
- 人工评测:标注队列 + 结构化 rubric + 成对比较
- 代码评测器:确定性规则检查
- LLM-as-Judge:有参考/无参考两种模式
- 成对评测:两个版本 side-by-side 比较
预构建评测器(openevals + agentevals,MIT 开源):
- 质量:Correctness, Conciseness, Helpfulness
- 安全:Safety, Security vulnerability
- RAG:Groundedness, Retrieval relevance, Hallucination
- 代码:Pyright, MyPy, TypeScript 类型检查, 沙箱执行
- 结构化输出:Exact match, Tool call 验证, JSON schema
- 相似度:Levenshtein, Embedding similarity
Agent 评测支持(最突出领域之一)
轨迹评测(agentevals 库):
- Trajectory Match Evaluator(确定性,无需 LLM):
- Strict:完全相同的消息序列和工具调用顺序
- Unordered:相同工具调用,任意顺序
- Superset:Agent 至少调用了参考工具,可额外调用
- Subset:Agent 只能调用参考中出现的工具
- Trajectory LLM-as-Judge: 用 rubric prompt 评估轨迹质量
多轮评测: 基于 Thread 抽象的语义意图、语义结果、Agent 轨迹评估
Insights Agent: AI 驱动的生产 trace 自动分析,聚类使用模式和失败模式
开源与商业模式
| 组件 | 状态 |
|---|---|
langsmith-sdk (Python + TS) |
MIT 开源 |
openevals / agentevals |
MIT 开源 |
| LangSmith 平台 | 完全闭源商业 |
| 自托管 | Enterprise 计划,需销售合同 |
定价:
- Developer: 免费,1 座席,5K traces/月
- Plus: $39/座席/月,10K traces/月
- Enterprise: 定制价格
- Trace 超额:$2.50-$5.00/1K traces
架构亮点
- Trace-as-a-Tree 模型 — 带类型的 span(llm/chain/tool/retriever/embedding)
- 离线/在线评测双用 — 相同 evaluator 函数在两种上下文中工作
- 轨迹评测四种匹配模式 — Strict/Unordered/Subset/Superset
- Thread 抽象 — 优雅地支持多轮评测
- 标注队列工作流 — 结构化人工评测→直接转入数据集
优劣势
优势: Agent 轨迹评测最佳、LangChain 零配置集成、全生命周期覆盖、OpenTelemetry 支持
劣势: 闭源(自托管需企业合同)、LangChain 生态耦合、评测-观测视图分离、无内置红队测试、按座席+按 trace 定价
2.3 BrainTrust — 观测+评测+优化闭环
定位与设计哲学
核心论点:AI 的失败模式不同于传统软件 — 模型漂移、幻觉、静默回归。BrainTrust 的目标是将 "凭感觉发布" 变为系统化、可测量的迭代。
Observe-Evaluate-Optimize 三支柱:
- Observe — 检查每条 trace,钻入工具调用,实时追踪延迟/成本/质量
- Evaluate — 开发阶段的结构化实验 + 生产环境的实时评分
- Optimize — Loop AI Agent 从自然语言自动生成更好的 prompt、scorer、dataset
核心概念
| 概念 | 描述 |
|---|---|
| Project | 顶层组织单元,包含实验、数据集、日志、prompt、scorer |
| Experiment | 应用在某个时间点的快照(模型输入输出、数据、代码、评分、元数据) |
| Dataset | 版本化测试用例集合(input + expected + metadata) |
| Scorer | 评分函数:(input, output, expected) → score ∈ [0, 1] |
| Trace | 完整执行记录,Span 组成的 DAG |
| Span | 工作单元,类型:llm / score / function / eval / task / tool / review |
| Loop | 内置 AI Agent,从自然语言生成 dataset/scorer/prompt 优化 |
关键架构选择: 统一数据结构 — instrumentation 代码在 logging 和 evaluation 中完全相同。生产 trace 一键转为 eval 用例。
评测能力
离线评测(Experiments):
Eval()函数 / CLI / UI 运行结构化实验trialCount参数支持多次运行同一输入以测量方差- Side-by-side 实验比较,测试用例粒度的回归检测
- CI/CD 集成:
braintrustdata/eval-actionGitHub Action
在线评测(Production Scoring):
- 实时评分生产请求,使用与离线相同的 scorer
- 低分 trace 自动反馈到离线数据集
内置 Scorer(autoevals 库,开源):
- LLM-as-Judge:Battle, Closed QA, Factuality, Moderation, Security, Summarization, SQL, Translation
- RAG:Context precision/relevancy/recall/entity recall, Faithfulness, Answer relevancy/similarity/correctness
- 启发式:Levenshtein, Exact match, Numeric difference, JSON diff
- Embedding:Embedding similarity
- 统计:BLEU
- 共 25+ 内置 scorer
Agent 评测支持
多层评测架构:
- Reasoning Layer: 规划质量、规划遵守度、工具选择准确性
- Action Layer: 工具正确性、参数有效性、执行路径质量、冗余循环检测
- End-to-End: 任务完成率、步骤效率、资源消耗
框架支持(10+): OpenAI Agents SDK, Claude Agent SDK, LangGraph, CrewAI, Autogen, Google ADK, LiveKit Agents, Mastra, Pydantic AI, Strands Agent SDK
开源与商业模式
| 组件 | 状态 |
|---|---|
autoevals |
开源(841 stars) |
braintrust-proxy |
MIT 开源(388 stars) |
| SDK (JS/Python/Go/.NET) | 开源 |
| 平台 (UI/Brainstore/Loop) | 闭源商业 |
定价:
- Starter: 免费,1GB/月,10K scores/月,14 天保留
- Pro: $249/月,5GB/月,50K scores/月,30 天保留
- Enterprise: 定制
自托管数据平面(Enterprise): Lambda + Postgres 部署在客户 AWS/GCP/Azure 环境,数据不离开客户账户。
架构亮点
- Brainstore(专用数据库) — 针对 AI trace 特性(每 span 数十 KB)设计的 Rust 流式引擎 + 对象存储
- 统一数据模型 — eval 和 production 使用完全相同的 instrumentation 代码和数据结构
- DAG 追踪模型 — Trace 是 DAG(非仅树),span 通过 async context 自动嵌套
- 生产→评测飞轮 — 一键将生产 trace 转为数据集条目,低分 trace 自动反馈
- Gateway(战略入口) — 单一 OpenAI 兼容端点覆盖 100+ 模型,请求自动进入追踪/评测管线
- Loop AI Co-pilot — 从自然语言生成 dataset/scorer/prompt 优化,让非工程师也能参与评测
优劣势
优势: 最紧密的 observe-eval 闭环、优秀的 Agent 评测支持、Gateway 战略入口、Loop AI(独特差异化)、6 种语言 SDK、CI/CD 原生
劣势: 核心平台闭源、低层级定价的短数据保留期(14/30天)、Gateway 供应商锁定风险、无成熟的人工标注管线
2.4 Arize Phoenix — OpenTelemetry 原生开源
定位与设计哲学
Phoenix 是 Arize AI 构建的开源 AI 观测与评测平台。核心押注在 OpenTelemetry 原生、供应商中立。
设计哲学:
- 开放标准优先 — 基于 OTel + OpenInference(AI 特定的 OTel 语义约定扩展)
- 框架/供应商无关 — 平等对待所有集成
- 零特性门控 — 所有功能在开源版本中可用
- "玻璃箱"透明 — 包括 GTM tickets 在内的所有开发过程在 GitHub 上公开
GitHub: ~9,000 stars,774 forks。PyPI 月下载量 250 万+。
核心概念
| 概念 | 描述 |
|---|---|
| Trace | 请求在多步骤中传播的完整路径 |
| Span | Trace 中的工作单元,7 种类型:Chain/Retriever/Reranker/LLM/Embedding/Tool/Agent |
| Project | 相关 trace 的容器 |
| Dataset | 结构化示例集合(input + output + metadata),支持版本控制 |
| Experiment | 对 Dataset 运行 Task 函数 + Evaluator 评分 |
| Evaluator | 返回标准化 Score 对象(name, kind, direction, score, label, explanation) |
| Annotation | 附加到 span/trace 的评测结果 |
评测能力
三种评测模式:
- 客户端(SDK): Python/TypeScript SDK 对 trace、dataset、自定义数据运行评测
- 服务端(UI): 在 Phoenix 界面配置评测器,无需代码
- 在线(生产): 每 2 分钟自动对生产 trace 运行评测器
预构建 LLM 评测器: Faithfulness, Conciseness, Correctness, Document Relevance, Tool Selection, Tool Invocation, Tool Response Handling, Refusal, Toxicity, Q&A, Summarization, SQL Generation
代码评测器: Exact Match, Matches Regex, Precision/Recall/F-Score
关键设计:
- 使用 Function Calling 提取结构化评判(非正则解析自由文本)
- 评测器自身通过 OTel 自动 instrument — 可追踪和调试评测过程本身(evals-of-evals)
- 输入映射支持 Key mapping / JSONPath / Callable
Agent 评测支持
- Agent Span Kind — 一等公民概念,表示包含 LLM + Tool 调用的推理块
- 多步轨迹评测 — LLM-as-Judge 评估 agent 完整工具调用序列
- Path Convergence Metric — 量化 agent 效率(最小步骤 / 实际步骤)
- 三个工具评测器: Tool Selection / Tool Invocation / Tool Response Handling
- 多 Agent 系统追踪: 跨框架(Agno, Autogen, CrewAI, LangGraph, SmolAgents)可视化
- MCP 集成: OTel instrumentation 桥接客户端-服务端可见性
集成模式
40+ 自动 instrumentation(via OpenInference): OpenAI, OpenAI Agents SDK, Claude Agent SDK, LangChain, LangGraph, LlamaIndex, DSPy, CrewAI, Haystack, Vercel AI SDK, Mastra, Anthropic, AWS Bedrock, Google GenAI, Google ADK, MistralAI, Groq, LiteLLM 等
第三方评测集成: Ragas, DeepEval, Cleanlab
开源与商业模式
| 组件 | 状态 |
|---|---|
| Arize Phoenix | Elastic License 2.0 (ELv2) — 源代码可用,允许自托管和商业使用,禁止作为托管服务提供 |
| OpenInference | 开源 |
| 云服务 | 免费层:50K traces/月,7 天保留 |
| Arize AX(企业) | 完全商业,基于 ClickHouse |
ELv2 注意: 非 MIT/Apache 许可。法律团队可能标记此许可。它专门保护 Arize 的云业务。
架构亮点
- OTel-Native 设计(最大洞察) — 基于 OTel 原语构建,trace 可移植到任何 OTel 兼容后端
- OpenInference 语义约定 — AI 特定语义约定作为 OTel 扩展(非替代)
- 评测器标准化接口 —
Score对象(name, kind, direction, score, label, explanation, metadata) - 评测可观测性 — 自动 instrument 评测器本身,可追踪和调试评测过程
- Function Calling 提取结构化输出 — 消除脆弱的 "解析 LLM 文本输出" 步骤
优劣势
优势: 最强 OTel 集成、40+ 框架 auto-instrumentation、零特性门控、Agent 评测深度好、在线评测能力、评测过程可观测
劣势: ELv2 许可(非真正开源)、OTel 配置复杂度、SQLite 默认不可扩展、TypeScript 评测 SDK 仍为 alpha、开源是商业平台入口
2.5 DeepEval — 代码优先评测框架
定位与设计哲学
开源(Apache 2.0)Python 评测框架,定位为 "Pytest for LLMs"。GitHub 14,200+ stars。由 Confident AI Inc. 创建。
核心设计哲学:
- 代码优先、pytest 原生 — 评测 = 单元测试。
assert_test()镜像assert语义 - 受约束的 LLM-as-Judge — 将 judge LLM 限制在极其受限的评测任务中(QAG, G-Eval CoT, DAG 决策树)
- 研究背书 — 指标明确引用发表论文(G-Eval NeurIPS 2023, Evol-Instruct 等)
核心概念
| 概念 | 描述 |
|---|---|
| LLMTestCase | 原子单元:input, actual_output + 可选的 expected_output, context, retrieval_context, tools_called, expected_tools |
| ConversationalTestCase | 多轮变体,包含 Turn 列表 + 可选的 scenario, mcp_servers |
| Golden / ConversationalGolden | 测试用例的前体,存储期望/理想数据 |
| EvaluationDataset | Golden 集合,支持 push/pull 到 Confident AI |
| BaseMetric | 抽象基类,实现 measure() 和 a_measure(),输出 score(0-1), reason, success |
评测能力(50+ 指标)
全能/自定义(2):
- G-Eval — CoT 生成评测步骤 + 评分(支持自定义 rubric)
- DAG(有向无环图) — 确定性决策树指标构建器(TaskNode → BinaryJudgementNode → VerdictNode)
Agent 指标(8): Task Completion, Tool Correctness, Goal Accuracy, Step Efficiency, Plan Adherence, Plan Quality, Tool Use, Argument Correctness
RAG 指标(6): Answer Relevancy, Faithfulness, Contextual Recall/Precision/Relevancy, RAGAS 复合
多轮/聊天指标(5): Knowledge Retention, Conversation Completeness, Turn Relevancy, Turn Faithfulness, Role Adherence
MCP 指标(3): MCP Task Completion, MCP Use, Multi-Turn MCP Use
多模态指标(5): Text to Image, Image Editing, Image Coherence, Image Helpfulness, Image Reference
安全指标(6+): Bias, Toxicity, Non-Advice, Misuse, PII Leakage, Role Violation
通用指标(4+): Hallucination, Summarization, JSON Correctness, Prompt Alignment
Agent 评测支持(最强领域之一)
@observe 装饰器追踪:
@observe(type="agent")
def travel_agent(user_input):
@observe(type="tool")
def search_flights(origin, destination, date): ...
@observe(type="llm")
def call_openai(messages): ...
框架集成: OpenAI Agents SDK, LangGraph, CrewAI, Pydantic AI, AWS AgentCore, Anthropic
组件级 vs 端到端: 指标可附加到 agent 级(端到端)或单个组件 span(通过 @observe(metrics=[...]))
开源与商业模式
| 组件 | 状态 |
|---|---|
| DeepEval 框架 | Apache 2.0(全功能独立运行) |
| Confident AI 平台 | 商业云(回归仪表盘、实验追踪、数据集 UI、生产监控、人工标注、SOC2/HIPAA/GDPR) |
| DeepTeam(红队) | 独立包和域名 |
架构亮点
- Golden→TestCase 分离 — Golden 存储期望,TestCase 在运行时生成(干净分离 "测什么" vs "发生了什么")
- DAG 指标构建器 — 唯一的有向无环图方法构建确定性自定义指标,比纯 G-Eval 更可控
@observe装饰器 — 轻量级、基于装饰器的追踪,指标直接附加到装饰函数- 异步优先执行 — 指标默认并发运行,内部操作也并发(LLM-as-judge 场景下关键)
DeepEvalBaseLLM抽象 — 干净接口解耦指标与具体 LLM provider- Prompt 优化闭环 — 内置 prompt 精炼(GEPA 遗传搜索 / MIPROv2 代理搜索)
优劣势
优势: 最全指标库(50+)、Agent 评测最佳(8 个专用指标 + 追踪)、真正的 pytest 集成、DAG 指标构建器(独特)、Provider 无关、MCP 专用指标(市场首创)
劣势: 仅 Python、LLM-as-judge 成本高、文档分散混乱、OSS/商业边界有压力感、红队功能拆分到独立包、OSS 中无 trace 可视化
2.6 Langfuse — 一体化 LLM 工程平台
定位与设计哲学
开源(MIT)一体化 LLM 工程平台。三大设计支柱:
- Open Source First — 核心 MIT 许可(
/ee文件夹外的一切),无使用限制 - Self-Hostable — 自托管与云版本完全对等
- OpenTelemetry 可扩展 — 接受 OTLP over HTTP(JSON + protobuf)
哲学: "观测中心化评测" — 评测不是独立活动,而是从全面追踪中自然涌现。先追踪一切,再在 trace 上层叠评分。
核心概念
| 概念 | 描述 |
|---|---|
| Trace | 顶层容器,代表完整请求生命周期 |
| Observations | Trace 内的嵌套元素,语义类型化:Span(通用定时操作)/ Generation(LLM 调用)/ Event(时间点事件) |
| Session | 多轮对话中的 trace 分组 |
| Dataset | 评测用例集合,自动版本控制,可选 JSON Schema 验证 |
| Score | 评测原语,三种数据类型:Numeric(float) / Categorical(string) / Boolean(0/1) |
| Prompt Management | 版本化 prompt 模板,基于标签的部署(production/staging),运行时 SDK 获取 |
评测能力
三种评分方法:
-
模型评测(LLM-as-a-Judge):
- Managed 评测器: 预构建目录(幻觉、上下文相关性、毒性、有用性等)
- Custom 评测器: 用户定义的评测 prompt + 变量占位符
- JSONPath 变量映射,可配置采样百分比
-
人工标注:
- 标注队列(Annotation Queues)用于批量审查
- 标准化 score 配置确保一致性
- 人工评分作为校准自动评测器的金标准
-
自定义/编程评测:
- SDK
create_score()和基于上下文的score_current_span()/score_current_trace() - REST API 用于语言无关集成
- Score Configs 强制标准化
- SDK
在线 vs 离线评测:
- 在线: 实时评测器自动处理匹配过滤器的新 observation/trace,可配置采样百分比
- 离线: 通过 SDK/API 获取 trace,在外部服务中运行评测,推送 score 回 Langfuse
实验: 对 Dataset 运行应用 → 捕获输出 → 应用评分 → Side-by-side 比较
Agent 评测支持(2025-2026 重点投入)
- Agent Graphs(GA): 框架无关的可视化,从 observation 时序和嵌套推断执行流
- 工具调用渲染: 所有可用工具在每个 generation 顶部展示
- 三种评测策略:
- 最终响应(黑盒): 输入→输出分析
- 轨迹(玻璃盒): 完整工具调用和推理序列评测
- 单步(白盒): 单个步骤级粒度
- 技能级评测方法论: 定义每个技能的代表性 prompt 数据集 → 运行实验 → 追踪所有行为 → LLM judge 评分
框架集成: LangGraph, Pydantic AI, CrewAI, OpenAI Agents SDK, AutoGen, smolagents, Strands Agents
集成模式
- 原生 SDK: Python(
@observe装饰器)+ JS/TS - OpenTelemetry: OTLP 端点
/api/public/otel,四种集成路径 - 框架集成: OpenAI SDK, Anthropic SDK, LangChain, LlamaIndex, LangGraph, Pydantic AI, CrewAI, Vercel AI SDK
- REST API: 所有操作
开源与商业模式
| 组件 | 状态 |
|---|---|
| 核心平台 | MIT 许可(/ee 外一切),无使用限制 |
| 企业自托管 | 需 License key(SCIM, 审计日志, 数据保留策略) |
| 云服务 | Hobby 免费(50K units/月) → Core $29 → Pro $199 → Enterprise $2,499 |
关键差异化:所有付费层无限用户(无按座席定价)。
架构亮点
-
双数据库策略:
- PostgreSQL:事务数据(用户、组织、项目、API 密钥、prompt、dataset、eval 配置)
- ClickHouse:观测/分析数据(trace、observation、score),ReplacingMergeTree 引擎
- 效果:Prompts API p99 从 7s 降至 100ms,dashboard 查询 <1s p99
-
异步摄入管线:
- 轻量 API 接收事件 → 立即持久化到 S3
- Redis 队列解耦处理
- Worker 容器异步处理(tokenization, 成本计算, 去重)
- 应用响应时间不受影响
-
S3 先于数据库写入 — 事件恢复能力
-
全开源基础设施栈 — PostgreSQL + ClickHouse + Redis/Valkey + S3 兼容存储
优劣势
优势: 真正 MIT 开源(同类最强开源故事)、一体化内聚(追踪+评测+prompt管理)、OTel 原生架构、Agent 评测一等公民、生产级架构(ClickHouse 迁移证明工程成熟度)、无按座席定价、自托管完全对等
劣势: 评测耦合于追踪模型(纯离线 eval 不如专用工具方便)、无内置断言库、实验运行器基础(无参数网格搜索/并行执行)、ClickHouse 运维复杂度(自托管需 PG+CH+Redis+S3)、无原生 CI/CD 集成、Playground 限制
第三部分:平台横向对比矩阵
3.1 功能对比表
| 维度 | Scale Nucleus | LangSmith | BrainTrust | Arize Phoenix | DeepEval | Langfuse |
|---|---|---|---|---|---|---|
| 定位 | 企业 HiTL 评测 | LangChain 生态控制平面 | 观测+评测+优化闭环 | OTel 原生观测+评测 | 代码优先评测框架 | 一体化 LLM 工程 |
| Eval 类型 | ||||||
| 离线评测 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 在线评测 | ✅ | ✅ | ✅ | ✅(每 2 分钟) | ⚠ 需 Confident AI | ✅ |
| 人工评测 | ✅(核心能力) | ✅ 标注队列 | ✅ 键盘快捷键 | ✅ 基础 | ⚠ 需 Confident AI | ✅ 标注队列 |
| LLM-as-Judge | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 代码 Grader | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 成对比较 | ✅ SEAL | ✅ | ❌ | ❌ | ✅ Arena G-Eval | ❌ |
| Agent 支持 | ||||||
| Agent 追踪 | ✅ Span 级 | ✅ Run 树 | ✅ DAG Span | ✅ Agent Span Kind | ✅ @observe | ✅ Agent Graphs |
| 轨迹评测 | ⚠ 基础 | ✅ 四种匹配模式 | ✅ 多层架构 | ✅ 路径收敛 | ✅ 8 个专用指标 | ✅ 三种策略 |
| 工具评测 | ✅ ToolComp | ✅ | ✅ | ✅ 3 个专用评测器 | ✅ Tool Correctness | ⚠ 通过 LLM judge |
| MCP 支持 | ❌ | ❌ | ✅ IDE 集成 | ✅ OTel 桥接 | ✅ 3 个专用指标 | ❌ |
| 多轮评测 | ✅ | ✅ Thread | ⚠ 基础 | ✅ Session 级 | ✅ 5 个聊天指标 | ✅ Session 级 |
| 集成广度 | ||||||
| Python SDK | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| TypeScript SDK | ❌ | ✅ | ✅ | ✅(eval alpha) | ❌ | ✅ |
| 其他语言 SDK | ❌ | ❌ | Go, Ruby, C#, Java | ❌ | ❌ | ❌ |
| OpenTelemetry | ✅ | ✅ | ✅ | ✅(原生) | ❌ | ✅(原生) |
| CI/CD 集成 | ❌ | ✅ pytest/vitest | ✅ GitHub Action | ❌ 原生 | ✅ pytest 原生 | ❌ 原生 |
| 开源性 | SDK 开源 | SDK 开源 | SDK+Scorer 开源 | 平台开源(ELv2) | 框架全开源(Apache 2.0) | 平台全开源(MIT) |
3.2 架构对比表
| 维度 | Scale Nucleus | LangSmith | BrainTrust | Arize Phoenix | DeepEval | Langfuse |
|---|---|---|---|---|---|---|
| 数据模型 | Dataset→Item→Annotation→Prediction | Trace→Run(Span)→Feedback | Trace→Span(DAG)→Score | Trace→Span(OTel)→Annotation | TestCase→Metric→Score | Trace→Observation→Score |
| 存储后端 | 专有 | 专有(PG+CH+Redis) | Brainstore(Rust+对象存储) | SQLite(dev)/PostgreSQL(prod) | 本地(OSS)/专有(Confident) | PostgreSQL + ClickHouse |
| 追踪协议 | 专有+OTel | 专有+OTel | 专有+OTel | OTel 原生(OpenInference) | 专有(@observe) | 专有+OTel |
| 部署模式 | SaaS only | SaaS / Enterprise 自托管 | SaaS / Enterprise 数据平面 | 本地/Docker/K8s/云 | 本地运行(OSS) / SaaS | 本地/Docker/K8s / SaaS |
| 自托管难度 | N/A | 高(需企业合同) | 中(数据平面可自托管) | 低-中 | 低(pip install) | 中(PG+CH+Redis+S3) |
| 数据保留 | 商业协商 | 14-400 天 | 14-30 天(Pro) | 自托管无限 / 云 7 天 | 自托管无限 / 云按计划 | 自托管无限 / 云 30 天+ |
| 可扩展性 | 企业级 | 企业级 | 企业级(Brainstore) | 中(PG 上限)→ AX 扩展 | 中(本地运行) | 高(ClickHouse 列存) |
| Prompt 管理 | ❌ | ✅ Hub | ✅ | ❌ | ⚠ 需 Confident AI | ✅ 版本+标签部署 |
| Gateway/Proxy | ❌ | ❌ | ✅ 100+ 模型统一端点 | ❌ | ❌ | ❌ |
| AI 辅助 | ❌ | ✅ Insights Agent | ✅ Loop AI | ❌ | ✅ Prompt 优化器 | ❌ |
3.3 核心概念映射表
| 通用概念 | Scale Nucleus | LangSmith | BrainTrust | Arize Phoenix | DeepEval | Langfuse |
|---|---|---|---|---|---|---|
| 顶层容器 | Dataset | Project | Project | Project | — | Project |
| 执行记录 | — | Trace | Trace | Trace | — | Trace |
| 工作单元 | — | Run (Span) | Span | Span | — | Observation (Span/Generation/Event) |
| 测试集合 | Dataset | Dataset | Dataset | Dataset | EvaluationDataset | Dataset |
| 测试用例 | DatasetItem | Example | Dataset entry | Dataset Example | LLMTestCase / Golden | Dataset Item |
| 评分函数 | Rubric | Evaluator | Scorer | Evaluator | BaseMetric | Evaluator (Managed/Custom) |
| 评分结果 | Assessment | Feedback | Score | Annotation / Score | Score (0-1) + Reason | Score (Numeric/Categorical/Boolean) |
| 实验 | — | Experiment | Experiment | Experiment | — (pytest run) | Experiment (Dataset Run) |
| 多轮容器 | Turn | Thread | — | — | ConversationalTestCase | Session |
| Prompt 模板 | — | Hub Prompt | Prompt | — | — | Prompt (versioned + labeled) |
| 子集切片 | Slice | Filter/Tag | Filter | — | — | Tag/Filter |
命名差异洞察:
- "评分" 在各平台含义相似但粒度不同:BrainTrust 的 Score 是 [0,1] 浮点数,Langfuse 的 Score 支持三种数据类型,DeepEval 强制 0-1 归一化
- "Span" 在 BrainTrust 中是 DAG 节点,在 Phoenix 中是 OTel Span,在 Langfuse 中是 Observation 的子类型
- "Evaluator" vs "Scorer" vs "Metric" vs "Grader" — 本质相同,命名反映设计哲学(测试 vs 评分 vs 测量 vs 评判)
第四部分:自建平台设计启示
4.1 核心概念抽象
从 6 个平台的数据模型中提炼出评测平台的最小公共抽象:
┌─────────────────────────────────────────────────────────┐
│ Project(项目) │
│ 顶层组织单元,隔离不同应用/环境 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─── Tracing Layer ──────────────────────────────┐ │
│ │ Trace → 完整请求生命周期 │ │
│ │ ├─ Span → 工作单元(typed: llm/tool/agent/..)│ │
│ │ ├─ Span → 可嵌套(树或 DAG) │ │
│ │ └─ ... │ │
│ │ Session → 多轮对话中的 Trace 分组 │ │
│ └────────────────────────────────────────────────┘ │
│ │
│ ┌─── Evaluation Layer ───────────────────────────┐ │
│ │ Dataset → 版本化测试用例集合 │ │
│ │ ├─ Example → 单个测试用例(input + expected) │ │
│ │ Evaluator → 评分逻辑(code/llm/human) │ │
│ │ Score → 标准化评分结果 │ │
│ │ Experiment → Dataset × App Version × Evaluator │ │
│ └────────────────────────────────────────────────┘ │
│ │
│ ┌─── Management Layer ───────────────────────────┐ │
│ │ Prompt → 版本化模板 + 标签部署 │ │
│ │ Annotation → 人工评审工作流 │ │
│ └────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
Score(评分结果)标准化设计
借鉴 Phoenix 的 Score 定义,建议自建平台的 Score 包含:
Score {
name: string // 指标名称
kind: enum // CODE | LLM | HUMAN
data_type: enum // NUMERIC | CATEGORICAL | BOOLEAN
direction: enum // MAXIMIZE | MINIMIZE | NONE
value: number // 数值结果
label: string // 分类标签(categorical 时)
explanation: string // 评分理由(尤其 LLM judge 时)
metadata: dict // 扩展信息
}
Evaluator(评分函数)统一接口
class Evaluator:
name: str
kind: Literal["code", "llm", "human"]
def evaluate(self, input, output, expected=None, trace=None) -> Score:
"""同步评测"""
...
async def a_evaluate(self, input, output, expected=None, trace=None) -> Score:
"""异步评测"""
...
4.2 必备能力清单
MVP(第一阶段)
| 能力 | 优先级 | 参考平台 |
|---|---|---|
| Trace 采集与存储 | P0 | Langfuse(OTel + 异步摄入) |
| Span 树/DAG 可视化 | P0 | BrainTrust(DAG Span 视图) |
| Dataset 管理(CRUD + 版本控制) | P0 | Langfuse(自动版本 + JSON Schema) |
| 代码 Evaluator | P0 | DeepEval(pytest 集成) |
| LLM-as-Judge Evaluator | P0 | Phoenix(Function Calling 提取结构化输出) |
| Experiment 运行 + 比较 | P0 | BrainTrust(side-by-side + 回归检测) |
| Python SDK | P0 | Langfuse(@observe 装饰器) |
| Score 标准化存储 | P0 | Phoenix(Score 对象设计) |
增强(第二阶段)
| 能力 | 优先级 | 参考平台 |
|---|---|---|
| 在线评测(生产 trace 自动评分) | P1 | Langfuse(可配置过滤器+采样) |
| 人工标注队列 | P1 | LangSmith(Annotation Queue) |
| Agent 轨迹评测 | P1 | LangSmith(四种匹配模式)+ DeepEval(8 个专用指标) |
| Prompt 管理(版本+标签部署) | P1 | Langfuse(版本+标签+运行时获取) |
| CI/CD 集成 | P1 | DeepEval(pytest + exit code)+ BrainTrust(GitHub Action) |
| 生产→评测飞轮 | P1 | BrainTrust(一键 trace→dataset) |
| TypeScript SDK | P1 | BrainTrust(多语言 SDK 策略) |
高级(第三阶段)
| 能力 | 优先级 | 参考平台 |
|---|---|---|
| AI 辅助评测生成 | P2 | BrainTrust Loop(从自然语言生成 scorer/dataset) |
| Prompt 优化闭环 | P2 | DeepEval(GEPA/MIPROv2) |
| 多 Agent 系统追踪 | P2 | Phoenix(跨框架可视化) |
| 数据合成 | P2 | DeepEval Synthesizer(7 种演化类型) |
| 评测可观测性(evals-of-evals) | P2 | Phoenix(自动 instrument 评测器) |
| 红队/对抗测试 | P2 | DeepEval/DeepTeam |
4.3 架构设计建议
存储层:双数据库策略
推荐:PostgreSQL + ClickHouse(借鉴 Langfuse v3)
| 数据类型 | 存储 | 理由 |
|---|---|---|
| 事务数据(用户、项目、API 密钥、prompt、dataset 配置) | PostgreSQL | ACID 保证、关系查询 |
| 观测数据(trace、span、score) | ClickHouse | 列存储、高效分析查询、ReplacingMergeTree 处理去重 |
| 大体积内容(trace 原始 payload) | S3 兼容存储 | 成本控制、无限扩展 |
关键模式: 写入路径 = API → S3 持久化 → Redis 队列 → Worker 异步处理 → ClickHouse 插入。应用响应时间不受观测数据处理影响。
摄入层:OTel-First
推荐:OpenTelemetry 原生 + 轻量私有 SDK
- OTLP 端点接收标准 OTel trace(供已有 OTel 基础设施的团队使用)
- 私有 SDK 提供 LLM 特定的高级封装(
@observe装饰器、token 计数、成本计算) - 借鉴 OpenInference 的 AI 语义约定扩展 OTel(而非替代)
评测层:三级 Evaluator 架构
Level 1: Code Evaluator(确定性)
→ Exact match, regex, JSON schema, 代码执行测试
→ 快、便宜、可复现
Level 2: LLM Evaluator(模型驱动)
→ Function Calling 提取结构化判定(非自由文本解析)
→ 可配置 judge 模型、rubric、采样率
→ 评测器自身可追踪(evals-of-evals)
Level 3: Human Evaluator(金标准)
→ 标注队列、结构化 rubric
→ 用于校准 Level 2 的 LLM 评测器
API 设计:统一数据模型
关键原则(借鉴 BrainTrust): 评测代码和生产 instrumentation 使用完全相同的数据结构。不要为 "eval 模式" 和 "production 模式" 构建两套系统。
4.4 值得借鉴的设计模式
模式 1: 生产→评测飞轮(BrainTrust)
生产 Trace → 低分检测 → 自动添加到 Dataset → 离线评测 → 改进 → 部署 → ...
一键将生产 trace 转为测试用例。低分 trace 自动反馈。闭环加速迭代。
模式 2: Function Calling 提取结构化 Judge 输出(Phoenix)
不要让 LLM judge 输出自由文本再正则解析。使用 tool use / function calling 强制结构化输出。消除脆弱的文本解析步骤,更鲁棒、更可移植。
模式 3: DAG 指标构建器(DeepEval)
TaskNode("extract_key_facts")
→ BinaryJudgementNode("all_facts_present?")
→ Yes → VerdictNode(score=1.0)
→ No → TaskNode("count_missing")
→ VerdictNode(score=missing/total)
将确定性逻辑路径与 LLM 判断节点组合,比纯 G-Eval 更可控,比纯代码更灵活。
模式 4: Golden→TestCase 分离(DeepEval)
Golden(期望数据)与 TestCase(运行时结果)明确分离。Golden 存储 "测什么",TestCase 在评测时通过调用实际应用生成。干净分离、版本无关。
模式 5: 评测可观测性 — Evals-of-Evals(Phoenix)
自动 instrument 评测器本身的执行过程。当 LLM judge 给出可疑结果时,可以检查它收到了什么 prompt、如何推理。这是调试评测质量的必要基础设施。
模式 6: 异步摄入 + S3 优先持久化(Langfuse)
事件先写 S3 再异步处理入库。即使数据库短暂不可用也不丢失事件。应用侧零延迟影响。
模式 7: 轨迹匹配四种模式(LangSmith)
Strict: [search, filter, book] == [search, filter, book] ✅
Unordered: {search, filter, book} == {filter, search, book} ✅
Superset: [search, filter, book, verify] ⊇ [search, book] ✅
Subset: [search, book] ⊆ [search, filter, book] ✅
不同场景需要不同严格度的轨迹评测。四种模式覆盖从严格到宽松的连续光谱。
模式 8: 标签部署的 Prompt 管理(Langfuse)
Prompt "summarizer" v1 [staging]
Prompt "summarizer" v2 [production] ← SDK 默认获取
Prompt "summarizer" v3 [experimental]
版本管理 + 标签部署 = 无需改代码即可切换生产 prompt。与 trace 自动关联 = 按版本分析性能。
模式 9: Generator-Evaluator 对抗循环(Anthropic Harness Design)
Generator → 生成/修改代码
↓
Evaluator → Playwright MCP 测试 + 多维评分
↓
评分趋势良好?── 是 → 继续优化当前方向
│
否 → 彻底转向(pivot)
↓
5-15 轮迭代后趋于平台期
受 GAN 启发的对抗循环。关键:evaluator 必须经过多轮开发循环校准(few-shot 示例 + 评分分解),开箱即用的 LLM 评测无效 — agent 会合理化批准平庸工作。
模式 10: Sprint 合约 + 硬阈值判定(Anthropic Harness Design)
Generator 提议: "本 sprint 交付 5 项功能,27 个验收标准"
↓
Evaluator 审核: 确保标准正确且可验证
↓
协商达成 → 开始实现
↓
验收: 任一标准失败 → 整个 sprint 失败 + 详细反馈
将主观质量拆解为具体可验证的合约条款。硬阈值消除"差不多就行"的模糊判定。
模式 11: 可退化 Harness 架构(Anthropic Harness Design)
模型能力弱时: Planner → Sprint 分解 → Generator ⟷ Evaluator(逐 sprint 对抗)
↓ 模型升级
模型能力强时: Planner → Generator → Evaluator(单次最终 QA)
↓ 模型继续升级
理论极限: Generator(自身能力足够,无需外部评测)
Harness 组件是模型能力假设的编码。每次新模型发布时应压力测试假设、移除多余组件。过度脚手架浪费成本($200 vs $9),不足脚手架遗漏缺陷。
模式 12: 文件化状态交接(Anthropic Harness Design)
Agent 间通过结构化文件(而非直接 API 链)传递状态。上下文重置时,前一个 agent 将关键状态写入文件,下一个 agent 从干净上下文开始读取。这种方式:
- 保持跨会话的上下文保真度
- 允许人工审查和干预交接点
- 消除上下文焦虑(context anxiety)的根因
4.5 技术选型建议
OpenTelemetry 策略
| 决策 | 建议 | 理由 |
|---|---|---|
| 是否采用 OTel | ✅ 必须 | 行业标准化方向,避免供应商锁定,Langfuse + Phoenix 已验证可行性 |
| OTel 协议 | OTLP over HTTP(JSON + protobuf) | 最广泛支持,gRPC 可后续添加 |
| AI 语义约定 | 借鉴 OpenInference | 7 种 span kind(Chain/Retriever/Reranker/LLM/Embedding/Tool/Agent) |
| 私有 SDK | 在 OTel 之上封装 | 提供 @observe 装饰器、自动 token 计数、成本计算等 LLM 特定便利 |
存储层
| 组件 | 建议 | 理由 |
|---|---|---|
| 事务存储 | PostgreSQL | 成熟、生态丰富、Langfuse/Phoenix/LangSmith 均采用 |
| 分析存储 | ClickHouse | 列存储对观测查询性能提升 10-100x,Langfuse v3 已验证 |
| 对象存储 | S3 兼容(MinIO 自托管) | Trace payload 体积大,S3 成本远低于数据库 |
| 缓存/队列 | Redis/Valkey | 异步摄入队列 + Prompt 缓存 + API Key 缓存 |
SDK 设计
| 决策 | 建议 | 参考 |
|---|---|---|
| 首选语言 | Python 优先,TypeScript 其次 | 评测场景 Python 占绝对主导 |
| 追踪方式 | @observe 装饰器 + 手动 API |
Langfuse 模式,低侵入性 |
| 评测入口 | evaluate(dataset, task, evaluators) 函数 |
BrainTrust Eval() 模式 |
| CI/CD | pytest 插件 + CLI exit code | DeepEval 模式,与 pytest 生态无缝集成 |
| Evaluator 抽象 | 统一基类 + provider 无关的 LLM 接口 | DeepEval DeepEvalBaseLLM 模式 |
推荐技术栈总览
┌─────────────────────────────────────────────────────────┐
│ Client Layer │
│ ├─ Python SDK (@observe + evaluate()) │
│ ├─ TypeScript SDK │
│ ├─ REST API │
│ └─ OTLP Endpoint (HTTP JSON/protobuf) │
├─────────────────────────────────────────────────────────┤
│ Ingestion Layer │
│ ├─ Lightweight API → S3 持久化 │
│ ├─ Redis/Valkey 消息队列 │
│ └─ Worker(异步处理:tokenization, 成本计算, 去重) │
├─────────────────────────────────────────────────────────┤
│ Storage Layer │
│ ├─ PostgreSQL — 事务数据 │
│ ├─ ClickHouse — 观测/分析数据 │
│ └─ S3/MinIO — 大体积 payload │
├─────────────────────────────────────────────────────────┤
│ Evaluation Engine │
│ ├─ Code Evaluator(确定性) │
│ ├─ LLM Evaluator(Function Calling + 结构化输出) │
│ ├─ Human Evaluator(标注队列) │
│ └─ Experiment Runner(Dataset × Task × Evaluators) │
├─────────────────────────────────────────────────────────┤
│ Application Layer │
│ ├─ Web UI(Trace 视图 + 实验比较 + 标注队列) │
│ ├─ Prompt Manager(版本 + 标签部署) │
│ └─ Dashboard(指标聚合 + 时序趋势) │
└─────────────────────────────────────────────────────────┘
附录:参考资料
方法论
- Hamel Husain & Shreya Shankar — LLM Evals: Everything You Need to Know (2026-01) — https://hamel.dev/blog/posts/evals-faq/
- Anthropic Engineering — Demystifying Evals for AI Agents (2026) — https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents
- Prithvi Rajasekaran (Anthropic Labs) — Harness Design for Long-Running Application Development (2026-03-24) — https://www.anthropic.com/engineering/harness-design-long-running-apps
Scale AI / Nucleus
- Scale AI Evaluation (Enterprise): https://scale.com/evaluation/enterprise
- Scale GenAI Platform: https://scale.com/genai-platform
- Scale GenAI Platform Blog: https://scale.com/blog/genai-platform
- Scale AI Docs Overview: https://scale.com/docs/overview
- Scale Nucleus Docs - Getting Started: https://nucleus.scale.com/docs/getting-started
- Scale Nucleus - Datasets: https://nucleus.scale.com/docs/datasets-in-nucleus
- Scale Nucleus - Evaluation Metrics: https://nucleus.scale.com/docs/calculate-evaluation-metrics
- Scale Nucleus Python SDK (GitHub): https://github.com/scaleapi/nucleus-python-client
- Scale Agentex (GitHub): https://github.com/scaleapi/scale-agentex
- Scale Labs Leaderboards: https://labs.scale.com/leaderboard
- Scale Labs - Agentic Tool Use Enterprise: https://labs.scale.com/leaderboard/tool_use_enterprise
- Scale SEAL Leaderboard Blog: https://scale.com/blog/leaderboard
- Scale GenAI Platform - Rubrics: https://docs.genai.scale.com/project-archetypes/rubrics
- Scale GP Documentation: https://docs.gp.scale.com/llms.txt
- Scale GP AgentOps Quick Start: https://docs.gp.scale.com/docs/v5/next-gen-evaluation/getting-started
- Contrary Research - Scale Business Breakdown: https://research.contrary.com/company/scale
LangSmith
- LangSmith Docs: https://docs.smith.langchain.com/
- openevals (GitHub, MIT): https://github.com/langchain-ai/openevals
- agentevals (GitHub, MIT): https://github.com/langchain-ai/agentevals
BrainTrust
- BrainTrust Home: https://www.braintrust.dev/
- BrainTrust Docs - Evaluate: https://www.braintrust.dev/docs/evaluate
- BrainTrust Docs - Run Evaluations: https://www.braintrust.dev/docs/core/experiments/write
- BrainTrust Docs - AI Proxy/Gateway: https://www.braintrust.dev/docs/guides/proxy
- BrainTrust Docs - SDK Integrations: https://www.braintrust.dev/docs/integrations/sdk-integrations
- BrainTrust Docs - Experiments: https://www.braintrust.dev/docs/platform/experiments
- BrainTrust Docs - Architecture: https://www.braintrust.dev/docs/reference/platform/architecture
- BrainTrust Docs - Advanced Tracing: https://www.braintrust.dev/docs/instrument/advanced-tracing
- BrainTrust Docs - Autoevals: https://www.braintrust.dev/docs/reference/autoevals
- BrainTrust Docs - Loop: https://www.braintrust.dev/docs/observe/loop
- BrainTrust Pricing: https://www.braintrust.dev/pricing
- How to Eval: The Braintrust Way: https://www.braintrust.dev/articles/how-to-eval
- AI Agent Evaluation Framework: https://www.braintrust.dev/articles/ai-agent-evaluation-framework
- BrainTrust Proxy (GitHub, MIT): https://github.com/braintrustdata/braintrust-proxy
- AutoEvals (GitHub): https://github.com/braintrustdata/autoevals
- AI Observability Tools 2026: https://www.braintrust.dev/articles/best-ai-observability-tools-2026
Arize Phoenix
- Arize Phoenix GitHub: https://github.com/Arize-ai/phoenix
- Phoenix Docs - What is Phoenix: https://arize.com/docs/phoenix
- Phoenix Evaluation: https://arize.com/docs/phoenix/evaluation/llm-evals
- Phoenix Pre-Built Evaluators: https://arize.com/docs/phoenix/evaluation/running-pre-tested-evals
- Phoenix Self-Hosting: https://arize.com/docs/phoenix/self-hosting
- Phoenix Datasets & Experiments Quickstart: https://arize.com/docs/phoenix/datasets-and-experiments/quickstart-datasets
- Phoenix Run Experiments: https://arize.com/docs/phoenix/datasets-and-experiments/how-to-experiments/run-experiments
- Phoenix Evaluating Traces: https://arize.com/docs/phoenix/tracing/how-to-tracing/feedback-and-annotations/evaluating-phoenix-traces
- Phoenix License: https://arize.com/docs/phoenix/self-hosting/license
- Agent Observability - Arize: https://arize.com/ai-agents/agent-observability/
- Why Phoenix: https://phoenix.arize.com/why/
- OpenInference GitHub: https://github.com/Arize-ai/openinference
- arize-phoenix-evals (PyPI): https://pypi.org/project/arize-phoenix-evals/
- Arize LLM Evaluation Platforms Comparison: https://arize.com/llm-evaluation-platforms-top-frameworks/
- Langfuse vs Phoenix - ZenML: https://www.zenml.io/blog/langfuse-vs-phoenix
- Arize Phoenix vs Braintrust: https://www.braintrust.dev/articles/arize-phoenix-vs-braintrust
DeepEval
- DeepEval Docs: https://docs.confident-ai.com/
- DeepEval GitHub: https://github.com/confident-ai/deepeval
- Confident AI Platform: https://confident-ai.com/
Langfuse
- Langfuse Docs: https://langfuse.com/docs
- Langfuse Tracing: https://langfuse.com/docs/tracing
- Langfuse Scores Overview: https://langfuse.com/docs/scores/overview
- Langfuse Model-Based Evals: https://langfuse.com/docs/scores/model-based-evals
- Langfuse Custom Scores: https://langfuse.com/docs/scores/custom
- Langfuse Human Annotation: https://langfuse.com/docs/scores/annotation
- Langfuse External Evaluation Pipelines: https://langfuse.com/docs/scores/external-evaluation-pipelines
- Langfuse Datasets Overview: https://langfuse.com/docs/datasets/overview
- Langfuse Experimentation: https://langfuse.com/docs/experimentation
- Langfuse Prompt Management: https://langfuse.com/docs/prompts/get-started
- Langfuse Integrations Overview: https://langfuse.com/docs/integrations/overview
- Langfuse OpenTelemetry Integration: https://langfuse.com/docs/integrations/opentelemetry
- Langfuse Open Source: https://langfuse.com/docs/open-source
- Langfuse Self-Hosting: https://langfuse.com/docs/deployment/self-host
- Langfuse Playground: https://langfuse.com/docs/playground
- Langfuse Pricing: https://langfuse.com/pricing
- AI Agent Observability with Langfuse: https://langfuse.com/blog/2024-07-ai-agent-observability-with-langfuse
- Langfuse for Agents Changelog: https://langfuse.com/changelog/2025-11-05-langfuse-for-agents
- Evaluating AI Agent Skills: https://langfuse.com/blog/2026-02-26-evaluate-ai-agent-skills
- Langfuse v3 Infrastructure Evolution: https://langfuse.com/blog/2024-12-langfuse-v3-infrastructure-evolution
- Langfuse and ClickHouse: https://clickhouse.com/blog/langfuse-and-clickhouse-a-new-data-stack-for-modern-llm-applications
- Langfuse Architecture Handbook: https://langfuse.com/handbook/product-engineering/architecture