关于 opengate-mcp
opengate-mcp 将 OpenGATE 的确定性依据核验能力提供给 Agent,适合检查 RAG 和文档问答系统是否从给定材料作答。它不依赖 LLM 评审,而是检查关键事实、数字依据和无法回答时的弃答。
主要功能
- 01确定性核验回答与上下文的依据关系
- 02检查关键事实是否出现
- 03验证数字能否追溯到来源
- 04检查无法作答时是否弃答
- 05无需 LLM 评审
适用场景
- 01在 Agent 工作流中核验生成答案
- 02检查 RAG 系统的依据与数字
- 03评估文档问答系统的弃答行为
- 04在提示词或模型变更后回归检查
MCP 相关
作为 MCP 服务,它让 Agent 在交互过程中调用 OpenGATE 的回答依据核验能力。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| answer | string | 是 | 要检查的回答。 |
| context | any | 是 | 回答必须以此为依据的检索上下文(字符串或段落数组)。 |
| question | string | 否 | 原始问题(可选;允许将问题中的数字视为有依据)。 |
| must_abstain | boolean | 否 | 当上下文不包含答案时设为 true:此时回答必须拒绝作答,而非捏造。 |
| expected_facts | array | 否 | 正确回答必须包含的事实(例如 "30 days"、"no restocking fee")。每项都必须出现在回答中。 |
| allowed_new_numbers | array | 否 | 回答可以引入的、上下文中没有的数字(例如来自问题的数字)。 |
详细介绍
证据胜过似是而非。 OpenGATE 用于验证必须依据源材料为每个回答提供理由的 AI 系统——RAG 流水线、文档问答工具、法律和科学助手。它首先回答一个问题:系统能否根据获得的证据证明自己的回答?
检查是确定性的——没有 LLM 评判器,没有评分模型,也没有六级判定尺度。必须包含所有必需事实,每个数字都必须能追溯到来源;如果上下文无法回答,系统就必须弃答,而不是捏造内容。由于它只依赖纯逻辑,因此可复现、免费,而且速度足够快,可以检查每个回答,或在每次提交时进行门禁检查。
随着 AI 进入高风险领域,评估正变得与传统软件中的自动化测试同样基础。OpenGATE 将依据不足的问题转化为可跟踪的数字,并针对基线检查每次提示词、模型或工作流变更——从而避免可靠性悄然退化。
快速开始(60 秒)
无需 API 密钥——离线测试套件会使用随附的黄金数据集运行确定性评分器:
npx @pharmatools/opengate # run the offline evaluation suite
npx @pharmatools/opengate init # scaffold gold cases + HTTP config + a GitHub Action
OpenGATE — 39 case(s), online=false, adapter=refcheckr
✓ citation-detection PASS
perClaim_exactSetRate 100.0%
perClaim_jaccardMean 100.0%
supportedStyle_accuracy 100.0%
⊘ grounding SKIPPED — online scorer (pass --online)
将 opengate.http.json 指向你的端点,并添加 --online --ci,即可对自己的系统进行门禁检查。完整操作指南:入门指南。
一项检查,多种应用形式
同一套确定性的依据验证逻辑可用于技术栈中的各种场景:
| 应用形式 | 安装 | 用途 |
|---|---|---|
| CLI + 框架 | npx @pharmatools/opengate | 完整评估套件、适配器、回归门禁 |
| GitHub Action | uses: nickjlamb/opengate@v0 | 在任何代码库中即插即用的 CI 门禁 |
| Python 包 | pip install opengate-grounding | check_grounding()、pytest 门禁、DeepEval 指标 |
| MCP 服务 | npx @pharmatools/opengate-mcp | 可在行内验证自身回答的 Agent |
| Docker 镜像 | docker run pharmatools/opengate | 仅使用 CPU 的容器化流水线 |
架构
评分器不会直接与系统通信,而是通过一个小型适配器与其交互,因此方法可以复用,只有黄金数据集需要更改。在开发循环中,它位于 CI 所在的位置:更改提示词、模型或流水线;回归门禁会将新的评分卡与基线进行比较——得分提升或持平则部署,回归则构建失败。
为什么不用 DeepEval?
两者都用——评估衡量效果,OpenGATE 验证结果。DeepEval 和 OpenAI Evals 这类通用框架会广泛评估 AI 系统,通常由大模型来判断输出。OpenGATE 则验证范围更窄、要求更高的承诺:每个答案都必须有证据作为依据:
- 来源溯源是一等要素——引用的段落是否确实存在于来源中,且与原文完全一致?
- 不使用大模型裁判——分数通过对照人工标注的黄金数据进行确定性检查,因此结果可复现,且可在 CI 中免费运行;判断标准体现在黄金数据中,而不是评分模型中。
- 回归检测是一等要素——每次运行都会与每个适配器各自的基线进行比较;分数下降会导致构建失败。
使用通用框架衡量广泛的质量指标,并搭配 OpenGATE 来把关依据。
核心概念
黄金用例——人工标注的基准用例(datasets/cases/):源文本、应提取的论点、不应提取的句子,以及带有已知正确判定的参考片段。复制 _template.json 来添加用例;格式说明见 datasets/SCHEMA.md,标注规则见 datasets/LABELING-GUIDE.md。
评分器——每个指标系列对应一个模块(src/scorers/):
| 评分器 | 模式 | 衡量内容 |
|---|---|---|
citation-detection | 离线 | 每个论点的引用集合精确匹配率和 Jaccard 系数;支持型准确率 |
claim-extraction | 在线 | 与黄金数据相比的精确率 / 召回率 / F1;非论点泄漏;保真度(论点与来源原文完全一致) |
verdict-accuracy | 在线 | 六分制下的精确准确率和相邻准确率;段落幻觉率;一致性;延迟和令牌成本 |
redaction | 在线 | 黄金标识符的召回率,泄漏会被列为失败项;过度遮盖;已知缺口跟踪 |
simplification | 在线 | 改写的忠实度:锚点召回率(关键事实得以保留)、虚构数字、长度门槛 |
retrieval | 在线 | 检索记录相对于权威来源的保真度:锚点字段和结构不变量 |
grounding | 在线 | 通用 RAG:答案锚点召回率、相对于上下文的虚构内容以及弃答率。开箱即用的路径 |
离线评分器无需 API 密钥即可运行,速度足以用于每次提交。在线评分器通过适配器测试实时系统。
评分卡——每次运行都会写入 results/<timestamp>.json,并附上 Git SHA,因此任何结果都可复现、可审计。按模型运行的结果带有 run_model 标签,让结果目录成为一个可衡量的对比(准确率 × 幻觉率 × 延迟 × 成本)。
回归门禁——--baseline 用于保存参考基线;后续运行会打印各指标的变化量(以百分点表示的 ▲/▼),而 --ci 会在任何指标下降时令构建失败。基线按适配器分别保存,因此一个系统的评分卡不会覆盖另一个系统的评分卡。
HTML 报告——添加 --report(或运行 opengate report)即可生成独立仪表板:每个评分器的通过 / 失败状态、与基线相比的变化量,以及所有列出的失败项。单个文件,无需服务器或依赖项。
评估你自己的系统
适配器只有一个文件:两个基础导出项——onlineAvailable()、onlineConfigHint()——以及至少一种完整的能力(例如,grounding → answer())。评分器会检查 adapter.capabilities,并在跨越边界时正常跳过;加载时会验证适配器,并通过消息列出每个缺少的导出项。
OPENGATE_ADAPTER=./adapters/my-system.mjs npm run eval:online
对于由 REST 支持的系统,有一条无代码路径:内置的通用 HTTP 适配器会从 opengate.http.json 读取端点路径和请求头(支持 ${ENV} 插值,并内置延迟和令牌捕获)。完整契约和最小骨架:ADAPTERS.md。
示例
- 评估由 NIM 驱动的 RAG Agent — 基于 NVIDIA NIM 模型构建 RAG Agent,并使用 OpenGATE 确定性地评估答案的依据,无需 LLM 评判器。包含可运行的 Python notebook(
opengate-grounding)和用于 CI 门禁的 Node 适配器。
已在生产环境验证
四款 PharmaTools 产品在 CI 中运行于 OpenGATE 上,涵盖四种不同的能力类型,共用一套评估标准。针对 RefCheckr 的黄金集运行时,OpenGATE:
- 发现了一种影响约 50% 多声明判定的静默解析失败模式,通过强制结构化输出将其消除(→ 0);
- 通过推动一项有数据衡量的生产模型变更,将段落幻觉率减半(5.8% → 2.4%)——这一决策依据的是数据,而非声誉;
- 在已提交的基线上将声明提取保持在 0.91 F1,召回率为 0.93(多次运行的波动范围为 0.86–0.94——拆分器是一个 LLM),目前未通过自身门禁:大多数运行中有 2 个已知的非声明混入提取结果。这是一个尚未解决的拆分器问题,门禁会如实报告,而不是将其四舍五入掩盖。
Redacta — 脱敏能力(证明这套方法并非专为 QA 设计)
Redacta 封装了 @pharmatools/redacta 引擎,并使用带有黄金标注标识符的英国临床笔记合成数据进行评分。首次运行时,评估发现了两个真实的引擎错误(关系短语吞并嵌套姓名;省略姓氏中的撇号)——两者均已修复并确认(knownGap_closed: 2),随后纳入黄金集。当前评分卡:25 个黄金标识符的召回率为 100%,无泄漏,无未解决问题。
npm install --no-save @pharmatools/redacta
node src/runner.mjs --online --adapter ./src/adapters/redacta.mjs
Patiently AI — 简化能力(释义的忠实度)
Patiently AI 用于评估专为释义设计的文本的忠实度评分。评估发现简化器删掉了安全关键细节——出院摘要中消失了一剂抗生素(锚点召回率为 86%)。加入保留规则后,下一次运行达到了锚点召回率 100%,删除事实数为 0,捏造数字数为 0——这是每次运行的测量结果,并非保证:在修复后六天捕获的一份冻结的 exp-2 记录中,仍有一个正确但没有来源的参考范围,这是按设计标记的(RESULTS.md §6)。正因如此,评估现在会在 CI 中对 Patiently 的后端设置门禁,并每周重新评分线上服务;一旦出现捏造内容,就会立即判定失败。
node src/runner.mjs --online --adapter ./src/adapters/patiently.mjs
PubCrawl — 检索能力(其他所有内容赖以为依据的层)
PubCrawl 不使用模型——它针对人工核验的锚点和结构不变量评估检索忠实度,从而捕获解析器回归问题(作者数组被合并、泄漏出 [object Object]),避免污染所有下游引用。OpenGATE 能够为非 AI 系统评分,这正是重点:以证据为依据的 AI,其可信度取决于底层检索的可靠性。
node src/runner.mjs --online --adapter ./src/adapters/pubcrawl.mjs
完整方法和模型比较:RefCheckr 的评估方式。
项目布局
opengate/
├── src/
│ ├── lib/ metrics + shared grounding core (single source of truth)
│ ├── scorers/ one file per metric family (7 scorers)
│ ├── adapters/ system-under-test boundary (refcheckr.mjs is the reference)
│ └── runner.mjs CLI: discover cases → score → report → snapshot → gate
├── datasets/ gold-labelled cases (39) + fixtures + schema
├── examples/ worked examples (NVIDIA NIM RAG)
├── mcp/ MCP server (@pharmatools/opengate-mcp)
├── python/ opengate-grounding (PyPI) + DeepEval metric
├── Dockerfile CPU-only image (pharmatools/opengate)
└── action.yml GitHub Action
文档
| 文档 | 内容 |
|---|---|
| 快速入门 | 从零开始,为通用 RAG 系统设置 CI 门禁 |
| ADAPTERS.md | 适配器契约与最小化骨架 |
| datasets/SCHEMA.md | 黄金案例格式 |
| 路线图 | 下一步计划与迈向 1.0 的路线 |
| 贡献指南 | 开发环境设置、添加案例/适配器/评分器、PR 流程 |
| 更新日志 | 发布历史 |
贡献
欢迎贡献,尤其是黄金案例(新领域、引用样式)、适配器(接入你的系统)和评分器(新的指标类别)。请参阅 CONTRIBUTING.md,其中包括支持与治理方面的要求,以及 AI 辅助开发披露;如需讨论重大变更,请提交 issue。1.0 发布前,接口仍可能调整,语义化版本将标示不兼容变更。
引用 OpenGATE
如果你在研究中使用 OpenGATE,请引用它——引用元数据位于 CITATION.cff 中(GitHub 的“引用此仓库”按钮会使用该文件)。
许可证
MIT——因为评估框架不应是黑箱。如果评估结果会影响部署决策,工程师就应该能够检查每个评分器、指标和基准。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。