mcpField
O
opengate-mcp

opengate-mcp

本地服务
github.com/nickjlamb开发工具11 天前更新

关于 opengate-mcp

opengate-mcp 将 OpenGATE 的确定性依据核验能力提供给 Agent,适合检查 RAG 和文档问答系统是否从给定材料作答。它不依赖 LLM 评审,而是检查关键事实、数字依据和无法回答时的弃答。

主要功能

  1. 01确定性核验回答与上下文的依据关系
  2. 02检查关键事实是否出现
  3. 03验证数字能否追溯到来源
  4. 04检查无法作答时是否弃答
  5. 05无需 LLM 评审

适用场景

  1. 01在 Agent 工作流中核验生成答案
  2. 02检查 RAG 系统的依据与数字
  3. 03评估文档问答系统的弃答行为
  4. 04在提示词或模型变更后回归检查

MCP 相关

作为 MCP 服务,它让 Agent 在交互过程中调用 OpenGATE 的回答依据核验能力。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"nickjlamb-opengate": {
"command": "npx",
"args": [
"-y",
"@pharmatools/opengate-mcp"
]
}
}
}
启动命令npx -y @pharmatools/opengate-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@pharmatools/opengate-mcp0.1.4

工具

1

收录的工具列表 · 更新于 3 周前

参数类型必填说明
answerstring是要检查的回答。
contextany是回答必须以此为依据的检索上下文(字符串或段落数组)。
questionstring否原始问题(可选;允许将问题中的数字视为有依据)。
must_abstainboolean否当上下文不包含答案时设为 true:此时回答必须拒绝作答,而非捏造。
expected_factsarray否正确回答必须包含的事实(例如 "30 days"、"no restocking fee")。每项都必须出现在回答中。
allowed_new_numbersarray否回答可以引入的、上下文中没有的数字(例如来自问题的数字)。

详细介绍

不要相信 AI。要验证。——OpenGATE,为基于证据的 AI 提供开源验证,无需 LLM 评判器
开放式基于证据的 AI 测试与评估

为基于证据的 AI 提供确定性、以黄金标准为锚点的验证——无需 LLM 评判器。

CI npm npm downloads PyPI Docker Docker pulls Glama MCP server Listed on mcpservers.org node License: MIT PRs welcome

快速开始 · 架构 · 应用形式 · 示例 · 路线图 · 贡献 · 更新日志


证据胜过似是而非。 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 Actionuses: nickjlamb/opengate@v0在任何代码库中即插即用的 CI 门禁
Python 包pip install opengate-groundingcheck_grounding()、pytest 门禁、DeepEval 指标
MCP 服务npx @pharmatools/opengate-mcp可在行内验证自身回答的 Agent
Docker 镜像docker run pharmatools/opengate仅使用 CPU 的容器化流水线

架构

OpenGATE 架构:被测系统通过单文件适配器连接到确定性核心——黄金数据集和系统答案输入纯逻辑评分器,评分器生成带版本的评分卡;回归门禁在每次提交时将评分卡与基线进行比较——得分提升或持平则部署,回归则构建失败。

评分器不会直接与系统通信,而是通过一个小型适配器与其交互,因此方法可以复用,只有黄金数据集需要更改。在开发循环中,它位于 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——因为评估框架不应是黑箱。如果评估结果会影响部署决策,工程师就应该能够检查每个评分器、指标和基准。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。