Vercel 最近开源了 eve,一个用于构建、运行和扩展 Agent 的框架。项目在 GitHub 上已经获得了超过 2,800 个 star,是近期 Agent 基础设施领域最受关注的项目之一。
核心理念:文件系统即接口
eve 的设计哲学可以用一句话概括:Agent 的能力通过文件系统的约定位置自描述,无需显式注册。
一个典型的 eve Agent 目录结构如下:
my-agent/
└── agent/
├── agent.ts # 模型和运行时配置
├── instructions.md # 常驻系统提示词
├── tools/ # 模型可调用的类型化函数
│ └── get_weather.ts
├── skills/ # 按需加载的知识/流程
│ └── plan_a_trip.md
├── channels/ # 消息通道(HTTP、Slack、Discord)
│ └── slack.ts
├── subagents/ # 子 Agent 委托
│ └── researcher/
├── connections/ # 外部 MCP/OpenAPI 服务
│ └── linear.ts
├── schedules/ # 定时任务
│ └── weekly_recap.ts
└── sandbox/ # 沙箱配置
└── sandbox.ts
文件的位置即定义。agent/tools/get_weather.ts 自动注册为 get_weather 工具,无需额外配置。这种「约定优于配置」的设计让 Agent 项目天然可读——看一眼目录树就知道这个 Agent 能做什么、住在哪里、什么时候自主行动。
持久化执行:会话即工作流
eve 的会话是持久化工作流,基于开源的 Workflow SDK 构建:
- Step 级检查点:每个模型调用和工具调用都是一个 durable checkpoint
- 崩溃恢复:进程重启或重新部署后,会话从最后一个完成的 step 恢复,而非重放整个 turn
- Park 机制:等待人工审批、OAuth 回调或子 Agent 完成时,工作流挂起且不消耗计算资源
- 跨部署连续性:生产部署更新后,现有会话的下一个 turn 使用新版本的指令和工具,但保留对话历史
这意味着一个 Agent 会话可以运行数天甚至数周,无需担心进程崩溃或部署中断。
沙箱:Agent 的隔离执行环境
每个 Agent 都有一个独立的沙箱,文件系统根目录为 /workspace:
| 工具 | 功能 |
|---|---|
bash | 运行 shell 命令 |
read_file / write_file | 读写文件 |
glob | 按模式查找文件 |
grep | 搜索文件内容 |
沙箱与 Agent 的运行时完全隔离,Agent 生成的代码不会触及应用运行时。支持四种后端:
| 后端 | 运行环境 |
|---|---|
vercel() | Vercel 托管沙箱 |
docker() | 本地 Docker 容器 |
microsandbox() | 轻量级本地 VM |
justbash() | 纯 JS 模拟 bash |
defaultBackend() | 自动选择最佳可用后端 |
人机循环:审批即暂停
eve 内置了人机循环(Human-in-the-loop)机制:
export default defineTool({
description: "Refund a charge.",
inputSchema: z.object({ chargeId: z.string(), amount: z.number() }),
approval: always(), // 或 once() / never() / 自定义策略
async execute(input) {
return refund(input);
},
});
任何工具都可以配置审批策略。当触发审批时,会话暂停,等待人工确认后从断点恢复。这在处理敏感操作(退款、数据删除、大额查询)时至关重要。
子 Agent:两种委托模式
1. 内置 agent 工具
每个 Agent 默认获得一个 agent 工具,可以委托子任务给自身的副本:
- 共享父 Agent 的沙箱和工具
- 独立的对话历史和状态
- 支持并行调用:一次响应中发出多个
agent调用,并发执行
2. 声明式子 Agent
在 agent/subagents/<id>/ 下定义独立的子 Agent:
- 独立的指令、工具、连接、技能和沙箱
- 完全隔离,不继承父 Agent 的任何配置
- 通过目录名注册为工具(如
researcher)
| 特性 | 内置 agent 工具 | 声明式子 Agent |
|---|---|---|
| 沙箱 | 共享 | 独立 |
| 工具 | 继承 | 独立 |
| 指令 | 继承 | 独立 |
| 状态 | 全新 | 全新 |
技能:按需加载的知识
Skills 遵循 SKILL.md 约定,是模型按需加载的指令:
---
description: Research unfamiliar topics before answering with confidence.
---
When the task is novel or ambiguous, gather evidence first...
- eve 扫描
agent/skills/下的文件,将描述暴露给模型 - 模型通过
load_skill工具按需加载 - 支持纯 Markdown 和 TypeScript 定义的
defineSkill - 遵循 Agent Skills 标准,可跨框架移植
通道:同一 Agent,多平台服务
eve 支持将同一 Agent 部署到多个平台通道:
| 通道 | 用途 |
|---|---|
| HTTP (默认) | Web 应用、TUI、curl |
| Slack | 提及、DM、按钮 |
| Discord | 斜杠命令、组件 |
| Teams | 消息 + Adaptive Cards |
| Telegram | Bot 消息 |
| Twilio | SMS / 语音 |
| GitHub | @提及、PR 审查 |
| Linear | Issue 委托和 Agent 会话 |
每个通道是一个小型适配器文件,Agent 的行为在所有通道上保持一致。
定时任务:Agent 自主行动
export default defineSchedule({
cron: "0 9 * * 1",
async run({ receive, waitUntil, appAuth }) {
waitUntil(
receive(slack, {
message: "Summarize last week's revenue and post it.",
target: { channelId: "C0123ABC" },
auth: appAuth,
}),
);
},
});
- 标准 5 字段 cron 表达式
- 支持 fire-and-forget(Markdown 形式)和 handler 形式
- Vercel 上自动转化为 Vercel Cron Job
- 自托管时通过 Nitro 调度任务运行
评估:测试即代码
eve 提供 defineEval 定义可重复的评分检查:
export default defineEval({
description: "Basic message and tool-usage coverage.",
async test(t) {
await t.send("What is the weather in Brooklyn?");
t.succeeded();
t.calledTool("get_weather");
t.check(t.reply, includes("Sunny"));
},
});
- 三种断言面:确定性断言、
t.check()、LLM-as-judge - 支持 mockModel 用于确定性测试
- 可集成 Braintrust 等第三方评估平台
- CI 中运行
eve eval --strict作为部署门禁
部署:同一代码,多环境运行
# 本地开发
eve dev
# 构建
eve build
# Vercel 部署
vercel deploy
# 自托管
eve build && PORT=3000 eve start --host 0.0.0.0
- 本地、Vercel 和自托管环境运行方式一致
- Workflow SDK 的 local world 默认将状态持久化到
.workflow-data - 支持自定义 Workflow world(如 PostgreSQL 后端)
- 反向代理需转发
/eve/和/.well-known/workflow/两个前缀
Vercel 的生产实践
Vercel 内部运行了超过 100 个 eve Agent,包括:
| Agent | 角色 | 数据 |
|---|---|---|
| d0 | 数据分析师 | 月处理 30,000+ 问题 |
| Lead Agent | 自主 SDR | 年成本 $5,000,回报 32 倍 |
| Athena | 销售驾驶舱 | 6 周构建,pipeline 覆盖率翻倍 |
| Vertex | 支持工程师 | 92% 工单自动解决 |
| draft0 | 内容审核 | 预处理后再人工审核 |
| V | 路由 Agent | 统一调度 100+ Agent 舰队 |
快速开始
npx eve@latest init my-agent
cd my-agent
npm run dev
完整的文档内置于 npm 包中:node_modules/eve/docs/。
相关资源
- GitHub: https://github.com/vercel/eve
- 文档: https://eve.dev/docs
- 博客: https://vercel.com/blog/introducing-eve
- npm:
npm install eve@latest