Press "Enter" to skip to content

使用AutoGen轻松进行战略AI团队建设

介绍

在一个数字前沿无边界的世界中,AutoGen以一种变革性范式的建筑师的身份出现。想象一下拥有个性化的人工智能团队,每个团队都擅长不同领域,无缝协作,无障碍沟通,不知疲倦地处理复杂任务。这就是AutoGen的本质,它是一种开创性的多智能体对话框架,赋予您创建个性化的人工智能团队的能力。在这篇文章中,我们揭开AutoGen的神奇之处,探索它如何使您能够组建自己的数字梦想团队并实现非凡成就。欢迎来到一个人与机器之间的边界消失,协作无限的未来。

使用AutoGen轻松进行战略AI团队建设 四海 第1张

学习目标

在我们深入了解细节之前,让我们概述一下本文的主要学习目标:

  • 全面了解AutoGen作为多智能体对话框架的能力。
  • 了解智能体在多智能体对话框架中的自主沟通和协作。
  • 了解config_list在AutoGen运行中的关键作用。了解保护API密钥和管理配置以实现智能体高效性能的最佳实践。
  • 探索各种对话风格,从完全自主到人类参与的交互。了解AutoGen支持的静态和动态对话模式。
  • 了解如何利用AutoGen根据验证数据、评估函数和优化指标调整LLM。
  • 探索示例,如构建协作内容创作团队和带有文化背景的语言翻译,以了解AutoGen如何在不同场景中应用。

本文作为数据科学博文马拉松的一部分发表。

AutoGen是什么?

AutoGen是一个统一的多智能体对话框架,作为使用基础模型的高级抽象。它将能力强大、可定制、可对话的智能体通过自动化聊天集合在一起,与LLMs、工具和人类参与者整合。本质上,它使智能体能够自主沟通和协作,有效地简化复杂任务并自动化工作流程。

为什么AutoGen很重要?

AutoGen解决了与人工智能进行高效灵活的多智能体通信的需求。它的重要性在于它能够:

  • 简化复杂LLM工作流程的编排、自动化和优化。
  • 充分发挥LLM模型的性能,同时克服其局限性。
  • 以最少的工作量基于多智能体对话开发下一代LLM应用。

设置开发环境

创建虚拟环境

创建虚拟环境是一种良好的实践,可以隔离特定项目的依赖项,避免与系统范围的软件包冲突。以下是设置Python环境的方法:

选项1:Venv

python -m venv 环境名
  • 激活虚拟环境:
环境名\Scripts\activate
  • 在 macOS 和 Linux 上:
source 环境名/bin/activate

以下命令将停用当前的 venv 环境:

deactivate

选项2:Conda

conda create -n pyautogen python=3.10conda activate pyautogen

以下命令将停用当前的 conda 环境:

conda deactivate

Python:AutoGen要求Python版本≥3.8

安装AutoGen

pip install pyautogen

设置API

在使用多个模型和API版本时,有效地管理API配置至关重要。OpenAI提供了实用函数来帮助用户进行这个过程。在本地开发中,将API密钥和敏感数据安全地存储在.txt或.env文件中,或者作为环境变量存储,避免意外泄露,这一点至关重要。

步骤

1. 从OpenAI获取API密钥,可选择从Azure OpenAI或其他提供商获取。2. 使用以下方式安全存储这些密钥:

  • 环境变量:在shell中使用export OPENAI_API_KEY=’your-key’。
  • 文本文件:将密钥保存在key_openai.txt文件中。
  • Env文件:在.env文件中存储密钥,例如OPENAI_API_KEY=sk-

什么是Config_list?

config_list在AutoGen的操作中起着关键作用,使智能助理能够动态选择适当的模型配置。它处理重要的细节,例如API密钥、端点和版本,确保助理在各种任务中平稳可靠地运行。

步骤:

1. 将配置存储在名为OAI_CONFIG_LIST的环境变量中,以有效的JSON字符串形式。

2. 或者,将配置保存在名为OAI_CONFIG_LIST.json的本地JSON文件中。

3. 将OAI_CONFIG_LIST添加到您本地存储库的.gitignore文件中。

assistant = AssistantAgent(    name="assistant",    llm_config={        "timeout": 400,        "seed": 42,        "config_list": config_list,        "temperature": 0,    },)

生成Config_list的方法

