关于 TastePolicy
TastePolicy 为 Agent 的偏好型选择提供权限边界,结合 Qloo 文化证据与所有者制定的规则。它返回 ALLOW、ASK、REJECT 或 UNAVAILABLE,并附理由和受条件约束的权限;不授权购买或其他执行操作。
主要功能
- 01确定性的偏好决策
- 02所有者制定的版本化策略
- 03带询问门槛的操作阶梯
- 04针对具体选择的临时许可
- 05支持选择性披露的签名证明
- 06文化凭证与决策时间线
适用场景
- 01检查 Agent 是否可将酒店列入候选
- 02在将某选项定为选择前要求批准
- 03选择情境变化时暂停许可
MCP 相关
在 `/api/mcp` 提供远程 MCP 服务,供客户端调用偏好敏感决策工具。文档说明支持托管助手使用 OAuth 2.1。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://tastepolicy.vercel.app/api/mcpclaude mcp add --transport http victorcyberdev-tastepolicy https://tastepolicy.vercel.app/api/mcp{"mcpServers":{"victorcyberdev-tastepolicy":{"type":"http","url":"https://tastepolicy.vercel.app/api/mcp"}}}在 Cursor 中打开{"servers":{"victorcyberdev-tastepolicy":{"type":"http","url":"https://tastepolicy.vercel.app/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"victorcyberdev-tastepolicy":{"type":"http","url":"https://tastepolicy.vercel.app/api/mcp"}}}{"mcpServers":{"victorcyberdev-tastepolicy":{"serverUrl":"https://tastepolicy.vercel.app/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
发布权限依据:M10–M26 执行台账。规范的 M6–M10 候选版本:
m10-m26-company-build;树结构/沿袭审计。CI 通过和托管预览验收并不代表已具备生产能力,也不代表已完成真实的 ChatGPT/Claude 调试。
TastePolicy
AI Agent 的主观决策权威层。
Qloo 为 Agent 提供品味。TastePolicy 为这种品味划定权限边界。 你的品味。你的规则。适用于任何 Agent。
Agent 在技术上可以推荐酒店、唱片或品牌。TastePolicy 回答的是接下来的问题:_在此刻、此情境下,针对这个人,这个 Agent 是否应该做出这一主观选择?_答案为 ALLOW、ASK、REJECT 或 UNAVAILABLE,并附上作出决定的规则、文化凭证,以及一项有边界的权限;一旦事实发生变化,该权限即告终止。
**ALLOW 仅代表偏好决策权。**它绝不授予付款、预订、购买、发送消息、账户、法律或任何执行权限。记忆不等于许可,Qloo 亲和度不等于授权,推荐不等于授权,UNAVAILABLE 不等于 REJECT,验证凭证也不等于授权执行操作。
Qloo 和 TastePolicy
| Qloo | TastePolicy | |
|---|---|---|
| 提供 | 文化证据:跨领域实体之间的亲和度 | 对 Agent 可以如何处理基于品味的选择进行授权 |
| 回答 | “这有多符合品味?” | “现在,针对这个人,这个 Agent 可以做到哪一步?” |
| 故障模式 | 提供方不可用 | UNAVAILABLE:无法作出判断。这不是拒绝,也绝不代表负面品味 |
它们如何协同工作
Qloo cultural evidence
→ subject-owned preference state (immutable versions)
→ context + explicit constraints
→ one deterministic evaluator ─ ALLOW / ASK / REJECT / UNAVAILABLE ─ Cultural Receipt
→ owner policy (rules, action ladder, sensitive choices, temporary permissions)
→ bounded lease bound to commitments of the choice and situation
→ drift suspends it; a fresh evaluation is required to resume (new epoch)
→ signed, selectively disclosed proof another agent can verify
→ doors: REST · TypeScript SDK · remote MCP · A2A · OAuth account linking
策略评估器有且只有一个。M6–M9 对已验收的 M1–M5 评估器进行封装和扩展,而非取代它。
主观行动阶梯
Agent 对符合你品味的选择可以推进到什么程度,从低到高如下:
| 阶梯 | 含义 |
|---|---|
SUGGEST | 将其作为一个想法提及 |
RANK | 为多个选项排序 |
SHORTLIST | 筛选出少数几个 |
ADD_TO_DRAFT | 将其加入仍可修改的计划 |
PRESENT_AS_SELECTED | 将其展示为已为你选定的选项 |
所有者可按全局、选择类型和 Agent 分别设定 Agent 无需询问即可达到的最高阶梯。请求超出该阶梯时,ALLOW 会转为 ASK,所有者可对此作出一次性答复。硬性屏蔽、已保存的限制、UNAVAILABLE 和群组否决都不会因阶梯而改变。旧版客户端保持原有行为:recommend = SHORTLIST,add_to_draft = ADD_TO_DRAFT;在所有者选择启用前,将任何内容展示为已选定都必须先询问。参见 ADR 0024。
决策、Passport、策略、租约、证明
- 决策。 确定性执行,并记录一份文化收据。ASK 有明确类型:权限确认(你自己的规则要求先询问)可以等待你的回答;澄清(缺少某项事实,例如价格)不能获批,需要重新评估。
- Passport。 你的私有状态,通过不透明引用访问;作用域授权;哈希凭据;账户会话。
- 策略。 采用版本管理,发布前进行模拟;按证据类别设定时效要求;制定按 Agent 和类型划分的规则;对敏感类别的选择格外谨慎;支持临时权限和反事实解释。扩大权限需要近期登录。
- 租约。 针对某个确切选择的短期事件溯源权限。当你的信息、规则、共享内容、临时权限,或选择或情境本身发生变化时,租约会暂停,但仅限 TastePolicy 获知这些变化的情况(Agent 会在验证和检查点上提供当前候选项和情境;没人提供的变化无法被察觉)。请参阅 ADR 0025。
- 证明。 使用带选择性披露的签名 SD-JWT 证明、持有者密钥绑定、防重放保护、Token Status List 和按受众划分的权限纪元。权限终止时,该纪元的证明将永久失效;恢复权限会开启新纪元,旧证明永不恢复。通过自身选择和情境验证的验证方,可以了解该证明是否与_自身_相关。
- 时间线。
/account/timeline按顺序显示每个问题、规则变更、权限和共享证明。
使用方法
REST(凭据作用域:PASSPORT_READ、TASTE_EVALUATE、RECEIPT_READ):
curl -sS https://YOUR_ORIGIN/api/v1/evaluate \
-H "authorization: Bearer $TASTEPOLICY_KEY" -H "content-type: application/json" \
-d '{"idempotencyKey":"trip-2026-001","passportRef":"tp_…","requestedAction":"ADD_TO_DRAFT",
"proposal":{"agentId":"my-agent","expectedStateVersion":1,
"candidate":{"id":"…","name":"Hotel Lisboa","type":"destination"},
"context":{"key":"trip","domain":"destination","price":{"amount":120,"currency":"USD"}}}}'
TypeScript SDK(服务端,在此仓库中;未发布到 npm):
const tp = new TastePolicyClient({ baseUrl, credential });
const r = await tp.evaluate({
passportRef,
idempotencyKey,
requestedAction: "SHORTLIST",
proposal,
});
if (r.decision === "ALLOW") {
const lease = await tp.lease({
idempotencyKey,
evaluationRef: r.evaluationRef,
});
// before relying on it, present the choice as it is now:
await tp.leaseVerify(lease.leaseRef, { context: currentContext });
}
- 远程 MCP 位于
/api/mcp(Streamable HTTP)。工具描述中说明了调用时机:在为某人继续进行主观、偏好敏感的选择之前,例如选择、排序、推荐、列入候选名单、加入草稿、作为已选内容呈现,或以其他方式继续处理。 - A2A 1.0 Agent Card 位于
/.well-known/agent-card.json,JSON-RPC 位于/api/a2a;支持选择加入的权限生命周期扩展,用于租约、证明和交接(ADR 0026)。 - 面向托管助手的 OAuth 2.1(授权码 + PKCE S256、客户端 ID 元数据或动态注册、轮换刷新令牌、仅限 MCP 的受众)。请参阅 ADR 0022。
- OpenAPI 位于
/api/v1/openapi。验证器位于/verify和POST /api/attest/verify(无需凭据)。颁发者元数据位于/.well-known/tastepolicy-issuer;第三方颁发者会经过检查并由用户明确设为可信,绝不会自动信任(ADR 0027)。
安全与隐私
凭据和令牌均以哈希形式存储;OAuth 令牌与受众绑定,有效期为 15 分钟;提供方调用绝不会在数据库事务或锁的作用域内运行;扩大策略权限需要近期登录;必须跨实例生效的速率限制通过 PostgreSQL 共享(ADR 0028)。Agent 会获知答案、简短理由以及允许继续操作的范围;收据会显示选择、匹配所依据的文化证据以及起决定作用的规则;默认情况下,证明不会披露品味、姓名或账户引用。威胁模型和审查记录:docs/security/threat-model.md、供应链。
本地开发
Node.js 24 和 npm。运行 npm ci && cp .env.example .env.local && npm run dev。没有凭据时,应用仍可运行并报告不可用状态;它绝不会编造 Qloo 结果。设置 QLOO_API_KEY(仅限服务器端)、QLOO_API_BASE_URL 和 QLOO_AFFINITY_SCALE 以使用 Qloo(设置)。持久化需要 DATABASE_URL;账户功能需要 BETTER_AUTH_SECRET 和 BETTER_AUTH_URL;证明需要 TASTEPOLICY_PUBLIC_ORIGIN 和 TASTEPOLICY_ATTESTATION_KEY。使用 npm run db:migrate:all 应用架构(带迁移账本,幂等;ADR 0030)。参见 .env.example。
测试、一致性验证、负载
npm run verify # format, lint, typecheck, unit tests, build
npm run test:e2e # Playwright incl. axe accessibility checks
npm run conformance:compatible # tastepolicy-compatible-v1 (110 checks)
npm run tastebench:validate # evaluation methodology fixtures
TASTEPOLICY_TEST_DATABASE_URL=postgres://… npm test # adds real-PostgreSQL suites
npm run load:local # controlled contention probe (not a capacity claim)
线上部署
docs/evaluation/r6-hosted-acceptance.md 按类型标注证据:LIVE、HOSTED、CONTROLLED、SYNTHETIC、LOCAL、CI、NOT EXECUTED、BLOCKED。本 README 中没有任何内容声称某个厂商助手(ChatGPT、Claude、Gemini)可与 TastePolicy 配合使用;产品页面列出了当前可用、已列入路线图以及尚未实现的功能。
当前限制
- 基于承诺的漂移检测涵盖 Agent 告知 TastePolicy 的内容;它无法观察外部世界。
- 每次部署仅能设置一个组织上限,由运营者设定;没有多组织模型、SSO/SCIM 或管理控制台。
- 敏感选择由所有者按选择类型声明;内容不会被分类。
- 经过身份验证的 MCP/A2A 请求预算按实例计算。
- 联邦仅支持显式信任:没有注册表,也不会在颁发方之间传播撤销信息。
- 使用真实 Qloo 和厂商连接器的托管验收记录在 R6 文档中;请查看其状态。
- TasteBench 阈值仍处于实验阶段,未经人群校准。
早期里程碑和验收记录的历史:docs/history、docs/evaluation。许可证:Apache-2.0。贡献方式:CONTRIBUTING.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。