6.5k星!轻量级多智能体对话编排框架Agent Squad


 

什么是Agent Squad

Agent Squad是一个用于管理多个AI代理和处理复杂对话的灵活框架。它能智能路由查询并在交互过程中维护上下文。

该系统提供预构建组件以便快速部署,同时允许轻松集成自定义代理和对话消息存储解决方案。

这种适应性使其适用于从简单聊天机器人到复杂AI系统的广泛应用场景,满足多样化需求并高效扩展。


🔖 功能特性

  • • 🧠 智能意图分类 — 根据上下文和内容动态路由查询到最合适的代理
  • • 🔤 双语支持 — 完整实现PythonTypeScript双版本
  • • 🌊 灵活的代理响应 — 支持来自不同代理的流式和非流式响应
  • • 📚 上下文管理 — 跨多个代理维护和使用对话上下文,确保交互连贯性
  • • 🔧 可扩展架构 — 轻松集成新代理或自定义现有代理以满足特定需求
  • • 🌐 通用部署 — 可在任何环境运行 – 从AWS Lambda到本地环境或任何云平台
  • • 📦 预构建代理和分类器 — 提供多种开箱即用的代理和分类器实现

🏗️ 高层架构流程图

高层架构流程图


  1. 1. 流程始于用户输入,由分类器进行分析
  2. 2. 分类器利用代理特性和代理对话历史来选择最适合任务的代理
  3. 3. 选定代理后,它处理用户输入
  4. 4. 协调器在将响应返回给用户之前保存对话,更新代理对话历史

介绍SupervisorAgent:代理协调

Agent Squad现在包含强大的新SupervisorAgent,可实现多个专业代理之间的复杂团队协调。这个新组件实现了”工具化代理”架构,允许主导代理并行协调专业代理团队,维护上下文并提供连贯响应。


SupervisorAgent流程图

关键能力:

  • • 🤝 团队协调 – 协调多个专业代理共同处理复杂任务
  • • ⚡ 并行处理 – 同时执行多个代理查询
  • • 🧠 智能上下文管理 – 维护所有团队成员间的对话历史
  • • 🔄 动态委派 – 智能地将子任务分配给合适的团队成员
  • • 🤖 代理兼容性 – 兼容所有代理类型(Bedrock、Anthropic、Lex等)

SupervisorAgent可通过两种强大方式使用:

  1. 1. 直接使用 – 当特定任务需要专门的团队协调时直接调用
  2. 2. 分类器集成 – 将其作为分类器中的一个代理,构建具有多个专业团队的复杂分层系统

以下是该代理可应用的部分场景示例:

  • • 拥有专业子团队的客户支持团队
  • • AI电影制作工作室
  • • 旅行规划服务
  • • 产品开发团队
  • • 医疗协调系统

💬 演示应用

在下面的屏幕录制中,我们展示了使用6个专业代理的扩展版演示应用:

  • • 旅行代理:基于Amazon Lex Bot
  • • 天气代理:使用Bedrock LLM代理和查询open-meteo API的工具
  • • 餐厅代理:实现为Amazon Bedrock代理
  • • 数学代理:使用Bedrock LLM代理和两个执行数学运算的工具
  • • 技术代理:设计用于回答技术问题的Bedrock LLM代理
  • • 健康代理:专注于处理健康相关查询的Bedrock LLM代理

观看系统如何在不同主题间无缝切换上下文,从预订航班到查询天气、解决数学问题和提供健康信息。
注意系统如何为每个查询选择合适的代理,即使在简短的后续输入中也能保持连贯性。

演示突出了系统处理复杂多轮对话的能力,同时保持上下文并利用跨多个领域的专业代理。



🎯 示例与快速入门

通过我们多样化的示例集获得Agent Squad的实践经验:

  • • 演示应用
    • • Streamlit全局演示:展示多个演示的单一Streamlit应用,包括:
      • • AI电影制作工作室
      • • AI旅行规划师
    • • 聊天演示应用
      • • 探索处理旅行、天气、数学和健康等多个领域的专业代理
    • • 电商支持模拟器:体验AI驱动的客户支持:
      • • 自动生成常见查询的响应
      • • 智能路由复杂问题至人工支持
      • • 实时聊天和电子邮件式沟通
      • • 复杂案例中的人工介入交互
  • • 示例项目:在examples文件夹中探索我们的示例实现:
    • • chat-demo-app:具有多个专业代理的基于Web的聊天界面
    • • ecommerce-support-simulator:AI驱动的客户支持系统
    • • chat-chainlit-app:使用Chainlit构建的聊天应用
    • • fast-api-streaming:支持流式传输的FastAPI实现
    • • text-2-structured-output:自然语言转结构化数据
    • • bedrock-inline-agents:Bedrock内联代理示例
    • • bedrock-prompt-routing:Bedrock提示路由示例代码

