在过去程序的开发中,大家用测试来保障程序质量与程序员今晚不会被 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/

