@c轨道/evals
代理和工作流程的Evals在一个电话: 运行每个案件,检查它, 打印摘要,当检查缺失或下降超过允许时失败.
安装
bun add @corbits/evals
仅装入(>=1.2.0).
示例
import { mentions, runEvaluation, under } from "@corbits/evals";
const report = await runEvaluation({
name: "refund-agent",
task: refundAgent, // an @intx/agent Agent, workflow(), or (input) => output
data: [{ name: "duplicate charge", input: "I was charged twice" }],
scorers: {
refunds: mentions(["refund"]),
readyToSend: "Is this reply ready to send to the customer?",
fast: under({ ms: 5_000 }),
},
allow: { readyToSend: 1 },
compare: "evals/refund.last.json",
about: { model: "qwen2.5:7b" },
});
console.log(report.markdown());
检查
scorers 将名称映射到支票。 无 scorers,一个 matches 检查
比较产出与 expectedOutput。每张支票都会运行
r = { input, output, expectedOutput, steps, ms }· ; output 不论跑什么
已经返回.
- 代码数字 :
(r) => boolean | number,同步或同步。 数字是0.1 并且只在1时通过;返回布尔以选择自己的阈值,或{ pass, value, explanation }细节. - 句子:对Jev来说是/不是关于跑步的问题. 传球
页:1
yes,失败no(默认情况下为0.7/0.3),以unsure (p=…)在中间.{ question, yes, no }设置自己的栏杆. - 帮助者数字 :
| 帮助者 | 当 |
|---|---|
matches(field?) | 输出值,或每个输出值的同字段(键或存取器) |
includes() | 既包含字符串,又包含在 NFKC 、 三进制和白空间崩溃后预期输出; 值为 1 或 0 |
fitsSchema(schema) | 输出满足标准Schema( 暗型、 zod 、 valibot) |
mentions(words) | 输出包含每个单词, 对大小写不敏感; 值是找到的分数 |
avoids(words) | 输出中没有任何单词 |
ranSteps(names) | tool 财务报告和审定财务报表 step 名称匹配 names,命令被忽略;值是他们的F1. 代理轨迹来自 stream()。 。 。 . ranSteps([]) 失败当 steps 为空。 观测到的只使用模型的运行( 万步、 无工具或步骤名称) 仍然通过 |
stepsAtMost(n) | 运行最多 n 步骤 |
under({ ms }) | 在内部完成运行 ms |
ask(q, { options, pass }) | Jev 选择一个在 pass |
ask(q, { options, passAt }) | Jev选择一个选项;其信用值(0.1)是价值,并经过 passAt |
ask(q, { levels, pass }) | Jev职等 pass 或以上(最低一级) |
mentions 财务报告和审定财务报表 avoids 还带 (r) => words 每一个字.
mentions 财务报告和审定财务报表 ranSteps 带 { atLeast } 以通过部分信用.
ask 无法确定 Jev 最高概率低于 sure
(默认为0.6;支票本身) sure ) (中文(简体).
一张扔出、挂出 timeout,或返回任何其它失败
它的兄弟姐妹仍然在奔跑。 Jev运输故障关闭 .
杰夫看见了 { input, output, expectedOutput, steps },而一个案件的字符串和
ask 检查在一个电话中回答。 该模型没有配置在 systemOne()。 。 。 .
用它来建造 judgeModel({ model, invokeStep, thresholds, escalate, timeout })
从 @corbits/evals/workflow。 。 。 . model 是一个工作流程步骤(或一个步骤)
工作流程. invokeStep 运行该步骤;其输入是 { state, questions }
它的输出是 { decisions } 或者说 { fallback: true, reason }。 。 。 .
systemOne({ thresholds, escalate }) 只能设置条和升级剂.
jev 是一种异名 systemOne。 。 。 .
门槛值:p(是) ==== yes 失败
页:1 no (0.7个/0.3个); ask 无法确定当它的顶端
概率低于 sure (0.6) (中文(简体) ). 调整他们每个法官
judgeModel({ thresholds: { yes, no, sure }, ... }) 或按上述检查.
阈值被调取到法官的版本,所以把继子代理的模型钉上
当他们必须保持稳定.
升级 : sure 两倍于升级门。 给法官一个
代理人 - escalate 打开 systemOne 或者说 judgeModel,任何东西
send(prompt) 返回时 { type: "reply", reply } 或者说
{ type: "suspended" },例如 @intx/agent 来自 a 的代理 @corbits/*
适配器——每个不确定的决定都重新得到准确的答案
空间。 回答通过同样的通过规则 减去信心
门,所以主不肯定在升级后仍然会失败. 掷出,
已中止,或解答空格回复失败。 验证
jev的不确定语没有提及
倒置的精确度,推理模型 可能回答的答案
空间无法吸收——这些故障被设计关闭.
运行
- 函数数字 :
(input, signal) => output。 。 。 .signal终止于timeout。 。 。 . - 探员页:1
@intx/agent探员,被检测到send输入 作为信件;输出是回复。 当代理有stream()步骤 从该溪流录入(inference.done作为llm, (中文(简体) ),tool.start编号 :tool.done作为tool) (中文(简体) ). 拒绝执行的政策tool.done无tool.start; 当inference.tool_call.end或助理人员tool_call块名。 仅回复发送而不发送stream叶子steps空, 失败ranSteps([])。观察到 只有模式运行仍然通过. - 工作流程数字 :
workflow(definition, { invokeStep })从@corbits/evals/workflow定义无法在本地运行 步调引用器,根从不加载@intx/workflow,所以一个裸体 定义被拒绝。 每一步都着陆r.steps。 。 。 .output选择 由完成运行生成( 默认: 最后列出的步骤输出) ,trigger绘制触发有效载荷的输入图。 没有他们,键入 以workflow<I, O>(...)。相同的条目出口judgeModel页:1 字符串和ask计分者. 只有密码的Eval不需要法官.
repeats 运行了多次; 只有每次才通过检查
尝试通过. concurrency (违约4)限制飞行中的案件;
timeout (单位:千美元)"60s" 或 ms) 绑定每次运行和每次检查.
案例
数组 { name?, input, expectedOutput?, must?, skip? },或路径 a
相同对象的JSONL文件. 地面真实的关键是 expectedOutput。 。 。 .
expect 财务报告和审定财务报表 expected 掷出. name 将案件输入报告
比较运行和默认与输入.
通过
await runEvaluation({
name: "judge",
task: run,
data, // a case can say { must: ["tests"], skip: ["docs"] }
scorers,
compare: "evals/judge.last.json", // read: measure drops against it
save: "evals/judge.last.json", // write: store this experiment, pass or fail
allow: {
tests: { miss: 1, drop: 0 },
docs: { miss: 5, drop: 2 },
focused: 3, // { miss: 3 }
},
});
每一次检查, allow 集( 默认 0 ):
- 错过:可能失败的案件.
- 丢入案件数:
compare运行,现在可能失败。 A 类 固定大小写不会抵消一个破旧小写.
一个案子 must 检查必须通过任何 allow 说; 其 skip 检查
没有运行或计算.
runEvaluation 打印每个记分员的通行证, 丢失和丢弃, 并用
EvalFailure 命名每个失败的计分器及其失败的极限
案例; .report 保持每个结果.
实验是每个案例×分数的通过和价值——加上Jev分数的
概率分布和信心——以及 about没有时间.
已保存的文件为格式 2: { format: 2, name, cases }。任何其他 format, (中文(简体) ),
包括格式1,拒绝.
compare 只读; 缺少的文件跳出. save 只写, 在
每一跑步都一样 两者的一条路径与上次实验相比,然后替换
这个. compare 还从早期开始做实验 runEvaluation 成员名单
评估, 没有文件 : runEvaluation({ ...spec, compare: before.experiment })。 。 。 .
翻转打印为 fixed 编号 : broke,新案件和已结案案件作为 added 编号 :
removed。 。 。 . quiet: true 跳过摘要.
国 际
软件包本是 corbits-eval (单位:千美元)./dist/cli/index.js) (中文(简体) ).
corbits-eval run ./evals/refund.ts
corbits-eval run ./evals/refund.ts --format json
文件是从当前工作目录中解析的ES模块路径.
corbits-eval 装入 evaluation 当它是光谱对象时导出, 否则
默认导出时为 spec 对象,否则为零参数
用于其中任一出口。 该函数必须返回一个 spec 。 没有其他
出口读取.
一个 spec 是对象 runEvaluation 接受(name, (中文(简体) ), data, (中文(简体) ), task, (中文(简体) ),
scorers,和其余部分). 案件行使用情况 expectedOutput。CLI呼吁
runEvaluation;它不会自己得分.
退出代码 :
| 代码 | 何时 |
|---|---|
| 0 个 | 跑道经过它的大门 |
| 1个 | 评估失败的门 |
| 2个 | 缺少文件、 导入失败、 没有光谱导出或评价未运行 |
--format json (和 --json)来源于意外事故,仅将JSON的结果印出于stdout上,没有人类摘要. 退出 1 仅是一个失败的闸门( E)EVAL_FAILED) (中文(简体) ). 在运行开始前停止运行的配置, 如空 data 或字符串或 ask 无计分器 judge.invoke,2号出口.
工作流量计分器
@corbits/evals/workflow 还输出了4名预先建造的一阶法官。 每个
用钉子 { provider, model } 也不称模式本身:
faithfulness, (中文(简体) ), answerRelevancy, (中文(简体) ), correctness,以及 trajectoryAccuracy。 。 。 .
每个返回 { definition, payload, failure }运行 definition 与
workflow,使用 payload(run) 作为触发器。 结果是 payload
是结果; failure 是无法判断运行时关闭的错失 .
parsePrebuilt(id, output) 读取步骤的类别或分数 JSON.
judgeModel 预期 { decisions } 或者说 { fallback } 不运行
这些主题. includes 留下来
对根包进行代码检查.
中断更改
- 保存的实验必须是格式2(
{ format: 2, name, cases }。格式 1 被拒绝. - JSONL 行数
expectedOutput。 。 。 .expect财务报告和审定财务报表expected掷出. ranSteps([])失败当steps为空。 观测到的只有模式运行仍然通过.
校正
阈值是每个工作负荷的起点,而不是常数. calibrate
通过 Jev 运行标有标签的样本一次, 并打印、 检查、 检查次数
判决同意,土地不确定,或自信地不同意每个门槛:
const table = await calibrate("refund-agent", {
run: refundAgent,
cases: labeledCases, // { input, expectedOutput?, labels: { readyToSend: true } }
checks: { readyToSend: "Is this reply ready to send to the customer?" },
judge,
});
console.log(table.markdown());
有/无检查扫描 yes 与 no 镜像; ask 扫描 sure粘贴
建议在支票或法官中取消。 没有自信
分歧是目标;如果没有分歧,获胜最少.
同伴
@corbits/evals数字 :@intx/inference财务报告和审定财务报表@intx/types,同龄人@corbits/system-one。 。 。 .@corbits/evals/workflow数字 :@intx/workflow(可选).
实例
examples/ 与当地奥拉马(bun examples/<name>.ts) (中文(简体) ).
examples/ports/ 共同价值模式和打印协议
aBCDE 事实性,关键词
重叠 忠诚 双向战斗 1-10帮助.
盖茨
bun run check =打字检查+lint+格式:检查+单位+e2e.
行为生活在 e2e/· ; src 单位测试保持稀薄.