基于LLaMA的多智能体对话系统multi-agent-concierge

项目简介

该存储库包含使用 LlamaIndex 的工作流抽象的多代理礼宾系统的实现。使用此示例,您可以插入自己的代理和工具来构建自己的多代理系统,或者修改和扩展底层代码以满足您的需求。


在此示例中,代理由一组名称、描述、工具集和系统提示来表示,这些都定义了代理的行为方式以及如何选择代理。

此外,所有代理工具都可以访问工作流中的全局状态,这使得代理可以轻松地相互协调并共享信息。工具还可以标记为需要人工确认,这将导致系统在发送工具调用之前要求用户确认。


生成的工作流程是使用内置的draw_all_possible_flows()自动渲染的,如下所示:

为什么要建这个

到目前为止,交互式聊天机器人是一种熟悉的客户服务解决方案,而代理是聊天机器人实施的常见组成部分。它们提供记忆、内省、工具使用和其他功能,这些都是一个有能力的机器人所必需的。

想象一下一家银行实施的系统可以:

  • 查询特定股票的价格

  • 验证用户身份

  • 检查您的账户余额

    • 这需要用户进行身份验证

  • 在账户之间转账

    • 这需要用户进行身份验证

    • 而且用户首先检查他们的帐户余额


每个顶级任务都有子任务,例如:

  • 股票价格查找可能需要先查找股票代码

  • 用户身份验证需要收集用户名和密码

  • 帐户余额需要知道要检查哪个用户帐户


为所有这些任务和子任务提供一个主要提示将非常复杂。因此,我们设计了一个多代理系统,其中代理负责每个顶级任务,再加上一个“礼宾”代理,可以将用户引导到正确的代理。

我们构建了什么

我们构建了一个代理系统来完成上述任务。有四种基本的“任务”代理:

  • 股票查找代理(负责处理诸如查找符号之类的子任务)

  • 身份验证代理(要求用户名和密码)

  • 帐户余额代理(负责处理子任务,例如检查特定帐户的余额)

  • 汇款代理(负责处理诸如询问要转入哪个帐户以及转入金额等任务)


使用全局状态来跟踪用户及其当前状态,并在所有代理之间共享。使用FunctionToolWithContext类在任何工具调用中都可以使用此状态。


还有一个编排代理:当没有设置活动发言人时,该代理将与用户交互。它将查看当前用户状态和可用代理列表,并决定下一步将用户路由到哪个代理。


系统的流程看起来像这样:

仓库结构

  • main.py – 应用程序的主入口点。设置全局状态和代理池,并启动工作流程。有关如何使用该系统的详细快速入门示例,请参阅此内容。

  • workflow.py – 工作流定义,包括所有代理和工具。它处理编排、路由和人工批准。

  • utils.py – 工作流的附加实用函数,主要提供FunctionToolWithContext类。

 

运行中的系统

为了了解其在实践中的工作原理,以下是与系统交互期间的示例输出。


在对话开始时,没有设置活动发言者,因此您将被路由到礼宾编排代理:

AGENT >> 您好!今天我能为您提供什么帮助? USER >> 我想进行传输SYSTEM >> 正在传输到代理身份验证代理AGENT >> 为了协助您进行传输,我需要首先对您进行身份验证。您能提供您的用户名和密码吗?


在这里,我们看到编排代理路由到身份验证代理,然后询问用户名和密码。这是因为全局状态还没有用户名或密码。

USER >> 用户名=logan 密码=abc123 SYSTEM >> 记录用户名SYSTEM >> 使用 {‘username’: ‘logan’} 调用的工具 store_username 返回 无 SYSTEM >> 正在登录用户 logan SYSTEM > > 使用 {‘password’: ‘abc123’} 调用的工具登录返回 已登录用户登录会话令牌 1234567890。他们有一个 ID 为 123 的帐户,余额为 1000 美元。系统 >> 代理正在请求传输。请稍等。系统 >> 正在向代理转账 转账代理AGENT >> 您现已通过身份验证。请提供您想要转账的账户 ID 以及您想要转账的金额。


这里发生了很多事情:

  • 用户名和密码存储在全局状态中

  • 身份验证代理登录用户并收集一些帐户信息

  • 编排代理路由至转账代理

  • 转账代理请求转账金额和账户 ID

USER >> 将 123 美元转账至账户 #321 SYSTEM >> 我需要批准以下工具调用: transfer_money {‘from_account_id’: ‘123’, ‘to_account_id’: ‘321’, ‘amount’: 123 }你同意吗?(y/n): y SYSTEM >> 将 123 从 123 转账到账户 321 SYSTEM >> 使用 {‘from_account_id’: ‘123’, ‘to_account_id’: ‘321’, ‘amount’: 123 调用工具 transfer_money返回 Transferred 123 to account 321 AGENT >> 已成功将 123 美元转入帐户 #321。还有什么我可以帮助您的吗?


由于传输工具需要人工批准,编排代理会询问用户是否批准!如果他们这样做,转移就会继续。

用户 >> 我需要查找库存的价值系统 >> 代理正在请求转移。请稍等。系统 >> 正在转移到代理库存查找代理AGENT >> 当然,我可以提供帮助。请提供您要查找其股票价值的公司名称。 USER >> AMD SYSTEM >> 搜索股票代码SYSTEM >> 使用 {‘company_name’: ‘AMD’} 调用的工具 search_for_stock_symbol 返回 AMD SYSTEM >> 查找 AMD SYSTEM >%的股票价格3E 工具lookup_stock_price 调用 {‘stock_symbol’: ‘AMD’} 返回符号 AMD 目前的交易价格$100.00代理 >> AMD 目前的股价为 100.00 美元。您还有什么想知道的吗?


在这里,我们要求进行股票查询。汇款代理当前处于活动状态,因此它首先请求转账,然后由编排代理处理,最后激活股票查找代理并用于查找股票价格。

USER >> bye 


在任何时候,用户都可以通过说“再见”/“退出”、“退出”来结束对话。


项目链接

https://github.com/run-llama/multi-agent-concierge

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

(文:GitHubStore)

欢迎分享

发表评论