确定性、证据可密封的智能体轨迹评测框架。 确定性、证据可密封的 agent 轨迹评测框架。
39.2/100
综合分
15
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/15 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装;安装清单取自 control/package.json,但该清单仅靠 dependencies 声明 @deepseek-ai/dsh*(未声明 dsh 字段),可能为运行时而非插件;安装清单取自 control/package.json。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xyrrrrr-r/aeval该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/21) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装;安装清单取自 control/package.json,但该清单仅靠 dependencies 声明 @deepseek-ai/dsh*(未声明 dsh 字段),可能为运行时而非插件;安装清单取自 control/package.json
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包aeval-control(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/26 08:53:33
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 24 处,展示前 24 条)
- 读取本地文件control/dist/broker_main.js:195
text = readFileSync(path, 'utf8'); - 读取本地文件control/dist/gateway_lease.js:225
const token = readFileSync(fd, 'utf8').trim(); - 发起网络请求control/dist/gateway_lease.js:257
const response = await fetch(`${this.#config.gatewayUrl.replace(/ $/, '')}${path}`, { - 发起网络请求control/dist/gateway_lease.js:272
const response = await this.request('/info', signal ? { signal } : {}); - 发起网络请求control/dist/gateway_lease.js:329
const response = await abortable(() => this.request('/stream', { method: 'POST', body: JSON.stringify(body), signal }), signal); - 读取本地文件control/dist/host_broker.js:314
? createTlsServer({ ...serverOptions, key: readFileSync(tls.key), cert: readFileSync(tls.cert) }, handler) - 写入本地文件control/dist/host_broker.js:454
writeFileSync(path, token, { mode: 0o600, flag: 'wx' }); - 读取本地文件control/dist/host_broker.js:467
stat = lstatSync(path); - 删除本地文件control/dist/host_broker.js:477
unlinkSync(path); - 发起网络请求control/dist/token_bound.js:96
response = await fetch(endpoint, { method: 'POST', headers, body, redirect: 'error', signal }); - 发起网络请求control/dist/upstream.js:203
response = await fetch(this.#url, { - 发起网络请求control/dist/upstream_responses.js:445
response = await fetch(this.#url, { - 读取本地文件control/src/broker_main.ts:237
text = readFileSync(path, 'utf8'); - 读取本地文件control/src/gateway_lease.ts:242
const token = readFileSync(fd, 'utf8').trim(); - 发起网络请求control/src/gateway_lease.ts:316
const response = await fetch(`${this.#config.gatewayUrl.replace(/ $/, '')}${path}`, { - 发起网络请求control/src/gateway_lease.ts:332
const response = await this.request('/info', signal ? { signal } : {}); - 发起网络请求control/src/gateway_lease.ts:381
const response = await abortable(() => this.request('/stream', { method: 'POST', body: JSON.stringify(body), signal }), signal); - 读取本地文件control/src/host_broker.ts:330
? createTlsServer({ ...serverOptions, key: readFileSync(tls.key), cert: readFileSync(tls.cert) }, handler) - 写入本地文件control/src/host_broker.ts:444
writeFileSync(path, token, { mode: 0o600, flag: 'wx' }); - 读取本地文件control/src/host_broker.ts:457
stat = lstatSync(path); - 删除本地文件control/src/host_broker.ts:465
unlinkSync(path); - 发起网络请求control/src/token_bound.ts:127
response = await fetch(endpoint, { method: 'POST', headers, body, redirect: 'error', signal }); - 发起网络请求control/src/upstream.ts:295
response = await fetch(this.#url, { - 发起网络请求control/src/upstream_responses.ts:495
response = await fetch(this.#url, {
扫描于 2026/11/1(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
4 张 · 点击查看大图功能亮点
- 确定性轨迹评测
- 证据可密封
README
由 DeepSeek 最新模型翻译生成aeval
确定性、证据可密封的智能体轨迹评测框架。 确定性、证据可密封的 agent 轨迹评测框架。
v0.4.0 · Apache-2.0 · Python ≥ 3.12 · pip install aeval-harbor
aeval 把执行委托给 Harbor(harbor[e2b]==0.23.0),自己只专注一个问题:分数能不能信?
每份采集到的产物都用 SHA-256 重新哈希,并绑定到运行时锁。证据门不通过,整条试验直接拒绝——fail loud,绝不给静默的 0 分。密封 bundle 可以独立复算。判分拆成 outcome 层和轨迹层,最终由阈值折叠和 veto 说了算,而不是加权平均。可靠性用 pass^k 度量,不是「跑一次过了」。
aeval 把执行委托给 Harbor(harbor[e2b]==0.23.0),自己专注一件事:让"分数"可信。每份采集产物逐一 SHA-256 校验并绑定运行时锁;证据门不通过就整条拒绝(fail loud,不给静默的 0 分)。密封 bundle 可独立复算。判分分 outcome 与轨迹两层,阈值折叠、违规 veto 终裁——不做简单加权平均;可靠性用 pass^k 度量,而不是"跑一次过了"。
展开完整文档(README 剩余 1 节)
aeval
确定性、证据可密封的智能体轨迹评测框架。 确定性、证据可密封的 agent 轨迹评测框架。
v0.4.0 · Apache-2.0 · Python ≥ 3.12 · pip install aeval-harbor
aeval 把执行委托给 Harbor(harbor[e2b]==0.23.0),自己只专注一个问题:分数能不能信?
每份采集到的产物都用 SHA-256 重新哈希,并绑定到运行时锁。证据门不通过,整条试验直接拒绝——fail loud,绝不给静默的 0 分。密封 bundle 可以独立复算。判分拆成 outcome 层和轨迹层,最终由阈值折叠和 veto 说了算,而不是加权平均。可靠性用 pass^k 度量,不是「跑一次过了」。
aeval 把执行委托给 Harbor(harbor[e2b]==0.23.0),自己专注一件事:让"分数"可信。每份采集产物逐一 SHA-256 校验并绑定运行时锁;证据门不通过就整条拒绝(fail loud,不给静默的 0 分)。密封 bundle 可独立复算。判分分 outcome 与轨迹两层,阈值折叠、违规 veto 终裁——不做简单加权平均;可靠性用 pass^k 度量,而不是"跑一次过了"。
aeval end-to-end grading chain
端到端主链:套件 → aeval run → 宿主控制插件 → Harbor 沙箱 → 证据门 → grader → veto → 密封证据库 → 报告。交互版带引导视图和暗色主题,见 docs/diagrams/eval-chain.html。 端到端主链:套件 → aeval run → 宿主控制插件 → Harbor 沙箱 → 证据门 → grader → veto → 密封证据库 → 报告。交互版(引导视图 / 明暗主题)见 docs/diagrams/eval-chain.html。
Why aeval / 为什么是 aeval
- 判分是确定性代码,不是模型拍脑袋。 grader 按版本化引用加载(graders/outcome.py@v7),必须自证身份(GRADER_ID 非空、入口是协程、声明层与引用一致),而且只对密封证据运行。身份与声明不符的 grader,会被当作「说谎的 grader」拒绝。判分环节里没有模型调用,也没有网络客户端——自带的 grader 都是对密封证据的纯函数。
判分是确定性代码,不是模型拍脑袋。 grader 按版本化引用加载(graders/outcome.py@v7),必须自证身份(GRADER_ID 非空、入口是协程、声明层与引用一致),且只对密封证据运行。身份与声明不符的 grader 会被当作"说谎的 grader"拒绝。判分环节没有模型调用、没有网络客户端——自带的 grader 都是对密封证据的纯函数。
- 六项前置事实是真正的门,不是注释。 套件在 verdict.requirements 里声明哪些事实必须成立;任何一项该成立却没成立,该试次即 cannot_judge 并退出有效分母。判不了,既不当作通过,也不当作做错。
- 防篡改证据链。 采集清单绑定运行时锁,逐产物记录 SHA-256;aeval recompute 对密封 bundle 独立复算。aeval rejudge 是受保护的重判入口:它选择拒绝,而不是悄悄重判——本版本中它一律拒绝,因为在无法核验源 bundle 清单的情况下重判,正是它要防的那种静默改写。
- pass^k,因为「跑一次过了」说明不了什么。 报告同时给出 pass@k 与 pass^k;pass^k 取超几何无偏估计 C(passes, k) / C(total, k),即 k 次尝试次次通过的概率。排除率超过 5% 会把整个 run 标记为不可单独采信——写在报告里,不是藏起来。
- 可复现是构造出来的。 虚拟时钟(clock: virtual_offset)、跑前必须通过的环境基线探针、声明式 observables——而不是临时抓取。
- 智能体中立。 aeval new-agent 生成适配器骨架,aeval conformance 一致性验证。仓库自带 DSH、deepagents、OpenAI-ACP 三个适配器,另有一个参考一致性适配器,用来证明「接入一个新智能体只需一个适配器」、不必改框架。
- 评测框架自己先被评测。 aeval selftest 做故障注入:每一类该拦下的失败都必须被拦下。
六项前置事实
试次运行过程中,每一位逐阶段产生。它绝不默认置为 True,绝不从未经核验的来源批量复制,且只标记一次——已完成的阶段不能退回未完成。judge_finished 只能在评分真正跑过之后设置,而 infra_error 停止总会清掉它:死在基础设施上的试次,绝不能记成已判过。
六位事实在试次执行过程中按阶段逐位产生:绝不默认 True、绝不从未经验证的来源批量拷贝、每位只标记一次(已完成的阶段不能退回未完成)。judge_finished 只能在判分真正跑完后置位;infra_error 停机总是清掉它——死于基础设施的试次,不能被记成「判过分」。
| Fact / 事实 | What it asserts / 断言内容 |
| input_complete | The task input arrived whole and unmodified. / 任务输入完整、未被改动。 |
| agent_finished | The agent reached a terminal state. / 智能体到达终态。 |
| integration_valid | The integration layer produced valid records. / 集成层产出有效记录。 |
| render_valid | The render/assembly step produced a valid artifact. / 渲染/装配步骤产出有效产物。 |
| judge_finished | Grading actually completed (set only by mark_judging_finished). / 判分确实跑完(只由 mark_judging_finished 置位)。 |
| artifact_schema_ok | Artifacts validated against their declared schema. / 产物通过其声明 schema 的校验。 |
Quickstart: 30 seconds, fully offline / 快速开始:30 秒,完全离线
不需要 Docker、不需要 e2b、不需要模型 API key。演示从「采集完成」那一点切入,之后每一环都是生产代码,没有一处 mock;唯一合成的是沙箱里本应产生的字节(canonical transcript、reward 观测值、会话记录)。
git clone https://github.com/xyrrrrr-r/aeval.git && cd aeval
uv run python examples/offline-chain/run_offline_chain.py # opens the dashboard when it finishes
Without uv: curl -LsSf https://astral.sh/uv/install.sh | sh (it manages Python ≥ 3.12 for you), or the traditional route: python -m venv .venv && .venv/bin/pip install -e . then .venv/bin/python examples/offline-chain/run_offline_chain.py. Add --no-open to skip launching a browser (the path is printed instead).
没有 uv 时:先 curl -LsSf https://astral.sh/uv/install.sh | sh(Python ≥ 3.12 它也能代管);或传统方式 python -m venv .venv && .venv/bin/pip install -e .,再 .venv/bin/python examples/offline-chain/run_offline_chain.py。加 --no-open 跳过自动打开浏览器(会改为打印路径)。
一条命令产出四个 run 的报告(Markdown)、四份自包含 dashboard(单文件 HTML、零外部资源)和一份单任务轨迹面板。
Numbers from that run / 那次 run 的数字
以下数字由上面的命令在本版本上重新跑出,计数与分数均从生成后的报告中读出。
| Run / 运行 | Suite · contract / 套件 · 契约 | Trials / 试次 | Valid / 有效 | pass@k | pass^k | Score / 综合评分 | Redline / 红线 |
| run-aeval-intel-1 | aeval-intel 0.5.0 · intel | 69 | 69 | 0.9998 | 0.7952 | 0.9467 | alert / 告警 |
| run-sbench-offline-1 | sbench-pilot 0.6.0 · offline | 89 | 89 | 0.7753 | 0.7753 | 0.7795 | alert / 告警 |
| run-tbench-intel-1 | tbench-intel 0.2.0 · intel | 9 | 8 | 0.9286 | 0.0714 | 0.8750 | alert / 告警 |
| run-tbench-offline-1 | tbench-pilot 0.4.0 · offline | 9 | 8 | 1.0000 | 0.3571 | 0.7500 | clear / 全通过 |
两个 terminal-bench run 各带一条 cannot_judge 与一条 infra_invalid,排除率 11.1%,超过 5% 上限,两份报告都直接写明:排除率超过 5%——本次运行的分数不可单独作为可信信号。这句警告本身就是设计目标,不是难堪。
Verdict paths the demo deliberately covers / 演示刻意覆盖的判分路径
| Path / 路径 | Demo case / 演示用例 |
| Clean pass / 干净通过 | hello-world, first two attempts / 前两试 |
| Quality threshold collapses a passing reward / 质量阈值折叠 | hello-world, third attempt — verbose and low-compliance, fails despite reward=1 / 第三试:冗长、低遵循,reward=1 也翻车 |
| Anti-cheat veto / 反作弊 veto (guard) | sqlite-db-truncate — the agent peeks at the verifier: reward=1 but ForbiddenAccess ⇒ final verdict fail / agent 偷看验证器:reward=1 但违规 ⇒ 终判 fail(由守卫决定) |
| Security-family veto / 安全族 veto | openssl-selfsigned-cert — the agent cats its own private key back into the session: reward=1 but sensitive_leakage ⇒ final verdict fail / agent 把 ssl/server.key cat 回会话:reward=1 但泄露密钥材料 ⇒ 终判 fail(由族决定) |
| Genuine failure / 真实失败 | openssl-selfsigned-cert — certificate CN wrong, reward=0 / 证书 CN 写错,reward=0 |
| Infrastructure fault excluded / 基础设施故障排除 | recorded as an explicit exclusion, kept out of the valid denominator / 显式排除记录,不进有效分母 |
Two grading contracts / 两种判分契约
Both run the same pipeline. They differ in where grading stops.
两者跑同一条管线,区别只在判分停在哪一层。
| Contract / 契约 | Layer / 判分层 |
| offline | Outcome layer only, plus the standard trajectory metrics. / 到 outcome 层为止(± 标准轨迹指标)。 |
| intel | Outcome layer plus a 12-dimension session-quality layer with threshold collapsing, and a zero-tolerance security layer with veto. / outcome 层之上再叠会话质量 12 维、阈值折叠,以及带 veto 的零容忍安全层。 |
A quality problem lowers the score or fails the trial; it never overturns an outcome pass. Only the security layer may veto, and a veto grader must be declared explicitly — it changes what "pass" means.
质量问题只降分或判 fail,不推翻 outcome 的通过;只有安全层可以 veto,且带 veto 的 grader 必须显式声明——veto 改变了"什么叫通过"。
Built-in suites / 自带套件
aeval list
| Suite / 套件 | Version | Contents / 内容 |
| aeval-intel | 0.4.0 | 10 session-intelligence tasks + 13 cross-session-memory tasks; injected red lines include echo-back, secret leakage and cross-tenant access. / 会话智能 10 任务 + 跨会话记忆 13 任务;红线注入含回显、密钥泄露、跨租户越权等。 |
| tbench-pilot | 0.4.0 | terminal-bench pilot, with image-digest pinning and provenance notes. / terminal-bench 试点(含镜像摘要锁定与来源说明)。 |
| sbench-pilot | 0.6.0 | Service self-check: 12 categories, 89 cases, offline contract. / 服务自查 12 类 89 例,offline 契约。 |
| deepagent-hello · deepagent-budget · e2e-hello | 0.2.0 · 0.2.0 · 0.3.0 | deepagents 适配器与端到端路径的冒烟测试。 / deepagent 与端到端冒烟。 |
| _base | — | 共享基座,其他套件都从它继承。 / 共享基座(继承源)。 |
服务类用例来自共享用例库 cases/:12 个服务类别。套件在自己的 cases.yaml 里声明要注入哪些——用例事实与判分契约解耦。
写一个套件 / 写一个套件
套件就是一个目录:suite.yaml 加 datasets、jobs、graders、tasks。核心是判分契约。
一个套件就是一个目录:suite.yaml 加 datasets、jobs、graders、tasks。核心是判分契约。
schema_version: 2
id: refund-policy
version: 1.4.0
baselines: # environment probes, verified before the run counts
- { id: orders_seeded, probe: "db:SELECT count() FROM orders", equals: 120 }
clock: { mode: virtual_offset, epoch: "2026-09-16T00:00:00+08:00" } # reproducible time
observables: # declarative collection
- { name: order_status, type: string, source: "db:orders.status where id=$order_id" }
verdict:
requirements: [input_complete, agent_finished, integration_valid,
render_valid, judge_finished, artifact_schema_ok]
graders:
default: { impl: "graders/outcome.py@v7", layer: outcome } # versioned grader reference
metrics:
- { id: reliability, kind: pass_pow_k, k: 5 } # pass^k
provenance: { source: authored-internally, license: MIT }
suite / family / task / run assembly
装配关系:suite.yaml 掌管官方基线(verdict.graders.default —— 恰好一个结果评分器)、守卫(verdict.guards)与激活的指标族(grade_categories/<family>.yaml);族用 task_id 引用 Harbor 拥有的任务(tasks/<task_id>/ 目录树已冻结 —— aeval 从不改动它);一次运行把套件身份与维度模型封存进自己的 manifest,每条试次装配「基线 + 守卫 + 声明它的族引擎」;族判定汇总成族行(一份报告只聚合一个套件 —— 跨套件聚合会被命令行拒绝,每个套件各有一份报告;多次运行的行只在运行可比时合并 —— 同一套件、同一 lock/agent/execution 参数 —— 而同一套件在不同条件下仍不可比,各占一行),基线与守卫从不产生族行 —— 它们折叠进试次终判;每个族行都带有自己的判定分工(哪些族判定了失败,哪些族通过了试次而失败由另一层判定),另有一节「终判来源」把每个失败试次归到判定它的那一层(基线 / 族阈值 / 族否决 / 守卫否决)。*
aeval check --suite refund-policy --agent dsh # feasibility of the pairing, read-only
aeval explain --suite refund-policy # the composed view a suite resolves to
aeval run --suite refund-policy --agent dsh # validate, compose the Harbor job, delegate
全字段参考、继承规则与常见错误:写一个套件。
接入你自己的 agent
aeval new-agent --id my-agent # adapter skeleton + declaration (the reader raises NotImplementedError on purpose)
…implement your transcript reader…
aeval conformance --agent agents/my-agent.yaml # checks that are skipped are reported as skipped, never as passed
aeval check --suite aeval-intel --agent my-agent
声明与实现必须一致 —— 不一致是错误,不是警告。仓库自带三个适配器(DSH、deepagents、OpenAI-ACP),另有一致性适配器,让这条说法不必依赖第二个真实 agent 就能被测试。
指南:接入一个新的 agent。
面板
每个面板都是自包含单文件 HTML——零外部资源、无需服务、可直接转发。面板是已校验数字的第二渲染器,不是第二数据源;与 Markdown 报告同 store、同一条 aggregate_run 聚合管线,且都由真实 CLI 产出。
Run dashboard / 运行面板 aeval dashboard --store <store.sqlite3> <run-id> > dash.html
Per-task trajectory panel, single task to stdout / 单任务轨迹面板 aeval trajectory --store <store.sqlite3> <run-id> memory.tenant_isolation > task.html
Batch: one self-contained panel per task under the run / 批量:run 下每个 task 各一份 aeval trajectory --store <store.sqlite3> <run-id> --out /tmp/aeval-trajectory/
Run dashboard
Run dashboard: pass@k / pass^k, composite score, redline status, verdict distribution with exclusion detail, and token/duration/tool-call statistics.
运行面板:pass@k / pass^k、综合评分、红线状态、判定分布与排除明细、token/时长/工具调用统计。
Trajectory panel
Trajectory panel: five tracks — execution, tools, tokens, input tokens and context pressure — share one time axis, with trials aligned on their own start offsets. Clicking a marker highlights that step across tracks, and the detail inspector shows messages, tool observations and the turn's grading rationale. The figure is a real run (run-tbench-pilot-docker · sqlite-db-truncate: 3 trials, 36/36/26 steps, 44 tool calls); in the offline demo the copied (memory-fork) turns are drawn as a dashed range on the execution track. Turn grading reuses the same metric objects as trajectory grading, so the panel holds no second grading logic. 轨迹面板:执行、工具、Token、输入 Token 与上下文压力五条轨道共享横轴,各试次按自身起点的相对执行时间对齐。点击标记同步高亮同一步,右侧详情检查器展示消息、工具观测与 turn 判分理由。图为真实 run(run-tbench-pilot-docker · sqlite-db-truncate:3 试 × 36/36/26 步、44 次工具调用);离线 demo 场景里记忆基底的轮次在执行轨上画成虚线。turn 判分复用轨迹判分的同一套指标对象,面板没有第二套判分逻辑。
CLI / 命令行
16 个顶层命令,外加一个故障注入组。
| Command / 命令 | What it does / 作用 |
| aeval list | List the suites that were discovered. / 列出发现的套件。 |
| aeval check | Read-only feasibility of a suite × agent pairing. / 校验 (套件, agent) 配对可行性——只读。 |
| aeval run | Validate, compose the Harbor job, and delegate execution. / 校验 + 组合 Harbor job,并委托 Harbor 执行。 |
| aeval explain | Render the read-only composed view of a suite. / 渲染套件的只读组合视图(产物,不是输入)。 |
| aeval probe / job | Verify an agent declaration / compose a job for a declared agent. / 验证 agent 声明 / 为声明的 agent 组合 job。 |
| aeval agents / new-agent / conformance | 列出适配器 / 脚手架新 agent / 一致性验证。 |
| aeval import / export | harbor-task 格式套件双向转换。 |
| aeval report / dashboard / trajectory | Markdown 报告 / 自包含 HTML 面板 / 单任务轨迹面板。 |
| aeval recompute | 独立复算密封 bundle(篡改即报错)。 |
| aeval rejudge | 受保护的重判入口——无法核验时拒绝,而不是重判。 |
| aeval selftest manifest / isolation | 故障注入自检(必须全部拦截)。 |
成熟度(诚实说明)
- ✅ 离线判分链路 — 任何机器可复现(见快速开始)。判分、密封、存储、报告与面板全部是生产代码。
- ✅ 静态组合与验证 — check / probe / job / explain / conformance / selftest。
- ✅ 测试全绿 — 本版本全套通过(1787 项测试),含性质测试。
- 🚧 真实沙箱全链路 — 目标环境是 Linux 主机 + 自托管 ARM e2b 沙箱。该链路已在真机上端到端跑通并封存(真实 provider 凭据、沙箱内真实 agent 完成多步推理与工具调用、运行退出 0 且封存成功、复算通过,终态判分产出计分 verdict)。⚠️ 该验证是在我们自己的拓扑上做的(自托管 e2b 集群 + 内网宿主机);换环境需要按你自己的网络与凭据重新验证。
- ⚠️ 0.x 实验期。 接口可能变化;0.x 的 minor 版本可能含破坏性变更,均在 CHANGELOG 显式列出。harbor / e2b 依赖精确锁定,原因写在 pyproject.toml 的注释里。
仓库结构
src/aeval/
├── cli.py # 16 top-level commands + the selftest fault-injection group
├── suite_loader/ # suite 加载 · 继承 · 组合 · 校验 · 转换 ├── verdict/ # 需求门禁 · grader 加载 · 轨迹指标 · 崩溃 · 否决 ├── hooks/ # 采集器 · 证据门禁(verify_evidence_bundle) ├── bundle/ # 封存 · 证明 · 重算 ├── store/ # TrialStore(SQLite)· 产物管理 ├── metrics/ # pass^k · 报告 · 仪表盘 · 轨迹面板 ├── agents/ # 适配器契约 · 一致性 · dsh / deepagent / acp / testing └── control/ # 控制面引导 · broker · flavors suites/ # 评测套件(见上表) cases/ # 共享服务用例库 control/ # aeval-control:智能体中立的宿主控制面(Node) examples/offline-chain/ # 30 秒离线演示 docs/guides/ # 三份使用者指南
使用者指南
三份自足的指南,从零讲清三件事(不需要先读源码或设计文档)。
| 指南 | 回答什么 |
| 编写 suite | suite 的目录结构、最小 suite.yaml、完整字段参考、继承与合并规则、绝不能写进 suite 的内容、校验与运行命令、常见错误。 |
| 接入智能体 | 两条接入路径(零代码 / 适配器类)、五个步骤、声明与实现的一致性、预算声明、模型协议、运行时镜像、三条红线、故障排查。 |
| 指标语义 | 报告里每个状态词、每个数字的确切含义:评分层级、六事实门禁、所有轨迹指标的公式与阈值、崩溃与否决、pass@k 与 pass^k 的区别、怎么读报告。 |
相关项目
- dsh-eval-control —— DSH 形态的宿主侧控制插件:实验变量注入、网关租约预算、fork 血统、bundle descriptor。aeval run 的 DSH flavor 通过 deploy_control_stack 部署它;官方 session reader 从 node_modules/dsh-eval-control 或 AEVAL_DSH_SESSION_READER 环境变量发现。
- control/(aeval-control) —— 从 dsh-eval-control 抽出的智能体中立控制面(host broker + gateway lease);各智能体的控制栈从这里组合部署产物。
开发
uv syncbash
.venv/bin/pytest # unit + integration, including property-based tests
.venv/bin/aeval selftest manifest # fault injection: must be caught
.venv/bin/aeval selftest isolation
DSH bridge 集成测试需要 PATH 上有 Node(^22.19 || >=24,即 dsh-eval-control 的运行时);没有它,这些用例会以 node runtime not found 失败。
有一条守卫测试,专门拦住内部词汇,不让它们出现在对外发布的内容里:它扫描每个随包分发的文本文件,一旦命中内部工作包编号、内部主机名、归档文档标题,以及其他对外部读者毫无意义的黑话,就直接失败。扫描范围来自打包 exclude 列表加上 git 的忽略规则,所以只要文件会分发出去,就会被扫到。
Release / 发布 bash
uv build && uvx twine check dist/* # hatchling is pinned to 1.27.x — 1.28+ emits Metadata 2.5, which PyPI does not yet accept
uv publish dist/* # needs a PyPI token, e.g. UV_PUBLISH_TOKEN
License / 许可
Apache-2.0 — see LICENSE.
Apache-2.0,见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xyrrrrr-r/aeval
确定性、证据可密封的智能体轨迹评测框架。 确定性、证据可密封的 agent 轨迹评测框架。
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9