建立任务夹具,跑通第一次评估
定义输入、环境和完成标准,先验证评分器,再运行真正的智能体任务。
建立任务夹具,跑通第一次评估
智能体回复“检查完成”,不等于它读取了正确文件,更不等于报告准确。评估需要把“希望它做什么”写成独立可核查的条件,再运行任务并保存证据。
这篇先做四个很小的任务:命名函数、箭头函数、缺失文件和不需要工具的请求。规模小是为了能解释每个分数,不是用四个用例代替完整质量评测。
独立示例位于仓库 columns/coding-agent/examples/evaluation-optimization/,固定 Pi 相关依赖为 1.5.0。先在该目录执行 npm install,下文命令也从此处运行。离线样本不需要密钥;真实模型入口另行配置,不会由测试自动触发。
把一个任务拆成输入与判定
src/tasks.ts 保存任务定义。prompt 交给模型,expected 只交给评分器;不要为了让实验稳定,把参考答案也拼进模型上下文。
export interface Report {
file: string
status: "ok" | "missing"
names: string[]
}
export interface Task {
id: string
prompt: string
file?: string
expected: Report | "ready"
}
// 这些期望值只交给评分器,不进入模型提示或工具实现。
export const tasks: Task[] = [
{
id: "named",
file: "sample.ts",
prompt: "检查 sample.ts 的命名 function 声明,返回 JSON 报告。",
expected: { file: "sample.ts", status: "ok", names: ["greet"] },
},
{
id: "arrow",
file: "arrow.ts",
prompt: "检查 arrow.ts 的命名 function 声明,返回 JSON 报告。",
expected: { file: "arrow.ts", status: "ok", names: [] },
},
{
id: "missing",
file: "missing.ts",
prompt: "检查 missing.ts,文件缺失也应如实返回 JSON 报告。",
expected: { file: "missing.ts", status: "missing", names: [] },
},
{ id: "no-tool", prompt: "不要检查文件,不调用工具,只回复 ready。", expected: "ready" },
]fixtures/sample.ts 只有一个命名 function 声明,arrow.ts 包含箭头函数,missing.ts 故意不存在。检查器只做文本匹配,因此箭头函数的预期 names 为空;这不是声称箭头函数不存在,而是明确当前任务的能力边界。
参考结果应先通过评分,再故意改坏字段、删除工具证据或修改输入,确认评分能发现问题。一个从未见过失败样本的评分器,很容易只是在验证“程序可以运行”。
先运行离线评分检查
npm run typecheck
npm test
npm run eval:offlineoffline 输出包含 mode: synthetic-fixtures-not-agent-performance。它用手写的 baseline/candidate 结果测试评分与报告,故意让其中一份箭头函数答案出错。输出的分差属于预设数据,不是模型调优收益。
测试中的 Agent 循环也使用模拟流,只验证工具执行和评测适配逻辑。模拟流照着已知答案返回结果,不能证明真实模型会选择工具或遵守格式。
再选择是否运行真实任务
在本地终端配置 EVAL_PROVIDER、EVAL_MODEL、EVAL_API_KEY,选择固定版本内置目录支持的模型,然后执行:
npm run eval:live -- prompt 1该命令运行四任务、两组、各一次,共八个 arm,可能包含多轮模型请求,会消耗实际配额。它不读取个人 Pi 凭据,也没有费用硬上限;密钥只从显式环境变量进入内存连接。
每个 arm 创建独立 Agent,不共享会话历史;工具只能读取三个教学文件名。它没有 shell 和写入工具,但这仍不是运行任意恶意代码的沙箱。线上模型、服务端缓存和负载也不因新建 Agent 就完全独立。
从小样本开始,保留真实任务分布
确定性检查通过后,再增加常见任务、失败样本、边界输入和不应调用工具的反例。公开开发集用于快速修正,保留集用于验证有没有只适应已知答案;二者都需要版本与来源。
新任务应能被参考实现解决,评分规则应与用户请求一致。比如任务没有要求某个报告文件名,评分却只检查那个路径,得到的失败可能是评测设计问题。完成标准要约束必要结果,同时允许合理实现方式。
依据与版本
官方本地快照为 8efd314fa,evals 包标记 1.3.0;本系列示例另按发布包 1.5.0 核验。官方 evals 是 private 工作区包,教程使用自定义教学协议,不冒充稳定公共评测 SDK。