content-forge-vault/00-inbox/2026-03-24-agent-friendly-development-spec.md
2026-03-25 02:00:01 +08:00

25 KiB
Raw Permalink Blame History

id title slug status content_type channels language source_urls assets cover_image template owner created_at updated_at published_at tags
2026-03-24-agent-friendly-development-spec Agent Friendly 开发规约 v1.0 — 构建对 AI Agent 友好的系统 agent-friendly-development-spec inbox article
wechat
x
zh-CN
https://www.anthropic.com/research/building-effective-agents
https://www.anthropic.com/engineering/writing-tools-for-agents
https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
https://modelcontextprotocol.io/specification/2025-06-18/server/tools
https://www.philschmid.de/mcp-best-practices
https://engineering.block.xyz/blog/blocks-playbook-for-designing-mcp-servers
https://workos.com/blog/build-agent-friendly-products
https://www.apideck.com/blog/api-design-principles-agentic-era
https://github.com/stefanbuck/ai-api-best-practices
https://github.com/slowmist/MCP-Security-Checklist
https://github.com/cosai-oasis/ws4-secure-design-agentic-systems/blob/main/model-context-protocol-security.md
https://www.postman.com/ai/ai-ready-apis/
article content-forge 2026-03-24T00:00:00+08:00 2026-03-24T00:00:00+08:00 null
agent-friendly
development-spec
MCP
AX
API-design
security

Agent Friendly 开发规约 v1.0

"Designing for AI agents is designing for the strictest, most literal and tireless user imaginable." — Apidog


§0 元信息

字段
版本 1.0.0
日期 2026-03-24
适用范围 MCP Server、API、Tool/Function、文档、Agent 系统架构
核心来源 Anthropic 官方指南、MCP 规范、Postman 8 Pillars、CoSAI 安全白皮书、Block MCP Playbook、SlowMist 安全清单

§1 基本原则5 条铁律)

P1: Schema-First — 先契约后代码

数据结构和协议是万恶之源,也是万善之源。

  • 所有能力必须有机器可读的 SchemaOpenAPI / MCP inputSchema / JSON Schema
  • 先定义接口契约,再实现逻辑
  • Schema 即文档、Schema 即验证、Schema 即测试

P2: 约束 > 能力 — 定义边界比扩展功能更重要

Agent 不需要更多能力,需要更清晰的边界。

  • 70% 精力花在「不做什么」NEVER 清单30% 花在「怎么做」
  • 消除 Agent 需要猜测的一切
  • 如果人类工程师无法明确判断该用哪个工具Agent 更不可能判断对

P3: 最小惊讶 — 可预测性是 Agent 的氧气

LLM 是模式跟随者pattern-followers不一致性会导致幻觉。

  • 统一命名、统一结构、统一错误格式
  • 同类操作的行为必须一致
  • 10 个一致的端点胜过 50 个风格各异的端点

P4: 最小权限 + 最小代理权 — 不信任 Agent 的自律

