Evalite v1 预览:快速评估与内置 Scorer
Evalite v1 提供 10 个生产就绪的 Scorer(字符串匹配、RAG 评估、智能体测试),并默认使用内存存储。目前仍处于 beta 阶段。
本页目录
如果曾经构建过评估,你一定了解其中的痛苦。每次检查 LLM 输出是否正确,都要再写一个自定义 Scorer:SQL 有效吗?出现幻觉了吗?JSON 格式正确吗?
Evalite v1(仍处于 beta)通过 10 个生产就绪的 Scorer 解决这些问题,并进行了重大架构升级,让入门变得非常简单。
完整文档请访问 v1.evalite.dev.
10 个内置 Scorer
Evalite v1 为最常见的评估场景提供了 Scorer,不必再重复造轮子。
字符串 Scorer
这些是用于简单文本验证的确定性 Scorer:
- exactMatch ——检查输出是否与预期字符串完全一致
- contains ——检查输出是否包含子字符串
- levenshtein ——使用 Levenshtein 距离进行模糊字符串匹配
其中 levenshtein Scorer 特别适合 SQL 生成或代码输出,因为细微的格式差异不应该导致评估失败:
scorers: [{scorer: ({ output }) =>levenshtein({actual: output,expected: "SELECT * FROM users WHERE id = 1",}),},];
RAG Scorer
它们使用 LLM-as-a-judge 评估 RAG 管道:
- faithfulness ——通过检查输出是否以上下文为依据来检测幻觉
- answerSimilarity ——比较输出与预期答案的语义相似度
- answerCorrectness ——对照 ground truth 评估事实正确性
- answerRelevancy ——检查输出是否真正回答了问题
- contextRecall ——衡量是否检索到了所有相关上下文
下面是使用 faithfulness 捕获幻觉的示例:
scorers: [{scorer: ({ output, input }) =>faithfulness({question: input.question,answer: output,groundTruth: input.context, // Retrieved contextmodel: yourModel,}),},];
高级 Scorer
用于专门场景:
- toolCallAccuracy ——评估智能体是否以正确参数调用了正确工具
- noiseSensitivity ——通过加入噪声并检查一致性来测试提示词鲁棒性
工具调用 accuracy 对智能体评估至关重要:
scorers: [{scorer: ({ output }) =>toolCallAccuracy({actualCalls: output.toolCalls,expectedCalls: [{ toolName: "search", input: { query: "..." } }],}),},];
想继续深入: 加入“面向真正工程师的 AI 编码”候补名单
自由组合 Scorer
真正的威力来自组合多个 Scorer。完整的 RAG 评估可能使用:
scorers: [{scorer: (opts) => faithfulness({ ...opts, model: yourModel }),},{scorer: (opts) => answerRelevancy({ ...opts, model: yourModel }),},{scorer: (opts) => contextRecall({ ...opts, model: yourModel }),},];
每个 Scorer 都返回 0~1 的分数,Evalite 会聚合这些分数,给出总体评估分数。
默认使用内存存储
最大的架构变化是: Evalite v1 默认使用内存存储.
以前必须设置 SQLite,这给新用户增加了阻力。现在只需运行 npx evalite 即可立即开始评估。
需要持久化?在配置中切换到 SQLite:
// evalite.config.tsimport { defineConfig } from "evalite/config";export default defineConfig({storage: {type: "sqlite",path: "./evalite.db",},});
但对大多数开发工作流而言,内存存储更简单,也省去了一项设置步骤。
深度集成 Vercel AI SDK
Evalite v1 围绕 Vercel AI SDK构建。使用以下方法包装任意 AI SDK 模型: wrapAISDKModel() 包装任意 AI SDK 模型,即可获得自动 tracing 和缓存。
缓存一切
不只是 Scorer ——缓存整个评估管道。包装任务函数、Scorer 或任何位置使用的模型:
import { wrapAISDKModel } from "evalite/ai-sdk";import { openai } from "@ai-sdk/openai";const model = wrapAISDKModel(openai("gpt-4"));evalite("RAG Eval", {data: [...],task: async (input) => {// Cached automaticallyconst result = await generateText({model,prompt: input.question,});return result.text;},scorers: [{// Also cached automaticallyscorer: (opts) => faithfulness({ ...opts, model }),},],});
这会彻底改变 watch 模式。修改 Scorer 逻辑、调整阈值、重构评估结构时,昂贵的 LLM 调用仍保留在缓存中,只运行发生变化的部分。
evalite watch
该包装器适用于所有 AI SDK 方法: generateText(), streamText(), generateObject()以及 streamObject().
生产环境零开销 - wrapAISDKModel() 在 Evalite 上下文之外调用时不会执行任何操作,生产代码会与以前完全一样运行。
DX 改进
最大的 DX 改进是 自动支持 .env,环境变量会自动加载。
Evalite UI 也获得了多项升级:
- 深色模式 ——根据偏好切换浅色/深色主题
- 表格渲染 ——对象和数组渲染为 Markdown 表格,而不是 JSON 树
- 重新运行按钮 ——无需重启,即可在 watch 模式下重新运行评估
- AI SDK 消息 UI ——直接传入 AI SDK 消息并获得自定义 UI 渲染
入门
Evalite v1 仍在积极开发中(beta)。由于功能还在演进,目前没有正式迁移指南。
尝试使用:
pnpm install evalite@beta
完整文档位于 v1.evalite.dev.
欢迎反馈
由于 v1 仍处于 beta,你的反馈会影响最终版本。发现 bug?希望增加尚未提供的 Scorer?