
人工智能AI Agent代码智能体AI 应用CLI开发工具【免费下载链接】forgecodeAI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300 models项目地址https://gitcode.com/gh_mirrors/forge39/forgecode点击查看免费下载Forge Code 仓库自带一套灵活的评测框架位于 benchmarks/用于对 Forge Code 命令执行自动化测试与基准评估开发者只需编写一份task.yml任务定义与若干 CSV 测试数据即可让框架自动运行命令、校验输出、汇总通过/失败/超时统计。本文将以 benchmarks/README.md 为骨架结合 cli.ts、task-executor.ts、verification.ts 等源码与仓库内真实评测用例如 create_skill、commit_no_markdown完整讲解评测的搭建、运行、校验与排错全流程。评测框架概览它能做什么评测系统基于任务定义执行命令并对输出进行校验核心能力包括并行执行通过parallelism配置并发度默认串行parallelism: 1超时处理为长任务设置timeout秒超时后强制终止并标记为timeout数据驱动测试用 CSV 文件提供测试用例CSV 列名自动成为命令模板变量输出校验支持正则regex与 Shell 命令shell两种校验方式调试产物每次运行生成带时间戳的 debug 目录完整记录 stdout 与 stderr。从 model.ts 的类型定义可以看到任务模型的全貌Task包含before_run前置命令、run可单条或多条、parallelism、timeout、early_exit、validations、sources七个字段校验器Validation则区分regex/shell/llm三种类型数据源Source区分csv/cmd/value三种形态。快速开始环境准备与首次运行创建 forgee 符号链接评测任务会在临时目录中执行因此../../target/debug/forge这类相对路径无法生效。正确做法是先把调试版二进制做成一个 PATH 内的稳定绝对路径符号链接# 将符号链接放入 PATH例如 ~/bin 或 /usr/local/bin ln -sf /path/to/code-forge/target/debug/forge ~/forgee # 如果 ~/bin 已在 PATH 中 ln -sf $(pwd)/target/debug/forge ~/bin/forgee这一设计原因在 cli.ts 中可以得到印证每个任务都会通过createTempDir创建独立的临时工作目录命令在其中以shell: true方式spawn执行相对路径在不同工作目录下不可靠符号链接保证了任意目录下都能解析到二进制。运行一个评测# 运行评测两种参数形式都支持目录路径或直接指向 task.yml npm run eval ./evals/create_skill/task.yml # 设置自定义日志级别 LOG_LEVELdebug npm run eval ./evals/create_skill/task.ymlparse.ts 说明 CLI 参数解析规则既支持传评测目录自动拼接task.yml也支持直接传.yml/.yaml/task.yml文件路径cli.ts启动后会校验评测目录与任务文件是否存在随后解析 YAML、创建带时间戳的 debug 目录并开始执行。项目结构评测代码与用例的组织方式benchmarks/ ├── cli.ts # 主 CLI 入口参数解析、调度、汇总输出 ├── command-generator.ts # Handlebars 命令模板渲染与数据叉积生成 ├── task-executor.ts # 任务执行含超时与 early_exit 支持 ├── model.ts # TypeScript 类型定义Task / Validation / Source ├── parse.ts # CLI 参数解析与路径解析 ├── verification.ts # 输出校验regex / shell与结果汇总 ├── utils.ts # 临时目录、CSV 解析、时间戳与正则转义工具 └── evals/ # 评测定义目录 └── create_skill/ ├── task.yml # 任务定义 ├── create_skill_tasks.csv # 测试数据 └── debug/ # 调试输出带时间戳各文件的职责边界清晰cli.ts负责调度与汇总task-executor.ts负责单任务命令执行verification.ts负责校验command-generator.ts负责模板插值parse.ts负责参数解析。这种分层让新增一种评测类型只需关注task.yml与 CSV 数据。创建评测四步法第一步创建评测目录mkdir -p evals/my_eval第二步编写 task.yml任务文件定义了评测如何运行完整字段示例# 可选评测开始前执行的命令 before_run: - cargo build - npm install # 必填每个测试用例要执行的命令 # 单条命令 run: forgee -p {{prompt}} # 或多条命令顺序执行 run: - echo Step 1: {{task}} - forgee -p {{prompt}} - echo Step 2: Complete # 执行配置 parallelism: 10 # 并行任务数默认 1 timeout: 60 # 超时秒数可选 early_exit: true # 校验全部通过时提前终止命令可选 # 可选对输出执行的校验 validations: - name: Check success message type: regex regex: \[[0-9:]*\] Skill create-skill # 必填测试用例数据源 sources: - csv: my_tasks.csvTask File Schema 字段详解before_run可选评测开始前依次执行的 Shell 命令数组。在临时目录中顺序执行适合构建二进制、安装依赖。cli.ts中该步骤失败会直接process.exit(1)中止整个评测因此前置命令必须保证成功。run必填每个测试用例要执行的命令可为单字符串或字符串数组。命令支持 Handlebars 模板占位符如{{variable}}多条命令顺序执行若某条失败后续命令跳过。在 cli.ts 中空字符串与非字符串命令会被过滤若过滤后无有效命令则该任务标记为failed。parallelism可选并发执行的任务数默认 1串行。源码中使用p-limit限制并发cli.ts中取task.parallelism ?? 1。timeout可选每个任务的单条命令最大执行秒数。task-executor.ts中到点后以SIGKILL强杀子进程并返回已捕获的部分输出任务标记为timeout。early_exit可选当所有校验通过后立即终止命令执行。task-executor.ts会在每次 stdout/stderr 数据到达时调用runValidations一旦allValidationsPassed即发送SIGTERM提前结束进程适用于只要看到预期输出即可判定成功的交互型命令。validations可选校验规则数组字段说明name人类可读的描述type校验类型regex正则匹配输出或shell把输出作为 stdin 交给 Shell 命令regexregex 类型要匹配输出内容的正则表达式commandshell 类型接收任务输出的 Shell 命令exit_codeshell 类型期望退出码默认 0sources必填数据源数组当前支持- csv: filename.csv未来规划支持- cmd: command。源码中还实现了value类型内联数据例如 commit_no_markdown 直接用内联 value 提供 provider/model 组合无需外部 CSV。第三步创建 CSV 测试数据CSV 的列名会直接成为模板变量prompt,expected_output Create a backup script,backup.sh Generate API client,api_client.py之后即可在命令中用{{column_name}}引用。真实的 create_skill_tasks.csv 即用skill列提供了 10 条创建技能的 prompt配合 task.yml 中forgee -p {{skill}}与 shell 校验用jq检查工具调用参数中的create-skill名称构成完整用例。第四步运行评测npm run eval ./evals/my_eval/task.yml模板变量与多数据源叉积命令支持 Handlebars 模板语法变量来自 CSV 列。多个数据源同时存在时框架会生成所有数据源的笛卡尔积组合——这一逻辑在 command-generator.ts 的createCrossProduct中实现cli.ts中每个组合行都会作为一个独立任务执行。run: command: ./tool --input {{input_file}} --format {{format}} --verboseinput_file,format data1.txt,json data2.txt,yaml例如上面的配置会生成./tool --input data1.txt --format json --verbose与./tool --input data2.txt --format yaml --verbose两条命令。另有两个实用细节校验规则中的正则与 shell 命令同样支持模板插值verification.ts 会对regex与command先做 Handlebars 编译再执行框架注册了escapeRegexHandlebars helperutils.ts可在模板中安全转义特殊正则字符每个任务的上下文对象还会额外注入dir字段指向该任务的临时目录便于在命令或校验中引用cli.ts 中context { ...row, dir: taskTmpDir.name }。输出、调试与日志调试产物每次运行都会创建带时间戳的 debug 目录每个任务一份日志包含完整 stdout stderrevals/my_eval/debug/2025-11-23T10-30-45-123Z/ ├── task-1.log ├── task-2.log └── task-3.log日志文件头部会写入执行的命令、开始时间带本地时区偏移由 utils.ts 的formatTimestamp生成运行结束后追加结束时间与退出码超时与提前退出也会在日志中留下Killing process...等标记。ANSI 颜色码会被strip-ansi剥离保证日志干净可读task-executor.ts。任务状态任务共有四种状态model.ts 中TaskStatus枚举passed任务成功完成且通过全部校验validation_failed任务完成但至少一项校验未通过timeout任务超过超时限制多条命令中某条超时即整体标记failed命令执行失败非零退出码或没有有效命令。日志输出模式人类可读输出默认npm run eval ./evals/my_eval/task.yml机器可读 JSON 输出LOG_JSON1 npm run eval ./evals/my_eval/task.yml | jq .cli.ts中根据LOG_JSON环境变量选择 pino 的 JSON 格式含 ISO 时间戳或pino-pretty彩色人类可读格式LOG_LEVEL控制日志级别。评测结束时输出汇总统计总数、通过、校验失败、超时、失败数量、总耗时以及校验总数/通过/失败明细。调试日志LOG_LEVELdebug npm run eval ./evals/my_eval/task.yml五个实战示例示例 1简单顺序执行run: echo Processing {{name}} sources: - csv: names.csvname Alice Bob Charlie示例 2并行执行 超时run: ./slow_task --id {{task_id}} parallelism: 5 timeout: 30 sources: - csv: tasks.csv示例 3多条命令顺序执行run: - echo Starting task {{id}} - ./process --input {{file}} - echo Task {{id}} complete parallelism: 3 timeout: 120 sources: - csv: tasks.csv多条命令共享同一临时工作目录日志按顺序追加task-executor.ts中非首条命令以append模式写入同一task.log任一条失败即中止后续命令。示例 4Shell 命令校验run: echo {{message}} parallelism: 3 validations: # 用 grep 检查输出是否包含指定文本 - name: Contains test word type: shell command: grep -q test exit_code: 0 # 统计单词数并确保大于 2 - name: More than 2 words type: shell command: test $(wc -w | awk {print $1}) -gt 2 exit_code: 0 # 传统正则校验用于对比 - name: Contains test or validation type: regex regex: test|validation sources: - csv: messages.csvShell 校验的实现要点verification.ts任务输出通过 stdin 管道写入校验命令以spawn方式执行对于进程提前退出导致的 EPIPE 错误会静默忽略最终以退出码是否等于exit_code默认 0判定通过。示例 5正则校验run: cargo test {{test_name}} validations: - name: All tests passed type: regex regex: test result:\sok sources: - csv: tests.csv仓库内 commit_no_markdown 是一个更完整的真实案例它用多条run命令搭建一个临时 git 仓库并修改example.js随后调用forgee --provider {{provider}} --model {{model}} commit --preview生成提交信息再用正则校验必须包含 conventional commit 前缀、shell 校验确保输出不含 JSON 代码块标记与反引号包裹的提交消息数据源则以内联value形式提供 anthropic 与 open_router 两组模型组合。实用 Tips命令中为含空格的 CSV 值加引号command: forge -p {{prompt}}运行前先构建用before_run保证二进制最新before_run: - cargo build从低并行度起步先用parallelism: 1验证正确性再逐步提高parallelism: 1 # 从这里开始设置合理的超时防止任务挂起timeout: 60 # 秒失败时查看调试日志cat evals/my_eval/debug/*/task-1.log退出码约定CLI 的退出码含义见 cli.ts 末尾逻辑0全部任务通过timeout 与 validation_failed 不视为致命失败1存在一个或多个任务执行失败非零退出码或评测目录/任务文件缺失、CSV 缺失、无数据源等配置错误。另外cli.ts对EPIPE做了优雅处理——当输出管道给head或jq等提前关闭的进程时直接以 0 退出避免报错刷屏。将评测接入 CI 的建议结合上述退出码约定可将评测直接作为 CI 门禁npm run eval ./evals/name/task.yml在任务失败时返回 1可配合LOG_JSON1输出结构化结果供汇总与告警。调试产物目录evals/name/debug/timestamp/天然按时间归档适合作为历史比对与回归分析的数据源。评测用例随代码入库后团队成员即可通过统一的task.yml CSV 模式低成本扩展新的基准场景。赞分享人工智能AI Agent代码智能体AI 应用CLI开发工具【免费下载链接】forgecodeAI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300 models项目地址https://gitcode.com/gh_mirrors/forge39/forgecode点击查看免费下载相关推荐websocketd自动化测试框架单元测试与端到端测试实践websocketd自动化测试框架单元测试与端到端测试实践 测试框架概览 websocketd项目提供了一套完整的自动化测试体系涵盖单元测试与端到端测试场景CLIWebSocket后端如何快速上手trt-samples-for-hackathon-cnTensorRT新手必备教程如何快速上手trt samples for hackathon cnTensorRT新手必备教程 trt samples for hackathon cn是一AI安全评估新范式uncertain_ground_truth如何应对医疗AI中的标注分歧AI安全评估新范式uncertain_ground_truth如何应对医疗AI中的标注分歧 在医疗AI领域准确的诊断依赖于可靠的标注数据但专家之间的意见分上一篇惠普暗影精灵笔记本终极性能控制工具OmenSuperHub完整使用指南下一篇PC端微信QQ防撤回终极指南三分钟永久告别消息已撤回创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考