AutoGen中的嵌套式聊天:构建更具响应性和动态性的AI代理交互
人工智能(AI)的进步使聊天机器人得到了飞速发展。如今,随着AI代理的出现,聊天机器人能够处理更复杂、更分层的交互,远远超出了传统对话的限制。在我们之前的文章《使用AutoGen构建多代理聊天机器人》中,我们探讨了使用AutoGen进行顺序聊天的概念,该概念允许在多个代理之间进行结构化、轮流式的通信。现在,在此基础上,我们将转向一个更复杂的功能:嵌套式聊天。借助AutoGen强大的框架,嵌套式对话使机器人能够保持流畅的交流,而不是遵循固定的顺序。它们可以在单个对话流程中深入研究其他工具,处理中断并顺利恢复。本文将指导您在AutoGen中实现嵌套式聊天,并重点介绍其在创建响应式、动态代理交互中的相关性。
让我们首先了解什么是嵌套式聊天。
考虑一个三方代理聊天,其中需要两个代理反复进行循环对话。这两个代理之间的聊天可以添加到嵌套式聊天中。完成此单独的对话后,代理可以将上下文带回到主对话中。
下图显示了嵌套式聊天的转换流程。
当传入的消息触发某个条件时,该消息将进入嵌套式聊天。该嵌套式聊天可以是双代理聊天、顺序聊天或其他任何聊天。然后,嵌套式聊天的聊天结果将发送回主对话。
在本文中,我们将使用嵌套式聊天构建一个文章写作系统。为此,我们将创建三个代理——一个用于编写文章提纲,一个用于根据此提纲编写文章,另一个用于审阅文章。我们希望编写者和审阅者多次互相交谈,因此我们将这两个代理放在嵌套式聊天中。
此外,我们还将向轮廓代理提供访问网络查询工具的权限。
现在,让我们用代码来实现这一点。
在构建AutoGen代理之前,请确保您拥有所需LLM的必要API密钥。在本练习中,我们还将使用Tavily搜索网络。
使用所需的API密钥加载.env文件。在这里,我们将使用OpenAI和Tavily API密钥()。
<code>from dotenv import load_dotenv load_dotenv('/home/santhosh/Projects/courses/Pinnacle/.env')</code>
将要使用的LLM定义为config_list
<code>config_list = { "config_list": [{"model": "gpt-4o-mini", "temperature": 0.2}] }</code>
所需的密钥库
autogen-agentchat – 0.2.37
Tavily-python – 0.5.0
现在,让我们开始实现。
定义user_proxy代理,它还将执行工具。然后使用LLM定义轮廓代理来生成文章提纲。
<code>from autogen import ConversableAgent user_proxy = ConversableAgent( name="User", llm_config=False, is_termination_msg=lambda msg: msg.get("content") is not None and "TERMINATE" in msg["content"], human_input_mode="TERMINATE") outline = ConversableAgent( name="Article_outline", system_message="""您是一位经验丰富的內容策略師,負責為指定主題的文章創建詳細的提綱。您的目標是將文章組織成邏輯部分,以便清晰有效地傳達主要思想。如有需要,請使用web_search工具。任務完成後返回“TERMINATE”。""", llm_config=config_list, silent=False, )</code>
定义web_search函数以查询网络。
<code>def web_search(query: str) -> str: tavily_client = TavilyClient() response = tavily_client.search(query, max_results=3, days=10, include_raw_content=True) return response['results']</code>
使用执行器user_proxy将web_search函数注册到轮廓代理。
我们将执行器设置为user_proxy,以便我们可以审查发送给编写者代理的提纲。
<code>register_function( web_search, caller=outline, # 助手代理可以建议调用。 executor=user_proxy, # 用户代理可以执行调用。 name="web_search", # 默认情况下,函数名称用作工具名称。 description="搜索互联网以获取给定查询的结果", # 工具的描述。 )</code>
定义一个代理来生成文章内容,另一个代理来审阅文章并提供改进建议。
<code>writer = ConversableAgent( name="Article_Writer", system_message="""您是一位熟练的作家,负责根据给定的提纲创作一篇全面、引人入胜的文章。您的目标是遵循提纲中提供的结构,用经过充分研究、清晰且内容翔实的內容扩展每个部分。保持文章长度约为500字。如有需要,請使用web_search工具。任務完成後返回“TERMINATE”。""", llm_config=config_list, silent=False, ) reviewer = ConversableAgent( name="Article_Reviewer", system_message="""您是一位熟练的技术文章审阅者。审阅给定的文章,并提供建议以使文章更具吸引力和趣味性。""", llm_config=config_list, silent=False, )</code>
现在,我们可以为两个代理注册嵌套式聊天。
<code>writer.register_nested_chats( trigger=user_proxy, chat_queue=[ { "sender": reviewer, "recipient": writer, "summary_method": "last_msg", "max_turns": 2, } ], )</code>
在上面的代码中,当user_proxy向writer代理发送任何消息时,这将触发嵌套式聊天。然后,writer代理将编写文章,reviewer代理将根据max_turns(在本例中为两次)多次审阅文章。最后,嵌套式聊天的结果将发送回用户代理。
现在一切设置就绪,让我们启动聊天
<code>chat_results = user_proxy.initiate_chats( [{"recipient": outline, "message": "撰写一篇关于微软发布的Magentic-One代理系统的文章。", "summary_method": "last_msg", }, {"recipient": writer, "message": "这是文章提纲", "summary_method": "last_msg", }])</code>
在这里,我们将撰写一篇关于Magentic-One代理系统的文章。首先,user_proxy代理将与轮廓代理启动聊天,然后与编写者代理启动聊天。
现在,上述代码的输出将如下所示:
正如我们所看到的,user_proxy首先向轮廓代理发送一条消息,说明文章的主题。这将触发工具调用,user_proxy执行该工具。根据这些结果,轮廓代理将生成提纲并将其发送给编写者代理。之后,编写者代理和审阅者代理之间的嵌套式聊天将按上述讨论继续进行。
现在,让我们打印最终结果,即关于magentic-one的文章。
<code>print(chat_results[1].chat_history[-2]['content'])</code>
AutoGen中的嵌套式聊天通过在单个对话流程中实现复杂的多任务交互来增强聊天机器人的功能。嵌套式聊天允许机器人启动单独的专用聊天并将它们的输出无缝集成。此功能支持各种应用程序(从电子商务到医疗保健)的动态、有针对性的响应。借助嵌套式聊天,AutoGen为更具响应性、上下文感知的AI系统铺平了道路。这使开发人员能够构建能够有效满足各种用户需求的复杂聊天机器人。
如果您想了解有关AI代理的更多信息,请查看我们独家推出的代理式AI先锋计划!
Q1. AutoGen中的嵌套式聊天是什么,它与顺序聊天有何不同?A. AutoGen中的嵌套式聊天允许聊天机器人在一个聊天流程中管理多个子对话,通常涉及其他代理或工具来检索特定信息。与遵循结构化、轮流式方法的顺序聊天不同,嵌套式聊天使机器人能够处理中断和并行任务,并将它们的输出集成回主对话中。
Q2. 嵌套式聊天如何改进应用程序中的客户支持?A. 嵌套式聊天通过允许机器人将任务委托给专业代理来改进客户支持。例如,在电子商务中,聊天机器人可以咨询单独的代理来检查订单状态或产品信息,然后将信息无缝地转发给用户,从而确保更快、更准确的响应。
Q3. 嵌套式聊天在不同行业的关键用例是什么?A. 嵌套式聊天可以应用于不同的行业。在银行业,它为账户和贷款查询提供专业支持;在人力资源部门,它协助入职任务;在医疗保健领域,它处理预约安排和账单查询。这种灵活性使嵌套式聊天适合任何需要多任务处理和详细信息处理的领域。
Q4. 我是否需要任何特定设置才能在AutoGen中实现嵌套式聊天?A. 是的,在AutoGen中实现嵌套式聊天需要使用特定的API密钥配置代理,例如语言模型或Tavily等网络搜索工具。此外,每个代理都必须定义适当的任务和工具,以便顺利执行嵌套式对话。
Q5. 我可以在AutoGen中跟踪与每个嵌套式聊天代理相关的成本吗?A. 是的,AutoGen允许跟踪嵌套式聊天中每个代理产生的成本。通过访问聊天结果中的cost
属性,开发人员可以监控与代理交互相关的支出,从而帮助优化聊天机器人的资源使用率和效率。
以上是与Autogen建立多代理嵌套聊天的4个步骤的详细内容。更多信息请关注PHP中文网其他相关文章!