API Claw(爪)
以编程方式运行托管的 Buda 智能体——为你的硬件或软件产品配备云端 AI 智能体,无需自己运行任何推理基础设施。
智能手表、IoT 设备、聊天插件——它们都希望内置 AI 智能体。但在设备本地运行一个大模型并不可行:算力不足、功耗过高、效果欠佳。
API Claw(爪) 正是为此而生。只需对 Buda 位于 /api/v1 的 REST API 发起几次调用,第三方开发者就能为自己的产品配备一个云端托管的 AI 智能体,它具备对话能力和私有知识库,按需唤醒,闲置时不占用任何资源。
实际上,你接入的并不是一个原始的模型 API,而是一个托管的智能体能力层,它已经包含了模型接入、运行时、知识库、会话管理以及运维扩缩容。
它面向谁
- 智能硬件厂商——希望内置 AI 助手的手表、耳机、IoT 设备
- 软件开发者——希望嵌入 AI 对话的小程序、应用、浏览器扩展
- SaaS 提供商——希望为客户提供「AI 驱动的私有空间」
两类常见的买家
1. 聊天应用、SaaS 工具和第三方软件
如果你已经有一个拥有用户、对话、表单或工作流的产品,API Claw(爪)让你无需自己搭建整套后端就能加入 AI 智能体。
例如:
- 一个聊天应用,希望在每段对话中加入 AI 助手
- 一个客服 SaaS,希望让每个客户都拥有专属的 AI 支持智能体
- 一个浏览器扩展或企业内部工具,需要一个基于云的 AI 工作者
2. 硬件制造商
如果你在打造智能手表、耳机、语音终端或其他联网设备,API Claw(爪)让设备连接到云端的 AI 大脑,而不必试图在本地运行智能。
这意味着:
- 设备负责输入与输出
- 智能体在云端运行
- 升级在服务端完成,而不必依赖持续而复杂的固件更新
工作原理
你的产品(硬件 / 软件)
↓ API 调用
Buda OpenAPI
↓
Space(租户)
↓
Agent(AI 助手) + Drive(知识库)
↓
Chat Session(对话)每个终端用户都会获得一个独立的 Chat Session,上下文相互隔离。智能体在空闲时休眠,并在消息到达时自动唤醒。
你无需自己构建什么
使用 API Claw(爪),开发者无需单独构建或运维:
- 模型配置与供应商切换
- 推理机器或 GPU 基础设施
- 智能体运行时与工具沙箱
- 文件摄取与知识库处理
- 会话与上下文管理
- 面向不同用户或客户的租户隔离
- 针对空闲智能体的唤醒/休眠编排
这正是核心价值:你的团队可以专注于产品体验,而 Buda 在背后提供智能体基础设施层。
为什么不直接调用 LLM API?
调用模型 API 给你的是模型输出。API Claw(爪)给你的是一个可运营的 AI 智能体。
| 原始模型 API | API Claw(爪) | |
|---|---|---|
| 输出 | 文本或结构化补全 | 带运行时上下文的智能体回复 |
| 会话 | 由你管理 | 内置会话模型 |
| 知识库 | 由你构建检索 | 内置基于 Drive 的知识 |
| 运行时 | 由你构建编排 | 托管的智能体运行时 |
| 多租户支持 | 由你设计 | 内置基于 Space 的隔离 |
| 运维 | 由你负责 | 由 Buda 托管 |
如果你是一家产品公司,这个差异比单纯的模型质量更重要。
API Claw(爪)与 OpenClaw 的对比
OpenClaw 是智能体能力与运行时层。API Claw(爪)是产品化的 API 表面,让外部硬件和软件得以接入该能力。
简而言之:
- OpenClaw = 底层的智能体运行时 / 能力模型
- API Claw(爪) = 在其之上构建、面向开发者的集成层
API 总览一览
API Claw(爪)最容易理解为五个相互协作的 API 分组:
| API 分组 | 主要端点 | 它控制什么 | 何时使用 |
|---|---|---|---|
| Space API | /api/v1/spaces | 租户边界、客户边界或设备群组边界 | 你需要在客户、团队、设备或付费账户之间做隔离 |
| API Agents API | /api/v1/api-agents | 面向实现的托管智能体集合,服务于 API Claw(爪)产品 | 你想用一个简洁的、面向开发者的方式,通过朴素的 REST 资源名来列出或创建 API Claw(爪) |
| Agent API | /api/v1/spaces/{spaceId}/agents | Space 内部受管的 Claw(爪)智能体 | 你希望每个租户或产品线都有自己的助手角色和指令 |
| Drive API | /api/v1/api-agents/{agentId}/drive/files | 持久的知识、手册、政策、状态与长期记忆 | 你希望智能体从文件中持续改进,而不是每次都接收同一份巨大的提示词 |
| Chat Session API | /api/v1/api-agents/{agentId}/sessions、/api/v1/api-agents/{agentId}/sessions/{sessionId} | 用户对话、异步的智能体运行、状态与消息 | 你的后端可以安全地持有主 API 密钥 |
| Embed API | /api/v1/spaces/{spaceId}/agents/{agentId}/embed-urls、/api/v1/spaces/{spaceId}/agents/{agentId}/embed-sessions、/api/v1/embed/chat-sessions/... | 短期 iframe URL 或前端可安全使用的对话访问 | 浏览器、移动应用、小程序或扩展需要与 Buda 通信,但不能看到你的主 API 密钥 |
API Claw(爪)有自己的托管 iframe 表面。你的后端创建一个短期嵌入 URL:
POST /api/v1/spaces/{spaceId}/agents/{agentId}/embed-urls
Authorization: Bearer <your-api-key>
Content-Type: application/json
{
"externalUserId": "customer-123",
"displayName": "Kelly",
"ttlSeconds": 3600,
"mode": "chat"
}响应中包含:
{
"embedUrl": "https://buda.im/embed/api-claw/tsk_abc123#token=SHORT_LIVED_TOKEN",
"sessionId": "tsk_abc123",
"expiresAt": "2026-05-26T12:00:00.000Z"
}然后将返回的 embedUrl 放进 iframe:
<iframe
src="https://buda.im/embed/api-claw/tsk_abc123#token=SHORT_LIVED_TOKEN"
title="API Claw Agent"
allow="microphone"
style="width: 400px; height: 600px; border: 0;"
></iframe>令牌位于 URL 的哈希片段中,因此它不会作为首次页面请求的一部分被发送到服务器。页面在浏览器中读取该令牌,并仅将其用于 /api/v1/embed/... 的 JSON 调用。令牌过期后,从你的后端创建一个新的嵌入 URL。
应用场景如何组合这些 API
大多数产品都遵循同样的生命周期:创建、注入、运行、读取、学习、更新。
| 场景 | Space 策略 | Agent 策略 | Drive 策略 | Chat 策略 | Embed 策略 |
|---|---|---|---|---|---|
| 智能硬件群组 | 每个客户、群组或高端设备组对应一个 Space | 每个设备型号或助手角色对应一个 Agent | 手册、固件说明、故障排查指南、设备状态快照 | 当用户说话或发生设备事件时,由设备后端启动会话 | 原生应用或小程序使用嵌入令牌;网站使用 API Claw(爪)嵌入 URL |
| 微信小程序 | 每个商户、课程、客户或终端用户账户对应一个 Space | 每个业务功能对应一个 Agent,如客服、辅导或购物助手 | FAQ、商品目录说明、政策、课程计划、用户进度 | 你的后端为用户的 openid 签发一个嵌入会话 | 小程序用短期令牌调用 /api/v1/embed/chat-sessions/{sessionId} |
| SaaS 副驾 | 每个客户租户对应一个 Space | 每个工作流对应一个 Agent,如新手引导、报表或客服 | 租户文档、集成设置、操作手册、历史摘要 | SaaS 后端启动会话并存储返回的会话 ID | 通常为服务端到服务端;仅当你想要由 Buda 托管的对话界面时才使用 iframe |
| 客服挂件 | 每个客户公司或品牌对应一个 Space | 每个品牌或队列对应一个客服 Agent | 帮助文章、退款政策、产品文档、升级规则 | 你的后端为每位访客或账户创建一个嵌入 URL | 使用 API Claw(爪)嵌入 URL 实现托管的 iframe 对话 |
| 企业内部智能体 | 每个部门或项目对应一个 Space | 为运维、销售、研究或工程配置多个 Agent | 内部 SOP、会议记录、运行手册、共享决策 | 内部工具通过按钮、表单或定时任务启动会话 | 工具使用服务端到服务端;快速的内部对话页面使用 API Claw(爪)嵌入 URL |
经验法则:
- 把持久的知识放进 Drive。
- 把瞬时的用户输入放进 Chat Session。
- 把客户或设备的隔离放进 Space。
- 把角色、行为和运行时身份放进 API Claw(爪)。主要的开发者流程使用
/api/v1/api-agents/{agentId}/...;当你的后端已经在 Space 上下文中工作时,嵌套的/api/v1/spaces/{spaceId}/agents/{agentId}/...端点仍然可用。 - 只有当调用方是无法安全持有主 API 密钥的前端时,才使用 Embed API。
集成步骤
注册开发者账户并获取 API 密钥
注册一个 Buda 开发者账户,并从设置中获取你的 API 密钥。该密钥用于认证所有 OpenAPI 调用。
创建一个 Space(租户)
你的每个客户(或每台设备)映射到一个 Space。
POST /api/v1/spaces
Authorization: Bearer <your-api-key>
Content-Type: application/json
{
"name": "Acme Device Fleet",
"slug": "acme-device-fleet"
}保存返回的 spaceId。
在 Space 内创建一个 Agent
POST /api/v1/spaces/{spaceId}/agents
Authorization: Bearer <your-api-key>
Content-Type: application/json
{
"name": "Watch Assistant",
"emoji": "AI",
"instructions": "You are a smartwatch assistant. Use Drive files as source of truth. Keep replies short enough for a small screen."
}保存返回的 agentId 和 driveId。Buda 还会把这些指令写入该 Agent 的 Drive 作为持久上下文,让 Agent 能从文件中持续演进,而不只依赖一份提示词。
向 Drive 添加持久知识
如果你的 Agent 需要基于产品手册、FAQ、政策或设备特定状态来作答,请把这些文件写入它的 Drive:
PUT /api/v1/api-agents/{agentId}/drive/files
Authorization: Bearer <your-api-key>
Content-Type: application/json
{
"path": "manuals/reset-device.md",
"mimeType": "text/markdown",
"content": "# Resetting the device\n\nHold the crown for 8 seconds, then confirm on screen."
}文件会跨会话持久保存。更新某个文件就会更新 Agent 在下一次运行中可使用的内容。
对于已经把两个 ID 放在一起的创建系统,对应的 Space 作用域路由 /api/v1/spaces/{spaceId}/agents/{agentId}/drive/files 同样可用。
开启一段对话
POST /api/v1/spaces/{spaceId}/agents/{agentId}/chat-sessions
Authorization: Bearer <your-api-key>
Content-Type: application/json
{
"message": "How do I reset my device?",
"mode": "chat"
}Buda 返回一个 session.id 并异步启动 Agent 运行。如果你想稍后延续同一用户的对话,请保存这个 session.id。
轮询会话结果
GET /api/v1/api-agents/{agentId}/sessions/{sessionId}
Authorization: Bearer <your-api-key>响应中包含会话状态和消息。持续轮询,直到状态变为 completed、waiting_for_input、failed 或 cancelled。
API Claw(爪)的 OpenAPI 端点
这些端点可在 /api/v1/openapi.json 的 OpenAPI JSON 和 /api/v1/doc 的交互式 Swagger UI 中查看。
| 端点 | 用途 |
|---|---|
GET /api/v1/spaces | 列出该 API 密钥用户拥有的 Space |
POST /api/v1/spaces | 创建一个租户 Space |
GET /api/v1/api-agents | 列出该 API 密钥用户可见的托管 API Agent |
POST /api/v1/api-agents | 在某个 Space 中创建一个托管 API Agent |
GET /api/v1/spaces/{spaceId}/agents | 列出某个 Space 中的 Claw(爪)Agent |
POST /api/v1/spaces/{spaceId}/agents | 创建一个带有自己 Drive 的受管 Claw(爪)Agent |
GET /api/v1/api-agents/{agentId}/drive/files | 通过 API Agents 路由浏览该 Agent 的持久 Drive |
PUT /api/v1/api-agents/{agentId}/drive/files | 通过 API Agents 路由创建或覆盖一个 Drive 文件 |
GET /api/v1/spaces/{spaceId}/agents/{agentId}/drive/files | 通过 Space 作用域路由浏览同一个 Agent Drive |
PUT /api/v1/spaces/{spaceId}/agents/{agentId}/drive/files | 通过 Space 作用域路由创建或覆盖同一个 Drive 文件 |
POST /api/v1/spaces/{spaceId}/agents/{agentId}/chat-sessions | 发送消息并启动或恢复一个 Agent 会话 |
GET /api/v1/api-agents/{agentId}/sessions | 列出某个 API Agent 的会话 |
POST /api/v1/api-agents/{agentId}/sessions | 为某个 API Agent 创建会话 |
GET /api/v1/api-agents/{agentId}/sessions/{sessionId} | 读取会话状态与消息 |
POST /api/v1/api-agents/{agentId}/sessions/{sessionId}/messages | 向已有会话发送一条消息 |
DELETE /api/v1/api-agents/{agentId}/sessions/{sessionId}/run | 停止一个进行中的会话运行 |
POST /api/v1/api-agents/{agentId}/sessions/{sessionId}/attachments | 为聊天附件申请一个预签名上传 URL |
GET /api/v1/api-agents/{agentId}/sessions/{sessionId}/stream | 恢复一个进行中的会话流 |
POST /api/v1/api-agents/{agentId}/sessions/{sessionId}/chat | 使用 AI SDK 消息协议进行流式对话 |
POST /api/v1/spaces/{spaceId}/agents/{agentId}/embed-urls | 为 API Claw(爪)创建一个短期托管 iframe URL |
POST /api/v1/spaces/{spaceId}/agents/{agentId}/embed-sessions | 为原生界面签发一个短期、前端可安全使用的嵌入令牌 |
POST /api/v1/embed/chat-sessions/{sessionId}/messages | 使用嵌入令牌发送一条前端消息 |
GET /api/v1/embed/chat-sessions/{sessionId} | 使用嵌入令牌轮询前端可见的会话状态与消息 |
我应该 iframe 哪个 URL?
对于 API Claw(爪),你的后端应首先调用这个 OpenAPI 端点:
POST /api/v1/spaces/{spaceId}/agents/{agentId}/embed-urls它返回一个类似这样的 embedUrl:
https://buda.im/embed/api-claw/{sessionId}#token={shortLivedToken}返回的那个确切 URL 就是 iframe 的 src。
在以下情况使用它:
- 你想要一个现成的、由 Buda 托管的 API Claw(爪)对话界面。
- 你需要一个按计划过期的链接。
- 你要嵌入到网站、后台管理面板、客户门户或合作伙伴控制台中。
- 你的产品后端可以在过期前后刷新该 URL。
不要 iframe /api/v1/embed/...。那些路由是供托管 iframe 页面和原生前端使用的 JSON API。对于微信小程序、移动应用和浏览器扩展,请自行构建对话界面并调用:
POST /api/v1/spaces/{spaceId}/agents/{agentId}/embed-sessions
POST /api/v1/embed/chat-sessions/{sessionId}/messages
GET /api/v1/embed/chat-sessions/{sessionId}这样前端就获得了一个作用域受限的短期令牌,而无需暴露你的主 Buda API 密钥。
小程序的嵌入式对话
对于微信小程序、移动应用、浏览器扩展,或任何你无法完全掌控的前端,都不要把你的主 Buda API 密钥下发到客户端。
请改用嵌入流程:
- 你的后端用真实的 API 密钥调用 Buda,并签发一个短期嵌入令牌。
- 你的小程序只存储那个短期令牌。
- 小程序通过
/api/v1/embed/...发送消息并轮询状态。 - 令牌过期后,你的后端再签发一个新的。
后端:签发一个嵌入会话
POST /api/v1/spaces/{spaceId}/agents/{agentId}/embed-sessions
Authorization: Bearer <your-api-key>
Content-Type: application/json
{
"externalUserId": "wechat-openid-oABC123",
"displayName": "Kelly",
"ttlSeconds": 3600,
"mode": "chat",
"metadata": {
"miniProgram": "wechat",
"scene": "device-support"
}
}只向小程序返回 token、sessionId 和所需的 API URL。如果要用 iframe,请改为调用 /embed-urls 并返回 embedUrl。
小程序:发送一条消息
POST /api/v1/embed/chat-sessions/{sessionId}/messages
Authorization: Bearer <embed-token>
Content-Type: application/json
{
"message": "How do I reset my device?",
"mode": "chat"
}小程序:轮询回复
GET /api/v1/embed/chat-sessions/{sessionId}
Authorization: Bearer <embed-token>这为小程序提供了一条干净的原生集成路径,没有 iframe 限制、第三方 Cookie 问题或泄露的服务端凭证。
最小的 Node.js 示例
const API_BASE = "https://buda.im/api/v1";
const headers = {
Authorization: `Bearer ${process.env.BUDA_API_KEY}`,
"Content-Type": "application/json",
};
const space = await fetch(`${API_BASE}/spaces`, {
method: "POST",
headers,
body: JSON.stringify({ name: "Acme Device Fleet" }),
}).then((res) => res.json());
const agent = await fetch(`${API_BASE}/spaces/${space.id}/agents`, {
method: "POST",
headers,
body: JSON.stringify({
name: "Watch Assistant",
instructions: "Answer from Drive first. Keep replies concise.",
}),
}).then((res) => res.json());
await fetch(`${API_BASE}/spaces/${space.id}/agents/${agent.id}/drive/files`, {
method: "PUT",
headers,
body: JSON.stringify({
path: "manuals/reset-device.md",
content: "# Resetting\n\nHold the crown for 8 seconds.",
mimeType: "text/markdown",
}),
});
const started = await fetch(`${API_BASE}/spaces/${space.id}/agents/${agent.id}/chat-sessions`, {
method: "POST",
headers,
body: JSON.stringify({ message: "How do I reset my device?", mode: "chat" }),
}).then((res) => res.json());
const status = await fetch(`${API_BASE}/api-agents/${agent.id}/sessions/${started.session.id}`, {
headers: { Authorization: headers.Authorization },
}).then((res) => res.json());构建一个持续演进的、基于 Drive 的 Agent
真正有用的模式不是「每次提示词都把所有内容都发过去」。让你的产品把 Drive 当作 Agent 的持久大脑:
- 把产品手册、政策、发布说明和用户特定状态写入 Drive。
- 每段对话以一条小的运行时消息开始,比如用户的问题或最新的设备事件。
- 轮询 Chat Session 的状态和消息。
- 当你的产品学到了某些可持久保留的内容时,把它作为文件写回 Drive。
- 让下一次运行自动继承这份改进后的上下文。
设备或第三方应用正是通过这种方式获得一个随时间不断进步的 Agent:API 调用唤醒 Agent,会话捕捉当下的对话,而 Drive 把持久知识带向未来。
计费模型
Buda 按 Space 计费,而非按终端用户。你作为开发者购买 Space;至于如何向你的终端用户收费,完全由你决定。
典型模型:
- 你从 Buda 购买 Space(提供批量定价)
- 你向终端用户收取订阅费或激活费
- 差价归你
硬件团队为何在意
对硬件公司而言,这改变了成本结构:
- 无需出厂一台算力足以在本地运行完整 AI 栈的设备
- 无需让用户的笔记本或手机充当主要运行时
- 无需仅为支持一条设备线就维护一个独立的 AI 后端团队
你的硬件可以保持轻量,而 AI 能力在云端持续改进。
类比:ChatGPT 与 OpenAI
| OpenAI | Buda | |
|---|---|---|
| 消费级产品 | ChatGPT | Buda App |
| 开发者 API | OpenAI API | Buda OpenAPI |
| 开发者用它构建什么 | 他们自己的 AI 产品 | 带 Agent + Drive 的完整 AI 空间 |
差别在于:Buda OpenAPI 不只是模型推理——它提供一个完整的 Agent 运行时,包括知识库、会话管理和工具调用能力。
为什么不用 OpenClaw?
OpenClaw 是一个出色的开源 AI 智能体项目,非常适合想在自己机器上自托管助手的个人。但对于需要规模化的硬件或软件开发者来说,它并不是合适的工具。
完整对比请参阅:Buda 对比 OpenClaw
| OpenClaw | Buda | |
|---|---|---|
| 定位 | 开源个人助手,自托管 | 商业化企业平台,托管服务 |
| 基础设施 | 在用户本地机器上运行 | 自建 Kubernetes 集群(Claw Computer),弹性伸缩 |
| 网关 | 厚重的 Gateway 层,单机瓶颈 | 没有传统 Gateway,轻量 API 层,原生设计的横向扩展 |
| 多租户 | 不支持,每个实例相互独立 | 原生多租户,一个 API 密钥管理数百万个 Space |
| Token 管理 | 用户自行配置模型 | 商业化 Token 管理,成本可预测、可控 |
| 隔离 | 共享宿主操作系统 | 每个 Agent 都在自己的沙箱中,容器级隔离 |
| SLA 与支持 | 社区支持,无 SLA | 企业级 SLA,商业支持 |
| 最适合 | 个人使用、开发者折腾 | 规模化硬件、SaaS 集成、商业部署 |
一句话:OpenClaw 是供个人使用的工具。Buda 是开发者卖给自己用户的基础设施。
如果你需要让 10 万只智能手表各自拥有专属的 AI 助手,你需要的是 Buda,而不是在每台设备背后运行一个独立的 OpenClaw 实例。
常见问题
终端用户需要 Buda 账户吗? 不需要。终端用户对 Buda 毫无感知。你的产品通过 API 代理所有交互。
Agent 在空闲时会消耗资源吗? 不会。当没有活跃对话时,Agent 会休眠,并在消息到达时自动唤醒。
我可以为不同用户配置不同的 Agent 指令吗? 可以。每个 Space 都有自己独立的 Agent 配置。按需为每个用户创建各自的 Space 和 Agent。