您可以使用不同的方法生成config_list,具体取决于您的用例:

  • get_config_list:主要从提供的API密钥生成API调用的配置。
  • config_list_openai_aoai:使用Azure OpenAI和OpenAI端点创建配置列表,并从环境变量或本地文件中获取API密钥。
  • config_list_from_json:从JSON结构中加载配置,可以根据特定条件筛选配置。
  • config_list_from_models:根据提供的模型列表创建配置,有助于针对特定模型进行定向配置,而无需手动配置。
  • config_list_from_dotenv:从.env文件构建配置列表,简化了从单个文件管理多个API配置和密钥的操作。

现在,让我们看一下生成config_list的两个关键方法:

Get_config_list

用于生成API调用的配置。

api_keys = ["YOUR_OPENAI_API_KEY"]base_urls = None      api_keys,    base_urls=base_urls,    api_type=api_type,    api_version=api_version)print(config_list)

Config_list_from_json

该方法从环境变量或JSON文件中加载配置。它通过允许用户根据特定条件筛选配置而提供了灵活性。

您的JSON结构应如下所示:

# OAI_CONFIG_LIST文件示例[    {        "model": "gpt-4",        "api_key": "YOUR_OPENAI_API_KEY"    },    {        "model": "gpt-3.5-turbo",        "api_key": "YOUR_OPENAI_API_KEY",        "api_version": "2023-03-01-preview"    }]