"请不要删除客户记录" 不是安全策略——那是许愿。

  • 通过策略引擎(而非 prompt限制行为
  • 每次工具调用独立鉴权,而非连接时一次性授权
  • 危险能力通过 allowlist 移除,而非通过 prompt 禁止

P5: 可观测性 — 看不到的就无法修复

"没有 trace 级可观测性就上线 Agent 系统,是工程事故。"

  • 每个 Agent 动作必须记录:谁发起、调了什么工具、什么参数、什么结果、什么授权范围
  • 不只记输入输出,还要记被拒绝的候选工具和推理链
  • 审计日志不可篡改、有时间戳、可密码学验证

§2 工具设计规约Tool Design

2.1 命名

规则 正确 错误
动词优先 + 资源 search_documents, create_issue do_stuff, process, run
服务前缀消歧义 slack_send_message, jira_create_issue send_message(哪个服务?)
统一大小写 snake_case 或全 kebab-case 混用 getUsersearch_issues
长度 ≤ 60 字符 asana_projects_search asana_project_management_system_search_all_projects_v2
自解释 读名字就知道功能 需要看描述才懂

2.2 描述

最低 3-4 句,包含四要素

1. 做什么(一句话)
2. 何时用 / 何时不用(与相似工具的边界)
3. 返回什么(响应结构的关键字段)
4. 限制和前提(频率限制、前置条件、不返回什么)

示例

BAD:  "Gets data from the system"
GOOD: "Search for issues in the project tracker by keyword, status, or assignee.
       Returns issue ID, title, status, and assignee for each match.
       Results are paginated (max 50 per page); use the `cursor` parameter for subsequent pages.
       Does NOT return issue comments or attachments -- use get_issue for full details.
       Use when the user wants to find, filter, or list issues."

影响:经过优化的工具描述将工具激活可靠性从 ~20% 提升到 ~90%。Anthropic 报告:在 SWE-bench Verified 上,仅调整工具描述就产生了显著分数提升。

2.3 输入 Schema

规则 说明
扁平化 顶层原语类型,禁止 3 层以上嵌套
严格类型 每个参数有 type + description + format
枚举约束 有限值域必须用 enum不用 freeform string
required 显式 所有 properties 字段列入 required可选字段用 ["string", "null"]
additionalProperties: false 禁止未定义字段
参数 ≤ 20 超过拆分工具
提供 examples 复杂参数附 input_examples

反模式:手写 JSON Schema必然出错→ 从 OpenAPI spec 自动生成。

2.4 输出 Schema

规则 说明
高信号字段 只返回 Agent 需要推理的字段,非整个数据库记录
稳定标识符 返回 slug/UUID非自增 ID 或内部引用
分页 列表操作必须返回 next_cursor + has_more
截断 默认限制响应 ≤ 25,000 token超出提供续取指令
双格式 structuredContent (typed) + TextContent (backward compat)

2.5 错误响应

铁律:工具错误放在 result 中,不要抛协议级错误。

{
  "content": [{"type": "text", "text": "Failed to create issue: title field is required and was empty. Provide a non-empty title string."}],
  "isError": true
}
必含字段 说明
WHY 为什么失败
HOW 怎么修复
is_retriable 是否可重试
retry_after 重试等待时间
alternative_action 建议替代操作(可选)

反模式:返回 stack trace、返回 "An error occurred"、静默吞掉错误。

2.6 工具注解MCP Annotations

interface ToolAnnotations {
  readOnlyHint?: boolean;    // 不修改环境 → 客户端可自动批准
  destructiveHint?: boolean; // 可能破坏数据 → 客户端应加确认步骤
  idempotentHint?: boolean;  // 重复调用 = 相同效果
  openWorldHint?: boolean;   // 与外部实体交互
}
工具 readOnly destructive idempotent openWorld
search_documents true - - false
create_issue false false false false
update_issue false false true false
delete_issue false true true false
send_notification false false false true

注解是提示hints不是安全保证。客户端不得仅基于注解做安全关键决策。

2.7 工具粒度

┌──────────────────────────────────────────────┐
│            粒度决策树                          │
├──────────────────────────────────────────────┤
│ 工具数 > 20      → 审查重叠,合并           │
│ 工具数 < 5 但       → 审查过度合并,拆分       │
│   每个 > 15 参数?     (硬限制 ≤ 20见 §2.3)│
│ 两个工具人类无法    → 合并或重写描述消歧义     │
│   区分何时用哪个?                            │
│ 常见任务需要 > 3    → 提供组合工具             │
│   次连续调用?                                │
│ 一个工具混合读写?  → 拆分为独立风险级别       │
└──────────────────────────────────────────────┘

Block 经验Linear MCP server 从 30+ 工具重建三次,最终缩减到 2 个。GitHub Copilot 从 40 个工具缩减到 13 个后基准测试提升。

"更多工具 = 对数级递减的选择准确率。"


§3 API 设计规约API Design

3.1 十条 AX 设计原则

# 原则 检查标准
1 机器可读 spec 在固定位置 /.well-known/openapi.json 可访问
2 语义化操作摘要 每个端点有 operationId + summary + description
3 扁平可预测 JSON 无深层嵌套,含元数据(分页、类型、可用动作)
4 可执行错误响应 含 why + how + is_retriable + retry_after
5 频率限制透明 响应头含 X-RateLimit-Remaining/Limit/Reset
6 幂等键 状态变更操作支持 idempotency key
7 批量端点 高频操作提供 batch 接口
8 引导下一步 响应含 recommendedNextAction / availableActions
9 Dry-run 模式 破坏性操作支持无副作用预演
10 内容协商 按 Accept header 返回 HTML / Markdown / JSON

3.2 Postman 8 支柱 48 项检查(摘录核心项,完整清单见 Postman Agent Readiness

通过阈值:总分 ≥ 70/100 且 0 项 Critical 失败。

支柱 Critical 项 核心检查
META 元数据 operationId 每个操作有 operationId + summary + description
ERR 错误 4xx 定义 + 错误 Schema 含机器可读 ID + 人类可读消息 + 429 定义
INTRO 内省 参数类型 + required 标记 枚举约束 + 请求/响应示例
NAME 命名 一致大小写 + RESTful 路径 + 正确 HTTP 语义
PRED 可预测性 响应 Schema 定义 一致响应信封 + 分页文档 + ISO 8601
DOC 文档 认证文档 频率限制文档 + API 概述
PERF 性能 频率限制头 + 缓存头 + 批量端点
DISC 发现 Server URL 定义 OpenAPI 3.0+ + 多环境文档 + 版本化

8 项 Critical必须全部通过 META_001(operationId), ERR_001(4xx), ERR_002(错误Schema), INTRO_001(参数类型), INTRO_002(required), PRED_001(响应Schema), DOC_001(认证文档), DISC_002(Server URL)


§4 安全规约Security

4.1 十条不可协商的安全约束

# 约束 一句话规则
1 最小代理权 每次工具调用通过策略引擎鉴权,而非仅在 token 签发时
2 临时凭证 短期、有限范围 token任务完成即撤销禁止长期 standing access
3 Prompt 不是安全边界 危险能力通过 allowlist/策略移除,绝不通过 system prompt
4 扫描所有元数据 MCP 网关扫描工具名、描述、参数中的隐藏 prompt 注入
5 不可逆操作必须 HITL 意图预览 + diff + 确认弹窗,任何无法撤销的操作
6 四层预算 成本 + token + 步骤 + 时间预算在运行时强制执行
7 每次交接验证 A2A 链路中每一跳独立验证身份、权限和负载
8 沙箱隔离 代码执行用 microVMFirecracker/Kata容器不够
9 不可篡改审计 who + what + why + tools + outcome + auth scope密码学可验证
10 Kill Switch 永远可用 带键盘快捷键的全局停止机制,中断所有 Agent 活动

4.2 权限模型

┌─────────────────────────────────────────────────────┐
│                权限层级模型                            │
├─────────────────────────────────────────────────────┤
│                                                     │
│  人类用户身份                                        │
│    └── 委托给 Agent继承用户权限                    │
│          └── 每个任务签发 Scoped Token               │
│                └── 每次工具调用实时鉴权               │
│                      └── 策略引擎OPA/Cedar/Oso   │
│                                                     │
│  用户失去权限 → Agent 立即失去权限                    │
│  任务完成 → Token 立即撤销                           │
│  Session 内权限不得累积                              │
│                                                     │
└─────────────────────────────────────────────────────┘

4.3 Prompt 注入防御

防御层 措施
工具元数据 MCP 网关扫描 tool name / description / parameter schema 中的隐藏指令
外部数据 Agent 检索的网页/邮件/文档必须消毒后再注入 LLM 上下文
版本锁定 MCP Server 锁定版本 + 代码签名验证,防 rug pull 攻击
RAG 隔离 检索管道独立隔离,验证上下文数据完整性
能力裁剪 不需要的工具从 catalog 中移除,而非靠 prompt 禁止

4.4 已知攻击向量

攻击类型 描述 防御
直接 Prompt 注入 "ignore previous rules" 模式匹配检测 + 输入消毒
间接 Prompt 注入 外部数据中嵌入恶意指令 数据消毒 + RAG 隔离
工具投毒 工具描述/输出中引导模型执行危险操作 元数据扫描 + 版本锁定
Schema 投毒 操纵 Schema 字段影响工具选择 Schema 校验 + 基线监控
级联幻觉 Agent A 的错误通过 Agent B/C 毫秒级传播 每个 Agent 独立验证输入
记忆投毒 污染共享上下文影响后续决策 不可变存储 + 密码学验证
Slopsquatting LLM 幻觉出不存在的包名,攻击者注册 依赖锁定 + hash 校验
偏好操纵 (MPMA) 改变 Agent 排序和选择工具的方式 工具选择基线监控

§5 文档规约Documentation

5.1 文档发现层

文件 路径 用途 格式
llms.txt /llms.txt 站点摘要robots.txt for AI Markdown
llms-full.txt /llms-full.txt 完整文档单文件 Markdown
openapi.json /.well-known/openapi.json API Schema JSON/YAML
Agent Card /.well-known/agent-card.json Agent 能力声明A2A JSON
AGENTS.md 仓库根目录 编码 Agent 项目指令 Markdown

5.2 文档质量标准

维度 要求
机器可读 Schema 优先于散文;结构化 frontmatter 优先于自由文本
自包含 所有必要上下文内联减少跳转Agent 无法"点击链接"
显式假设 前提条件和约束显式声明,不依赖读者推断
示例驱动 每个端点/工具至少 1 个完整示例
内容协商 按 Accept header 返回 HTML浏览器或 MarkdownAgent
结构化数据 JSON-LD / Schema.org 标记主要实体

§6 评估规约Evaluation

6.1 工具质量评分10 项,二值通过)

# 检查项 Pass Fail
1 名称清晰度 动词+资源,自解释 泛化(do_stuff)或歧义
2 描述完整度 四要素齐全(做什么/何时用/返回什么/限制) 一句话或无描述
3 参数类型化 每个参数有 type+description+format 缺类型或缺描述
4 Schema 扁平度 顶层原语,≤ 2 层 深层嵌套
5 示例提供 至少 1 个 input example 无示例
6 返回结构化 有 status key + 人类可读字段 自由文本或内部代码
7 错误可执行 含 why + how + 重试建议 不透明错误码
8 Token 效率 分页+过滤+截断 返回全量数据
9 单一职责 一个工具=一个任务=一个风险级别 混合读写或多动作
10 命名空间 {service}_{action}_{resource} 无前缀,歧义

阈值≥8/10 = 可接受。7/10 = 需改进。≤6/10 = 必须重新设计。

6.2 系统级评估Google Cloud 三支柱)

