运营方指南 — 运行验证服务¶
本文是英文版的参考译文,更新于 28/10/2026。如有出入,以英文版为准。标识符、命令和代码块保持原文,不作翻译。
本指南面向希望运行“智能体已验证”服务的第三方:一个验证 DCP Signed Bundle 的 HTTP API(还可以选择把哈希锚定到区块链上)。协议不要求任何中央服务器;验证随时都可以用 dcp verify-bundle 在本地完成。此服务是可选的,由运营方自行决定是否运行。
什么是“智能体已验证”服务?¶
智能体验证服务是一个 HTTP API,它会:
- 验证 Signed Bundle:执行与 spec/VERIFICATION.md 相同的规范性检查清单(模式验证、签名、intent_hash、审计链、可选的 merkle_root)。
- 可选地对照公共区块链或透明度日志检查
anchor_receipt(只使用公开数据)。 - 可选地把
bundle_hash锚定到现有的链上,并向客户端返回anchor_receipt。
该服务是无状态的:每个请求接收一个 bundle(以及可选的公钥),验证后返回结果。没有中央的智能体注册表;协议也没有定义规范的 URL(例如,不存在必须使用的“dcp.ai”端点)。
verified: true 表示 bundle 未被篡改,并由它所指明的密钥签署。它并不说明委托人是谁,也不说明你是否应该据此行事:只接受来自你所信任委托人的 bundle 是准入,一个单独的步骤(参考服务器中的 POST /v2/admit,参见 ADMISSION.md,未发布)。
由谁运行?¶
第三方。 任何人都可以用本仓库(模式 + 规范 + CLI 或编程 API)部署此服务。协议作者不运营任何中央验证服务器。
要求¶
- 本仓库的检出副本:
schemas/v1/和schemas/v2/中的模式,spec/中的规范,以及根软件包(未发布到 npm)中的 参考 CLI 和验证库。 - 运行验证的能力:使用 CLI(
dcp verify-bundle [--policy <mode>] <signed.json> [public_key.txt]),或仓库中的编程 API:lib/verify.js中的verifySignedBundle(异步)和validateBundle。V2 bundle 在那里先进行模式验证,然后由@dcp-ai/sdk验证。 - 可选,用于锚定:对现有链(Bitcoin、Ethereum 或透明度日志)的 RPC 或区块浏览器访问。参见 STORAGE_AND_ANCHORING.md。
建议的 API 契约¶
为了让客户端和运营方能够互操作,本节建议一个最小契约。实现可以对其进行扩展。
POST /verify¶
按照规范性检查清单(模式、签名、intent_hash、审计链、可选的 merkle)验证 Signed Bundle。
- 请求(JSON):
signed_bundle(对象):要验证的 Signed Bundle。-
public_key_b64(字符串,可选):对于 V1,当 bundle 中不含签名者公钥时提供该公钥;否则使用 bundle 的signature.signer.public_key_b64。对于 V2,它固定经典签名者(在pq_only模式下会被拒绝)。 -
响应(JSON):
verified(布尔值):所有检查都通过时为true。errors(字符串数组,可选):当verified为false时,提供人类可读的错误消息。
示例:
// Request
{ "signed_bundle": { "bundle": { ... }, "signature": { ... } } }
// Response (success)
{ "verified": true }
// Response (failure)
{ "verified": false, "errors": ["SIGNATURE INVALID", "Hint: Check that the public key ..."] }
参考服务器(server/)将其实现为 POST /verify。其响应始终带有 dcp_version 和 errors;对于 V2,还会增加 warnings、verifier_policy_hash 和 resolved_tier。请求体为 JSON。
POST /anchor(可选)¶
把 bundle_hash 锚定到链上并返回 anchor_receipt。链和凭据(例如钱包、RPC URL)由运营方配置。回执格式参见 STORAGE_AND_ANCHORING.md。
- 请求(JSON):
bundle_hash(字符串):例如sha256:<hex>。-
chain(字符串):例如"bitcoin"、"ethereum"。 -
响应(JSON):
anchor_receipt(对象):例如{ "chain": "bitcoin", "tx_id": "...", "block_height": N },或 Ethereum 风格的字段。
/anchor 的实现取决于运营方的链和工具(Bitcoin OP_RETURN、Ethereum 合约事件等)。参考锚定服务(services/anchor)尚未实现它:它只在本地内存中记录哈希,带有 tx_hash: null 和 onchain: false,不返回任何 anchor_receipt。参考验证服务器对 POST /anchor 返回 501。
部署¶
参考验证服务器、锚定服务、透明度日志和吊销注册表都以 Docker 镜像的形式发布在 GitHub Container Registry 上。在大多数情况下,你根本不需要克隆仓库,docker run 就够了。
选项 1 — 拉取参考镜像(最快)¶
docker run -d -p 3000:3000 ghcr.io/dcp-ai-protocol/dcp-ai/verification:latest
curl http://localhost:3000/health
多架构(linux/amd64 + linux/arm64)。标签::latest、发布版本的 semver 标签(:<major>.<minor>.<patch>、:<major>.<minor>、:<major>)以及 :sha-<short>。完整的服务栈(验证 + 锚定 + 两个透明度日志 + 吊销,共五个容器)可以在 docker/ 中运行一次 docker compose up -d 启动,也可以在仓库根目录运行 docker compose -f docker/docker-compose.yml up -d。
选项 2 — 托管 PaaS¶
Fly.io 的预配置文件位于 deploy/fly/;部署指南还介绍了 Google Cloud Run 和 Railway 的模式。
选项 3 — 把验证器嵌入你自己的服务¶
如果你希望在现有应用内部进行验证(不单独运行 HTTP 服务),请安装你所用语言的 SDK 并直接调用其验证器(TypeScript 中为 verifySignedBundleV2,Python 和 Rust 中为 verify_signed_bundle_v2,Go 中为 v2.VerifySignedBundleV2)。以下命令安装的是已发布的版本:
npm install @dcp-ai/sdk # TypeScript / Node.js
pip install dcp-ai # Python
cargo add dcp-ai@2.11.1
go get github.com/dcp-ai-protocol/dcp-ai/sdks/go/v2@v2.11.1
确切的导入路径和 API 范围参见各 SDK 的 README,已发布版本缺少的内容参见其 Release status。在 main 上,TypeScript、Python、Go 和 Rust SDK 原生验证 V1 和 V2 bundle,@dcp-ai/wasm 公开了 Rust 的 V2 验证器。它们的 V2 验证器遵循 VERIFICATION.md 中的检查清单,包括每个构件的签名(步骤 V2-8)和 PQ 检查点(步骤 V2-12),并且自 @dcp-ai/sdk 2.2.1、@dcp-ai/wasm 2.1.1、dcp-ai 2.10.1(PyPI)、Go v2.11.1 和 Rust dcp-ai 2.11.1 起还检查存在的步骤 V2-11 次级字段:更早的版本检查主审计链和 Merkle 根,但不检查可选的次级链或 audit_merkle_root_secondary(参见 STORAGE_AND_ANCHORING.md)。
设计上无状态¶
- 验证不需要数据库:每个请求都是自包含的。
- 其他一切都需要持久化:网关的护照和密钥注册表、锚定队列、透明度日志和吊销注册表。
参考服务只在内存中保存状态¶
参考网关(server/)和各服务(services/)没有持久存储,唯一的例外是吊销服务可以把状态保存在文件中(REVOCATION_STATE_PATH:在服务中默认关闭,在 docker/ 的 compose 文件中开启,并放在卷上)。重启、部署或崩溃都会清空它们的状态,包括内存耗尽导致的崩溃。这些状态包括:
- 已注册的护照、密钥和紧急令牌;
- 吊销记录;
- 透明度日志;
- 待处理的锚定和本地锚定记录。
唯一的例外是把 REVOCATION_STATE_PATH 放在持久存储(卷)上的吊销服务:它的注册和吊销记录在重启后仍然保留。
状态被清空后,已记录的内容会丢失,但关卡依然存在:
- 注册。 注册
agent_id仍然需要运营方令牌;对于清空之前就已注册的agent_id也是如此,因为它们全都重新变成了新的。 - 吊销查询。 吊销服务不再知道它记录过的吊销:
- 对于清空之前已被吊销的智能体,
GET /check/<agent_id>返回revoked: false; /.well-known/dcp-revocations.json不再列出它,因此基于拒绝列表的吊销信息源会把它读作未吊销;GET /v2/check/kid/<kid>对其密钥返回 404(状态未知)。- 网关会忘记它的护照、密钥(包括已吊销和已退役的)以及紧急令牌。
- 不会因此获得信任。 仅仅清空状态并不会让某个委托人变得受信任,也不会让某个 bundle 被准入:准入仍然需要运营方的信任集合,在 strict-v1 下还需要吊销快照。
在生产中依赖这些服务之前,请加入持久存储。
为了让内存保持在有限范围内,身份、密钥和吊销注册表会拒绝工作,而不是逐出状态:
| 服务 | 限制 | 设置 |
|---|---|---|
| 网关 | 注册新的 agent_id 需要运营方令牌(401) |
OPERATOR_TOKEN |
| 网关 | 每个客户端每小时 20 次护照注册(429) | REGISTRATIONS_PER_HOUR |
| 网关 | 最多 10,000 个已注册密钥;超过后新的智能体会得到 507(轮换会先移除一个已退役的密钥,因此仍然放得下) | MAX_REGISTERED_KEYS |
| 网关 | 每个智能体保留 4 个轮换下来的密钥;更早的密钥作为墓碑保持吊销状态 | — |
| 网关 | 每个智能体在其生命周期内最多 64 个密钥;之后的轮换会得到 409(对频繁轮换的智能体请调高此值) | MAX_KEYS_PER_AGENT |
| 网关 | 每个客户端每分钟 100 个 POST 请求,每分钟 5 次紧急吊销 | — |
| 吊销 | 注册新的 agent_id 需要运营方令牌(401) |
OPERATOR_TOKEN |
| 吊销 | 每个客户端每小时 20 次注册(429) | REGISTRATIONS_PER_HOUR |
| 吊销 | 最多 10,000 个已注册智能体;超过后新的会得到 507 | MAX_AGENTS |
| 吊销 | 文本字段最多 256 个字符;每个客户端每分钟 5 次紧急吊销 | — |
| 透明度日志 | gossip 交换需要由固定的对等方签名的树头(GOSSIP_PEERS=<url>#<key>);请求体 16 KB;保留最近 100 条不同的告警;轮询最多读取 16 KB,在一个间隔后超时,且从不重叠 |
GOSSIP_PEERS |
| 读取请求体的端点 | 请求体 1 MB(413);POST /v2/disputes/:id/escalate 和 POST /v2/delegation/mandate/:id/revoke 不读取请求体 |
— |
网关有两部分的行为不同:
- DCP-05–09 记录存储会逐出。 这些是生命周期、活力、遗嘱、继承、争议、判例、异议、权利、义务、违规、委托书、咨询声明、镜像、交互和关注阈值的存储。每个存储最多保留 10,000 条,在按智能体划分的列表中每个智能体最多 10,000 条,并逐出最旧的条目(FIFO):被逐出的记录会直接消失,不报错。
- 审计链没有自己的上限(
POST /v2/audit/append)。只有请求方面的限制适用于它们。
限制按客户端 IP 计数。在会把客户端 IP 追加到 X-Forwarded-For 的代理之后,请设置 TRUST_PROXY=true;否则所有客户端都会共享代理的地址。
环境变量(验证服务)¶
PORT— HTTP 端口(默认3000)OPERATOR_TOKEN— 用于管理端点(策略、公告、治理)以及注册新agent_id的 bearer 令牌;不设置时这些功能保持锁定VERIFIER_MODE—classical_only|hybrid_preferred|hybrid_required|pq_onlyALLOW_V1_BUNDLES—false会拒绝 V1 bundleTRUST_PROXY、REGISTRATIONS_PER_HOUR、MAX_REGISTERED_KEYS、MAX_KEYS_PER_AGENT— 见上文DCP_TRUSTED_PRINCIPALS_FILE、DCP_ADMISSION_PROFILE_FILE、DCP_REVOCATION_LIST_URL、DCP_REVOCATION_LIST_AUTHORIZATION、DCP_REVOCATION_TIMEOUT_MS— 用于POST /v2/admit的准入,参见 ADMISSION.mdREQUIRE_SESSION_BINDING、REQUIRE_COMPOSITE_BINDING、MAX_KEY_AGE_DAYS和PQ_CHECKPOINT_INTERVAL出现在部署配置中,但尚未被读取
anchor、transparency-log 和 revocation 的环境变量参见 services/ 下各自的 README,或 deploy/fly/ 中各服务的 fly.toml。
区块链与验证¶
- 仅验证: 服务可以只提供 POST
/verify,应用 VERIFICATION.md 的检查清单(模式、签名、intent_hash、审计链、merkle;自@dcp-ai/sdk2.2.1、@dcp-ai/wasm2.1.1、dcp-ai2.10.1(PyPI)、Go v2.11.1 和 Rustdcp-ai2.11.1 起,SDK 验证器也会检查存在的可选次级链字段;更早的版本不会)。不需要区块链。 - 验证 anchor_receipt: 如果客户端随 bundle 发送了
anchor_receipt,服务可以选择只使用公开数据(例如从区块浏览器获取交易)检查bundle_hash是否出现在指定的链或日志索引处。不涉及协议的任何中央服务器。 - 锚定(写入): 运营方运行节点或使用 RPC,把哈希写入现有的链;服务向客户端返回
anchor_receipt。这是可选的、因运营方而异的,参考锚定服务目前还不做这件事(参见services/anchor/README.md)。
V2.0 验证服务¶
DCP v2.0 引入了后量子混合密码学、自适应安全等级和复合签名。运行验证服务的运营方必须更新配置以支持 V2。
验证器策略配置¶
验证器接受一个 VerifierPolicy(schemas/v2/verifier_policy.schema.json)。参考服务器以如下策略启动:
{
"default_mode": "hybrid_required",
"risk_overrides": { "high": "hybrid_required", "medium": "hybrid_required", "low": "hybrid_required" },
"min_classical": 1,
"min_pq": 1,
"accepted_classical_algs": ["ed25519"],
"accepted_pq_algs": ["ml-dsa-65", "slh-dsa-192f"],
"accepted_hash_algs": ["sha256", "sha384"],
"require_session_binding": true,
"require_composite_binding": true,
"max_key_age_days": 365,
"allow_v1_bundles": true,
"allow_classical_fallback_disable": false,
"warn_classical_only_deprecated": false,
"advisory_rejected_algs": []
}
risk_overrides 以护照的 risk_tier 为键。服务器没有策略文件:VERIFIER_MODE 和 ALLOW_V1_BUNDLES 在启动时设定策略,带 { "mode": "<mode>" } 的 POST /v2/policy/mode(需要运营方令牌)在运行时切换模式,被接受的公告会加入 advisory_rejected_algs,GET /v2/policy 返回当前策略及其哈希。切换模式会把 default_mode 和 risk_overrides 的每个条目都设为该模式。要用你自己的策略嵌入验证器,请向 SDK 传入完整的策略:部分策略也会被接受,但你省略的字段不会用默认值填充(参见 MIGRATION_V1_V2.md 的步骤 8)。
验证模式:
- classical_only — 只要求 Ed25519 签名(兼容 V1)
- hybrid_preferred — 要求 Ed25519,存在 ML-DSA-65 时也会检查
- hybrid_required — 要求同时具有 Ed25519 和 ML-DSA-65 的复合签名
- pq_only — 只要求并检查后量子签名;以 classical_only 签署的 bundle 会被拒绝,固定的经典密钥(public_key_b64)也会被拒绝。在参考服务器中,该模式还会关闭 V1 bundle。
在所有模式下,存在的 PQ 签名(ML-DSA-65 或 SLH-DSA-192f)都必须通过验证;无效的会被拒绝。
POST /verify(V2)¶
V2 bundle 包含带经典和后量子两个分量的 composite_sig:
{
"signed_bundle": {
"bundle": {
"dcp_bundle_version": "2.0",
"manifest": {
"session_nonce": "a1b2c3...",
"rpr_hash": "sha256:...",
"passport_hash": "sha256:...",
"intent_hash": "sha256:...",
"policy_hash": "sha256:...",
"audit_merkle_root": "sha256:...",
"audit_merkle_root_secondary": "sha3-256:...",
"audit_count": 1
},
"responsible_principal_record": { "payload": {...}, "payload_hash": "sha256:...", "composite_sig": {...} },
"agent_passport": { "payload": {...}, "payload_hash": "sha256:...", "composite_sig": {...} },
"intent": { "payload": {...}, "payload_hash": "sha256:...", "composite_sig": {...} },
"policy_decision": { "payload": {...}, "payload_hash": "sha256:...", "composite_sig": {...} },
"audit_entries": [ {...} ]
},
"signature": {
"composite_sig": {
"classical": { "alg": "ed25519", "kid": "...", "sig_b64": "..." },
"pq": { "alg": "ml-dsa-65", "kid": "...", "sig_b64": "..." },
"binding": "pq_over_classical"
}
}
}
}
参考服务器的 V2 响应包含解析出的安全等级。POST /v2/bundle/verify(仅 V2;也接受把已签名 bundle 作为整个请求体)的响应为:
{
"verified": true,
"dcp_version": "2.0",
"errors": [],
"warnings": [],
"verifier_policy_hash": "sha256:...",
"resolved_tier": "elevated",
"verification_mode": "hybrid_required",
"session_binding_valid": true,
"manifest_valid": true
}
POST /verify 给出直到 resolved_tier 的相同字段。session_binding_valid 和 manifest_valid 是从错误消息中读出的,因此请依据 verified 和 errors 做决定。
验证中的安全等级¶
每个安全等级对应一种验证模式和一个 PQ 检查点间隔(规范 §14.1):
| 等级 | 验证模式 | PQ 检查点 |
|---|---|---|
| Routine | classical_only |
每 50 个事件 |
| Standard | hybrid_preferred |
每 10 个事件 |
| Elevated | hybrid_required |
每个事件 |
| Maximum | hybrid_required |
每个事件 |
不存在按等级划分的大小预算。bundle 的大小取决于其算法、审计条目和 PQ 检查点
以及 JSON 编码:请测量你最大的 bundle。例如,tests/interop/v2/admission_vectors.json 中的
合成混合 bundle signed_bundles.base 以紧凑 JSON 表示为 32,996 字节;这是一个
观测值,而不是上限。请把 bundle 放在带有明确大小预算的 JSON 请求体中发送,而不是放在请求头中(参见
QUICKSTART_EXPRESS.md)。
验证器可以提高等级(例如对金融操作强制使用 elevated),但不得(MUST NOT)降低等级。在 main 上,SDK 验证器(TypeScript、Go、Rust、WASM 和 Python)按策略模式(护照 risk_tier 对应的 risk_overrides 条目,或 default_mode)与等级模式(规范 §14.3)中较严格者检查 bundle 签名和每个构件的签名,因此声明 risk_tier: "low" 的护照在支付意图下仍然需要混合签名。它们还会检查 bundle 携带的 PQ 检查点(spec/VERIFICATION.md V2-12)。已发布的版本可能滞后:参见各 SDK 的 Release status。
参考服务器通过 lib/verify.js 验证 V2 bundle,后者把它们连同服务器的策略交给同一检出副本中的 TypeScript SDK;Docker 镜像从源码构建该 SDK(参见 docker/Dockerfile)。其 verification_mode 字段是等级对应的模式,而不是实际生效的模式。
能力端点(V2)¶
V2 服务公开 GET /.well-known/dcp-capabilities.json。参考服务器的响应为:
{
"supported_versions": ["1.0", "2.0"],
"supported_algs": {
"signing": ["ed25519", "ml-dsa-65", "slh-dsa-192f"],
"kem": ["x25519", "ml-kem-768", "x25519-ml-kem-768"],
"hash": ["sha256", "sha3-256", "sha384"]
},
"supported_wire_formats": ["application/json", "application/cbor"],
"features": {
"composite_signatures": true,
"session_binding": true,
"blinded_rpr": true,
"dual_hash_chains": true,
"pq_checkpoints": true,
"emergency_revocation": true,
"multi_party_auth": true,
"pq_only_mode": true,
"advisory_auto_response": true,
"governance_keys": true,
"hsm_provider": true,
"agent_lifecycle": true,
"succession": true,
"dispute_resolution": true,
"rights_obligations": true,
"delegation": true
},
"verifier_policy_hash": "sha256:...",
"min_accepted_version": "1.0"
}
这是服务器所声明的内容,而不是经过检查的保证清单。虽然列出了 application/cbor,但其端点只读取 JSON 请求体。声明了 hsm_provider: true,但仓库中的 HSM 提供者是一个没有硬件支撑的模拟实现(SECURITY_MODEL.md)。
可观测性¶
V2 服务应当公开用于监控的指标:
- 延迟:按安全等级划分的 p50/p95/p99 验证延迟
- 吞吐量:每秒验证的 bundle 数
- 缓存:验证缓存的命中率/未命中率
- PQ 检查点:已验证的 PQ 检查点数量
- 错误:按 DCP 错误码(DCP-E001 至 DCP-E902)统计的错误数
- 等级:验证请求在各安全等级上的分布
建议:使用 SDK 内置的 dcpTelemetry 模块以及兼容 OpenTelemetry 的导出器(OBSERVABILITY.md)。参考服务器本身不会发出这些指标。
现有 V1 运营方的迁移¶
现有的 V1 运营方可以逐步升级:
- 更新到 DCP v2.0 SDK
- 设置
default_mode: 'classical_only'(在参考服务器中为VERIFIER_MODE=classical_only);对于 elevated 和 maximum 操作,安全等级仍会把模式提高到hybrid_required - 为新智能体逐步启用
hybrid_preferred - 当 PQ 的采用足够广泛时,转为
hybrid_required
详细的迁移步骤参见 MIGRATION_V1_V2.md。
DCP-05–09 服务端点¶
DCP v2.0 为验证服务器扩展了 31 个端点,用于生命周期管理、数字继承、争议解决、权利框架和个人代理。
未认证且未验证。 这些端点只对照模式及 ID 的格式检查每条记录。它们不验证任何
composite_sig,也不需要运营方令牌。任何能访问服务器的人都可以,例如,停用或重新启用一个智能体、吊销一份可吊销的委托书,或把一个争议标记为已解决。设置OPERATOR_TOKEN并不能保护它们:它只保护管理路由和新agent_id的注册。不要把它们暴露给不受信任的客户端:请把它们放在你自己的授权机制之后,或者完全不暴露,并把它们存储的内容视为未经验证的记录。
每个 POST 都在表中所列的键下接收记录(例如 { "commissioning_certificate": { ... } })。:agent_id 和 :id 需进行 URL 编码。
DCP-05:智能体生命周期管理¶
| 方法 | 端点 | 请求体键 | 说明 |
|---|---|---|---|
| POST | /v2/lifecycle/commission |
commissioning_certificate |
把智能体置于 commissioned 状态;对已知的智能体,会重置其状态和历史 |
| POST | /v2/lifecycle/vitality |
vitality_report |
存储一份活力报告;报告中不同的 state 即为一次生命周期转换 |
| POST | /v2/lifecycle/decommission |
decommissioning_record |
把智能体转为 decommissioned,并把已注册的护照标记为 decommissioned |
| GET | /v2/lifecycle/:agent_id |
— | 当前状态、历史和活力报告数量 |
服务器接受的生命周期转换:commissioned → active、active → declining、active → decommissioned、declining → decommissioned。SDK 的状态机还允许 commissioned → decommissioned 和 declining → active。
DCP-06:数字继承与遗产¶
| 方法 | 端点 | 请求体键 | 说明 |
|---|---|---|---|
| POST | /v2/succession/testament |
digital_testament |
存储智能体的遗嘱(每个智能体一份) |
| GET | /v2/succession/testament/:agent_id |
— | 智能体的遗嘱 |
| POST | /v2/succession/execute |
succession_record |
记录一次继承;当服务器知道前任的状态时,前任必须处于 declining 或 decommissioned |
| POST | /v2/succession/memory-transfer |
memory_transfer_manifest |
验证清单并返回计数;不会存储 |
| GET | /v2/succession/:agent_id |
— | 为某个前任记录的继承 |
DCP-07:冲突解决与争议仲裁¶
| 方法 | 端点 | 请求体键 | 说明 |
|---|---|---|---|
| POST | /v2/disputes/create |
dispute_record |
存储一项争议 |
| POST | /v2/disputes/:id/escalate |
— | 把争议移到下一个升级级别 |
| POST | /v2/disputes/:id/resolve |
arbitration_resolution(可选) |
把争议标记为已解决;如提供裁决,则原样存储 |
| GET | /v2/disputes/:id |
— | 该争议 |
| POST | /v2/objections/create |
objection_record |
存储一项异议 |
| POST | /v2/jurisprudence |
jurisprudence_bundle |
存储一个判例 bundle |
| GET | /v2/jurisprudence |
— | 所有已存储的判例 bundle |
DCP-08:权利与义务框架¶
| 方法 | 端点 | 请求体键 | 说明 |
|---|---|---|---|
| POST | /v2/rights/declare |
rights_declaration |
存储智能体的权利声明(每个智能体一份) |
| GET | /v2/rights/:agent_id |
— | 智能体的权利声明 |
| POST | /v2/obligations/record |
obligation_record |
添加一条义务记录 |
| GET | /v2/obligations/:agent_id |
— | 智能体的义务记录 |
| POST | /v2/rights/violation |
violation_report |
存储一份权利侵害报告 |
DCP-09:个人代理与委托¶
| 方法 | 端点 | 请求体键 | 说明 |
|---|---|---|---|
| POST | /v2/delegation/mandate |
delegation_mandate |
存储一份委托书 |
| GET | /v2/delegation/mandate/:id |
— | 该委托书,带 revoked |
| POST | /v2/delegation/mandate/:id/revoke |
— | 吊销 revocable 为 true 的委托书 |
| POST | /v2/agent-advisory/declare |
advisory_declaration |
存储一份咨询声明 |
| GET | /v2/agent-advisory/:id |
— | 该咨询声明 |
| POST | /v2/mirror/generate |
principal_mirror |
添加一个委托人镜像 |
| GET | /v2/mirror/:agent_id |
— | 智能体的委托人镜像 |
| POST | /v2/interactions/record |
interaction_record |
存储一条交互记录 |
| POST | /v2/awareness/threshold |
awareness_threshold |
存储智能体的关注阈值(每个智能体一份) |
| GET | /v2/awareness/threshold/:agent_id |
— | 智能体的关注阈值 |
按 ID 存储的记录,或每个智能体一份的记录,会被之后针对同一 ID 或智能体的 POST 替换。异议、违规报告和交互记录没有 GET 端点。
面向生产的加固¶
DCP-05–09 端点具备:
- JSON Schema 验证 — 每个提交记录的 POST 在存储之前都会按其模式验证。
escalate和revoke不接收记录;resolve接收一个可选的arbitration_resolution,并且不经验证就存储 - 限流 — 所有 POST 端点每 IP 每分钟 100 个请求
- 请求体大小限制 — 在读取请求体的地方,最大 1 MB(返回 413);
escalate和revoke不读取请求体 - 输入 ID 验证 — 服务器用作键的 ID 必须匹配
^[\w:.\-]{1,256}$;其他字符会被拒绝 - 有界存储 — 每个内存存储最多保留 10,000 条,并逐出最旧的条目(FIFO):被逐出的记录会消失。身份注册表则改为拒绝(507);参见参考服务只在内存中保存状态
- 安全头 — X-Content-Type-Options、X-Frame-Options、Strict-Transport-Security、Cache-Control
它们不包括对记录的签名验证,也不包括任何认证(参见本节开头的说明)。
参考资料¶
- 验证检查清单:spec/VERIFICATION.md
- 存储与锚定:STORAGE_AND_ANCHORING.md
- bundle 格式:spec/BUNDLE.md