OpenAgentKernel(官方 SDK)
@cloudbase/open-agent-kernel(OAK)是 CloudBase 官方的服务端 Agent SDK,Apache-2.0 开源。它内置了 Agent 开发中重复度最高的基础设施——会话持久化、多轮上下文、MCP 工具接入、人工审批(HITL)、用户长期记忆、沙箱执行——让你只写业务逻辑。
- GitHub:https://github.com/TencentCloudBase/OpenAgentKernel
- CNB:https://cnb.cool/tencent/cloud/cloudbase/OpenAgentKernel
- npm:https://www.npmjs.com/package/@cloudbase/open-agent-kernel
快速开始
前置条件:Node.js 20.19+、一个云开发环境的 envId、环境的服务端 API Key(获取地址)。
npm install @cloudbase/open-agent-kernel
import { createAgent } from "@cloudbase/open-agent-kernel";
process.env.CLOUDBASE_APIKEY = "your-cloudbase-api-key";
const agent = createAgent({
envId: "your-env-id",
model: "deepseek-v4-pro",
systemPrompt: "你是一个智能助手,请帮我回答用户的问题",
});
const session = await agent.startSession({ userId: "user-1" });
for await (const msg of session.send("一句话解释:什么是 Serverless?")) {
const update = msg.params?.update;
if (update?.sessionUpdate === "agent_message_chunk") {
process.stdout.write(update.content.text);
}
}
// 本轮回答结束后循环自动退出
模型字符串写法默认走 CloudBase AI 网关,用 CLOUDBASE_APIKEY 鉴权;也可以传 { id, apiKey, apiBaseUrl } 接入自带 endpoint 的模型。模型需先在控制台开通,未开通会返回 403 AI_MODEL_NOT_SUPPORTED(错误码说明)。
在控制台创建
打开 CloudBase 控制台的 Agent 板块,新建 Agent 时选择官方 cloudbase-agent 模板,得到的就是一个 OpenAgentKernel 项目:会话持久化、MCP 工具、人工审批开箱即用,创建完成即可在「接入 & 调试」页直接对话。
需要深度定制时,在「本地开发」页按指引操作:
tcb fn code download # 把代码拉到本地
# 修改代码……
tcb fn deploy # 部署回云端
控制台负责托管、日志和调试入口,OpenAgentKernel 负责运行时。
核心配置
createAgent(config) 的常用字段:
| 字段 | 必填 | 说明 |
|---|---|---|
envId | 是 | 云开发环境 ID,模型网关、数据库、存 储、沙箱都以它为锚点 |
model | 是 | 模型 ID(走 CloudBase AI 网关)或 { id, apiKey, apiBaseUrl } 完整配置 |
systemPrompt | 否 | 系统提示词(Agent 的人设与行为约束) |
stream | 否 | 是否流式增量输出,默认 true。注意:若部署形态在网关层缓冲整个响应,前端仍要等整轮结束才收到,与本开关无关 |
mcpServers | 否 | MCP server 配置,支持进程内 / 本地 stdio / 远程 HTTP 等形态 |
permissions | 否 | 工具审批(HITL):requireApproval 支持 '*'、工具名数组或函数 |
session | 否 | 会话持久化,默认落云开发数据库 |
storage | 否 | 多模态附件存储,默认落云开发云存储 |
sandbox | 否 | 远程沙箱(当前内测中,如有需求请联系我们) |
userMemory | 否 | 用户长期记忆,同步到云开发云存储、跨会话生效 |
credentials | 视场景 | 腾讯云 SecretId/SecretKey;仅有 CLOUDBASE_APIKEY 时会话与审批也能持久化,工作区文件同步、多模态附件上传等需要它 |
完整字段与默认值见 GitHub README 的「完整参数说明」。
配置 MCP 工具
const agent = createAgent({
envId,
model: "deepseek-v4-pro",
systemPrompt: "你是一个智能助手",
mcpServers: {
// 远程 HTTP MCP
remote: {
type: "http",
url: "https://example.com/mcp/v1",
headers: { Authorization: "Bearer xxx" },
},
// 本地 stdio MCP
stdio: {
type: "stdio",
command: "npx",
args: ["-y", "@modelcontextprotocol/server-everything"],
},
},
});
工具名规则为 mcp__{serverName}__{toolName}。进程内自定义工具的写法见 README「MCP 工具扩展」。
工具审批(HITL)
const agent = createAgent({
envId,
model: "deepseek-v4-pro",
permissions: {
requireApproval: ["database_delete", "reset_password"],
},
});
命中的工具调用会暂停,事件流中发出 session/request_permission 请求帧;业务层展示确认交互后调用 session.respondApproval() 继续执行。
会话持久化与跨进程恢复
会话记录默认持久化到云开发数据库,不依赖进程内存。第二次函数调用时用 conversationId 恢复上下文:
const session = await agent.startSession({ userId: "user-1" });
const conversationId = session.id;
// 另一个进程 / 下一次函数调用
const resumed = await agent.resumeSession(conversationId);
事件流
session.send() 返回 AsyncIterable,每一项是 JSON-RPC 格式的 ACP 通知,实际更新内容在 msg.params.update 里。一条真实的帧长这样:
{
"jsonrpc": "2.0",
"method": "session/update",
"params": {
"sessionId": "a8ea09e4-3ae4-4856-a285-bc2a7c9d76ab",
"update": {
"sessionUpdate": "agent_message_chunk",
"content": { "type": "text", "text": "Serverless 是一种" }
}
}
}
update.sessionUpdate 的取值:
| 类型 | 含义 |
|---|---|
agent_message_chunk | 正文增量文本,流式渲染用 |
agent_thought_chunk | 思考过程增量(推理模型输出的 reasoning) |
tool_call / tool_call_update | 工具调用发起、进度与结果 |
agent_phase | 运行阶段变化(结束时为 idle) |
usage_update | 本轮用量统计 |
log | 运行日志 |
本轮结束的判定:for await 循环自然退出即本轮结束,不需要监听专门的结束事件。
OAK 的事件流基于 ACP(Agent Client Protocol):接入 SSE、AG-UI 或自定义协议时,由业务层做事件映射。