NiceEval: 为你的 Agent 构建评估

查看 30|回复 2
作者:HXHL   
评估的意义
在过去程序的开发中,大家用测试来保障程序质量与程序员今晚不会被 oncall 可以安全下班的自信。而现在评估对于 Agent 也是一样意义。
除了保障功能本质,迭代功能本身也需要评估。换模型、调提示词,同一套用例跑一遍看分数在哪些用例是差一点,在哪些指标上更好了。
Langfuse 与 BrainTrust 有什么问题
尽管现在市面上已经有了 DeepEval 、LangFuse 、BrainTrust 。但是它们是 Prompt Enginering 时代的产物,现在 Agent 评估套进 Dataset 还有 Golden 的模型会非常别扭。
随着开发范式收敛,Agent 胜出,所以我做了 NiceEval ,是一个开源、专为 Agent 设计的估计工具。 在 Agent 需要评估多轮对话、工具调用还有 Skill 加载的场景,都能被很好的解决了。
import { defineEval } from "niceeval";
export default defineEval({
  description: "实时天气必须走 get_weather 工具,不许编造",
  async test(t) {
    const turn = await t.send("北京今天天气怎么样?");
    t.succeeded();
    t.calledTool("get_weather", { input: { city: "北京" } });
    t.notCalledTool("web_search");
    t.eventOrder(["action.called", "action.result", "message"]);
    t.messageIncludes(/°C|晴|多云|雨/);
    await t.group("预算内完成", () => {
      t.maxToolCalls(2);
      t.maxCost(0.05);
    });
    t.judge.autoevals
      .closedQA("助手是否给出了具体的天气数据,而不是含糊其辞?")
      .atLeast(0.7);
  },
});
用 NiceEval 快速接入你的应用
在 NiceEval 里,写一个 Adapter就能把自己的 Agent 系统接进来。可以非侵入式的快速开始。来实现测试不同模型在相同评估用例下面的表现。
如果你还想更进一步,测试在不同 Prompt 、不同记忆算法下的表现。在 NiceEval 也是非常好实现的。 在 Exp 中定义 flag ,然后在 Adapter 把 Flag 传给你的 Agent ,然后使用不同的逻辑就可以了。
// experiments/prompt-v1.ts
export default defineExperiment({
  agent: webAgent({ baseUrl: "https://staging.example.com" }),
  model: "gpt-5.4",
  flags: { promptVersion: "v1" },
});
// experiments/prompt-v2.ts
export default defineExperiment({
  agent: webAgent({ baseUrl: "https://staging.example.com" }),
  model: "gpt-5.4",
  flags: { promptVersion: "v2" },
});
评估与看结果
pnpm exec niceeval exp 实验名
pnpm exec niceeval view

结束
给我一个 ⭐ 吧: https://github.com/CorrectRoadH/NiceEval
官网: https://niceeval.com/

NiceEval, agent, 评估

kandaakihito   
对 agent 框架有要求不🤔
HXHL
OP
  
@kandaakihito 评估是框架无关的。是需要写一些代码对于你 Agent 前端发消息那个接口进行适配的。然后如果是比较标准的 Open Responses ,有预定义对应的适配器。
然后不同流行的框架比如 AI SDK 、Codex SDK 、Claude Agent SDK 有给对应的 OTel 协议的转换适配。这样在评测报告里面可以看到瀑布图。像 Langfuse 一样。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部