核心观点
传统确定性测试失效于 LLM 的概率性输出。Eval-Driven Development (EDD) 用「评测」替代「测试」,构建 AI-Native Flywheel:Evals → Data → Models/Strategies → Feedback → Evals,让 AI 系统在非确定性中持续进化。Vercel v0 即以此实现日级 prompt 迭代、零安全回归。
1. 为什么需要 Evals?
| 维度 | 传统代码 (确定性) | LLM (概率性) |
|---|---|---|
| 输入→输出 | 固定映射 | 黑盒、不可预测 |
| 测试方法 | 单测/集成测试 | Evals (端到端质量评估) |
| 核心挑战 | 覆盖率 | 变异性、主观质量、回归检测 |
类比:搜索引擎工程 20 年前已面对同样问题——海量查询、不可穷尽测试,只能靠 Eval 中心流程。
2. 三类 Eval 手段
| 类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Code-based | 客观标准(关键词、正则、AST、key prop、Tailwind vs inline) | 极快、零成本、可全自动 | 无法覆盖主观/语义质量 |
| Human | 创意、连贯性、清晰度、整体效果 | 细腻、权威 | 慢、贵、难规模化 |
| LLM-based | 复杂判断、大规模对比 | 可扩展、比人工便宜 | 成本 1.5-2× code-based、可靠性稍弱 |
最佳实践:三者组合,产出明确分数,便于趋势追踪(进步/退化)。
3. 实战案例:React 组件生成
| 预期 (Opinionated) | 实际输出 | 偏差 |
|---|---|---|
Arrow function + Tailwind (list-none p-0, font-bold) | function + inline style | 风格不符 |
key={index} | 无 key | 隐患(React 警告) |
| 结构化 JSX | 扁平 JSX | 可读性差 |
自动化检测点:
- Regex 扫描 inline style / Tailwind class
- AST 检查
keyprop 存在性 - 导入语句、多文件、注释密度(防偷懒)
4. AI-Native Flywheel(正向飞轮)
graph LR E[Evals 基石] --> D[Data 高质量数据] D --> M[Models & Strategies 模型/策略选型] M --> F[Feedback 用户反馈] F --> E
| 飞轮组件 | 关键作用 | Vercel 实践 |
|---|---|---|
| Evals | 替代直觉→数据决策,指引迭代方向 | Braintrust 自动化(LLM 评委 + 启发式 + 对比分析),PR 必跑全量 eval |
| Data | Garbage in, garbage out;Golden data 反哺微调 | Eval 暴露数据盲区 → 定向采集 |
| Models/Strategies | 新模型/新技术层出不穷,Eval 快速对比选优 | AI SDK 统一抽层,一键切模型对比 |
| Feedback | 显式+隐式+报错,闭环真实分布 | 显式:点赞/踩;隐式:重写/放弃;报错:异常捕获 |
5. Vercel v0 实战数据
| 指标 | 现状 |
|---|---|
| Prompt 迭代频次 | 几乎每日 |
| 安全/拒答 Eval 通过率 | 100% (零容忍) |
| 功能/美观/效率 Eval | 部分未通过 → 作为失败用例加入集合持续优化 |
| 新特性 (Vue/Python) 上线 | 必带配套 Eval 保质 |
| 内部 Dogfooding | 核心反馈源,发现盲区 |
自动化流水线:
- 脚本跑全量 eval suite
- 产出 pass/fail、回归、提升报告
- Braintrust 留存日志供人工复核
- 每个影响输出管线的 PR 必附 eval 结果
6. 给工程团队的清单
- 建立 Eval Suite:覆盖功能、风格、安全、拒答、边缘案例
- 三元评分体系:Code-based (主) + LLM-based (辅) + Human (终裁)
- Golden Data 维护:Eval 失败 → 数据盲区 → 定向清洗/增强
- 模型/策略对比基准:新模型发布即跑 Eval,选性价比最优
- 用户反馈入 Eval:显式/隐式/报错三通道 → 持续扩充测试集
- CI/CD 集成:PR 阻断式跑 Eval,回归即拦截
- 工具链选型:Braintrust / LangSmith / 自建,核心是可追溯、可复现、可对比
核心心法
- Eval ≠ Test:测试验证「代码逻辑正确」;Eval 度量「输出质量达标」
- 主观也要量化:用 LLM 评委 + 明确 rubric,把”好不好看”变成 1-5 分
- 飞轮不转则亡:无 Eval 无数据飞轮,无数据飞轮无持续进化
持续挑战
- Eval 维护成本随系统演进线性增长,需工具化降本
- LLM 评委自身有偏好/偏差,需人工校准
- 生产分布漂移需持续采样真实流量补入 Eval 集