示例提供Python和TypeScript两种版本。查看我们的文档获取设置和使用Agent Squad框架的全面指南!

📚 深度探索:故事、博客与播客

发现Agent Squad的创意实现和多样化应用:

  • • 从”Bonjour”到”登机牌”:多语言AI聊天机器人预订航班本文演示如何使用Agent Squad框架构建多语言聊天机器人。文章解释了如何将Amazon Lex机器人作为代理,与其他2个新代理一起工作,仅用几行代码即可实现多语言支持。
  • • 超越自动回复:构建AI驱动的电商支持系统本文演示如何构建AI驱动的多代理系统来自动化电商客户邮件支持。它涵盖了使用Agent Squad框架的专业AI代理的架构和设置,将自动化处理与人工监督相结合。指南探讨了邮件接收、智能路由、自动回复生成和人工验证,提供了在客户支持中平衡AI效率与人类专业知识的全面方法。
  • • 说出来,AI:用Amazon Connect、Lex和Bedrock为你的代理发声本文演示如何构建AI客户呼叫中心。它涵盖了使用Agent Squad框架与Amazon ConnectAmazon Lex语音交互的专业AI代理的架构和设置。
  • • 解锁Bedrock InvokeInlineAgent API的隐藏潜力了解如何使用Agent Squad框架和InvokeInlineAgent API扩展Amazon Bedrock代理超越知识库限制。本文演示了为企业级AI应用创建动态代理和选择知识库。
  • • 增强Amazon Bedrock Flows了解如何使用Agent Squad框架增强Amazon Bedrock Flows的对话记忆和多流程协调。本指南展示了如何克服Bedrock Flows的限制,构建具有持久记忆和流程间智能路由的更复杂AI工作流。

TypeScript版本

安装

🔄 multi-agent-orchestrator 更名为 agent-squad

npm install agent-squad

使用

以下示例演示如何使用Agent Squad与两种不同类型的代理:支持Converse API的Bedrock LLM代理和Lex Bot代理。展示了系统在集成各种AI服务方面的灵活性。

import { AgentSquadBedrockLLMAgentLexBotAgent } from"agent-squad";

const orchestrator = newAgentSquad();

// 添加支持Converse API的Bedrock LLM代理
orchestrator.addAgent(
newBedrockLLMAgent({
      name"Tech Agent",
      description:
        "专长于技术领域,包括软件开发、硬件、AI、网络安全、区块链、云计算、新兴技术创新以及与技术产品和服务相关的定价/成本。",
      streamingtrue
  })
);

// 添加处理旅行相关查询的Lex Bot代理
orchestrator.addAgent(
newLexBotAgent({
    name"Travel Agent",
    description"帮助用户预订和管理航班",
    botId: process.env.LEX_BOT_ID,
    botAliasId: process.env.LEX_BOT_ALIAS_ID,
    localeId"en_US",
  })
);

// 示例用法
const response = await orchestrator.routeRequest(
"我想预订航班",
'user123',
'session456'
);

// 处理响应(流式或非流式)
if (response.streaming == true) {
    console.log("\n** 流式响应 ** \n");
    // 立即发送元数据
    console.log(`> 代理ID: ${response.metadata.agentId}`);
    console.log(`> 代理名称: ${response.metadata.agentName}`);
    console.log(`> 用户输入: ${response.metadata.userInput}`);
    console.log(`> 用户ID: ${response.metadata.userId}`);
    console.log(`> 会话ID: ${response.metadata.sessionId}`);
    console.log(
      `> 附加参数:`,
      response.metadata.additionalParams
    );
    console.log(`\n> 响应: `);

    // 流式传输内容
    forawait (const chunk of response.output) {
      if (typeof chunk === "string") {
        process.stdout.write(chunk);
      } else {
        console.error("收到意外的块类型:"typeof chunk);
      }
    }

else {
    // 处理非流式响应(AgentProcessingResult)
    console.log("\n** 响应 ** \n");
    console.log(`> 代理ID: ${response.metadata.agentId}`);
    console.log(`> 代理名称: ${response.metadata.agentName}`);
    console.log(`> 用户输入: ${response.metadata.userInput}`);
    console.log(`> 用户ID: ${response.metadata.userId}`);
    console.log(`> 会话ID: ${response.metadata.sessionId}`);
    console.log(
      `> 附加参数:`,
      response.metadata.additionalParams
    );
    console.log(`\n> 响应: ${response.output}`);
}

Python版本

🔄 multi-agent-orchestrator 更名为 agent-squad

# 可选:设置虚拟环境
python -m venv venv
source venv/bin/activate  # Windows使用`venv\Scripts\activate`
pip install agent-squad[aws]

默认用法

以下是使用Bedrock LLM代理和Lex Bot代理的等效Python示例:

import sys
import asyncio
from agent_squad.orchestrator import AgentSquad
from agent_squad.agents import BedrockLLMAgent, BedrockLLMAgentOptions, AgentStreamResponse

orchestrator = AgentSquad()

tech_agent = BedrockLLMAgent(BedrockLLMAgentOptions(
  name="Tech Agent",
  streaming=True,
  description="专长于技术领域,包括软件开发、硬件、AI、网络安全、区块链、云计算、新兴技术创新以及与技术产品和服务相关的定价/成本。",
  model_id="anthropic.claude-3-sonnet-20240229-v1:0",
))
orchestrator.add_agent(tech_agent)


health_agent = BedrockLLMAgent(BedrockLLMAgentOptions(
  name="Health Agent",
  streaming=True,
  description="专长于健康和福祉",
))
orchestrator.add_agent(health_agent)

asyncdefmain():
    # 示例用法
    response = await orchestrator.route_request(
        "什么是AWS Lambda?",
        'user123',
        'session456',
        {},
        True
    )

    # 处理响应(流式或非流式)
    if response.streaming:
        print("\n** 流式响应 ** \n")
        # 立即发送元数据
        print(f"> 代理ID: {response.metadata.agent_id}")
        print(f"> 代理名称: {response.metadata.agent_name}")
        print(f"> 用户输入: {response.metadata.user_input}")
        print(f"> 用户ID: {response.metadata.user_id}")
        print(f"> 会话ID: {response.metadata.session_id}")
        print(f"> 附加参数: {response.metadata.additional_params}")
        print("\n> 响应: ")

        # 流式传输内容
        asyncfor chunk in response.output:
            asyncfor chunk in response.output:
              ifisinstance(chunk, AgentStreamResponse):
                  print(chunk.text, end='', flush=True)
              else:
                  print(f"收到意外的块类型: {type(chunk)}", file=sys.stderr)

    else:
        # 处理非流式响应(AgentProcessingResult)
        print("\n** 响应 ** \n")
        print(f"> 代理ID: {response.metadata.agent_id}")
        print(f"> 代理名称: {response.metadata.agent_name}")
        print(f"> 用户输入: {response.metadata.user_input}")
        print(f"> 用户ID: {response.metadata.user_id}")
        print(f"> 会话ID: {response.metadata.session_id}")
        print(f"> 附加参数: {response.metadata.additional_params}")
        print(f"\n> 响应: {response.output.content}")

if __name__ == "__main__":
  asyncio.run(main())

这些示例展示了:

  1. 1. 使用支持Converse API的Bedrock LLM代理,允许多轮对话
  2. 2. 集成Lex Bot代理处理专门任务(本例为旅行相关查询)
  3. 3. 协调器基于输入将请求路由到最合适代理的能力
  4. 4. 处理来自不同类型代理的流式和非流式响应

模块化安装选项

Agent Squad采用模块化架构设计,允许您仅安装所需组件,同时确保始终获得核心功能。

安装选项

1. AWS集成:

 pip install "agent-squad[aws]"

包含核心协调功能和全面的AWS服务集成(BedrockLLMAgentAmazonBedrockAgentLambdaAgent等)

2. Anthropic集成:

pip install "agent-squad[anthropic]"

3. OpenAI集成:

pip install "agent-squad[openai]"

添加OpenAI的GPT模型用于代理和分类,以及核心包

4. 完整安装:

pip install "agent-squad[all]"

包含所有可选依赖项以获得最大灵活性

 

项目地址

https://github.com/awslabs/agent-squad




扫码加入技术交流群,备注「开发语言-城市-昵称

(文:GitHubStore)

发表评论

×

下载每时AI手机APP

 

和大家一起交流AI最新资讯!

立即前往