config_list= autogen.config_list_from_json(    env_or_file="OAI_CONFIG_LIST",    # or OAI_CONFIG_LIST.json if file extension is addedfilter_dict={"model": {            "gpt-4",            "gpt-3.5-turbo",        }    })

关键特点

  • AutoGen简化了涉及多个代理对话的高级LLM应用程序的开发,最大程度减少了繁琐的手动工作。它简化了复杂LLM工作流的编排、自动化和优化,提高了整体性能,并解决了固有限制。
  • 它为复杂工作流提供了多样的对话模式,使开发人员能够创建可定制和交互式的代理。使用AutoGen,可以构建各种对话模式,考虑对话自治性、代理数量和对话拓扑等因素。
  • 该平台提供了一系列操作系统,具有不同的复杂性,展示了其在多个来自不同领域的应用程序中的多样性和适用性。通过这些多样化的实现,充分展示了AutoGen支持各种对话模式的能力。
  • AutoGen提供了增强的LLM推断。它提供了API统一和缓存等实用工具,以及错误处理、多配置推断和上下文编程等高级使用模式,从而提高了整体推断能力。

多智能体对话框架

AutoGen 提供了一个统一的多智能体对话框架,作为使用基础模型的高级抽象。想象一下,你有一群虚拟助手,他们可以互相交谈并共同完成复杂的任务,比如组织一次大型活动或管理一个复杂的项目。AutoGen 可以帮助他们以高效和有效的方式完成这些任务。

智能体

AutoGen 智能体是 AutoGen 框架的一部分。这些智能体通过智能体之间的对话来解决任务。以下是 AutoGen 智能体的一些显著特点:

  • 可对话:AutoGen 中的智能体是可对话的,这意味着就像人们互相交谈一样,这些数字助手可以发送和接收消息进行讨论。这可以帮助他们共同工作。
  • 可定制:AutoGen 中的智能体可以定制以集成 LLM、人类、工具或它们的组合。

AutoGen 的内置智能体

使用AutoGen轻松进行战略AI团队建设 四海 第2张

我们创建了一个名为“可对话智能体”的特殊类,它可以帮助计算机程序进行相互交谈以共同完成任务。这些智能体可以根据收到的消息发送消息并执行不同的操作。

有两种主要类型的智能体:

  • 助手智能体:这个智能体就像一个有用的 AI 助手。当你给它一个任务时,它可以为你编写 Python 代码。它使用一个名为 LLM(如 GPT-4)的智能程序来编写代码。它还可以检查结果并提供修正建议。你可以通过给它新的指令来改变它的行为。你还可以使用 llm_config 来调整它与 LLM 的配合方式。
  • 用户代理智能体:这个智能体像一个人与人之间的中间人。它可以向人类寻求帮助或在需要时执行代码。它甚至可以在不执行代码时使用 LLM 生成响应。你可以使用 code_execution_config 和 llm_config 这样的设置来控制代码执行和 LLM 使用。

这些智能体可以在没有人类帮助的情况下互相交谈,但如果需要,人类也可以介入。你还可以使用 register_reply() 方法为它们添加更多功能。

应用案例:AutoGen 多智能体框架用于回答用户问题

在下面的代码片段中,我们定义了一个名为“Agent1”的助手智能体,作为一个助手来帮助回答一般问题,“Agent2”作为一个助手来帮助回答技术问题,“user_proxy”作为一个人类用户的中介。我们稍后将使用这些智能体来完成特定的任务。

import autogen# 导入 openai api 密钥config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")# 创建两个智能体agent1 = autogen.AssistantAgent(    name="Agent 1",    llm_config={        "seed": 42,        "config_list": config_list,        "temperature": 0.7,        "request_timeout": 1200,    },    system_message="Agent 1。我可以帮助回答一般问题。",)agent2 = autogen.AssistantAgent(    name="Agent 2",    llm_config={        "seed": 42,        "config_list": config_list,        "temperature": 0.7,        "request_timeout": 1200,    },    system_message="Agent 2。我可以协助回答技术问题。",)# 创建一个用户代理智能体user_proxy = autogen.UserProxyAgent(    name="用户代理",    human_input_mode="ALWAYS",    code_execution_config=False,)# 创建一个对话组chat_group = autogen.GroupChat(    agents=[agent1, agent2, user_proxy],    messages=[],    max_round=10,)# 创建一个对话组管理器chat_manager = autogen.GroupChatManager(groupchat=chat_group, llm_config=agent_config)# 使用用户问题开始对话user_proxy.initiate_chat(    chat_manager,    message="你能解释一下机器学习的概念吗?")

在这个简单的例子中,两个智能体“Agent 1”和“Agent 2”合作回答用户的问题。 “User Proxy”智能体促进用户与其他智能体之间的通信。这展示了 AutoGen 多智能体对话框架用于回答用户查询的基本用例。

支持多样化的对话模式

AutoGen支持多种对话风格,适应全自动和人工参与的互动。

多样的对话风格

  1. 自主对话:在初始设置之后,您可以进行完全自动化的对话,其中智能体独立工作。
  2. 人机协同:AutoGen可以配置为让人类参与对话过程。例如,您可以将human_input_mode设置为“ALWAYS”,以确保在需要时包括人类输入,这在许多应用中非常有价值。

固定对话与动态对话

AutoGen允许静态和动态对话模式。

  1. 固定对话:这些对话遵循预定义的对话结构,无论输入如何保持一致。
  2. 动态对话:动态对话根据对话的实际流程进行调整,适用于无法预先确定互动模式的复杂应用。

动态对话的方法

AutoGen提供了两种实现动态对话的方法:

注册自动回复

您可以设置自动回复功能,让智能体根据当前消息和上下文决定下一位发言者。这种方法在群聊示例中得到了演示,其中LLM确定了聊天中的下一位发言者。

让我们在动态群聊场景中探索“注册自动回复”的新用例,其中LLM(语言模型)根据对话的内容和上下文决定下一位发言者。

用例:协作内容创建

使用AutoGen轻松进行战略AI团队建设 四海 第3张

在这个用例中,我们有一个动态的群聊,涉及三个智能体:代表用户的UserProxyAgent,作家智能体和编辑智能体。目标是协作创建笔记内容。注册自动回复功能允许LLM根据内容的质量和完成情况决定何时在作家和编辑之间切换角色。

# 导入OpenAI API密钥config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")# 使用LLM配置创建智能体llm_config = {"config_list": config_list, "seed": 42}user_proxy = autogen.UserProxyAgent(    name="User_proxy",    system_message="内容创作者。",    code_execution_config={"last_n_messages": 2, "work_dir": "content_creation"},    human_input_mode="TERMINATE")

构建智能体

writer = autogen.AssistantAgent(    name="Writer",    llm_config=llm_config,)editor = autogen.AssistantAgent(    name="Editor",    system_message="用于笔记内容的编辑器。",    llm_config=llm_config,)groupchat = autogen.GroupChat(agents=[user_proxy, writer, editor], messages=[], max_round=10)manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)

开始对话

# 以用户为内容创作者的身份开始对话user_proxy.initiate_chat(  manager,   message="写一篇关于医疗人工智能的短文。")# 输入“exit”终止对话

使用AutoGen轻松进行战略AI团队建设 四海 第4张

使用AutoGen轻松进行战略AI团队建设 四海 第5张

