Agent 时代的 Serverless 入口:veFaaS CLI 实战

如果你了解过火山引擎函数服务 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

sql 复制代码
npx @volcengine/vefaas-cli@latest install
vefaas --version

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

第二步:登录账号

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

  1. 日常开发可以直接在浏览器登录火山引擎账号,通过 SSO 完成授权,随后执行部署、日志查询、文档检索等操作:
bash 复制代码
vefaas login --sso
vefaas whoami
  1. 在脚本或 CI/CD 环境里,也可以通过 AK/SK 或 STS 等方式完成登录认证:
ini 复制代码
export VOLC_ACCESS_KEY_ID="<AK>"
export VOLC_SECRET_ACCESS_KEY="<SK>"
vefaas login --check

第三步:开始使用

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

bash 复制代码
我看的是本机 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 的分层命令、帮助指令与示例自由探索。更多典型场景,可以查看官方文档:www.volcengine.com/docs/6662/2...

从代码上线,veFaaS CLI 实战

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

第一站 · 城市明信片

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

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

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

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

正在生成:

通过 Seedream 生成明信片

生成结果:

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

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

第二站 · 代码在做什么

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

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

ini 复制代码
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 图像生成模型。

javascript 复制代码
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 静态站点。

ruby 复制代码
# 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 端:

bash 复制代码
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 (www.volcengine.com/docs/6559/2...) 部署静态站点,函数托管静态服务更适合原型和概念验证。

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

第四站 · 持续维护

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

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

python 复制代码
vefaas fn info --id <function-id> -o json
vefaas fn revision list --id <function-id> -o table

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

css 复制代码
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 进行分析:

bash 复制代码
# 日志不够时,进入函数容器现场
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 使用,直接编写如下的业务逻辑:

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

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

css 复制代码
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 查询链路是:

sql 复制代码
vefaas doc search CreateSandbox
vefaas doc api CreateSandbox
vefaas api CreateSandbox --help

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

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

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

veFaaS 可快速创建基于 AIO 镜像的沙箱应用,并完成集成。关于 AIO 项目本身和配套的 SDK,更多信息可参考 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 等流水线环境:

bash 复制代码
vefaas deploy --funcId "$FUNCTION_ID" -o json --yes
vefaas domains -o json
vefaas fn logs --id "$FUNCTION_ID" --lines 50

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

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

python 复制代码
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:

bash 复制代码
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 可快速在用户现有工作流中集成函数管理功能。同时火山引擎也提供 持续交付服务。可通过函数服务提供预置能力,可视化集成代码包、镜像发布流水线。详情可参考 www.volcengine.com/docs/6461/1...

结语

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

  • 对于开发者,它是一个命令行工具。
  • 对于 AI Agent,它是一组可理解、可执行、可校验结果的云端能力接口。

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

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

继续了解

veFaaS CLI 使用指南:github.com/vefaas-dev/...

veFaaS Code Deployer 插件:marketplace.visualstudio.com/items?itemN...

相关推荐
aneasystone本尊1 小时前
学习 OpenMontage 的工具发现与打分选择器
人工智能
火山引擎开发者社区1 小时前
Computer Use Agent 新能力上线,开启企业电脑自动化的新范式
人工智能
火山引擎开发者社区7 小时前
VeOps CLI:你的火山引擎可观测排障助手
人工智能
To_OC9 小时前
调用远程MCP,手搓一个能查酒店、自动打开浏览器的 Agent
人工智能·agent·mcp
启雀AI9 小时前
生物医疗行业如何建设合规、安全、可复用的知识库?
人工智能·安全·软件构建·知识图谱·知识库
x-cmd9 小时前
Mac 涨价后,本地 AI 还能千元入门吗?
linux·人工智能·macos·ai·agent·amd·本地ai入门
To_OC9 小时前
跑通第一个 MCP Server 后,我终于搞懂它到底解决了什么问题
人工智能·agent·mcp
楷哥爱开发9 小时前
如何使用 Claude Fable 5 进行网页抓取?2026最新实战教程
大数据·网络·人工智能
YMWM_9 小时前
lerobot中use_relative_actions=True需要重新计算meta/stats.json等信息
人工智能·深度学习·lerobot