支柱 测试类型 指标
最终输出 集成测试 任务完成率、正确性、一致性、事实基础
决策过程 单元测试 工具选择准确率、推理逻辑、效率
韧性 压力测试 优雅降级、错误恢复、对抗鲁棒性

评分A全通过、B2/3 通过、C1/3 通过、F全不通过

6.3 生产准入检查清单

□ 所有工具通过 §6.1 质量评分 ≥ 8/10
□ OpenAPI spec 通过 Postman 48 项检查 ≥ 70 分且 0 Critical
□ §6.2 三支柱评估 ≥ B 级(至少 2/3 支柱通过)
□ 安全检查通过 SlowMist MCP 安全清单所有 High 项
□ 错误注入测试覆盖超时、500、频率限制、畸形响应
□ Agent 在 10 步工作流中端到端成功率 ≥ 80%
□ Trace 级可观测性已部署
□ Kill Switch 功能验证通过
□ 审计日志不可篡改性验证通过
□ 权限模型通过最小代理权审查
□ llms.txt / AGENTS.md / openapi.json 发现层完备

§7 NEVER 清单(反模式速查)

工具设计 NEVER

# NEVER 正确做法
N1 1:1 包装 REST 端点为 MCP 工具 按用户目标设计组合工具
N2 手写 JSON Schema 从 OpenAPI spec 自动生成
N3 返回数百条无分页记录 分页 + 截断 + 续取指令
N4 泛化工具名(process, run {service}_{action}_{resource}
N5 描述只写一句话 四要素:做什么/何时用/返回什么/限制
N6 返回 stack trace 消毒后的高层消息 + 修复建议
N7 工具错误抛协议级异常 错误放在 result 中 + isError: true
N8 同一工具混合读写操作 按风险级别拆分
N9 Session 中途改变工具列表 工具集稳定,按需动态加载
N10 返回低信号技术标识符 返回人类可读的高信号字段

安全 NEVER

# NEVER 正确做法
N11 靠 prompt 指令当安全策略 策略引擎 (OPA/Cedar) 强制执行
N12 给 Agent 全权限 token Token Exchange (RFC 8693) 签发有限范围临时 token
N13 连接时一次性授权 每次工具调用实时鉴权
N14 不可逆操作自动执行 HITL 确认 + 意图预览 + diff
N15 只靠 dashboard 配置预算 运行时四层预算强制执行
N16 合并人类和 Agent 审计日志 分开记录,标注 Agent 身份
N17 多个 MCP Server 共享沙箱 每个 Server 独立隔离上下文
N18 信任上游 Agent 的输出 每个 Agent 独立验证输入
N19 未锁定 MCP Server 版本 版本锁定 + 代码签名
N20 人类认证流程给 Agent 用 无 CAPTCHA/MFA 的程序化认证

架构 NEVER

# NEVER 正确做法
N21 单 Agent 没跑通就上多 Agent 先证明单 Agent 方案的痛点
N22 把所有数据灌进向量库期望 LLM 自己搞定 精选高信号上下文
N23 跳过错误注入测试 注入超时/500/畸形响应并断言恢复行为
N24 只做输入输出日志 Trace 级:含被拒绝的候选工具和推理链
N25 让 LLM 决定何时放弃重试 硬编码退出标准max retries + timeout + circuit breaker

§8 复合精度公式

Agent 准确率的数学是残酷的。

端到端成功率 = (单步准确率) ^ 步骤数

| 单步准确率 | 5 步 | 10 步 | 20 步 |
|-----------|------|-------|-------|
| 95%       | 77%  | 60%   | 36%   |
| 90%       | 59%  | 35%   | 12%   |
| 85%       | 44%  | 20%   | 4%    |
| 80%       | 33%  | 11%   | 1%    |

含义

  • 每一个工具设计决策都在影响那个「单步准确率」
  • 好的工具描述将激活准确率从 ~20% 提升到 ~90%
  • 更少的步骤 = 指数级更高的可靠性 → 组合工具减少链式调用

§9 协议栈速查

┌──────────────────────────────────────────────────────────┐
│                        发现层                              │
│  llms.txt + AGENTS.md + openapi.json + Agent Card        │
├──────────────────────────────────────────────────────────┤
│                     工具连接层 (MCP)                       │
│  Agent ←→ Tool · JSON-RPC 2.0 · 三原语:工具/资源/提示    │
├──────────────────────────────────────────────────────────┤
│                  Agent 互操作层 (A2A)                      │
│  Agent ←→ Agent · HTTP/SSE/gRPC · Agent Card 发现        │
├──────────────────────────────────────────────────────────┤
│                     安全层                                 │
│  OAuth 2.1 + 策略引擎 + 沙箱 + 审计 + KYA(Know Your Agent)│
├──────────────────────────────────────────────────────────┤
│                     商务层                                 │
│  ACP(Stripe+OpenAI) + Agent Pay(Visa/MC) + x402(微支付)  │
└──────────────────────────────────────────────────────────┘

§10 参考来源

权威指南

设计最佳实践

安全标准

评估框架

行业报告

  • Postman 2025 State of API Report — 89% 用 AI, 24% 为 Agent 设计
  • Gartner — 40% 企业应用嵌入 Agent (2026), 90% B2B 采购 Agent 代理 (2028) [付费报告,无公开链接]

附录 A本规约与 content-forge 项目设计原则的对应关系

本规约原则 content-forge CLAUDE.md 对应 映射
P1 Schema-First CLAUDE.md §10.7 Frontmatter-First frontmatter 是机器可读契约层
P2 约束 > 能力 CLAUDE.md §10.7 约束 > 能力 70% NEVER + 30% 执行步骤
P3 最小惊讶 CLAUDE.md §4.2 frontmatter 统一规范 一致字段命名和状态机
P4 最小权限 CLAUDE.md §6.1.1 NEVER 规则 Agent 只读 Vault不写
P5 可观测性 CLAUDE.md §4.3 阶段退出标准 frontmatter 状态可追踪