关于 check
Stub recipes 是可运行的参考集成示例,展示 AI Agent 如何为行动及已披露的商业影响签发签名记录。示例涵盖多种 Agent 模式和语言,并明确属于模拟而非生产部署。
主要功能
- 01可运行的 Agent 集成示例
- 02记录 Agent 行动的签名凭据
- 03披露商业影响
- 04提供 JavaScript 和 Python 示例
适用场景
- 01在排序决策处添加凭据
- 02查看 Agent 行动记录
- 03研究不同 Agent 模式的集成
MCP 相关
`mcp` 示例展示 Agent 可接入的公共检查服务,以及运营方签发凭据的模式。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| stub_id | string | 是 | 64 个字符的 stub id |
详细介绍
Stub recipes
为 Stub 提供可运行的参考集成。Stub 是面向 AI Agent 的利益关系回执注册表。
每个 recipe 都是一个可运行的 Agent,Stub 已接入其中排名选出胜者的那一行代码。克隆一个、运行它,然后查看它生成的回执。
这里的每个 recipe 都是参考实现和模拟。没有真实商家、没有真实资金、没有真实用户。没有人在生产环境中运行这些项目,每个 README 都会说明这一点。我们的目的是准确展示回执应放在你熟悉的代码中的哪个位置。
Recipes
| Recipe | 展示内容 | 语言 |
|---|---|---|
tool-loop | 每个框架封装的基本原语。一个模型、两个工具、一个循环。 | JavaScript |
acp-commerce | 利益关系存在于结账之前,也就是排名环节。 | JavaScript |
mcp | 任何 Agent 都能添加的公共检查服务,以及运营方签发模式。 | JavaScript |
langchain-python | 在 LangChain Agent 中实现相同的集成。 | Python |
vercel-ai-sdk | JavaScript 中最大的 Agent 开发平台。 | JavaScript |
insurance-advice | 商业场景之外的基本原语,且关系重大。 | Python |
每个 recipe 都会连接实时注册表,并以你选择的运营方 ID 签发真实回执。免费套餐每月提供 1,000 个 stub,因此尝试全部六个无需花费。没有离线模式,也没有模拟注册表:签发 stub 的唯一方式就是实际签发。
上方的徽章
这些 recipe 每天都会在实时注册表上运行测试,徽章则基于运行生成的回执。它不是构建状态:它表示参考 Agent 为其目录进行了排名,披露了影响结果的因素,并签发了任何人都能打开查看的签名记录。点击徽章即可查看这些记录。
如果徽章停止更新,就说明 recipe 已无法运行;本仓库会在你克隆之前告知你。
从这里开始
如果你是新手,请先阅读 tool-loop。它最精简,也包含了其他 recipe 反复强调的要点:模型没有做错什么,做出决定的是排名。
cd tool-loop
npm install
export STUB_OPERATOR_ID=op_yourname_toolloop
npm run demo
选择一个属于你的运营方 ID。首次运行会注册该 ID,并将密钥对保存到 .stub-keys.json,此文件已加入 gitignore。之后每次运行都会使用相同的身份。
演示程序会打印代码生成的排名、每个项目对应的原因,以及任何人都能打开的回执链接。
准备部署时
这些 recipe 每次运行都会生成新的密钥对,这适合阅读演示,却不适合生产环境。 PRODUCTION.md 介绍了需要做出的改变:如何持久化身份、回执应放在哪里、自由文本中绝不能放什么,以及我们让自己的 Agent 上线时犯过的错误。
什么是 stub
当你的 Agent 代表某人采取行动时,它会签发一条小型签名记录:谁提出了请求、执行了什么操作、发生了什么资金流动,以及适用了哪些商业影响因素。服务对象会在中立注册表中检查这条记录,而不是在你的服务器或我们的服务器上检查。
安装任何内容之前,可以先查看这条实时记录:
https://api.getstub.dev/check/72b4baee1719ec34acc5df5c514a12fd2e19b9a6776de4b45706988f765c77d8
完整集成示例
import { Stub, influenced } from '@getstub/agent';
const stub = new Stub({
operator: 'Your Agent',
declared: {
paid_by: 'the user, subscription',
conflicts: ['commission'],
},
});
// at the line where your ranker picks a winner:
const inf = [];
if (pick.paid_placement) inf.push(influenced.placement(pick.seller));
if (pick.commission_pct) inf.push(influenced.commission(pick.commission_pct + '%'));
const receipt = await stub.issue({
principal: user.id, // hashed on your side, never sent raw
agent: 'your-agent',
requested: query,
done: `booked ${pick.name}`,
value_moved: { amount: pick.price, currency: 'USD' },
not_disclosed: inf, // an empty array is signed proof none applied
});
Python 版本的结构相同:
from getstub import Stub, influenced
两个常见要点
披露信息不需要手动编写。 你的排名代码知道佣金或展示费何时影响了结果,因为正是它应用了这些因素。回执会在同一行代码中读取相同的标志。它能随着排名逻辑的扩展而扩展。
披露内容为空不等于什么都没发生。 这是一份签名声明,表示你的业务中存在利益冲突,但没有任何冲突影响此次操作。这比沉默更有价值,也正因如此,诚实的运营方能从中获益。
安装
npm install @getstub/agent
pip install getstub
两个客户端都会对同一规范格式进行签名,并通过验证而非假定来确认:Python 测试套件会为 stub 签名,再让注册表代码进行验证。
免费套餐
每月 1,000 个凭证。验证永远免费,因为向接受服务的人收取验证费用就违背了初衷。
链接
- getstub.dev
- 注册表:https://api.getstub.dev
- 见证密钥:https://api.getstub.dev/witness
- 运营方目录:https://api.getstub.dev/directory
版权所有 Stub 2026
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。