跳到主要内容

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 → 执行工具 → 反馈结果"的循环:

  1. 将用户输入 + 会话上下文 + 工具定义组装为 Prompt,发送给 LLM
  2. 解析 LLM 返回的 Tool Calls,路由到对应的工具(Sandbox SDK 或 MCP Client)
  3. 将工具执行结果拼回 Prompt,继续下一轮循环
  4. 当 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(成本低、免运维)和私有化部署(数据不出内网,适合高安全要求场景)