AIHero
    阅读约 4 分钟

    Evalite v1 预览:快速评估与内置 Scorer

    Evalite v1 提供 10 个生产就绪的 Scorer(字符串匹配、RAG 评估、智能体测试),并默认使用内存存储。目前仍处于 beta 阶段。

    Matt Pocock
    Matt Pocock
    源代码
    本页目录

    如果曾经构建过评估,你一定了解其中的痛苦。每次检查 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 context
    model: yourModel,
    }),
    },
    ];

    高级 Scorer

    用于专门场景:

    • toolCallAccuracy ——评估智能体是否以正确参数调用了正确工具
    • noiseSensitivity ——通过加入噪声并检查一致性来测试提示词鲁棒性

    工具调用 accuracy 对智能体评估至关重要:

    scorers: [
    {
    scorer: ({ output }) =>
    toolCallAccuracy({
    actualCalls: output.toolCalls,
    expectedCalls: [{ toolName: "search", input: { query: "..." } }],
    }),
    },
    ];

    自由组合 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.ts
    import { 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 automatically
    const result = await generateText({
    model,
    prompt: input.question,
    });
    return result.text;
    },
    scorers: [
    {
    // Also cached automatically
    scorer: (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?

    请在以下平台参与讨论: Discord 或在以下位置提交 issue: GitHub.