**Minos Bench(米诺斯审判台)**是一套面向 Prompt、RAG、对话应用和工具调用 Agent 的本地评测工作台。它把题集版本、匿名运行、确定性检查、结构化 Judge、Bad Case 归因、追加式恢复和源证据复核组织在同一条可追溯链路中。
这个项目重点解决的不是“再算一个总分”,而是三个更实际的问题:
- 同一道题在不同模型、Prompt 和参数下,能否按相同条件复跑;
- API 失败、规则错误、Judge 误判和目标回答错误,能否被分开记录;
- 一个结论能否回到具体题目、Rubric、工具轨迹和源证据,而不是只留下模型排名。
| 能力 | 实现 |
|---|---|
| 多配置匿名运行 | 四个逻辑槽位统一接入,运行时隐藏目标模型身份 |
| BYOK 模型接入 | LiteLLM 适配 OpenAI-compatible Responses、Anthropic Messages 等协议 |
| 确定性检查 | JSON Schema、工具名、参数、调用顺序、状态和安全门禁由代码直接核验 |
| 结构化 Judge | 语义 Rubric 逐项返回 PASS、FAIL 或 ABSTAIN,Judge 只提供 advisory 结论 |
| 源证据裁决 | 争议样本回到题面、可见证据、Gold/反例和登记规则复核 |
| 失败分层 | 运行错误、数据无效、规则失败、Judge 分歧和内容失败分别记录 |
| 追加式恢复 | 只补超时、空响应或不完整节点,不重复已成功目标回答 |
| 中文工作台 | Streamlit 页面覆盖配置、运行、比较、单题复核、Bad Case 和报告 |
| 本地凭据隔离 | Windows 使用当前用户 DPAPI,凭据保存在仓库外且不在页面回显 |
flowchart LR
A[题集、Rubric 与来源台账] --> B[版本和 hash 封印]
B --> C[匿名目标运行]
C --> D[确定性直接检查]
C --> E[结构化 Judge]
D --> F[Bad Case 与切片报告]
E --> F
F --> G[源证据复核]
G --> H{可发布?}
H -- 是 --> I[版本比较与回归资产]
H -- 否 --> J[修正规则、题目或实现]
评测对象不是一个裸模型名,而是“模型 + Prompt + 生成参数 + 题集版本”的配置。运行前固定数据和规则;运行后只允许恢复技术失败。已经成功生成但内容答错的回答不会重跑到通过。
git clone https://github.com/IIMovoMII/minos-bench.git
cd minos-bench双击:
启动评测工作台.cmd
启动器会在本地同步锁定依赖,并在 127.0.0.1 打开 Streamlit。首次进入“模型配置”页,填写模型 ID、协议、Base URL、API Key 和思考强度。
快速体验可以让三个目标槽位复用一个模型,再配置一个独立 Judge;需要做真实比较时,再分别配置候选 A、候选 B、弱基线和 Judge。
需要 Python 3.11-3.13 和 uv:
uv sync --frozen --no-editable --link-mode copy
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\start_ui.ps1下面的命令不会读取模型配置,也不会请求 Provider:
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\scripts\run_scientific_offline_acceptance.ps1Minos Bench 不把所有判断都塞给 Judge。
- 代码直接检查:结构、字段、数值、工具合同、调用顺序、最终状态和高风险副作用。
- 结构化 Judge:证据支持、冲突披露、拒答边界、同义表达等无法稳定用字符串规则判断的语义项。
- 源证据复核:Judge 与直接检查冲突,或题目本身可能无效时,回到题面、可见证据、登记标准和工具结果重新裁决。
critical 只用于真正的越权写操作、错误付款、数据泄露和安全门禁。普通格式、计算或引用问题不会被随意升级为一票否决。
V6.2 用四个复合机制候选验证这条裁决链:
3 个 calibration 机制 × 4 个匿名配置 = 12份目标回答;1 个 holdout 机制 × 4 个匿名配置 = 4份目标回答;- 共保存
16份有效回答,并纠正1次 Judge 错误放行; - 上下文提前泄漏、隐藏 Oracle 和旧输出预算均被定位并修复。
这轮证明了执行与裁决链能够发现自身错误,但没有证明题集已经能稳定拉开强模型差距。因此仓库不把 15/16 写成准确率,也不发布模型排行榜。PO-01 仅保留为初步 Challenge 候选,TR-01、AU-01 和 IR-01 转为 Regression。
完整证据:
datasets/
scientific_v3/ 历史冻结回归集
scientific_v4/ 来源驱动候选题集
scientific_v5/ 机制校准候选
scientific_v6_candidate_pool/ V6 合同与 Oracle 候选
scientific_v61_candidate_pool/ V6.1 独立候选池
scientific_v62_challenge_pool/ V6.2 复合机制池
每个正式数据版本都使用 manifest、seal 和文件 hash 绑定题面、来源审计与 case ID。历史版本用于回归和失败复盘,不会因为新题集出现而被改写成新的模型成绩。
运行工件默认不进入 Git。仓库只保留经过脱敏、身份盲且有解释用途的少量公开样例。
- DeepEval 提供评测指标与 LLM-as-a-Judge 生态参考;本项目不把单次 Judge 输出直接当作 Gold。
- LiteLLM 负责统一不同 Provider 的调用接口;模型配置和凭据始终留在本机。
- Promptfoo、Inspect AI 与 Opik 用于参考矩阵运行、评测记录和结果追踪的产品方法。
Minos Bench 自行实现题集合同、hash 封印、匿名四配置运行、确定性检查、Judge 路由、追加式恢复、Bad Case 分层和源证据裁决。仓库没有复制上述项目的题库、运行结果或业务数据;依赖、方法迁移和原创实现边界记录在公开方法与仓库参照审计。
app.py Streamlit 中文工作台
src/llm_eval_workbench/ 执行、检查、Judge、恢复、报告与裁决
datasets/ 版本化题集、fixture、manifest 和 seal
configs/ 可复现运行计划
scripts/ 启动、离线验收和有限运行入口
tests/ provider-free 单元与链路测试
docs/ 数据卡、方法审计、失败复盘和版本说明
artifacts/ 本地运行工件;默认不提交
uv run pytest -q
git add -A
uv run python .\scripts\audit_public_commit.py公开提交审计只报告命中的规则、文件和行号,不输出疑似凭据原文。它会阻止 .env、本地 profile、数据库、抓包、证书、私有绝对路径、静态凭据和未允许的运行工件进入提交。
- 工作台默认只绑定
127.0.0.1; - Windows 凭据使用当前用户 DPAPI,并保存在
%LOCALAPPDATA%下的仓库外目录; - UI 不预填或回显 API Key 和完整 Base URL;
- 每次真实请求都由用户显式启动,缺失凭据或 Provider 错误不会破坏已保存结果;
- 公开仓库不包含 API Key、Token、Cookie、个人模型配置、原始请求日志或本地数据库。
更多说明见 SECURITY.md。
Minos Bench 是个人 POC 和评测工程样例,不是托管评测服务。它不会自动替代领域专家,也不会把单次 Judge 输出当成最终事实。模型排名只有在题集有效性、Judge 校准、运行完整性和源证据复核同时满足后才允许发布。