【AI基础专题】子智能体
在前面的章节中,我们已经介绍了如何构建一个基本的Agent,并且通过工具调用和钩子系统来增强它的功能。在这一节,我们将进一步扩展Agent的能力,引入子智能体(Sub-Agent)的概念,让我们的Agent能够在需要的时候调用其他智能体来完成特定的任务。
这一节我们的小目标是,让主智能体创建一个销售智能体和一个客户智能体,让两个智能体对话来模拟一个销售场景。实际提示词如下:
1 | 创建一个销售agent和一个顾客agent,设定对话轮次,让他俩进行交谈博弈。谈话结束以后由你进行简单总结。 |
第一步,我们来重构src/index.ts的双重循环,封装一个Agent类,之后我们将用这个类来创建主智能体和子智能体:
1 | export class Agent { |
第二步,我们来创建一个SubAgentManager类来管理所有的子智能体:
1 | export class SubAgentManager { |
同样的,我们创建并暴露一个全局的subAgentManager实例subAgentManager。需要注意的是,子智能体只能使用全局注册的普通工具,不能使用生成子智能体的工具,否则可能会导致无限递归。
第三步,我们来创建两个和子智能体相关的工具:
1 | export const spawnAgentTool: Tool = { |
第四步,我们来给主智能体增加一个更贴合本节内容的人设orchestrator:
1 | export const ORCHESTRATOR_PROMPT = `你是一个智能编排助手,能够创建子Agent并编排它们之间的多轮对话。 |
第五步,完善简化以后的入口文件src/index.ts:
1 | // 省略依赖和工具定义等代码 |
为了终端打印不至于太混乱,我们来微调一下log.hooks.ts钩子,让它在打印日志时表面agent身份:
1 | hooks.on('tool:before', async (data) => { |
最后,我们来看看最终效果,因为对话比较长,我们图片分了两次截图:


可以看到,主智能体成功创建了一个销售Agent和一个顾客Agent,并且让他们就汽车购买的场景进行了多轮对话,最后还给出了一个简要的总结。实际场景中,我们太需要一个能保持中立的智能体对整体进行监督和总结了,因为单智能体很难发现自己的问题。
当然,本小节的实现只是一个非常基础的版本,而且实现的有点死板,咱们后续优化。