返回博客列表

Vercel Eve 实战指南:用 Next.js 的方式构建 AI Agent

2026-06-19
[VercelAI AgentEveTypeScript开源框架]

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-agent

CLI 向导会引导你选择模型、创建项目结构、安装依赖、启动 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 dev

Eve 启动一个交互式 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 的优势不在于单个功能,而在于把这些功能组合成一个完整的、可部署的系统。

快速上手清单

  1. npx eve@latest init my-agent — 初始化项目
  2. 编辑 agent/instructions.md — 定义 Agent 身份
  3. 添加 agent/tools/xxx.ts — 给 Agent 能力
  4. eve dev — 本地测试
  5. eve eval — 运行评估
  6. vercel deploy — 部署到生产
  7. 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人工智能时代,转载请注明出处。

参考来源:

分享给朋友