Flue useSubagent深度教程:让Agent把任务委托给子专家
2026/8/30 12:56:36 网站建设 项目流程

Flue useSubagent深度教程:让Agent把任务委托给子专家

【免费下载链接】flueThe sandbox agent framework.项目地址: https://gitcode.com/GitHub_Trending/flue1/flue

Flue 是一个开箱即用的 Agent 沙箱框架,它的useSubagent()Hook 允许你的 Agent 把专注任务委托给独立的"子专家":子代理在全新的上下文中工作,拥有自己的指令与能力,只有最终答案会返回给父 Agent。本教程带你快速掌握 Flue 子代理的声明、委托机制与继承规则,轻松构建分工明确的 AI Agent 团队。

什么是子代理(Subagent)

可以把 Agent 想象成一位"项目经理",而子代理是它手下的专职员工

  • 🏢隔离工作:子代理在自己的全新上下文里干活,不占用父 Agent 的对话历史
  • 📨只交结果:只有子代理的最终回答会返回给父 Agent,中间过程完全不可见
  • 🤖模型驱动:由父 Agent 的模型自主决定何时、向谁委托任务

三步声明一个子代理

Flue 通过useSubagent()Hook 声明子代理,只需三个必填字段(完整实现见 use-subagent.ts):

字段作用
name子代理的名字,父模型用它来指名委托
description描述这个专家"做什么、何时用",是模型决策的关键
agent一个普通 Agent 函数,定义子代理的指令与能力

以 hello-world 示例(with-subagent.ts)为例,一个问候专家只需几行:

'use agent'; import { useModel, useSubagent } from '@flue/runtime'; function Greeter() { return 'Write one warm, concise greeting.'; } export function WithSubagent() { useModel('anthropic/claude-sonnet-4-6'); useSubagent({ name: 'greeter', description: 'Writes a short, warm greeting for a named user.', agent: Greeter, }); return 'When asked to greet someone, delegate to the `greeter` subagent.'; }

⚠️小提醒:子代理的agent函数(如Greeter)不要导出——构建器会把导出的大写函数注册为顶层 Agent。

委托是如何发生的

委托由框架内置的task工具驱动,流程非常直观:

  1. 父 Agent 的系统提示词中有一个"Available Agents"目录,列出了所有已声明子代理的名字和描述
  2. 模型判断某项工作适合某个专家时,调用task工具并传入子代理名字和任务提示词
  3. 运行时当场渲染子代理的agent函数,在独立会话中跑完整个任务
  4. 子代理的最终消息作为task工具的结果返回父 Agent

由此带来两个重要特性:

  • 📝提示词就是全部简报——子代理看不到父对话,任务提示词必须自包含、信息完整
  • 任务天然并行——一批task调用会并行执行,5 个独立检查可以变成 5 个并行的子会话,各自拥有独立的上下文窗口

子代理继承了什么

子代理默认与父 Agent完全隔离,只继承父级的"环境":

✅ 继承❌ 不继承
沙箱及其工具(read/write/bash…)对话历史
工作区上下文(AGENTS.md、workspace skills)父级的指令、工具、技能、子代理
父级模型与推理强度(可覆盖)持久状态与初始数据

同时,定义中的两个可选字段可以覆盖继承值:

  • model—— 让子代理跑更便宜的模型(如把高频分类步骤交给 Haiku)
  • thinkingLevel—— 单独控制子代理的推理强度

子代理内部照常使用useTool()useSkill(),甚至嵌套useSubagent()(最多4 层)。由于父子共享沙箱,文件是天然的交接面:子代理写report.md,父 Agent 在任务返回后直接读取。

内置通才:GeneralSubagent

不想定义专家、只想把工作"扇出"到全新上下文?Flue 内置了GeneralSubagent(保留名flue-general):

useSubagent(GeneralSubagent);

它是一个"白板"代理:共享沙箱工具、工作区上下文和父级模型,但没有任何自带指令——一切靠任务提示词驱动。委托能力是显式开启的,挂载它之后 Agent 才具备扇出能力。

跨 Agent 共享:defineSubagent

同一个专家被多个 Agent 复用时,用defineSubagent()定义一次、处处挂载(与defineTool同构,加载时校验并冻结):

// src/subagents/issue-classifier.ts export const issueClassifier = defineSubagent({ name: 'issue_classifier', description: 'Classifies support issues for routing.', agent: IssueClassifier, }); // 任意 Agent 中挂载,还可按场景区分模型 useSubagent({ ...issueClassifier, model: 'anthropic/claude-haiku-4-5' });

什么时候该用子代理

🎯 适合的场景:

  • 探索性工作会淹没父上下文但只产出简短结论(代码库调研、日志分析)
  • 工作流的某一阶段需要不同的指令、工具或技能
  • 多项独立工作可以并行运行
  • 某类工作应该跑在更便宜的模型或不同的推理强度上

🚫 不选它的信号:工作确定性强 → 用工具(Tool);只是要给当前 Agent 加指导 → 用技能(Skill);需要外部系统长期给它发消息 → 注册一个真正的 Agent。

💪持久性加分项:子代理任务拥有自己的持久会话流,即使任务中途崩溃或重新部署,也能从自己的记录中恢复并跑完(见 durability.md)。

总结

能力一句话
useSubagent()声明子专家,让模型通过task工具指名委托
全新上下文隔离对话、只回传最终结果,天然并行
GeneralSubagent零配置的通才,一键开启扇出能力
defineSubagent()定义一次、多 Agent 共享,支持按挂载点覆盖模型

📚延伸阅读

  • 官方指南:subagents.md
  • Hook API 参考:agent-hooks-api.md
  • 实战示例:helper.ts、task.ts

【免费下载链接】flueThe sandbox agent framework.项目地址: https://gitcode.com/GitHub_Trending/flue1/flue

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询