资讯动态

eve 多 Agent 架构中的研究型 Agent:Next.js 场景下 instructions.md 系统指令的编写与挂载机制

发布时间:2026/10/14 18:02:59 来源:尧图企业网站定制
人工智能AI AgentAgent 框架后端工具调用【免费下载链接】eveThe Open Framework for Building Agents项目地址https://gitcode.com/gh_mirrors/eve28/eve点击查看免费下载导读在 eveThe Open Framework for Building Agents的多 Agent 应用模型里每个命名 Agent 都通过一份instructions.md获得自己的身份与行为边界。本文以 Next.js 多 Agent 示例fixture中的research研究型 Agent 为对象逐行拆解其系统指令文件并深入 eve 源码说明这条指令如何被withEve()发现、如何经/eve/research/v1/*路由挂载到 Next.js 应用以及客户端useEveAgent({ agent: research })如何驱动它。读完你将掌握为多 Agent 工作区编写角色化系统指令的规范、命名 Agent 的发现与挂载原理以及研究型 Agent 在回复风格与任务定位上的最佳实践。一、背景Next.js 多 Agent 示例中的 research Agentapps/frameworks/next-multi-agent是 eve 仓库内置的一个 Next.js 多 Agent 示例应用它演示了withEve()自动发现项目级agents/工作区并把三个相互独立的 eve Agent 一次性挂载进同一个 Next.js 应用见 apps/frameworks/next-multi-agent/README.mdsupport面向客户的故障分诊与排查Customer-facing triage and troubleshootingbilling发票、套餐与支付问题Invoices, plans, and payment questionsresearch研究总结与资料规划Research summaries and source planning每个 Agent 都是一个标准的 eve Agent 目录拥有三件套agent.ts运行时配置、instructions.md系统指令、tools/工具定义。research Agent 的完整目录结构为apps/frameworks/next-multi-agent/agents/research/ ├── agent.ts # defineAgent({ model: anthropic/claude-opus-4.6 }) ├── instructions.md # 本文解析对象 └── tools/ └── identify_agent.ts # 返回 Agent 身份与职责领域的工具其中 apps/frameworks/next-multi-agent/agents/research/agent.ts 使用defineAgent仅指定了模型anthropic/claude-opus-4.6没有在代码层声明任何提示词——也就是说research Agent 的身份、职责和回复风格完全由instructions.md这一份文件承载。这正是 eve 的设计哲学稳定的行为放指令文件可变的执行逻辑放工具。二、逐行解析 research/instructions.md完整原文如下apps/frameworks/next-multi-agent/agents/research/instructions.mdYou are the research agent in the Next.js multi-agent fixture. Keep replies to one or two short sentences. Help turn research questions into a clear next step or brief summary.这份文件虽然短却完整覆盖了系统指令system prompt的三类核心要素1. 身份声明Identity第一行You are the research agent in the Next.js multi-agent fixture.明确了角色的本质在三个并列 Agent 中research 是研究型成员其职责是把研究问题推进为可执行的下一步。身份声明是 instructions 的第一要务——在多 Agent 架构中模型必须清楚我是谁、我和其他 Agent 的分工是什么才能避免角色混淆。2. 回复风格约束Tone / Style第二行Keep replies to one or two short sentences.是一条硬性的输出约束回复必须压缩到一两句话以内。这体现了 research Agent 的定位——它面向的是快速出结论的场景见下文页面中的初始提示Compare two options briefly.而不是长篇报告。3. 任务聚焦Focus第三行Help turn research questions into a clear next step or brief summary.定义了工作目标把模糊的研究问题收敛成一个清晰的下一步动作或给出简要总结。注意它用的是 next step or brief summary——研究 Agent 不是知识库而是决策推进器。与其他两个 Agent 指令的对照将三个 Agent 的instructions.md并列support、billing可以看到同一套模板逻辑Agent身份声明风格约束职责边界supportYou are the support agent...one or two short sentencesHelp triage product issues and ask for only the next missing detailbillingYou are the billing agent...one or two short sentencesHelp with invoices, plans, refunds, and payment statusresearchYou are the research agent...one or two short sentencesHelp turn research questions into a clear next step or brief summary三个 Agent 共享身份 短句风格 职责边界的结构差别只在职责领域。这种同构不同域的写法正是多 Agent 指令设计的关键用统一的文件协议承载差异化行为让每个 Agent 既保持整体一致性又具备各自的专家定位。三、指令文件协议instructions 机制的原理instructions.md不是普通的 Markdown 文档而是 eve 约定俗成的 Agent 文件协议中的核心文件。根据 docs/reference/agent-files.md 的目录布局说明单 Agent 项目中指令位于agent/instructions.mdeve Agent 工作区中每个成员拥有自己的agents/name/agent/目录指令同样命名为instructions.md根 Agent必须有指令来源required on the root子 Agent 上可选optional on subagents。eve 的完整指令机制详见 docs/instructions.mdx提供三种写法instructions.md静态 Markdown——适合身份、语气、常驻规则等稳定行为正是本示例采用的形式instructions.tsTypeScript 模块——需要类型化组合、引用lib/代码、构建期取值或 user 角色消息时使用defineInstructionsinstructions/目录——多文件时按文件名localeCompare排序静态system条目按顺序拼入每次模型调用user条目按顺序进入新会话历史。本示例采用形式 1 是有意为之research 的指令内容身份、风格、职责全部是稳定常量没有任何构建期或会话期变量静态 Markdown 是信息密度最高、维护成本最低的载体。官方文档对此的建议是Keep this file to stable behavior such as identity, tone, and standing rules把身份、语气和常驻规则这类稳定行为写进该文件。从指令语义看instructions.md默认以system 角色生效它不进入对话历史而是在每次模型调用时都包含在上下文里对应 docs/instructions.mdx 中 System-role instructions stay outside conversation history and are included on every model call。这意味着无论用户连续发送多少条消息research Agent 的一句话回复 收敛到下一步约束都会被持续施加不会因对话变长而被稀释。四、身份锚定identify_agent 工具与指令的配合指令文件负责告知模型身份而仓库还提供了一个把身份验证出来的工具。apps/frameworks/next-multi-agent/agents/research/tools/identify_agent.ts 定义如下import { defineTool } from eve/tools; import { z } from zod; export default defineTool({ description: Return the identity and focus area of this fixture agent., inputSchema: z.object({}), execute: async () ({ agent: research, focus: Research summaries and source planning, }), });这是一个零入参工具调用后返回agent: research与focus: Research summaries and source planning。它的作用有两个层面给模型一个可调用的身份证明当外部系统或模型自身需要确认当前对话方是谁、职责领域是什么时可以显式调用该工具获取确定性答案而不是依赖对提示词的推断与指令形成双通道锚定instructions.md以自然语言定义身份identify_agent以结构化数据输出身份。前者影响行为风格后者提供可编程校验二者共同构成 research Agent 的完整身份契约。对照 support 与 billing 的同类工具可以看到该工具的描述、返回字段结构完全一致仅agent与focus取值不同——这是 fixture 场景下工具模板 参数差异化的典型模式。五、挂载机制from instructions 到 /eve/research/v1/* 路由在 Next.js 应用中research Agent 的instructions.md之所以能生效依赖于一整条挂载链路起点是 apps/frameworks/next-multi-agent/next.config.tsimport type { NextConfig } from next; import { withEve } from eve/next; const nextConfig: NextConfig {}; export default withEve(nextConfig);withEve()的实现位于 packages/eve/src/public/next/index.ts其工作流可归纳为三步对应源码normalizeAgentsConfig→ensureEveVercelOutputConfig→rewrites工作区发现当未显式传入agents配置且eveRoot未设置时withEve在 Next.js 应用根目录调用findEveProjectContext()查找 eve 项目上下文。若检测到kind workspace且成员非空见 packages/eve/src/public/next/index.ts则把agents/下的每个成员映射为一个命名 Agent。research正是这样被自动发现的——无需在 next.config.ts 里手写任何 Agent 名单。命名路由生成每个命名 Agent 获得形如/eve/name/v1/*的公开路由前缀源码常量EVE_NAMED_AGENT_ROUTE_PREFIX /eve与createNamedAgentRoutePrefix(name)。于是 research Agent 的 eve 协议端点被挂到/eve/research/v1/*与 support/eve/support/v1/*、billing/eve/billing/v1/*互不冲突。rewrite 规则注入withEve把 eve 协议端点的 source如/eve/research/eve/v1/:path重写到独立的 eve 服务进程。开发环境下它会启动eve dev --no-ui --port 0并指向本地 URL生产环境在 Vercel 下写入 Build Output 服务路由源码注释见 packages/eve/src/public/next/index.ts。注意withEve支持三种形态——单个无名的eveRoot挂载在/eve/v1/*、显式agents配置、以及本示例采用的根目录自动发现agents/工作区。源码中assertValidWithEveOptions明确禁止同时传eveRoot与agents见 packages/eve/src/public/next/index.ts三种形态只能择一。六、客户端驱动useEveAgent({ agent: research })服务端挂载完成后前端通过useEveAgent驱动 research Agent。apps/frameworks/next-multi-agent/app/page.tsx 中定义了三个 Agent 的元信息const AGENTS [ { name: support, description: ..., initialPrompt: My checkout page is failing. }, { name: billing, description: ..., initialPrompt: Why did my invoice increase? }, { name: research, description: Research summaries and source planning, initialPrompt: Compare two options briefly. }, ] as const;页面面板通过const eve useEveAgent({ agent: agent.name })创建会话research 面板即对应useEveAgent({ agent: research })。这个 hook 的语义在 packages/eve/src/react/use-eve-agent.ts 中有明确说明agent: support这类命名 Agent 选项指向同源下的/eve/name/v1/...路由resolveEveAgentHost会据此解析客户端请求的 Base URLagent与host互斥二者不能同时使用默认无 reducer 时data是内置的会话投射conversation projectioneve.data.messages可直接用于渲染消息列表。hook 返回的快照包含data、events、session、status、error以及prewarm、send、respond、resume、cancel、reset六个命令见 packages/eve/src/react/use-eve-agent.ts。页面中eve.send(trimmed)发送消息、eve.status submitted || streaming控制按钮的 busy 态正是这套命令的典型用法。值得注意的一个细节当用户输入Compare two options briefly.这类研究型请求时research Agent 的instructions.mdKeep replies to one or two short sentences. Help turn research questions into a clear next step or brief summary会立刻把模型的输出约束在一两句话给出结论性下一步与页面上description: Research summaries and source planning的定位完全一致。这说明指令文件与前端元信息描述共同塑造了 Agent 的用户可见行为。七、编写 research 型 Agent 指令的实操建议结合本示例与 docs/instructions.mdx 的官方规范编写研究型 Agent 的instructions.md时可遵循以下要点1. 保持简短与稳定官方文档明确指出 Keep instructions short and stable长而情境化的流程应放入skills/按需加载而不是塞进常驻指令。research 指令三句话的结构身份/风格/职责就是简短稳定的样板它不会为每次模型调用带来额外 token 负担也不会因更新频繁破坏提示词前缀的复用。2. 身份声明永远放在第一行多 Agent 场景下模型首先需要定位自己。research 的You are the research agent...率先锁定角色再谈行为约束符合提示词工程中身份 → 规则 → 任务的优先级顺序。3. 用显式长度约束控制输出形态Keep replies to one or two short sentences 是可量化的约束一两句话比简洁回复这种模糊表述更易被模型稳定执行。研究型 Agent 的输出形态通常需要明确摘要、对比、下一步行动或本示例中的 clear next step or brief summary。4. 职责边界与工具对齐指令中的职责描述research summaries and source planning应与工具集的description保持一致identify_agent返回的focus同义这样模型既能从提示词理解任务也能从工具描述中找到可执行入口。5. 静态场景用 Markdown动态场景换 TS本示例的指令全部为静态常量故用instructions.md。若需要在指令中引入会话上下文如租户、渠道、外部数据则应改用defineInstructionsdefineDynamic的 TypeScript 形式参见 docs/instructions.mdx 的 Dynamic instructions 一节。八、本地运行与验证在仓库根目录执行以下命令即可启动示例实测 research Agent 的指令效果pnpm --filter framework-next-multi-agent dev启动后访问 Next.js 页面三个 Agent 面板并列呈现见 apps/frameworks/next-multi-agent/app/page.tsx。向 research 面板发送Compare two options briefly.观察其回复是否符合指令约束一至两句话、给出简要总结或明确的下一步。若回复超长或发散问题几乎一定出在instructions.md的约束强度上——这正是指令文件作为第一级行为控制的直观验证。此外packages/eve/src/public/next/index.test.ts 与packages/eve/src/public/next/index.integration.test.ts覆盖了withEve的路由生成与重写规则而 packages/eve/src/react/use-eve-agent.ts 对应的单元测试覆盖了 hook 的状态机如需深入可继续阅读这些测试以理解挂载链路的边界行为。结语research/instructions.md虽然只有四行却是 eve 多 Agent 架构中以文件定义 Agent 行为的最小完整示例一行身份、一行风格、一行职责配合agent.ts的模型配置、identify_agent的工具锚定、withEve的工作区发现与useEveAgent的客户端驱动构成了一个可运行、可验证、可扩展的研究型 Agent 单元。理解这条链路后把research替换成任何你需要的专家角色代码审查、竞品分析、方案调研只需改写这三行指令——这就是 eve 指令文件协议的最大价值Agent 的差异化从一份 Markdown 开始。赞分享人工智能AI AgentAgent 框架后端工具调用【免费下载链接】eveThe Open Framework for Building Agents项目地址https://gitcode.com/gh_mirrors/eve28/eve点击查看免费下载相关推荐eve Agent 的行为契约深入剖析 eve Chat Template 的 agent/instructions.mdeve Agent 的行为契约深入剖析 eve Chat Template 的 agent/instructions.md 本篇以 eve 开源仓库中 eve人工智能AI AgentAgent 框架后端工具调用T3Q_SOLAR_DARETIES_v1.0-openmind核心优势解析三大顶尖模型融合的终极AI体验T3Q_SOLAR_DARETIES_v1.0 openmind核心优势解析三大顶尖模型融合的终极AI体验 T3Q_SOLAR_DARETIES_v1.0 oClaude Cookbooks 研究型 Agent 架构解析基于 Claude Agent SDK 的 WebSearch 与 Read 自主研究循环Claude Cookbooks 研究型 Agent 架构解析基于 Claude Agent SDK 的 WebSearch 与 Read 自主研究循环 本篇示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