关于 Vaara
Vaara 是用于 Agent 工具调用的治理代理,可按策略评分并允许、阻止或升级调用,同时生成防篡改审计记录和可独立验证的签名凭证。它面向需要审计证据与调用管控的系统,也支持将 MCP 服务置于代理之后。
主要功能
- 01按策略对调用评分并作出决策
- 02生成哈希链防篡改审计记录
- 03离线验证签名凭证与证据包
- 04提供 MCP 服务代理和调用管控
- 05支持合规报告与影子运行
适用场景
- 01在工具执行前拦截或升级调用
- 02为审计或事件调查提供可验证记录
- 03把 MCP 客户端流量经代理转发并记录
- 04在 CI 中检查策略和审计链
MCP 相关
Vaara 可作为 MCP 代理置于客户端与上游 MCP 服务之间,在转发 tools/call 前执行策略决策并记录审计事件;允许的调用会转发,阻止的调用返回 MCP 错误。另提供 MCP server 集成。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
自主行动,有据可查。
每项自主行动都有一份可验证的凭证,任何人都能检查。
你的 AI Agent 转出了资金、写入了文件、调用了工具。之后,有人不信任你,要求你证明它具体做了什么、为什么这么做:可能是监管机构、审计员,也可能是事故发生后的客户。你自己的日志无法证明,因为你可能修改过它们。
快速开始
pip install vaara # Python: CLI, MCP proxy, server
brew tap vaaraio/tap && brew install vaara # macOS: CLI + menu-bar app (built from source)
npm install @vaara/client # TypeScript client for the HTTP API
import vaara
@vaara.govern
def transfer_funds(to: str, amount: float) -> str:
...
就是这么简单。每次调用受治理函数时,都会先进行风险评分,并依据你的策略作出决定,然后才运行函数体。获准的调用会执行,而决策、调用和结果则会写入一份哈希链式、防篡改的记录,任何人都能离线验证;旁边还会附上一份签名凭证。导出时签署整条记录链(vaara trail export),即可提供第三方证明。记录默认会持久化到 ~/.vaara/trail/audit.db,因此即使重启,证据也不会丢失。需要 Python 3.10+。基础安装包含三个运行时依赖:cryptography、rfc8785 和 cbor2,用于对凭证签名并进行规范化。
deny 和 escalate 都会引发 vaara.Blocked,因为升级处理意味着尚未有人给出答复。在全新安装环境中,上面的示例可以直接运行。默认运行模式为 balanced,风险低于 0.55 时允许,高于 0.85 时拒绝;首次调用 transfer_funds 的评分为 0.275,置信区间为 [0.085, 0.465]。Vaara 根据区间上限作出决定;由于没有历史结果,区间较宽,因此风险较高的调用会在点估计达到阈值之前触发升级处理。通过 report_outcome 反馈真实结果可以缩小区间。其他预设模式可通过 vaara mode list 查看。若要观察决策但不执行操作,请从 @vaara.govern(shadow=True) 开始。
无需安装任何内容即可验证凭证
[vaara.io/verify.html](https://vaara.io/verify.html) 是回执浏览器,提供英文和芬兰文版本。它是一个静态页面和一个脚本,无需构建步骤,也没有依赖项。粘贴回执后,它会重新计算 DSSE 预认证编码,获取其摘要,并使用 WebCrypto 检查 Ed25519 签名。回执不会离开当前标签页,不会上传任何内容,而且页面可以在断网时运行,因此验证不是一项服务,Vaara 也不参与其中。保存页面及其脚本后,它仍然可以正常工作。页面还说明了通过检查并不能证明什么:密钥属于你所期望的参与方、签署的声明是真实的、没有外部时间机构时 decided_at 有任何意义,或一张回执就是完整的历史记录。
同一页面上的浏览器可以直接从你的浏览器读取公共透明日志。按摘要查找一条 trail head,或粘贴公钥以查看在该密钥下发布的所有内容。无需账户,也无需登录,因为密钥就是身份。向该日志发布内容需要主动选择,且默认关闭(vaara trail publish-head),所以日志中没有记录,只表示没有发布内容,并不表示什么都没发生。
看看还有谁检查过它
vaara.io/conformance.html 是结果页面。它列出每个测试套件及其判定,以及所有运行检查器并公开报告检查结果的参与方(维护者除外)。各行相互链接,每行都包含前一行的摘要,因此删除或重新排序某一行都会破坏其后所有行的摘要,而且任何人都能看出这种破坏。维护者也无法删除某一行。与我们的结果不一致的运行结果也会作为一行记录,并说明原因;这里没有黑名单。
聚合运行器会一次性评估所有测试套件,也会用相同方式评估另一种实现的测试向量:
git clone https://github.com/vaaraio/vaara && cd vaara
pip install cryptography rfc8785 # enough for 50 of the 52 suites; the two that skip name their extra
python scripts/conformance_runner.py # grade the reference corpus
python scripts/conformance_runner.py --vectors-dir ./your_vectors # grade your own
每次运行结束时,它都会打印一个预填充链接,只需点击一次即可申请添加记录。命名并带版本号的规则集、通过检查能证明和不能证明的内容,以及完整的测试套件列表,请参阅 docs/conformance-profile.md。
更喜欢明确的处理流水线?
装饰器会驱动同一个引擎;如果你想直接调用并获取决策对象,也可以这样做。
from vaara.pipeline import InterceptionPipeline
pipeline = InterceptionPipeline()
result = pipeline.intercept(
agent_id="agent-007",
tool_name="fs.write_file",
parameters={"path": "/etc/service.yaml", "content": "..."},
agent_confidence=0.8,
)
if result.allowed:
pipeline.report_outcome(result.action_id, outcome_severity=0.0)
else:
print(result.reason)
每次调用都会根据你的策略获得风险评分以及允许/阻止/升级处理的决策,随后调用、决策和实际结果都会写入审计跟踪。report_outcome 会闭合反馈环:评分器会根据哪些信号实际预测了结果重新调整权重。每个版本都会附带 SLSA v1 构建来源证明,形式为 GitHub 构件证明(SLSA Build Level 2);PyPI wheel 也是同一文件,因此 gh attestation verify vaara-<version>-py3-none-any.whl --repo vaaraio/vaara 可以验证任一下载文件。可选的 ML 分类器:pip install 'vaara[ml]'。
无需信任生产方即可验证
写入 trail 是简单的一半。更重要的一半,是让不信任你的其他人无需密钥、访问权限或你的任何代码即可检查记录。每条 Vaara 记录都使用内容寻址,并在真实性验证失败时默认拒绝,同时附带公共一致性测试向量和独立检查器;该检查器不导入任何 Vaara 代码,因此独立参与方可以离线复现每项判定。
vaara verify-bundle evidence-bundle.json
只有在确实验证了签名时才为 ok,而不仅仅是日志中存在签名。相同特性也支撑着 Vaara Receipt Internet-Draft 背后的标准工作:即使验证者不运行你的任何软件,证据也依然经得起检验。完整的验证器集合、各动词对应的信任模型,以及每种情况下信任的来源,请参阅 docs/verifying-evidence.md。
git clone https://github.com/vaaraio/vaara
cd vaara
pip install cryptography rfc8785 # the checker's only dependencies
python tests/vectors/external_evidence_v0/_check_independent.py
它只根据收据字节和公钥重新推导每个判定。输出展示了这条证据链旨在证明的属性:从声明的边界内丢失的收据,相对于持有的收据集合构成可证明的缺口,无需访问签发方,也无需外部见证方。
要在一个可运行文件中走完整个流程:生成签名记录、自行验证,然后观察单个伪造字节如何被捕获,请参阅 examples/prove-it-yourself/。其背后的日志与证据之争见 docs/logs-vs-evidence.md。
证据是什么样的
针对真实证据链运行 vaara compliance report --db audit.db --format json,会生成审计员可直接阅读的条款级证据记录。对于没有记录事件的条款,结果为 evidence_insufficient,而非敷衍盖章。
{
"system_name": "Acme HR Assistant",
"overall_status": "evidence_insufficient",
"trail_integrity": {"size": 105, "chain_intact": true},
"articles": [
{"article": "Article 12(1)", "title": "Record-Keeping (Logging)",
"status": "evidence_sufficient", "strength": "strong", "evidence_count": 105},
{"article": "Article 15(1)", "title": "Accuracy, Robustness and Cybersecurity",
"status": "evidence_insufficient", "strength": "absent", "evidence_count": 0}
]
}
每项判定都包含阈值与观测值快照、理由和底层记录,因此审阅者可以将 status 追溯到具体事件。同一数据还可呈现为公告机构 PDF、静态 HTML 仪表板,或 Sigstore 签名的交接信封。请参阅 docs/COMPLIANCE.md。
你将获得什么
- 管控你通过它路由的每次工具调用,遵循你自己的策略:允许、阻止或升级处理。覆盖范围取决于你封装的内容;每个适配器都会说明它能看到的范围,Claude Code 插件则明确列出了四项。
- 防篡改证据链,外部各方无需信任你的技术栈即可验证;链头可锚定到外部 RFC 3161 / eIDAS 时间戳,从而依据你无法控制的时钟证明其存在。
- 欧盟 AI 法案条款级证据,如实呈现缺口,而不是掩盖问题。
- 对模型调用本身进行治理,而不仅是周边工具:以硬件为根的推理收据,由另一个不同的本地模型进行交叉核验。这是主权推理工具链,在 v1.0 中推出。
- 强制执行,而不只是记录(v1.1.0):凭据代理会签发与证明摘要绑定的短时凭据,并将其限定到单个工具、其参数承诺和租户;带类型的能力范围则限定调用可以执行的操作。受保护工具前的网关会拒绝任何没有有效且绑定证明的授权的调用,因此绕过管控不再悄无声息。默认关闭。
- 可揭示缺口的完整性(v1.4.0):每份授权收据都可以包含签名的边界序列和累计计数,因此,仅凭持有的收据即可证明声明边界内丢失了收据,无需访问签发方,也无需外部见证方(
vaara verify-contiguity)。默认关闭。 - 独立重新生成(v1.14.0):每组公共向量中都有第二个生成器,仅依据声明的规范化规则,逐字节重新生成签名载体,且不导入 Vaara。即使从未运行过 Vaara 软件的验证器,也能重新生成相同字节。
可接入的位置
原生适配器通过相同的管道路由主流 Python Agent 框架;每个适配器都使用框架自身的钩子,并生成相同的审计事件:
| 框架 | 入口点 |
|---|---|
| LangChain | VaaraCallbackHandler、vaara_wrap_tool |
| CrewAI | VaaraCrewGovernance |
| OpenAI Agents SDK | VaaraToolGuardrail、vaara_wrap_function |
| MCP 服务 | vaara.integrations.mcp_server |
若要让 Vaara 位于 MCP 服务前面,可将其作为代理运行。每个 tools/call 都会在到达上游之前经过管道;允许的调用会透明转发,被阻止的调用则返回 MCP 错误。
vaara-mcp-proxy \
--upstream npx --upstream-arg -y --upstream-arg @sap/mdk-mcp-server \
--db ./mcp_audit.db --shadow
从 --shadow 开始:每次调用都会分类、评分并记录,不会拦截任何内容。运行几天后,vaara trail shadow-report --db ./mcp_audit.db 会显示执行拦截策略会产生什么效果;然后移除该标志并开始执行策略,可先使用为常见 MCP 服务准备好的边界策略 examples/policies/mcp-starters/。将 MCP 客户端(Claude Code、Cursor 或任何宿主)指向代理,而不是上游服务。此外,还提供 HTTP API(pip install 'vaara[server]'、vaara serve),以及面向非 Python Agent 的官方 TypeScript 客户端 npm 包(@vaara/client)。框架详情、云端和开源护栏适配器(Bedrock、Azure、GCP、NeMo、Guardrails AI、LLM Guard、Rebuff)以及多租户代理详见 docs/adapters.md。
在 CI 中
策略就是代码,因此应与修改策略的变更一起纳入拉取请求。该 Action 会验证策略、运行测试用例,并在策略无法解析、测试用例失败,或审计轨迹的链或签名无效时使构建失败。
- uses: vaaraio/vaara@v2
with:
policy: policies/production.yaml
cases: policies/production.cases.yaml
将 trail 指向某个任务生成的已签名 zip 文件即可进行验证。未提供 pubkey 时,会检查审计轨迹内部是否完整;传入单独获取的密钥还可以验证签名者,运行结果会说明执行了哪一种检查。输入、输出和固定版本说明见 docs/github-action.md。
此处检查的是构件。在工具调用发生时拦截 Agent,则是运行时的职责。
评分方式
每个风险评分都融合了五种专家信号,并随着结果反馈不断调整,同时附带置信区间,其覆盖保证不受输入分布影响。在留出的对抗语料上,分类器的召回率达到 85.6%(95% Wilson 区间为 [83.4, 87.6]),误报率为 5.1%;在实时注入压力下,对良性调用的误报率为 0.0%。热路径规则评分器在通用 CPU 上每次调用平均增加 140 µs;机器学习分类器为可选功能(vaara[ml]),不在该路径上运行。make bench 可针对仓库中附带的模型包复现下方的分类器数据;需要运行 pip install 'vaara[ml]',并会在首次运行时下载嵌入模型。
方法和各单元明细:docs/architecture.md 和 bench/。
标准与证明
- **[vaara.receipt/v1](SPEC.md)** 是签名回执格式的规范母规范:采用哈希链,以 JCS(RFC 8785)规范化,可通过公钥离线验证。x402 结算绑定和 eIDAS 合格时间戳配置文件都是下游配置文件,依托该规范,而非与之竞争的格式。回执可以包含由 Vaara 离线签发的可自托管 RFC 3161 时间戳。 - **[SEP-2828](docs/sep/sep-server-execution-record.md)** 签名执行记录,作为 IETF Internet-Draft [`draft-sirkkavaara-vaara-receipt`](https://datatracker.ietf.org/doc/draft-sirkkavaara-vaara-receipt/) 延续发布。第二个独立实现已从干净检出版本出发,在没有共享代码的情况下复现了 SEP-2828 一致性向量。已发布的语料库配有独立检查器,涵盖回退绑定路径([`tests/vectors/fallback_projection_v0/`](tests/vectors/fallback_projection_v0/))和 CrewAI 治理决策([`tests/vectors/governance_decision_v0/`](tests/vectors/governance_decision_v0/))。 - **OVERT 1.0**([overt.is](https://overt.is/)):Vaara 是仲裁器,在启用证明时,会为每条记录同时生成 Protocol Profile 1.0 Base Envelope(规范化 CBOR、Ed25519)。 - **后量子**:可选的并行 ML-DSA-65 / FIPS 204 签名,针对同一前像签名,因此移除后量子签名会形成可检测的降级,而非悄然丢失。 - **不依赖根信任的证据**:同一份 Article 12 记录无论是否使用硬件 TEE 均可验证,也可转换为 IETF RATS EAR 声明(AR4SI vector);其信任根可以是 TPM 2.0 主机、AMD SEV-SNP 机密 VM,也可以完全不使用 TEE。 - **主权推理测试框架**(v1.0):签名代理后方运行本地模型,生成由硬件根信任的推理回执,再由第二个本地模型交叉核验。该项目以私有方式开发,并在此以 AGPL-3.0 发布。详细信息及每项功能的离线检查器见:docs/standards.md。
接口稳定性
公共接口已固定:签名封装(vaara.receipt/v1)、能力约束、凭据授权和网关,以及 @vaara.govern 入口点。不会规划新的原语。新行为将以依托 vaara.receipt/v1 的配置文件形式发布,而非作为新的核心类型;也不会再添加新的格式绑定(最后一个版本为 v1.13.0)。今后的工作将在这一接口范围内进行加固与精简,让基于它构建的用户拥有稳定的目标。
文档
| 路径 | 内容 | |---|---| | [docs/verifying-evidence.md](docs/verifying-evidence.md) | 每种验证器及其信任模型 | | [docs/logs-vs-evidence.md](docs/logs-vs-evidence.md) | 日志与证据:证明 Agent 做了什么,以及《人工智能法案》的实际要求 | | [docs/prove-what-an-ai-agent-did.md](docs/prove-what-an-ai-agent-did.md) | Agent 操作的可验证记录所需的四项属性 | | [docs/eu-ai-act-article-12.md](docs/eu-ai-act-article-12.md) | 第 12 条记录保存要求:有哪些要求、没有哪些要求,以及对工具的要求 | | [docs/tamper-evident-audit-trail.md](docs/tamper-evident-audit-trail.md) | 审计轨迹的工作方式、其明确的局限性及成本 | | [docs/vaara-vs-observability-vs-grc.md](docs/vaara-vs-observability-vs-grc.md) | Vaara 与 Datadog/Splunk、Vanta/Drata 的对比:三个不同的问题 | | [docs/dogfood/](docs/dogfood/README.md) | 我们的营销活动在此门禁下运行;已签名的轨迹及其验证密钥 | | [docs/capabilities.md](docs/capabilities.md) | Vaara 的全部功能,按领域分类,每项都注明对应代码 | | [docs/library.md](docs/library.md) | 无专属命令的功能,可通过 Python 使用;每项都附有可运行的代码块 | | [docs/architecture.md](docs/architecture.md) | 评分、保形覆盖率、时间锚点、形式化属性 | | [SPEC.md](SPEC.md) | 权威的 vaara.receipt/v1 回执格式规范 | | [docs/standards.md](docs/standards.md) | SEP-2828、SEP-2787、OVERT、主权推理框架 | | [docs/adapters.md](docs/adapters.md) | 框架和云端/OSS 防护栏适配器、多租户代理 | | [docs/COMPLIANCE.md](docs/COMPLIANCE.md) | 《人工智能法案》和 DORA 条款映射、评估数据 | | [docs/multi-replica-deployment.md](docs/multi-replica-deployment.md) | 扩展到单个代理进程之外:每个副本的链、轮换、归档索引 | | [docs/kubernetes-rancher.md](docs/kubernetes-rancher.md) | 使用 Rancher 在 Kubernetes 上运行代理:图表、存储、强制执行、网络隔离 | | [docs/supported-platforms.md](docs/supported-platforms.md) | Vaara 支持的 Python、容器和 Kubernetes 版本,以及已验证的版本 | | [CHANGELOG.md](CHANGELOG.md) | 各版本的演进 | | [docs/PRIOR_ART.md](docs/PRIOR_ART.md) | 各项概念首次发布的时间,以及相关工作 |Vaara 帮助部署者为自身的合规工作收集证据。它不认证合规性,也不构成法律建议。部署者需自行承担《欧盟人工智能法案》及其他适用法律规定的义务。
提供商业许可和付费试点:请访问 vaara.io 或联系 [email protected]。许可条款见 LICENSING.md,商业许可说明见 COMMERCIAL.md。
致谢
- 入选可信 AI 的 OECD.AI 工具与指标目录。
- 列入 IMDA《智能体 AI 模型治理框架 v1.5》(新加坡,2026 年 5 月 20 日)的行业致谢名单。
- AMD AI 开发者计划于 2026 年 5 月发布了 Vaara 开发者体验分享。
- 自 2026 年 10 月起,成为 Red Hat「Sell With」模块中的合作伙伴。
- 第 14 条运行时:为什么对智能体 AI 的监督必须以行动而非模型作为证据,发表于 EU Apply AI Alliance Futurium 的立场文章。
- 第 12 条与日志和证据的区别,发表于 EU Apply AI Alliance Futurium 的配套立场文章。
- AI 法案的主权证明,发表于 EU Apply AI Alliance Futurium 的最新立场文章。
Red Hat 是 Red Hat, LLC 在美国和其他国家注册的商标。
引用
如果你基于 Vaara 或其收据格式进行开发,请引用此代码仓库(参见 CITATION.cff)以及它所实现的规范:
Henri Sirkkavaara。《Vaara 收据:用于智能体行动决策的可重新计算收据格式》。IETF Internet-Draft draft-sirkkavaara-vaara-receipt。
每个带标签的发行版都会由 Zenodo 存档并分配 DOI。引用 10.5281/zenodo.22027975 可代表整个软件项目,该 DOI 始终指向最新版本;如需引用实际运行的确切字节,请使用特定发行版上标注的版本 DOI。
许可证
版权所有 © 2026 Henri Sirkkavaara。采用 AGPL-3.0-or-later 许可。参见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。