如果你了解过火山引擎函数服务 veFaaS,就知道它就像一个“随叫随到”的代码运行环境 —— 既支持免运维、弹性计费地部署 Python/Golang/Node.js 等代码包,也支持通过自定义镜像搞定更复杂的环境依赖。

但今天我们要聊的不是“怎么用”,而是 AI Agent 来了之后,用法变了

Agent 的运行特点很直接:秒级拉起一个干净沙箱,跑代码、搜网页、调工具,然后销毁。veFaaS 的云沙箱能力恰好与这一模式天然匹配 —— 弹性伸缩与按需计费,对应的是 Agent 任务高频创建、短生命周期、用完即焚的运行节奏。在可信沙箱内,Agent 可以安全地完成各类工具调用,无需担心资源残留或环境冲突,每一次执行都是一次干净的“即用即走”。

问题在于调用方式——

过去,开发者管理函数服务主要依赖 Web 控制台或脚本。但当 AI Agent 介入开发、部署和运维流程时,传统控制台的交互方式并不友好:一个任务往往需要横跨多个页面,操作路径冗长且伴随学习成本,难以被 Agent 高效调用。

传统方式 vs Agent CLI

针对这个问题,火山引擎推出 veFaaS CLI,它的解决思路是将函数与沙箱的部署、管理等操作封装为一套稳定、可复用的命令集。这套命令集不区分操作主体 —— 无论是开发者、AI Agent 还是 CI/CD 流水线,都能通过同一套命令完成 Serverless 服务的一站式生命周期管理。

它提供以下核心能力:

  • 一键部署:vefaas inspect 自动检测项目类型,vefaas deploy 一行实现从本地到线上服务的部署

  • 运行可观测:vefaas fn logs / invoke / revisions / instances 上线后持续可见

  • 配置管理:vefaas fn config / scale / env / strategy 管理函数配置、资源规格

  • 文档即查:vefaas doc search / doc api / doc sdk 不离开终端

  • 沙箱配置:vefaas sandbox create / instance create / webshell 创建沙箱、拉起实例、调试

  • CI/CD 原生支持:结构化输出、非交互模式,适配主流流水线

上手 veFaaS CLI,只需三步

第一步:安装 CLI

npx @volcengine/vefaas-cli@latest install
vefaas --version

或者和你的 Agent 对话:帮我通过 npx @volcengine/vefaas-cli@latest install 安装 vefaas cli 和对应技能

第二步:登录账号

安装完成后,登录方式分两种场景:

1. 日常开发可以直接在浏览器登录火山引擎账号,通过 SSO 完成授权,随后执行部署、日志查询、文档检索等操作:

vefaas login --sso
vefaas whoami

2. 在脚本或 CI/CD 环境里,也可以通过 AK/SK 或 STS 等方式完成登录认证:

export VOLC_ACCESS_KEY_ID="<AK>"
export VOLC_SECRET_ACCESS_KEY="<SK>"
vefaas login --check

第三步:开始使用

登录之后,可以直接和 Agent 对话,了解 veFaaS CLI 的能力范围:看一下 veFaaS CLI 能做什么,帮我简短总结一下。

我看的是本机 vefaas 的 CLI help。它主要能做这些:
应用部署:init / link / deploy / domains / app,把本地项目部署成 veFaaS 应用,查看访问地址、发布记录、部署日志。
函数管理:fn list/create/info/release/rollback/logs/invoke/pull/push,管理函数、版本、实例、日志、调用测试、代码拉取推送。
沙箱管理:sandbox,管理沙箱应用、实例、镜像、发布、回滚、日志、WebShell。
配置与环境变量:config / env,改内存、CPU、超时、端口、启动命令、构建命令、环境变量等。
网关和触发器:gateway / trigger,管理 APIG 网关、路由,以及 Timer/Kafka/RocketMQ/BMQ/TLS 等触发器。
排查与底层能力:doctor / whoami / overview / resource / api,诊断本地和鉴权问题、看资源概览,必要时直接调用 veFaaS OpenAPI。
一句话:它是 veFaaS 的终端控制台,覆盖从本地初始化、部署上线,到函数/沙箱运维、日志诊断和 OpenAPI 调用。

