Vercel Eve 实战指南:用 Next.js 的方式构建 AI Agent
Agent 开发的「框架前时代」该结束了
2026 年,几乎每个团队都在造 Agent。但现状跟 2015 年的 Web 开发一样——每个项目都在手写路由、手动管理状态、重复搭建基础设施。你造了 10 个 Agent,就有 10 套不同的 session 管理、10 种不同的 tool 注册方式、10 个不同的部署脚本。
Vercel 受够了。
2026 年 6 月 17 日,Vercel 发布了 Eve——一个开源的 Agent 框架。官方的定位很直接:Next.js 终结了 Web 开发的手搓时代,Eve 要对 Agent 做同样的事。
这篇文章从安装到部署,手把手带你用 Eve 构建一个完整的 Agent。
Eve 的核心理念:Agent 就是一个目录
在 Eve 里,Agent 不是一个配置文件,也不是一段胶水代码,而是一个目录。每个文件有明确的职责:
my-agent/
├── package.json
└── agent/
├── agent.ts # 模型选择
├── instructions.md # Agent 的身份和行为规则
├── tools/
│ └── get_weather.ts # 可调用的工具
├── skills/
│ └── research.md # 按需加载的知识
├── channels/
│ └── slack.ts # 接入渠道
├── subagents/
│ └── researcher/ # 子 Agent
├── connections/
│ └── linear.ts # 外部服务连接
└── schedules/
└── daily-report.md # 定时任务文件名就是标识。tools/get_weather.ts 自动注册为 get_weather 工具,不需要手动注册、不需要配置文件、不需要 boilerplate。
5 分钟搭建第一个 Agent
Step 1:初始化项目
npx eve@latest init my-agentCLI 向导会引导你选择模型、创建项目结构、安装依赖、启动 dev server。不到一分钟,你就有了一个运行中的 Agent。
Step 2:定义指令
每个 Agent 从 instructions.md 开始。这是 Agent 的 system prompt,用 Markdown 写就行:
agent/instructions.md
# Identity
你是一个专业的天气助手。你可以查询全球任何城市的天气信息,
并用简洁友好的方式回复用户。
# Rules
- 优先使用工具获取实时数据,不要猜测
- 温度使用摄氏度
- 如果城市名有歧义,主动询问用户确认只有这一个文件,Agent 就已经可以运行了。但让我们继续添加更多能力。
Step 3:配置模型
agent/agent.ts
import { defineAgent } from "eve";
export default defineAgent({
model: "openai/gpt-5.4-mini",
});Eve 通过 AI Gateway 支持所有主流模型提供商。一行代码切换模型,支持 provider fallback。
Step 4:添加工具
工具是 Agent 的「手」。一个 TypeScript 文件就是一个工具,文件名就是工具名:
agent/tools/get_weather.ts
import { defineTool } from "eve/tools";
import { z } from "zod";
export default defineTool({
description: "查询指定城市的当前天气",
inputSchema: z.object({
city: z.string().describe("城市名称"),
}),
async execute({ city }) {
const res = await fetch(
`${process.env.WEATHER_API_URL}/current?city=${city}`
);
const data = await res.json();
return {
city,
temperature: data.current_condition[0].temp_C,
description: data.current_condition[0].weatherDesc[0].value,
humidity: data.current_condition[0].humidity,
};
},
});用 Zod 定义输入 schema,Eve 自动将 schema 和描述传给模型。模型看到这个工具后,会在用户问天气时自动调用它。
Step 5:本地运行
eve devEve 启动一个交互式 TUI(终端界面),你可以直接对话:
> 北京今天天气怎么样?
⦿ get_weather
{ city: "北京" }
北京今天晴,气温 28°C,湿度 45%。适合户外活动!每一步操作都可见——加载了哪个 skill、调用了哪个 tool、输入输出是什么。
进阶能力:从玩具到生产
Skills:按需加载的知识库
Skills 是 Agent 的「参考书」。不像 instructions 永远加载,Skills 只在相关时才被模型加载,避免 prompt 膨胀:
agent/skills/weather-analysis.md
---
description: 天气趋势分析和出行建议。当用户询问是否适合出行或户外活动时加载。
---
根据温度和天气状况给出出行建议:
- 温度 > 35°C 或 < -10°C:不建议长时间户外活动
- 有雨/雪:提醒携带雨具
- 空气质量 AQI > 150:建议佩戴口罩Subagents:委托给专家
当一个 Agent 的职责太多时,用 Subagent 拆分。子 Agent 有自己的 instructions、tools 和 sandbox:
agent/subagents/researcher/agent.ts
import { defineAgent } from "eve";
export default defineAgent({
description: "专门负责深度研究,从多个数据源综合信息。",
model: "anthropic/claude-opus-4.8",
});主 Agent 调用子 Agent 就像调用工具一样简单,但子 Agent 有独立的上下文窗口和工具集。
Connections:连接外部服务
通过 MCP(Model Context Protocol)或 OpenAPI 连接外部服务,Agent 可以使用 GitHub、Linear、Stripe 等工具:
agent/connections/linear.ts
import { defineMcpClientConnection } from "eve/connections";
import { connect } from "@vercel/connect/eve";
export default defineMcpClientConnection({
url: "https://mcp.linear.app/sse",
description: "Linear workspace: issues, projects, cycles, and comments.",
auth: connect("linear"),
});Vercel Connect 处理 OAuth 认证、token 刷新,模型永远看不到你的凭证。
Channels:同一个 Agent,多个入口
一个 Agent 可以同时服务 Web、Slack、Discord、Teams:
eve channels add slack这一个命令生成 channels/slack.ts,你的 Agent 就能在 Slack 里回复了。审批变成 Slack 按钮,提问变成下拉菜单,工作时有打字指示器。
Schedules:定时自动执行
不是所有 Agent 都需要人来触发。定时任务让 Agent 按计划工作:
agent/schedules/daily-weather.md
---
cron: "0 8 * * *"
---
每天早上 8 点,查询用户保存的城市天气,生成一份天气日报发送到 Slack 频道。生产级特性:开箱即用
持久化执行(Durable Execution)
Eve 的每个会话都是持久化的工作流。每一步都有 checkpoint,会话可以:
- 暂停等待用户输入
- 在崩溃或重启后恢复
- 跨多次对话保持状态
底层基于开源的 Workflow SDK。
沙箱隔离
Agent 生成的代码是「不可信的」。Eve 给每个 Agent 一个隔离的沙箱环境:
agent/sandbox/sandbox.ts
import { defineSandbox, vercelSandboxBackend } from "eve/sandbox";
export default defineSandbox({
backend: vercelSandboxBackend({
runtime: "node24",
}),
});Agent 可以在沙箱里运行 bash、执行脚本、读写文件,完全不影响你的应用运行时。本地开发时可以用 Docker 或 microsandbox。
人工审批(Human-in-the-Loop)
关键操作可以加审批门控:
export default defineTool({
description: "执行 SQL 查询",
inputSchema: z.object({ sql: z.string() }),
needsApproval: ({ toolInput }) => estimateScanGb(toolInput.sql) > 50,
async execute({ sql }) {
// ...
},
});Agent 在需要审批时暂停,不消耗计算资源。审批通过后从断点继续。
Evals:像测代码一样测 Agent
evals/weather.eval.ts
import { defineEval } from "eve/evals";
import { includes } from "eve/evals/expect";
export default defineEval({
description: "天气 Agent 正确调用工具并返回温度",
async test(t) {
await t.send("北京今天天气怎么样?");
t.completed();
t.calledTool("get_weather");
t.check(t.reply, includes("°C"));
},
});eve eval本地运行或接入 CI,每次提交都跑评估,回归在上线前就被发现。
部署:一行命令上生产
Eve 项目就是一个普通的 Vercel 项目:
vercel deploy部署时发生的事情:
- 沙箱自动切换到 Vercel Sandbox(无需改代码)
- Agent 通过公开 URL 可访问
- 正在执行的会话不中断(在旧版本上继续运行直到完成)
- 每个 commit 自动获得 Preview 部署
# 部署后接入 Slack
eve channels add slack
# 查看 Agent 运行状态
# Vercel Dashboard → Observability → Agent Runs可观测性:每个操作都有 Trace
Eve 的每次运行都生成 OpenTelemetry 标准的 trace:
ai.eve.turn # 每轮对话
├── ai.streamText # 模型调用
│ └── ai.streamText.doStream
└── ai.toolCall # 工具调用(含输入输出)
└── sandbox.bash # 沙箱命令导出到你已有的 tracing 服务(Braintrust、Honeycomb、Datadog、Jaeger),在 Vercel Dashboard 上可以直接看到每个会话的完整执行链路。
Vercel 内部怎么用 Eve?
Eve 不是纸上谈兵。Vercel 内部运行着 100+ 个 Eve Agent:
| Agent | 角色 | 数据 |
|---|---|---|
| d0 | 数据分析 | 每月处理 30,000+ 问题,Slack 内使用最多的内部工具 |
| Lead Agent | 自动化 SDR | 年成本 $5,000,ROI 32 倍,一个工程师兼职维护 |
| Athena | 销售驾驶舱 | RevOps 6 周内建成,无需工程师,管道覆盖率近翻倍 |
| Vertex | 客服工程师 | 92% 工单自动解决,24/7 运行 |
| V | 路由 Agent | 接收所有请求,智能分发到正确的专业 Agent |
这些 Agent 曾经各有不同的技术栈,现在统一在一个 monorepo 里,共享同一套工具和约定。
与现有方案的对比
| 特性 | Eve | LangChain | CrewAI | OpenAI Agents SDK |
|---|---|---|---|---|
| 项目结构 | 文件系统优先 | 代码优先 | 代码优先 | 代码优先 |
| 持久化执行 | 内置 | 需要集成 | 需要集成 | 需要集成 |
| 沙箱 | 内置 | 无 | 无 | 无 |
| 多渠道部署 | Slack/Discord/Teams/Web 内置 | 需要自建 | 需要自建 | 有限 |
| 人工审批 | 工具级配置 | 需要自建 | 有限 | 需要自建 |
| 可观测性 | OpenTelemetry 内置 | 需要集成 | 有限 | 有限 |
| 部署 | vercel deploy |
自建 | 自建 | OpenAI 托管 |
Eve 的优势不在于单个功能,而在于把这些功能组合成一个完整的、可部署的系统。
快速上手清单
npx eve@latest init my-agent— 初始化项目- 编辑
agent/instructions.md— 定义 Agent 身份 - 添加
agent/tools/xxx.ts— 给 Agent 能力 eve dev— 本地测试eve eval— 运行评估vercel deploy— 部署到生产eve channels add slack— 接入 Slack
总结
Eve 的抽象层级很清晰:
- instructions.md → Agent 是谁
- tools/ → Agent 能做什么
- skills/ → Agent 知道什么
- channels/ → Agent 在哪里
- schedules/ → Agent 什么时候自动工作
- subagents/ → Agent 把什么委托出去
这就是一个 Agent 的全部。没有胶水代码,没有框架学习曲线,只有文件和目录。
Vercel 在 Agent 领域赌的方向是:Agent 开发不需要更多的库,需要的是一个框架。 就像 Next.js 没有发明 React、HTTP 或文件系统,但它把这些东西组织成了一套大家都认可的开发范式。
Eve 目前处于 Public Beta,开源在 github.com/vercel/eve,文档在 eve.dev/docs。
作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。
本文首发于 AI人工智能时代,转载请注明出处。
参考来源: