跳转到主要内容
多Agent系统使专业化的Agent能够协同处理复杂任务。每个Agent专注于特定领域,并通过编排模式进行协调。

多Agent系统设计模式

设计多Agent系统有多种方式,但我们常见两种广泛适用的模式:
  • 管理者模式(Agent作为工具):中央管理者/编排器将专业子Agent作为工具调用,并保持对话控制权。
  • 交接模式:对等Agent将控制权移交给接管对话的专业Agent。这是去中心化的。
本指南重点介绍管理者模式(Agent作为工具),这是最常见且最直接的方法。

安装

npm install @ag-kit/agents @ag-kit/tools zod

管理者模式(Agent作为工具)

在管理者模式中,中央编排器将专业Agent作为工具调用。编排器在整个对话过程中保持控制权,并决定何时调用每个专业Agent。

创建专业Agent

每个专业Agent专注于特定任务:
import { Agent, OpenAIProvider } from '@ag-kit/agents';

const pageProcessorAgent = new Agent({
  name: 'PageProcessorAgent',
  description: '处理单页面:爬取、翻译、摘要',
  model: new OpenAIProvider({
    apiKey: process.env.OPENAI_API_KEY!,
    defaultModel: process.env.OPENAI_MODEL || 'gpt-4o-mini'
  }),
  instructions: `你是PageProcessorAgent。处理单个页面:
1. 爬取页面内容
2. 根据需要翻译为目标语言
3. 提取关键点和实体
4. 返回结构化数据用于报告生成`
});

const reportGeneratorAgent = new Agent({
  name: 'ReportGeneratorAgent',
  description: '根据多个页面结果生成综合报告',
  model: new OpenAIProvider({
    apiKey: process.env.OPENAI_API_KEY!,
    defaultModel: process.env.OPENAI_MODEL || 'gpt-4o'
  }),
  instructions: `你是ReportGeneratorAgent。生成综合报告:
1. 整合多个页面的结果
2. 创建带有关键见解的结构化摘要
3. 生成思维导图(mermaid格式)
4. 提供质量评估`
});

创建编排器

编排器通过委托给专业Agent来协调工作流。它将专业Agent包装为工具:
import { tool } from '@ag-kit/tools';
import { z } from 'zod';

// 将Agent包装为工具
function createAgentTool(agent: Agent, toolName: string) {
  return tool(
    async ({ url, content, targetLanguage, pageResults }) => {
      let prompt = '';
      switch (toolName) {
        case 'process_page':
          prompt = `处理此页面:${url}\n\n目标语言:${targetLanguage || 'en'}`;
          break;
        case 'generate_report':
          prompt = `根据这些页面结果生成综合报告:\n\n${JSON.stringify(pageResults)}\n\n目标语言:${targetLanguage || 'en'}`;
          break;
        default:
          prompt = content || url;
      }
      const result = await agent.run(prompt);
      return result.data;
    },
    {
      name: toolName,
      description: agent.config.description || `Agent:${agent.config.name}`,
      schema: z.object({
        url: z.string().optional(),
        content: z.string().optional(),
        targetLanguage: z.string().optional(),
        pageResults: z.array(z.any()).optional()
      })
    }
  );
}

const orchestrator = new Agent({
  name: 'multi-agent-orchestrator',
  description: '协调多页面网页阅读和摘要工作流',
  model: new OpenAIProvider({
    apiKey: process.env.OPENAI_API_KEY!,
    defaultModel: process.env.OPENAI_MODEL || 'gpt-4o'
  }),
  instructions: `你是多页面网页阅读的编排器。当给定URL时:
1. 使用todo_write为每个页面规划任务
2. 使用process_page协调页面处理
3. 使用generate_report协调报告生成
4. 以用户语言生成综合报告`,
  tools: [
    createAgentTool(pageProcessorAgent, 'process_page'),
    createAgentTool(reportGeneratorAgent, 'generate_report')
  ]
});