在实际部署 Codex 智能体时,往往只能凭感觉判断新技能是否真的“更好”。Codex 技能评估系统(Eval System)正是为了解决这一盲点而设计,它把每一次调用抽象为可度量的事件流,并通过结构化评分把主观体验转化为客观数据。
框架由三层组成:① 输入层——统一的提示词 CSV 或 JSON,明确标记“是否应触发”。② 执行层——使用 codex exec --json --full-auto 将模型运行过程记录为 JSONL;每一次 command_execution、item.started、turn.completed 都被捕获。③ 评分层——依据预设的 Rubric(通过/不通过、得分、备注)对事件进行确定性检查和定性打分。整个闭环可以在 CI 中自动循环,形成可追溯的改动历史。
package.json、src/components/Header.tsx)。npm install → npm run build),是否出现了无效循环。usage.input_tokens 与 usage.output_tokens,对比不同版本的 Token 预算,及时发现提示词膨胀。典型的实现步骤如下:1)准备 evals/setup-demo-app.prompts.csv,每行包括 id、expect_trigger、prompt。2)脚本遍历 CSV,调用 codex exec --json 并把输出写入 artifacts/ 目录。3)解析 JSONL,使用 Node.js 或 Python 编写的 deterministic checks(如 event.type==="command_execution" && event.command.includes("npm install"))得到布尔结果。4)将布尔结果喂入 Rubric JSON Schema,生成统一的 score 与 checks,最后写入 results/。
以 “setup-demo-app” 为例,评估 CSV 包含四条记录:两条显式调用(提示中直接写 $setup-demo-app),一条隐式描述(只说“快速搭建一个 React + Tailwind 示例”),以及一条负向控制(要求在已有项目中添加 Tailwind,不应触发)。执行后,JSONL 中出现了 item.completed 事件记录了 npm create vite@latest、npm install、tailwindcss init 的完整链路。通过脚本检查发现:所有正向案例均生成了 src/components/Card.tsx,负向案例却误创建了新项目——这正是名称/描述歧义导致的误触发。
{"overall_pass":false,"score":62,"checks":[{"id":"trigger","pass":false,"notes":"误触发导致重复项目创建"},{"id":"npm_install","pass":true,"notes":"依赖已完整安装"},{"id":"tailwind","pass":true,"notes":"配置文件匹配"}]}
把这条误触发记录加入 CSV,重新跑一遍,系统立刻捕获到名称冲突并给出警示。随后在 SKILL.md 的 description 中加入 “仅在空目录下使用” 的限定语,后续评估再未出现同类回归。这样一步步把手动发现的缺陷固化为自动化检查,技能迭代的每一次提交都能用数据说话。
参与讨论
这个评估思路挺靠谱的。
误触发的例子有点笑点。
又是标题党,名字太长。
这套Rubric能直接套用到Python项目吗?