zcbot/evaluation/README.md

211 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# zcbot 技术评测
该目录是独立于生产执行链的黑盒评测旁路。它只通过 zcbot `/v1` API 创建
隔离任务、发送指令、读取回复和下载产物,不直连数据库。
## 评测框架
当前实际采用的是仓库内的轻量 `zcbot evaluation harness`,通过 `/v1` API 做
端到端黑盒执行,用确定性断言、重复运行、`pass@1`/`pass^k` 和五维加权完成计分。
工程与安全审计实际调用 `unittest`、coverage.py、Ruff、Mypy、Bandit 和
`pip-audit`
开源框架采用状态必须与报告证据一致:
- **Inspect AI**:已实现 JSONL 导出桥接,但因 Click 依赖冲突需在隔离环境运行;
当前基线报告没有直接使用 Inspect runner。
- **Promptfoo**:计划用于测试环境的提示注入与越权红队,本次生产安全评测未执行。
- **ScienceAgentBench**:作为材料科研公共任务候选来源,当前任务集尚未直接采用其
verified 样本。
每份 Markdown/JSON 报告都会记录上述框架和采用状态,防止把“兼容/规划接入”误写
成“已经用该框架完成跑分”。
## 当前完整基线2026-08-03
本基线由生产安全任务集和本地工程/安全审计合并生成:
| 维度 | 权重 | 得分 | 主要证据 |
|---|---:|---:|---|
| 任务质量 | 40 | 100.00 | 方解石材料问答通过 |
| 可靠性 | 20 | 100.00 | 固定答案连续 3/3 次通过 |
| 安全性 | 15 | 0.00 | Bandit、pip-audit 均未达标 |
| 工程质量 | 15 | 66.67 | 编译、445 项测试、Ruff 通过;覆盖率和 Mypy 未达标 |
| 性能 | 10 | 100.00 | 短回答时延和成本均达标 |
- 安全封顶前加权分:**80.00 / 100**
- 最终总分:**59.00 / 100**(安全失败触发 59 分封顶)
- 测试445 项通过17 项跳过;覆盖率 51%,目标 70%
- Mypy203 个错误,涉及 59 个文件Ruff 阻断级检查通过
- Bandit9 个高严重性问题pip-audit7 个包共 41 个已知漏洞
- 本轮线上 5 次调用总耗时约 11.11 秒,总成本约 ¥0.083307
完整证据由命令生成到 `reports/full/report.md``reports/full/report.json`。这里
记录的是带日期的基线快照;代码或依赖变化后应重新运行,报告文件才是最新事实源。
`reports/` 包含 task_id、扫描日志等运行产物已加入 Git ignore不提交仓库。
## 安全约束
- 默认只允许连接 `localhost`、`127.0.0.1` 或 `::1`
- 实际运行必须显式传 `--execute`,避免误触发模型费用。
- Token 只从环境变量读取,不写入配置或报告。
- HTTP 客户端忽略 `HTTP_PROXY` / `HTTPS_PROXY`,避免评测 JWT 被透明代理转发。
- 每次重复运行使用独立工作目录;第一版不自动删除任务或文件,便于复盘轨迹。
- 必须使用专门的评测用户和测试环境。不得把 `.env` 中经隧道连接生产库的实例
当作评测目标。
## 快速开始
一条命令运行本地工程审计并生成统一报告:
```powershell
.\scripts\evaluate.ps1
```
```sh
sh scripts/evaluate.sh local
```
统一报告固定写入 `evaluation/reports/latest/report.md``report.json`。本地模式
不调用模型、不产生模型费用;因为只覆盖工程维度,报告显示暂定分,完整总分保持
`N/A`
先校验任务集,不调用服务:
```powershell
.venv\Scripts\python.exe -m evaluation validate
```
准备专用测试实例和评测用户的 JWT
```powershell
$env:ZCBOT_EVAL_TOKEN = "<test-user-jwt>"
.venv\Scripts\python.exe -m evaluation run --execute
```
报告写入 `evaluation/reports/report.json``report.md`。JSON 保存逐次 task_id、
成本、耗时和断言Markdown 是便于评审的汇总。
单独运行本地工程审计:
```powershell
.venv\Scripts\python.exe -m evaluation audit
```
工程审计固定检查全量单测、Python 编译、覆盖率、Ruff、Mypy、Bandit 和
`pip-audit`。其中 Bandit 和 `pip-audit` 计入安全维度,其余计入工程维度。缺失
工具会明确显示 `unavailable` 并不得分。工程工具统一记录在
`evaluation/requirements.txt`,不进入生产依赖。在线评测加 `--with-audit` 可把
工程审计结果并入同一份百分制报告。
Inspect AI 单独记录在 `evaluation/requirements-inspect.txt`。它当前要求的 Click
版本与 zcbot 已有 Hugging Face 依赖冲突,禁止直接安装到项目 `.venv`;后续通过
隔离容器运行,并以本目录 JSON 任务集和报告格式作为两边交换契约。
远程测试实例必须额外显式确认:
```powershell
.venv\Scripts\python.exe -m evaluation run --execute --allow-remote `
--config evaluation\config.staging.json
```
仓库提供了线上地址的**低风险单次冒烟集**,不包含密钥探测、文件写入、并发或
跨用户操作:
```powershell
$env:ZCBOT_EVAL_TOKEN = "<dedicated-eval-user-jwt>"
.venv\Scripts\python.exe -m evaluation run --execute --allow-remote `
--config evaluation\config.production-smoke.json `
--suite evaluation\datasets\production_smoke.json `
--output evaluation\reports\production-smoke
```
该结果只覆盖任务质量和性能,因此总分按规则保持 `N/A`,不能冒充完整评估。
如需一条命令同时刷新工程审计、运行上述生产低风险冒烟并合并报告:
```powershell
$env:ZCBOT_EVAL_TOKEN = "<dedicated-eval-user-jwt>"
.\scripts\evaluate.ps1 -Mode production-smoke
```
```sh
ZCBOT_EVAL_TOKEN="<dedicated-eval-user-jwt>" \
sh scripts/evaluate.sh production-smoke
```
生产模式会实际调用模型并产生少量费用,只允许使用专用评测账号。它不会运行安全
攻击、并发、跨用户或文件写入用例。即使合并工程与冒烟结果,可靠性和安全维度仍
未覆盖,因此完整总分仍为 `N/A`
运行生产可安全执行的完整五维流程:
```powershell
$env:ZCBOT_EVAL_TOKEN = "<dedicated-eval-user-jwt>"
.\scripts\evaluate.ps1 -Mode production-full
```
```sh
ZCBOT_EVAL_TOKEN="<dedicated-eval-user-jwt>" \
sh scripts/evaluate.sh production-full
```
结果写入 `evaluation/reports/full/report.{md,json}`。线上部分包含任务质量 1 次、
固定答案可靠性 3 次和性能 1 次;安全维度来自本地 Bandit 与依赖漏洞审计。该流程
不执行密钥读取、跨用户、压力测试或文件写入。
也可以手动合并任意已有 JSON 报告:
```powershell
.venv\Scripts\python.exe -m evaluation combine `
--report evaluation\reports\engineering-audit.json `
--report evaluation\reports\production-smoke-calibrated\report.json `
--output evaluation\reports\latest
```
同一维度出现在多份报告中时,按各报告的 `case_count` 加权;五个一级维度再按
40/20/15/15/10 固定权重汇总。Markdown 会列出每个输入报告及其生成时间。
## 任务集
任务集是 JSON 文件。每个 case 声明:
- `dimension``task_quality`、`reliability`、`security`、`engineering` 或
`performance`
- `prompt`:发送给 zcbot 的真实用户指令;
- `assertions`:可审计的确定性断言;
- `repetitions`:可选,覆盖任务集默认重复次数;
- `model_profile`、`skill`:可选,创建任务时传给 zcbot。
当前支持的断言:
- 回复:`response_nonempty`、`response_contains`、`response_not_contains`、
`response_regex`
- 运行:`run_succeeded`、`max_duration_s`、`max_cost_cny`
- 产物:`artifact_exists`、`artifact_min_bytes`、`artifact_zip_valid`、
`artifact_text_contains`
断言按 `weight` 加权。用例得分是其断言加权通过率;重复运行取平均,并同时报告
`pass@1` 和要求全部重复均通过的 `pass^k`
缺少任何一级维度时,完整总分显示为 `N/A`,只展示“已覆盖维度暂定分”,防止用
不完整任务集制造虚高总分。安全维度存在失败时,完整总分最高封顶为 59。
## 后续扩展
- `materials_core.json` 提供 10 个首批材料研发/产物任务;它仍是校准集,不是
最终院内金标准。
-`export-inspect` 生成隔离 Inspect 环境可摄取的 JSONL
```powershell
.venv\Scripts\python.exe -m evaluation export-inspect `
--suite evaluation\datasets\materials_core.json `
--output evaluation\exports\materials_core.inspect.jsonl
```
- 在隔离环境用 Inspect Agent Bridge 包装 zcbot HTTP 适配器,复用其公共任务集和
查看器;
- 用 Promptfoo 的自定义 provider 调用同一客户端,运行提示注入与越权红队集;
- 接入 ScienceAgentBench verified 子集和 PPT benchmark
- 增加只在测试数据库运行的并发、取消恢复、知识库和跨用户隔离用例。