在这种情况下,用户通过UserProxyAgent发起对话以创建笔记内容。初始时,作家智能体承担起起草内容的角色。另一方面,编辑智能体则可以提供修改和建议。关键在于注册自动回复功能,它允许LLM评估所写内容的质量。当它认识到内容已经准备好进行编辑时,它可以自动切换到编辑智能体,然后进行修改和改进。

这种动态对话确保写作过程合作高效,由LLM根据书面内容的质量决定何时纳入编辑。

基于LLM的函数调用

LLM(例如GPT-4)可以根据正在进行的对话决定是否调用特定的函数。这些函数可以涉及额外的代理,实现动态多代理对话。

用例:语言翻译与文化背景

在这种情况下,我们有两个代理:一个助理代理,精通语言翻译,以及一个代表需要翻译帮助的用户的用户代理。挑战不仅仅是翻译单词,还要理解文化背景,以确保准确和文化敏感的翻译。

import autogen# 定义代理配置config_list = autogen.config_list_from_json(    "OAI_CONFIG_LIST",    filter_dict={        "model": ["gpt-4", "gpt4", "gpt-4-32k", "gpt-4-32k-0314", "gpt-4-32k-v0314"],    },)# 定义动态对话函数d# 创建用于翻译的助理代理    assistant_translator = autogen.AssistantAgent(        name="assistant_translator",        llm_config={            "temperature": 0.7,            "config_list": config_list,        },    )# 创建代表用户的用户代理    user = autogen.UserProxyAgent(        name="user",        human_input_mode="ALWAYS",        code_execution_config={"work_dir": "user"},    )123456bash# 与助理开始一次翻译会话    user.initiate_chat(assistant_translator, message=message)    user.stop_reply_at_receive(assistant_translator)123bash# 向助理发送信号,完成翻译    user.send("请提供一种有文化敏感性的翻译。", assistant_translator)    # 返回从助理收到的最后一条消息 return user.last_message()["content"]12345bash# 创建用户和助理代理assistant_for_user = autogen.AssistantAgent(    name="assistant_for_user",    system_message="您是一个语言助手。翻译完成后,回复 TERMINATE。",    llm_config={        "timeout": 600,        "seed": 42,        "config_list": config_list,        "temperature": 0.7,        "functions": [            {                "name": "translate_with_cultural_context",                "description": "翻译并确保文化敏感性。",                "parameters": {                    "type": "object",                    "properties": {                        "message": {                            "type": "string",                            "description": "准备考虑文化敏感性的要翻译的文本。"                        }                    },                    "required": ["message"],                }            }        ],    })# 创建用户代理,代表用户user = autogen.UserProxyAgent(    name="user",    human_input_mode="TERMINATE",    max_consecutive_auto_reply=10,    code_execution_config={"work_dir": "user"},    function_map={"translate_with_cultural_context": translate_with_cultural_context},)# 使用文化敏感性翻译一个句子user.initiate_chat(    assistant_for_user,    message="将短语 '谢谢' 翻译为表达对接收者文化表示尊敬的语言。")

在这个用例中,用户发起一次请求翻译的对话。助理尝试提供翻译,但当需要文化敏感性时,它调用“translate_with_cultural_context”函数与用户进行交互,用户可能具有文化的洞察力。这种动态对话确保翻译不仅在语言上准确无误,而且在文化上也是合适的。

多种应用的多功能性

  • 代码生成、执行和调试
  • 多代理协作(>3个代理)
  • 应用
  • 工具使用
  • 代理教学和学习

增强的推理能力

AutoGen提供了增强的语言模型(LLM)推理能力。它包括autogen.OpenAIWrapper用于openai>=1和autogen.Completion,可以用作openai.Completion和openai.ChatCompletion的替代,并增加了openai<1的功能。使用AutoGen进行推理具有各种优势,包括性能调优、API统一、缓存、错误处理、多配置推理、结果过滤、模板化等。

调整推断参数(适用于openai <1)

