Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

README.md

Outline

Axon Eval

Axon 的能力基准(benchmark)评估体系。不是单元测试 —— 这里跑真实的 LLM 调用, 拿 Pass@1 / cost / 耗时三件套衡量整个 agent 编排能否稳定完成任务。

快速开始

# 跑最便宜的 3 题 smoke(首次推荐)
npm run eval:smoke

# 跑全套 curated
npm run eval

# 换模型
tsx evals/cli.ts smoke --model opus

# Pass@3(每题独立跑 3 次)
tsx evals/cli.ts smoke --attempts 3

# 失败时保留 tmp workspace 便于排查
tsx evals/cli.ts smoke --keep-failed

目录

evals/
├── runner/                # 评估引擎(任务执行、trajectory、指标聚合)
│   ├── types.ts           # EvalTask / EvalResult / 指标类型
│   ├── runner.ts          # 核心:单题/套件执行
│   ├── workspace.ts       # tmp 工作目录管理
│   ├── trajectory.ts      # tool call 轨迹 + edit churn
│   └── reporter.ts        # markdown + jsonl 输出
├── suites/
│   └── curated/           # 内部 curated 任务(每题一个目录)
│       ├── index.ts       # 注册中心,SMOKE_TASKS 是子集
│       ├── 001-create-file/
│       ├── 002-fix-typo/
│       └── 003-rename-symbol/
├── cli.ts                 # 命令行入口
└── reports/               # 运行结果(gitignored)
    └── <runId>/
        ├── report.md
        ├── results.jsonl
        ├── summary.json
        └── trajectories/<taskId>-attempt<N>.json

指标体系

Tier-1 — North Star(对外公布的核心)

指标 定义
Pass@1 单次跑通 verify 的任务比例
Cost per resolved 总 USD ÷ 成功数(避免"暴力多轮刷分")
p50 wall time 中位耗时

Tier-2 — Diagnostic(找瓶颈)

  • Pass@N — N 次内至少一次通过(衡量稳定性)
  • Avg input / output tokens
  • Avg turns / tool calls
  • Avg edit churn — 同文件被反复改的次数(返工率)
  • Failure mode breakdownwrong_fix / no_progress / crash / timeout / budget_exceeded / max_turns

任务格式

每个任务是一个 EvalTask 对象:

{
  id: 'curated-XYZ-...',
  suite: 'curated',
  title: '...',
  prompt: '...',         // 给 agent 的指令
  setup(env): Promise,   // 准备工作目录(copy fixture 等)
  verify(env): Promise,  // 返回 {passed, reason, log}
  budget: {              // 单题硬上限
    maxTokens, maxTimeSec, maxTurns, maxBudgetUSD,
  },
}

详见 runner/types.ts

设计取舍

  • 真实 LLM 调用:smoke 跑得起、贵题(SWE-bench)单独排期。第一版不内置 mock。
  • 单题 workspace 隔离:每题独立 mkdtemp 临时目录,跑完即清。 失败时可 --keep-failed 留底排查(路径在日志里)。
  • Pass@N 是独立 N 次 run,不是隐式重试:runner 不会偷偷"看到失败就重跑"。
  • 没有 docker / sandbox:Step 1 只覆盖 curated,agent 在临时目录里跑 node 等本地命令。 Step 3 接 SWE-bench 时再单独加 sandbox 层。
  • 认证复用主进程:通过 initAuth() / getAuth() 透传,跟用户日常用 axon 的凭证一致。

路线(Step 1 = 当前)

  • Step 1:骨架 + 3 个 smoke 任务 + npm run eval:smoke
  • Step 2:扩到 20 个 curated 任务(覆盖 blueprint / 配置 / 多工具协同)
  • Step 3:SWE-bench Verified Python 子集(30 题)+ docker sandbox
  • Step 4:对标 Claude Code CLI baseline + 消融实验

已知坑

  • LLM 非确定:Pass@1 单点噪声大,对外公布前至少跑 --attempts 3
  • cost 估算依赖 axon 自己的 client 计价:换 provider(axon-cloud / openai-compatible)时 价格表是否准确需单独验证。详见 LLM Provider Reality
  • smoke 也会真烧 token:每次 PR 都跑 3 题 ≈ $0.05-0.30,对应 1-3 分钟。
  • OAuth subscription 用户的 cost 是"理论价":报告里的 $X.XXXX 是按 Anthropic API 公开费率 从 token 数算出来的,OAuth 包月用户实际不会按此再扣费。要对标真实开销时用 API key 鉴权再跑一次。
  • tokens.totalTokens = input + output,不含 cacheRead:缓存读取在 trajectory JSON 的 cacheReadInputTokens 字段单独保留,按 Anthropic 计费语义不计入 total。
  • modelStats 是进程级全局:runner 用 baseline-diff 隔离每题统计,所以必须串行跑。 未来若要并行,需重构成 per-loop client 维度。
Morty Proxy This is a proxified and sanitized view of the page, visit original site.