# 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% - Mypy:203 个错误,涉及 59 个文件;Ruff 阻断级检查通过 - Bandit:9 个高严重性问题;pip-audit:7 个包共 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 = "" .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 = "" .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 = "" .\scripts\evaluate.ps1 -Mode production-smoke ``` ```sh ZCBOT_EVAL_TOKEN="" \ sh scripts/evaluate.sh production-smoke ``` 生产模式会实际调用模型并产生少量费用,只允许使用专用评测账号。它不会运行安全 攻击、并发、跨用户或文件写入用例。即使合并工程与冒烟结果,可靠性和安全维度仍 未覆盖,因此完整总分仍为 `N/A`。 运行生产可安全执行的完整五维流程: ```powershell $env:ZCBOT_EVAL_TOKEN = "" .\scripts\evaluate.ps1 -Mode production-full ``` ```sh ZCBOT_EVAL_TOKEN="" \ 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; - 增加只在测试数据库运行的并发、取消恢复、知识库和跨用户隔离用例。