在使用文本生成的基础模型时,整体成本通常与输入和输出中使用的标记数量相关联。对于利用这些模型的应用程序开发人员来说,目标是在推论预算范围内最大程度地提高生成文本的有用性。要实现这种优化,需要调整特定的超参数,这些参数可以显着影响生成文本的质量和成本。

  1. 模型选择:需要指定您希望使用的模型标识,这对生成文本的质量和风格具有很大影响。
  2. 提示或消息:这些是为文本生成设置上下文的初始输入。它们作为模型生成文本的起点。
  3. 最大标记限制(最大标记数):此参数确定生成文本中的最大字或词元数量。它有助于控制输出的长度。
  4. 温度控制:温度值从0到1的范围内,会影响生成文本中的随机性水平。较高的值会产生更多的多样性,而较低的值使文本更具可预测性。
  5. 顶部概率(Top_p):该值也从0到1的范围内变化,会影响选择标记的可能性。较低的值优先选择常见的标记,而较高的值会鼓励模型探索更广泛的领域。
  6. 响应数量(N):N表示模型对给定提示生成的响应数量。多个响应可能会产生不同的输出,但会增加成本。
  7. 停止条件:停止条件是在生成的文本中遇到时终止生成过程的特定词语或短语。它们有助于控制输出的长度和内容。

这些超参数是相互关联的,它们的组合可能对生成文本的成本和质量产生复杂的影响。

使用 AutoGen 进行调整

您可以利用 AutoGen 根据以下内容调整您的LLM:

  • 验证数据:收集多样化的实例以验证调整过程的有效性。这些实例通常存储为字典,每个字典包含问题描述和解决方案。
  • 评估函数:创建一个评估函数,根据验证数据来评估响应的质量。该函数接受响应列表和验证数据的其他输入,并输出指标(如成功率)。
  • 要优化的度量标准:选择一个要优化的度量标准,通常基于验证数据的聚合指标。例如,您可以通过不同的优化模式来优化“成功率”。
  • 搜索空间:为每个超参数定义搜索空间。例如,指定模型、提示/消息、最大标记数和其他参数,可以是常量或使用预先定义的搜索范围。
  • 预算:设置推论和优化的预算。推论预算与每个数据实例的平均成本相关,而优化预算确定分配给调整过程的总预算。

要执行调整,请使用autogen.Completion.tune,其将返回优化的配置并提供关于所有尝试的配置和结果的见解。

API 统一

使用autogen.OpenAIWrapper.create()可以同时为聊天和非聊天模型创建完成,以及同时适用于OpenAI API和Azure OpenAI API。这统一了不同模型和端点的API使用。

缓存

API调用结果会在本地进行缓存,以实现可重复性和节省成本。您可以通过指定种子来控制缓存行为。

错误处理

AutoGen允许您通过传递不同模型/端点的配置列表来减轻运行时错误。它将尝试不同的配置,直到返回有效结果,这在考虑到速率限制时非常有用。

模板化

可以自动填充提示和消息中的模板,使处理动态内容更加便捷。

日志记录

AutoGen提供API调用的日志记录功能,可让您跟踪和分析API请求和响应的历史记录,用于调试和分析。您可以在紧凑格式和单独API调用记录格式之间切换。

这些功能使AutoGen成为根据特定要求和约束微调和优化LLM推断的有价值工具。

结论

在这个 AutoGen 的旅程中,我们揭示了一个未来的蓝图,人工智能与人类的协作不受任何限制。这个多代理对话框架赋予我们组建个性化的 AI 夢幻团队的能力,抹去了人与机器之间的界线。AutoGen 将我们推进到了无限可能的领域。它简化了复杂的任务,最大限度发挥了 LLM 模型的潜力,让我们能够开发下一代的 AI 应用。作为结论,问题不再是“是否”,而是“如何”你会踏上你自己由 AutoGen 驱动的旅程,并 embrace 一个真正无限的协作世界。开始构建、开始创新,并解锁今天 AutoGen 的潜力!

要点

  • AutoGen 推出了一个新时代,您可以创建一个个性化的 AI 夢幻团队,由熟练掌握各种领域的可对话代理组成,无缝协作。
  • AutoGen 简化了复杂的任务并自动化工作流程,使其成为协调和优化涉及大型语言模型 (LLMs) 的任务的强大工具。
  • 当使用 AutoGen 时,安全地管理 API 密钥和敏感数据至关重要。遵循最佳实践来保护你的信息是必不可少的。
  • 配置列表是一个重要的组件,能够通过高效处理多个配置和与 OpenAI API 的交互,使代理能够在各种任务中适应并表现出色。

常见问题

本文中显示的媒体不属于 Analytics Vidhya,而是根据作者的自行决定使用。

Leave a Reply

Your email address will not be published. Required fields are marked *