ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Vercel Eve 快速入门:用 eve init 构建你的第一个 Agent 并接入 TaoToken

Vercel Eve 快速入门:用 eve init 构建你的第一个 Agent 并接入 TaoToken 1. 从 eve init 到第一个能对话的 Agent卡在哪一步Vercel Eve 是 Vercel 推出的一套 Agent 开发框架核心思路是「一个目录就是一个 Agent」把模型配置、系统提示词、工具、技能、子 Agent、渠道、定时任务都收敛到agent/目录下。Eve CLI 提供eve init、eve dev、eve info、eve build等命令适合 Node.js 开发者快速把想法跑成一个可交互的本地 Agent。这篇面向已经会写 Node.js、但还没跑通 Eve 全链路的开发者目标很明确用eve init建骨架改两份配置接上 TaoToken 的统一 Key/API 通道最后在 CLI chat 里完成一次真实对话闭环。很多人第一次跑 Eve 会卡在三个地方Node 版本不够、模型通道没配通、instructions.md写了但没生效。我试过把这三步拆开逐个验证比一次性堆配置要稳得多。下面按「环境 → 骨架 → 配置 → 验证 → 排障」的顺序走每一步都有可复制的命令和预期输出你照着敲就能看到结果。需要提前说明的是Eve 当前要求 Node.js 24 或更高版本低于这个版本eve init可能直接报错。另外模型调用需要一个 OpenAI 兼容的 API 通道这篇用 TaoToken 的统一 Key 来打通官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。先把这两件事准备好后面会顺很多。2. 前置准备Node 24 与 TaoToken 统一 Key2.1 确认 Node 版本Eve 对 Node 版本有硬性要求先确认node -v如果输出低于v24用 nvm 切换nvm install 24 nvm use 24 node -v预期看到v24.x.x。这一步别跳过Node 版本不对时eve init生成的依赖树可能装不上报错信息还不太直观。2.2 拿到 TaoToken 的 API KeyTaoToken 提供统一的 Key 和 API 通道一个 Key 可以走多个模型省去为每个模型单独申请和切换的麻烦。获取路径打开控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content进入 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content新建一个 Key复制保存注意Key 只在创建时完整显示一次建议先存到密码管理器。后面写进.env时不要提交到 Git。如果你还没决定用哪个模型可以先在模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 试几条 prompt确认通道可用再写进配置。接入细节和参数说明可以对照文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。2.3 环境变量规划Eve 通过环境变量读取模型 ID 和 API Key。我们约定两个变量变量名作用示例值EVE_GATEWAY_MODEL_ID指定模型 IDminimax/minimax-m3AI_GATEWAY_API_KEY模型通道的 Key你的 TaoToken KeyAI_GATEWAY_BASE_URL自定义 API 基址https://taotoken.net/api把 base URL 也做成环境变量是为了后面切换通道时不用改代码只改.env就行。3. 用 eve init 生成项目骨架3.1 执行初始化进入你放项目的目录执行npx evelatest init 01-first-agenteve init会做几件事创建01-first-agent/目录、写入最小 Agent 文件、安装依赖、生成内置 Eve channel、初始化本地开发配置。完成后进入项目cd 01-first-agent整理后的核心结构大致是这样01-first-agent/ package.json tsconfig.json .env.example agent/ agent.ts instructions.md channels/ eve.ts这里最值得先记住的是agent/目录。Eve 的设计是「一个目录就是一个 Agent 的 authored surface」模型配置、系统提示词、工具、技能、子 Agent、渠道、定时任务都会逐步放进这个目录。现在它只有两个文件后面每加一个能力就多一个文件或子目录结构非常清晰。3.2 看 package.json 里的脚本eve init会写好常用脚本{ scripts: { build: eve build, dev: eve dev, start: eve start, typecheck: tsc } }这篇主要用两个命令npm run dev启动本地开发 TUI也就是聊天界面npm exec -- eve info检查 Eve 是否正确发现了项目里的 Agent 文件。后者不启动聊天只做结构检查目录变多时特别有用。3.3 配置 agent.ts打开agent/agent.ts改成下面这样import { defineAgent } from eve; const defaultModelId minimax/minimax-m3; export default defineAgent({ model: process.env.EVE_GATEWAY_MODEL_ID ?? defaultModelId, modelContextWindowTokens: 200_000, });defineAgent是 Agent 的运行配置入口。这里只做两件事第一指定模型字符串形式的模型 ID 会通过配置的 API 通道路由允许用EVE_GATEWAY_MODEL_ID覆盖默认值第二显式写modelContextWindowTokens。这是一个很现实的细节——如果 Eve 当前还没拿到某个模型的上下文窗口元数据构建时可能提示无法编译 compaction 配置显式声明可以让样例先稳定跑起来。正式项目里这个值要按所选模型的真实上下文窗口调整。3.4 编写 instructions.mdagent/instructions.md是 Agent 的 always-on system promptEve 会把这份内容放进每一轮模型调用。它适合写稳定身份、长期规则和行为边界不适合塞临时工作流程。先写一个很小的内容运营助手# Content Assistant You are the first content operations assistant for a Java/Spring developer community. ## Responsibilities - Explain what you can do for content operations. - Help brainstorm Java, Spring, Spring AI, JVM, backend engineering topics. - Turn vague topic ideas into practical article angles, outlines, and follow-up questions. - Keep answers practical and useful for engineers. - Ask for human confirmation before treating any content as publish-ready. ## Current limits - You do not have skills yet. - You do not have subagents yet. - You do not have custom tools yet. - You do not publish content automatically. - Do not claim to have checked live sources unless the user provides them. ## Output style - Write in concise Chinese by default. - Use Markdown when structure helps.刻意在早期 instructions 里写清楚限制不是给 Agent 降能力而是让它知道当前阶段的边界。如果一开始就让它表现得像完整内容团队后面加 skills、subagents 时反而看不清每一步解决了什么问题。3.5 配置环境变量创建.env.exampleEVE_GATEWAY_MODEL_IDminimax/minimax-m3 AI_GATEWAY_API_KEY AI_GATEWAY_BASE_URLhttps://taotoken.net/api本地运行时复制一份并填入真实值cp .env.example .env然后编辑.envEVE_GATEWAY_MODEL_IDminimax/minimax-m3 AI_GATEWAY_API_KEY你的_TaoToken_Key AI_GATEWAY_BASE_URLhttps://taotoken.net/api注意.env不应该提交到 Git仓库里只保留.env.example让协作者知道需要哪些变量。4. 验证请求从 eve info 到 CLI chat4.1 结构检查先不发起模型调用只检查项目结构npm exec -- eve info正常会看到类似结果Application App Root .../01-first-agent Agent Root .../01-first-agent/agent Layout nested Compile ready Diagnostics 0 errors, 0 warnings Instructions instructions.md Skills 0 skills这里主要确认三件事Eve 找到了agent/目录、instructions.md被识别、当前还没有 skills符合这一篇的目标。4.2 构建验证npm run build构建通过说明 Eve 可以把当前 Agent 编译成可运行输出。如果这里报上下文窗口相关的错回到agent.ts检查modelContextWindowTokens是否写了。4.3 启动 CLI chatnpm run dev这个命令实际执行的是eve dev启动后进入 Eve 的交互式 TUI。在里面输入你是谁你能帮我做什么预期结果不是「模型能回复一句话」这么简单而是要验证 instructions 是否生效。一个合格的回答应该满足用中文回答、知道自己是内容运营助手、能说明可以帮助做选题和提纲、不会声称能自动发布文章、不会声称已经联网检索了资料。这一步很关键——我们不是只在验证 API Key 是否可用而是在验证agent/instructions.md真的改变了 Agent 的行为。如果回答里出现了「我已经帮你查了最新资料」这类话说明 instructions 里的限制没生效回去检查文件是否被正确加载。4.4 换模型再验证一次想确认统一 Key 通道能切模型改.env里的EVE_GATEWAY_MODEL_ID重启npm run dev再问一次同样的问题。对比两次回答的风格差异就能确认通道确实按模型 ID 路由。模型列表和可用 ID 可以在模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里对照。5. 本篇常见错排查5.1 eve init 报 Node 版本错误现象执行npx evelatest init时提示 Node 版本不满足。原因基本是当前 Node 低于 24。解决nvm install 24 nvm use 24再重新执行。如果 nvm 没装先装 nvm 再切版本。5.2 eve info 显示 0 agents现象eve info输出里 Agent Root 为空或 agents 数量为 0。原因通常是agent/目录位置不对或者agent.ts没有默认导出。检查两点agent/是否在项目根目录下、agent.ts是否用了export default defineAgent({...})。5.3 构建报上下文窗口无法编译现象npm run build提示无法编译 compaction 配置。原因是 Eve 没拿到该模型的上下文窗口元数据。解决在agent.ts里显式写modelContextWindowTokens值按模型真实窗口填样例先用200_000。5.4 对话报 401 或鉴权失败现象npm run dev后发消息报鉴权错误。检查.env里AI_GATEWAY_API_KEY是否填了真实 Key、有没有多余空格、AI_GATEWAY_BASE_URL是否是https://taotoken.net/api。改完.env要重启npm run dev环境变量不会热更新。5.5 回答不遵守 instructions现象Agent 声称能自动发布、或声称联网查了资料。原因可能是instructions.md没被加载或者内容写得太模糊。先跑eve info确认 Instructions 一栏指向instructions.md再把限制条款写得更具体比如明确写「Do not claim to have checked live sources」。5.6 请求超时或连接失败现象发消息长时间无响应。先确认网络能访问https://taotoken.net/api再确认 Key 没有过期或额度耗尽。可以在控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 查看用量。如果只是本地调试先用eve info确认结构没问题再排查通道。6. 下一步把这条链路用起来到这里你已经用eve init建好了骨架改好了agent.ts和instructions.md通过 TaoToken 的统一 Key 通道完成了第一次真实对话。回头看这个工程它的能力非常克制有一个主 Agent、一份 always-on instructions、一个可切换的模型通道、可以通过eve info和eve build验证结构。它暂时没有自定义 Provider、skills、subagents、sandbox、tools、schedules、evals——这正是我们想要的状态后面每新增一个能力都能对应一个明确的问题。如果你打算把这条链路长期用于编码或 Agent 开发可以了解 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 它在多模型切换和额度管理上更省心。接入过程中遇到鉴权或参数问题先翻接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 再对照 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 检查 Key 状态。想快速验证某个模型的表现直接去模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 试几条 prompt比在代码里反复改配置快得多。一个实用技巧把EVE_GATEWAY_MODEL_ID和AI_GATEWAY_BASE_URL都留在.env里切换模型和通道时只改环境变量、不动代码这样你的 Agent 骨架可以一直复用。下一篇可以在这个骨架上加第一个 tool让 Agent 真正能做事而不只是聊天。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进