Agent 运行
Vibe Coding 平台的核心流程是:用户说一句话 → Agent 循环调用 LLM 和工具 → 产出一个可部署的应用。要让这个流程可靠运行,平台在 Agent 运行层面临以下核心挑战:
- 安全边界:Agent 需要操作云资源(数据库、部署等),但 LLM 输出不可预测,密钥不能暴露给 LLM 或其生成的代码
- Agent 调度与会话连续性:Agent Loop 需要编排 Prompt、路由工具调用、管理会话状态,用户对话可能跨越多轮多天,上下文和沙盒工作区都需要持久化
- 代码执行环境与弹性:LLM 生成的代码(npm install、build、运行用户逻辑)需要一个安全隔离的环境,不能直接跑在生产服务器上,同时沙盒实例需要按需创建/销毁,空闲时不应占用资源
- 模型灵活性:不同任务适合不同模型(代码生成用强推理模型、简单问答用轻量模型),平台需要灵活切换
CloudBase 针对以上挑战提供对应的解决方案:
| 挑战 | CloudBase 方案 |
|---|---|
| 安全边界 | 受控信任边界 — Agent Loop 作为唯一凭证持有者,LLM 和 Sandbox 均不感知密钥 |
| Agent 调度与会话连续性 | Agent Loop — 部署在云函数中,驱动循环控制、会话管理(CloudBase 数据库持久化)、凭证管理 |
| 代码执行环境与弹性 | Sandbox 沙盒 — 隔离的容器/microVM,按需创建/回收,工作区通过 COS/CFS 跨对话持久化 |
| 模型灵活性 | MaaS 模型服务 — 多模型统一接入,按任务类型动态切换 |
下面先从核心架构看整体全貌,然后逐一展开每个组件的设计。
核心架构