在实际使用中,用户无需关心控制台或 API 中某个功能对应哪个页面、哪个字段;Agent 可以通过 CLI 的分层命令、帮助指令与示例自由探索。更多典型场景,可以查看官方文档:https://www.volcengine.com/docs/6662/2221523

从代码上线,veFaaS CLI 实战

下面,我们结合一个城市明信片的 Agent 全栈项目,完整走一遍 veFaaS CLI 在 Serverless 不同生命周期中的用法。

第一站 · 城市明信片

Passing City 是一个城市明信片生成器。用户选一座城市,填上停留时间、心情和画面风格,它就能生成一张有图、有字、还能翻到背面的明信片。

它的产品入口像一个写信台,包含城市、停留时间、心情、画面风格。

选一座城市,写下此刻的心情,收回一张城市明信片

点击生成后,这些输入变成一张卡片 —— 正面是一幅城市图,背面是一段小短文,附几条适合慢慢走的路线。一个能生成、能翻看、能分享的 AI 小应用。

图片

正在生成:

通过 Seedream 生成明信片

图片

生成结果:

泉州午后巷陌,一张图配上

标题、背面短文和几条小路线

第二站 · 代码在做什么

从代码结构看,城市明信片是一个前后端分离的项目。Web 侧负责表单、状态和明信片正反面的展示;Server 侧通过 Express 处理路由、组织 prompt、调用模型并返回结构化结果。

Express 暴露 /api/postcard 等供 App 使用的路由:

router.post("/api/postcard", asyncRoute(async (req, res) => {
  const input = postcardInputSchema.parse(req.body);
  const postcard = await createPostcard(config, input, "same_mood", requestBaseUrl(req));
  res.json(postcard);
}));

模型调用链路是:先生成 imagePrompt,再调用火山方舟 API 执行 Seedream 图像生成模型。

const imagePrompt = buildImagePrompt(input);
const imageUrl = await generateArkImageUrl(config, imagePrompt);

asyncfunctiongenerateArkImageUrl(config, prompt) {
  const endpoint = `${config.arkBaseUrl}/images/generations`;
  const response = await fetch(endpoint, {
    method: "POST",
    headers: {
      authorization: `Bearer ${config.arkApiKey}`,
      "content-type": "application/json",
    },
    body: JSON.stringify({
      model: config.arkImageModel,
      prompt,
      size: "2K",
      response_format: "url",
      extra_body: { watermark: false },
    }),
  });
  return (await response.json()).data?.[0]?.url;
}

第三站 · 部署到云上

对于前后端分离的项目,可直接通过 CLI 部署全栈服务到函数上。Inspect 会探测代码的技术栈:API Server 是 Express Web 服务,Web 是 Vite 静态站点。

# apps/api
$ vefaas inspect -o json
{
  "installCommand": "npm install",
  "buildCommand": "npm run build",
  "startCommand": "npm run start",
  "port": 3000,
  "runtime": "native-node20/v1",
  "framework": "express",
  "isStatic": false
}

# apps/web
$ vefaas inspect -o json
{
  "installCommand": "npm install",
  "buildCommand": "npm run build",
  "outputPath": "dist",
  "startCommand": "caddy run --config DefaultCaddyFile --adapter caddyfile",
  "port": 8000,
  "runtime": "native-node20/v1",
  "framework": "vite",
  "isStatic": true
}

发布时按职责分开部署:Server 负责模型调用和后端逻辑,ARK_API_KEY 通过环境变量注入。执行部署拿到 API 域名后,再构建 Web 端:

cd apps/api
vefaas link --newApp city-postcard-api --gatewayName <gateway> -y
vefaas env set ARK_API_KEY <secret> -y
vefaas deploy -y
vefaas domains -o json

cd ../web
VITE_API_BASE_URL=https://<api-domain> \
  vefaas deploy --newApp city-postcard-web --gatewayName <gateway> -y

从本地项目到线上运行:veFaaS CLI 部署流程

上线后,应用能享受 Serverless 的按量计费与动态扩缩容能力:低流量时减少空闲资源成本,高流量时自动扩展实例,应对访问峰值。同时,这不是一次性的部署 —— 后续有代码或配置变更时,也可以继续通过 CLI 完成新版本发布、按流量比例灰度、快速回滚等操作,让项目从本地走向线上稳定运行。

