深入解析AutoGen多Agent框架:构建高效AI合作解决方案

概述

AutoGen是一个开源编程框架,旨在构建AI Agent并促进多个Agent之间的协作,以解决各种任务。该框架的目标是为人工智能开发和研究提供一个灵活且易于使用的环境,类似于深度学习领域的PyTorch。AutoGen具备多个功能,包括可交互的Agent、LLM和工具的支持、自主与人机循环工作流程,以及多Agent对话模式。

参考:

官方文档

Multi-Agent开发框架AutoGen

功能点

ReAct

ReAct的核心是协同推理与行动的结合,为用户提供全面的提示词模板,并支持消息函数。以下是一个示例:

# NOTE: this ReAct prompt is adapted from Langchain's ReAct agent: https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/agents/react/agent.py#L79  
ReAct_prompt = """  
Answer the following questions as best you can. You have access to tools provided.  
  
Use the following format:  
  
Question: the input question you must answer  
Thought: you should always think about what to do  
Action: the action to take  
Action Input: the input to the action  
Observation: the result of the action  
... (this process can repeat multiple times)  
Thought: I now know the final answer  
Final Answer: the final answer to the original input question  
  
Begin!  
Question: {input}  
"""  
  
# Define the ReAct prompt message. Assuming a "question" field is present in the context  
  
  
def react_prompt_message(sender, recipient, context):  
    return ReAct_prompt.format(input=context["question"])  

RAG

在涉及自我认知或专业知识解释的场景下,可以直接利用RAG + Agent来实现。示例如下:

assistant = RetrieveAssistantAgent(  
    name="assistant",  
    system_message="You are a helpful assistant.",  
    llm_config={  
        "timeout": 600,  
        "cache_seed": 42,  
        "config_list": config_list,  
    },  
)  
ragproxyagent = RetrieveUserProxyAgent(  
    name="ragproxyagent",  
    human_input_mode="NEVER",  
    max_consecutive_auto_reply=3,  
    retrieve_config={  
        "task": "code",  
        "docs_path": [  
            "https://raw.githubusercontent.com/microsoft/FLAML/main/website/docs/Examples/Integrate%20-%20Spark.md",  
            "https://raw.githubusercontent.com/microsoft/FLAML/main/website/docs/Research.md",  
            os.path.join(os.path.abspath(""), "..", "website", "docs"),  
        ],  
        "custom_text_types": ["mdx"],  
        "chunk_token_size": 2000,  
        "model": config_list[0]["model"],  
        "client": chromadb.PersistentClient(path="/tmp/chromadb"),  
        "embedding_model": "all-mpnet-base-v2",  
        "get_or_create": True,  # set to False if you don't want to reuse an existing collection, but you'll need to remove the collection manually  
    },  
    code_execution_config=False,  # set to False if you don't want to execute the code  
)  

终止条件

根据特定条件终止Agent的操作可以通过以下方式实现:

  1. 通过初始化聊天时设置参数:在启动对话时(使用 **initiate_chat** 方法),可以设定特定参数来定义对话结束的时机,例如,使用 **max_turns** 参数限制对话回合数,从而在达到指定回合后自动终止对话。
  2. 通过配置代理触发终止:在定义每个代理时,可以指定代理根据特定条件自动终止对话,诸如 **max_consecutive_auto_reply**(最大连续自动回复次数)和 **is_termination_msg**(接收到特定终止消息的标识)等参数。

人类反馈

实现人类干预的主要方式是通过设置 **ConversableAgent****human_input_mode** 参数,该参数支持三种模式:**NEVER**(从不请求人类输入)、**TERMINATE**(仅在满足终止条件时请求人类输入)、以及 **ALWAYS**(总是请求人类输入)。这样可以确保代理在必要时获取人类反馈,以指导或校正其行为。

工具使用

"工具使用"指的是在多代理对话中,代理可以利用各种工具来执行特定任务,这些工具可以是函数、代码执行器,或其他可以通过AutoGen注册并调用的资源。代理通过这些工具可以增强其功能,例如执行信息检索、计算任务或其他需要特定能力的操作。

对话模式

支持的对话模式包括双Agent对话、顺序Agent对话和群聊对话。

  • 双Agent聊天:这是最简单的对话模式,两个Agent进行互动。
  • 顺序聊天:两个Agent之间的聊天序列,通过一种机制连接在一起,实现上下文的总结。summary_method 参数指定总结逻辑。
  • 群聊:涉及多个Agent的聊天对话,下一位Agent的选择方式可以是轮流、随机或手动选择等。

嵌套聊天

AutoGen允许在一个群聊中嵌套调用另一个Agent群聊,实现更复杂的工作流。具体实施方法是首先定义一个群聊,然后在另一个群聊中注册该群聊为嵌套聊天,并设定一个触发表达式。当该表达式为"真"时,将调用嵌套聊天以解决问题并返回结果。

参考示例:

  • Solving Complex Tasks with Nested Chats[1]
  • LLM Reflection[2]

问题

  1. 工具的调用如何识别?——可观测性与嵌套聊天。
  2. 基于Agent类别的区分(虽然只是参数配置不同),如何调用RAG Agent并与其他Agent衔接?AutoGen又是如何识别用户消息并基于RAG回复,而后切换至正常回复的?——嵌套聊天

思考与总结

AutoGen框架的Agent实现极具灵活性和强大功能,几乎可以覆盖90%以上的业务场景。通过推理部署框架的集成,减轻了基础LLM的差异影响。与其他Agent框架相比,AutoGen在易用性、文档支持和功能丰富性方面都表现得更加优越。

参考资料[1] Solving Complex Tasks with Nested Chats: https://microsoft.github.io/autogen/docs/notebooks/agentchat_nestedchat/#example-task

[2] LLM Reflection: https://microsoft.github.io/autogen/docs/topics/prompting-and-reasoning/reflection#construct-agent-chats-with-reflection_assistant-being-a-nested-agent-for-reflection