受控信任边界
整个运行时架构的核心设计原则是受控信任边界——将不可预测的部分约束在明确的安全边界内,所有跨边界操作都必须经过 Agent Loop 这个受信任的中间层。
按信任等级划分为三层:
| 信任层 | 组件 | 信任等级 | 凭证 | 说明 |
|---|---|---|---|---|
| 受信任层 | Agent Loop | ✅ 受信任 | 持有 全部凭证 | 平台方编写的确定性代码,行为可控、可审计 |
| 不受信任层 — 推理 | LLM | ❌ 不受信任 | 无 | 输出不可预测,可能被 prompt 注入或产生幻觉 |
| 不受信任层 — 执行 | Sandbox | ❌ 不受信任 | 仅终端用户的环境级密钥(MCP 用) | 执行 LLM 生成的任意代码,属于隔离的运行沙盒 |
为什么 LLM 和 Sandbox 不能处于信任边界内?
- LLM:模型输出不可预测。如果 LLM 感知到密钥,恶意 prompt 注入可能诱导模型在生成代码中嵌入密钥外传逻辑
- Sandbox:执行的代码由 LLM 生成,内容不可控。如果 Sandbox 持有平台级密钥,恶意代码可通过
curl外传密钥、直接调用管理面 API 删除数据、或攻击其他用户环境
因此,Agent Loop 作为唯一的受信任中间层,承担所有跨信任边界的操作:LLM 只能"请求"操作,Sandbox 只能在受限范围内"执行"操作,真正的决策权和凭证始终由 Agent Loop 掌控。
请求生命周期
一个完整的 Vibe Coding 请求从用户发起到应用上线,经过以下阶段:
Agent Loop
Agent Loop 是部署在 CloudBase 云函数中的业务代码,负责驱动整个请求生命周期。
循环控制
Agent Loop 的核心是一个"调用 LLM → 执行工具 → 反馈结果"的循环:
- 将用户输入 + 会话上下文 + 工具定义组装为 Prompt,发送给 LLM
- 解析 LLM 返回的 Tool Calls,路由到对应的工具(Sandbox SDK 或 MCP Client)
- 将工具执行结果拼回 Prompt,继续下一轮循环
- 当 LLM 返回最终文本(非工具调用)时,结束循环,返回用户
会话管理
会话状态持久化到 CloudBase 数据库,包括:
- 对话历史:完整的 message 列表(user / assistant / tool)
- 上下文元数据:当前 Sandbox 实例 ID、工作区快照 ID、用户环境 ID 等
- 状态机:当前请求所处的阶段(编码中 / 构建中 / 部署中 / 已完成)
凭证管理
Agent Loop 通过云函数环境变量持有以下凭证,任何凭证均不会传递给 LLM 或暴露在 Sandbox 工作区中:
| 凭证 | 用途 |
|---|---|
| LLM API Key | 调用大模型推理接口 |
| 用户 CloudBase 环境密钥(SecretId / SecretKey) | 签发环境级临时密钥,注入 Sandbox 供 MCP 使用 |
| 业务密钥 | 按需持有,如 GitHub Token(拉取代码仓库)、NPM Token(访问私有包)、第三方 API Key 等 |
Sandbox 沙盒
Sandbox 是 Agent 的编程工具层,基于 CloudBase Sandbox 提供隔离的完整 OS 环境。
能力概览
| 能力 | 说明 |
|---|---|
| 文件系统 | 可读写的工作区目录,支持 read / write / list / remove / stat / mkdir |
| Shell 执行 | 执行任意 Shell 命令,返回 stdout / stderr / exitCode |
| CloudBase MCP | 在 Sandbox 内运行 CloudBase MCP Server,通过 stdio 提供云资源操作能力 |
| 生命周期管理 | 支持 create / pause / resume / destroy,以及 Snapshot 快照 |
| 工作区持久化 | 通过 COS(Checkpoint)或 CFS(挂载)将工作区持久化,确保跨对话、跨实例保留 |
| 隔离性 | 每个用户的 Sandbox 互相隔离,无平台级管理凭证 |
| 低延迟 | 工具调用响应 < 500ms |
| 资源配额 | 磁盘 ≥ 512MB,命令超时可配置(≥ 5 分钟) |
工作区持久化
Sandbox 实例本身是临时的,但工作区需要跨对话保留。推荐方案:
| 方案 | I/O 性能 | 一致性 | 成本 |
|---|---|---|---|
| 挂载 CFS | 接近本地磁盘 | 强一致 | 较高 |
| Checkpoint 到 COS | 恢复后等同本地 | 最终一致 | 低 |
Vibe Coding 的核心负载是高频小文件读写(
npm install产生数万小文件),对 I/O 极敏感。
接入示例
注:Sandbox SDK 目前为试用阶段,请联系产品团队获取。
// 1. 签发用户环境级临时密钥
const credentials = await generateEnvCredentials(userEnvId);
// 2. 启动沙盒,注入用户级别的密钥
const sandbox = new AgentSandbox({
envId: userEnvId,
secretId: agentConfig.secretId, // 平台凭证,仅用于 Sandbox SDK 的 RPC 认证
secretKey: agentConfig.secretKey,
envVars: {
// 用户 CloudBase 环境密钥(供 MCP Server 使用)
CLOUDBASE_ENV_ID: userEnvId,
TENCENTCLOUD_SECRETID: credentials.secretId,
TENCENTCLOUD_SECRETKEY: credentials.secretKey,
// 用户的业务密钥(按需注入)
GITHUB_TOKEN: user.githubToken,
NPM_TOKEN: user.npmToken,
}
});
// 3. 文件系统操作(封装为 Agent Tools 供 LLM 调用)
await sandbox.files.write('/app/index.js', code);
const content = await sandbox.files.read('/app/index.js');
await sandbox.files.list('/app');
// 4. Shell 命令执行
const result = await sandbox.commands.run('npm install && npm run build');
// result: { stdout, stderr, exitCode }
// 5. 工作区持久化
await sandbox.snapshot(sessionId); // 持久化到 COS/CFS
await sandbox.restore(sessionId); // 从 COS/CFS 恢复
CloudBase MCP 接入
CloudBase MCP 服务运行在 Sandbox 内部,Agent Loop 通过 MCP Client(stdio 协议)与之通信。基于上文已创建的 sandbox 实例:
// 1. 在沙盒内启动 CloudBase MCP Server
await sandbox.commands.run('npx @cloudbase/cloudbase-mcp@latest');
// 2. 通过 MCP Client 调用云资源操作
const mcpClient = sandbox.connectMCP({ transport: 'stdio' });
await mcpClient.call('cloudbase.db.createCollection', { name: 'todos' });
await mcpClient.call('cloudbase.function.deploy', { name: 'addTodo', code: '...' });
注:沙盒启动时已注入用户的环境级密钥(见上文
envVars),MCP Server 使用该密钥调用管理面 API,仅能操作该用户自己的 CloudBase 环境,权限范围受限。
MaaS 模型服务
CloudBase 提供大模型统一接入方案,平台方可灵活选择和切换模型。
- 多模型接入:支持主流大模型(DeepSeek、混元、GLM、MiniMax、Kimi 等)的统一接入
- 动态切换:平台方可根据任务类型动态选择模型(如代码生成用强推理模型,简单对话用轻量模型)
- 统一计费:模型调用统一计费,成本可控
- 灵活部署:支持公有云模型 API(成本低、免运维)和私有化部署(数据不出内网,适合高安全要求场景)