在实际生产中,前端项目可通过 CDN 与 TOS 实现静态资源加速访问和可控的流量成本,比如通过火山 IGA (https://www.volcengine.com/docs/6559/2188992?lang=zh) 部署静态站点,函数托管静态服务更适合原型和概念验证。

对于后端服务,则可以充分使用 Serverless 的弹性能力,对于有状态的数据库需求,也可以配合火山 Supabase (https://www.volcengine.com/docs/87275/2105761?lang=zh) 使用。

第四站 · 持续维护

应用上线后,真正承载代码、版本、实例和运行日志的是函数。通过函数 ID,一条命令就能完成控制台级别的运维操作:

排查时,先确认函数发布状态和当前版本:

vefaas fn info --id <function-id> -o json
vefaas fn revision list --id <function-id> -o table

再做一次请求测试,并拿到实例与日志:

vefaas fn invoke --id <function-id> --method GET --path / -o json
vefaas fn instances --id <function-id> -o table
vefaas fn logs --id <function-id> --instance <instance-name> --lines 50

如果还需要现场,则可以进入实例 webshell 进行分析:

# 日志不够时,进入函数容器现场
vefaas fn webshell --id <function-id> --instance <instance-name> --connect
# 执行检查
cat <file>
ps aux
curl -fsS http://127.0.0.1:<port>/

第五站 · 互动展间

普通明信片可以通过生图模型直接生成结果。但当一张明信片要变成可翻页、可点开路线、能独立运行的幻灯片时,产品需要把一段代码逻辑放进隔离环境运行,再把预览结果代理回主应用。这道边界,正是沙箱的价值。

服务端的实际流程并不复杂:

  1. Web 请求 POST /api/workshop/jobs

  2. 服务调用 CreateSandbox 创建隔离实例

  3. 服务执行 Agent 逻辑,通过幻灯片技能生成代码,并通过沙箱接口写入文件

  4. Sandbox 内启动一个轻量服务

  5. 服务代理展示 Sandbox 内的预览页

图片

幻灯片:通过图片和输入

生成可交互的在线网站

图片

Sandbox 产物:

隔离环境里运行交互页

Agent 需要先确认 CreateSandbox 属于云沙箱实例接口,入参需要 FunctionId,返回值里会拿到 SandboxId。后端代码再用这个实例继续写文件、启动服务,并把代理预览地址返回给前端。

由于沙箱涉及到 CreateSandbox 等 OpenAPI 调用,因此需要使用火山 SDK 调用函数服务,有一定的上手成本。现在则可以交给 vefaas doc sdk,查询 OpenAPI 参数和 SDK 使用,直接编写如下的业务逻辑:

const sandbox = await vefaas.CreateSandbox({
  FunctionId: sandboxAppId,
  Timeout: 60,
});
const sandboxId = sandbox.SandboxId;

沙箱 ID 对应一个唯一的访问地址,可通过域名访问沙箱服务。对于开箱即用的 AIO Sandbox 模板,创建实例后可通过 /v1/shell/exec 执行 shell 命令:

await fetch(`${aioBaseUrl}/v1/shell/exec`, {
  method: "POST",
  headers: {
    "content-type": "application/json",
    "x-faas-instance-name": sandboxId,
  },
  body: JSON.stringify({ command: "node server.mjs", timeout: 60 }),
});

整个过程中,Agent 背后的 CLI 查询链路是:

vefaas doc search CreateSandbox
vefaas doc api CreateSandbox
vefaas api CreateSandbox --help

veFaaS CLI 提供了面向官方文档、API 和 SDK 的查询入口。Agent 可以直接检索相关文档,查看 API 参数与 SDK 调用方式,再结合当前任务生成更可靠的执行方案。

如果还没有沙箱应用,可以先访问火山引擎 veFaaS 控制台 https://console.volcengine.com/vefaas,点击「云沙箱 > 沙箱应用」,进入 All-in-One Sandbox 模板快速创建或体验一套可用环境。

All-in-One Sandbox 提供单一容器镜像,集成浏览器、终端、文件系统、VS Code、Jupyter 和 MCP 服务器。可作为工具沙箱或 Agent 执行环境快速集成使用。

veFaaS 可快速创建基于 AIO 镜像的沙箱应用,并完成集成。关于 AIO 项目本身和配套的 SDK,更多信息可参考 https://sandbox.agent-infra.com/

不止 Agent:IDE 插件与持续交付

我们聊了这么多 Agent 场景,但 veFaaS CLI 的价值远不止于此。

命令行对自动化和 CI 天然友好,不过在日常开发中,很多开发者仍然习惯在 IDE 里完成整个编码、调试、发布流程。

veFaaS 同时提供了 veFaaS Code Deployer 插件,支持 VS Code 和 JetBrains 系列 IDE。安装后就能查看函数列表、绑定函数、下载代码,改完直接上传部署 —— 不需要离开编辑器,也不需要手动拼接命令参数。

IDE 函数插件

如果你更习惯命令行,CLI 覆盖了从项目识别到日志排障的完整链路;如果你更习惯 IDE,插件把同样的能力放进了侧边栏。两条路径共享同一套后端能力,可按场景自由选择。

在流水线中使用

在团队协作中,应用发布往往不只发生在开发者本地。代码合并、版本发布、部署验证,都可以放进流水线中执行。

如果自己编写脚本,通常要处理构建、多个 API 调用、边界处理等细节。项目和环境一多,这些脚本不利于维护和复用,同时成本相对较高。

而 veFaaS CLI 支持非交互模式和结构化输出,天然适合 GitHub Actions、GitLab CI 等流水线环境:

vefaas deploy --funcId "$FUNCTION_ID" -o json --yes
vefaas domains -o json
vefaas fn logs --id "$FUNCTION_ID" --lines 50

代码合并到指定分支后,流水线自动触发部署,发布后查询函数状态判断是否成功。结构化输出也方便下游任务处理 —— 把访问地址写入构建产物,或在失败时自动收集日志。

以一个最小 FastAPI 项目为例,仓库里只需要应用代码、依赖、启动脚本和工作流配置。

from fastapi import FastAPI

app = FastAPI(openapi_url=None, docs_url=None, redoc_url=None)

@app.get("/")
defindex_handler():
    return"Hello FastAPI From FaaS native python3!"

@app.get("/v1/ping")
asyncdefping_handler():
    return"Ping healthcheck"

合并到 main 后自动部署,可以新增 .github/workflows/deploy.yml:

name:DeploytoveFaaS
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on:ubuntu-latest
    steps:
      -uses:actions/checkout@v4
      -uses:actions/setup-node@v4
        with:
          node-version:"20"
      -name:InstallveFaaSCLI
        run:npmi-g@volcengine/vefaas-cli@latest
      -name:Deploy
        env:
          VOLC_ACCESS_KEY_ID:${{secrets.VOLC_ACCESS_KEY_ID}}
          VOLC_SECRET_ACCESS_KEY:${{secrets.VOLC_SECRET_ACCESS_KEY}}
          FUNCTION_ID:${{secrets.FUNCTION_ID}}
        run:|
          vefaas deploy --funcId "$FUNCTION_ID" -o json --yes
          vefaas domains -o json

触发 GitHub Action 后,流水线会下载 CLI、读取 secrets、执行部署命令。

通过 Github Actions 或 GitLab CI 可快速在用户现有工作流中集成函数管理功能。同时火山引擎也提供 持续交付服务。可通过函数服务提供预置能力,可视化集成代码包、镜像发布流水线。详情可参考 https://www.volcengine.com/docs/6461/1582687

结语

从本地代码到线上服务,从函数部署到沙箱调试 —— veFaaS CLI 正在将函数服务的能力抽象为一套标准化的工作流,既适配人的操作习惯,也兼容 Agent 的调用方式。

  • 对于开发者,它是一个命令行工具。

  • 对于 AI Agent,它是一组可理解、可执行、可校验结果的云端能力接口。

这正是 veFaaS CLI 的设计初衷:让函数服务不局限于控制台,而是可以被终端、流水线和 Agent 自然调用,真正融入开发和运维的每一个环节。

如果你对 veFaaS CLI 感兴趣,或在使用中有任何疑问和建议,欢迎交流反馈。

继续了解

veFaaS CLI 使用指南:GitHub - vefaas-dev/skills · GitHub

veFaaS Code Deployer 插件:veFaaS Code Deployer - Visual Studio Marketplace

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