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中文網其他相關文章!