Agent-Native
原生设计
软件架构
Agent-Native 是一种软件设计哲学:软件从设计之初就不是为了「人直接操作」,而是为了「AI Agent 也能操作」。就像 CLI-Anything 的理念——把一切 GUI 软件变成 CLI 接口,Agent 就能像人一样「看」和「操作」它。
核心原则:所有功能都应有 API 接口,所有状态都应有标准格式,所有操作都应有 idempotent 能力。
# agent-native-api.yaml
# 一个「天生为 Agent 服务」的 API 设计
endpoints:
# ❌ 传统设计:需要人操作
- path: /download?file=xxx&format=pdf
# Agent 看不懂,需要 OCR
# ✅ Agent-Native 设计
- path: /api/v1/files
method: GET
response:
format: json
fields:
- id # 唯一标识,Agent 可引用
- name # 人类可读
- type # mime type
- size # 字节数,Agent 可判断是否需要处理
- created_at # ISO 8601,Agent 可做时间判断
- checksum # 内容校验,Agent 可去重
query_params:
- filter # Agent 可精确过滤
- sort # Agent 可按需排序
- limit # Agent 可控制批次大小
- path: /api/v1/files/{id}/download
method: GET
response:
headers:
Content-Type: "application/octet-stream"
X-File-Meta: "{{encoded_metadata}}" # Agent 可提前预览
# agent-native-mcp-server.ts
import { Server } from "@modelcontextprotocol/sdk/server";
// Agent-Native MCP 服务设计原则:
// 1. 所有操作返回结构化 JSON
// 2. 提供 discoverable 的能力描述
// 3. 错误处理包含 Agent 可理解的修复建议
const server = new Server({
name: "agent-native-todo",
version: "1.0.0",
capabilities: {
resources: {
listChanged: true, // Agent 可监听变化
},
tools: {
// 每个工具都定义了清晰的输入输出 Schema
createTask: {
input: {
type: "object",
properties: {
title: { type: "string", description: "任务标题" },
priority: { type: "number", enum: [1,2,3] },
dueDate: { type: "string", format: "date-time" },
},
required: ["title"],
},
output: {
type: "object",
properties: {
id: { type: "string" },
status: { type: "string", enum: ["created", "error"] },
error: { type: "string", description: "Agent 可理解的错误原因" },
suggestion: { type: "string", description: "Agent 可执行的修复建议" },
},
},
// 幂等性保证
idempotent: true,
idempotencyKey: "request_id",
},
},
},
});
# 使用 OpenClaw 为 GUI 软件添加 Agent 接口
# 场景:为某个 SaaS 平台添加 Agent-Native 功能
openclaw agent create \
--name saas-bridge \
--skill ./agent-native-bridge
# bridge skill 定义
name: saas-bridge
version: 1.0.0
tools:
- builtin: browser
- builtin: web_fetch
- builtin: web_search
instructions: |
你是 GUI SaaS 平台的 Agent-Native 桥接层。
当用户需要操作平台时:
1. 使用 browser 工具登录和导航
2. 使用 web_fetch 获取 API 返回的 JSON 数据
(如果平台有隐藏 API 的话)
3. 将 GUI 操作封装为结构化数据返回
特别注意:
- 记录每次操作的 cookie/session,保持登录状态
- 遇到 CAPTCHA 时,尝试寻找无验证码的 API 路径
- 如果页面改版,自动适应新的 DOM 结构
output_format: |
{
"action": "操作类型",
"result": "操作结果(结构化)",
"screenshot": "必要时的页面截图",
"metadata": {
"duration_ms": "耗时",
"steps": "执行步骤数",
"api_used": "是否使用了 API"
}
}
| 原则 | 说明 | 反例 |
|---|---|---|
| 结构化输出 | 所有响应 JSON 化 | 返回 HTML 片段 |
| 幂等操作 | 重复调用不影响状态 | 多次提交生成重复订单 |
| 可发现性 | Agent 可枚举所有能力 | 功能藏在菜单深处 |
| 状态可读 | 当前状态可查询 | 状态只存在内存中 |
| 错误可修 | 错误信息包含修复建议 | 返回 500 + 空白页 |
| 速率控制 | 明确的限流策略 | 请求过多直接封 IP |
# 步骤参考
# 改造 Checklist:
# [ ] 1. 添加 REST API 到所有核心功能
# [ ] 2. 确保所有响应为 JSON
# [ ] 3. 添加幂等性支持(Idempotency-Key 头)
# [ ] 4. 添加 /api/health 和 /api/capabilities 端点
# [ ] 5. 提供 OpenAPI/Swagger 文档(Agent 可自动读取)
# [ ] 6. 添加 Webhook 通知(Agent 可订阅变更事件)
# [ ] 7. 实现请求队列(避免 Agent 并发超载)
# [ ] 8. 添加速率限制头(X-RateLimit-*)
# [ ] 9. 错误响应包含 suggestion 字段
# [ ] 10. 写一个 OpenClaw Skill 来封装所有这些 API
# 验证 Agent 兼容性
openclaw agent-test --endpoint https://your-api.com \
--check-agent-native \
--report output.html
妙趣AI | OpenClaw 教程合集 | 最后更新:2026-05-22