? ? ? ?Autogen是Microsoft开发的一个用于简化LLM工作流的编排、优化和自动化的框架。它提供了可定制和可交谈的代理,充分利用了大模型(比如GPT-4)的能力,并且可以集成人类智慧和工具,在多个代理之间可以实现自动化聊天。
? ? ? ?如上图所示:AutoGen使用多智能体对话实现了复杂的基于LLM的工作流。(左)AutoGen代理可以定制,可以基于LLM、工具、人员,甚至是它们的组合。(右上角)代理可以通过对话解决任务。(右下角)该框架支持许多其他复杂的对话模式。
使用AutoGen,构建一个复杂的多智能体对话系统可以归结为:
? ? ? 这两个步骤都是直观的和模块化的,使这些代理可以重复使用和组合。例如,要构建一个基于代码的问答系统,可以如下图所示设计代理及其交互,这样的系统可以在像 supply-chain optimization(https://github.com/microsoft/OptiGuide)的应用中可以将所需的手动交互次数从3倍减少到10倍。使用AutoGen可以将编码工作量减少4倍以上。
? ? ? ?如上图所示:Commander接收用户的问题,并与Writer和Safeguard进行协调。Writer编写代码和注释,Safeguard确保安全,Commander执行代码。如果出现问题,可以重复此过程,直到问题得到解决。带阴影的圆表示可以重复多次的步骤。
? ? ? ?在这个框架中,是将每个代理(agents)视为具有其独特系统指令的单个ChatGPT会话。例如,可以指示一个代理充当编程助手,根据用户请求生成Python代码。另一个代理可以是代码审查器,它获取Python代码片段并对其进行故障排除。然后,可以将第一个代理的响应作为输入传递给第二个代理。其中一些代理甚至可以访问外部工具,比如ChatGPT插件,如Code Interpreter或Wolfram Alpha。
? ? ? ?使用AutoGen内置代理的一种简单方法是调用助理代理和用户代理之间的自动聊天。如下图所示,可以轻松构建ChatGPT+ Code Interpreter+plugins的增强版,具有可定制的自动化程度,可在自定义环境中使用,并可嵌入更大的系统中。同样也可以根据历史交互记录添加个性化。
以代理会话为中心的设计有许多好处,包括:
? ? ? ?AutoGen支持自动化聊天和多样化的通信模式,可以轻松地协调复杂、动态的工作流程并进行多功能性实验。下图展示了一个由AutoGen启用的会话象棋。
? ? ? ?下面我们以FizzBuzz游戏进行演示autogen的使用方法,FizzBuzz游戏是一个报数游戏,从1开始报数,如果这个数可以被3整除,你就要改为说"Fizz",如果能被5整除,就改为说"Buzz"。如果同时是3和5的倍数,打印"FizzBuzz"。现在,你的数学老师开始轮流指向每个同学,他们开心的喊出"1!"、"2!"、"Fizz!"、"4!"、"Buzz!"...
? ? ? ?Agent创建的代码可以在各种环境中执行,例如在Colab、Docker或原始环境中。推荐使用Colab和Docker作为执行环境。
? ? ? 首先,我们必须配置Open API密钥以及其他内容。为此,我们复制autogen根目录中的OAI_CONFIG_LIST_sample来生成OAI_CONFIG _LIST文件,并将此文件与稍后运行的脚本放在同一目录中。
[
{
"model": "gpt-4",
"api_key": "<your OpenAI API key here>"
}
]
PS:Python version >= 3.8, < 3.12
pip install pyautogen
? ? ? ?以下代码中,如果use_docker标志设置为False,它将在本地Python环境中运行。???????
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json
code_execution_config = {
"work_dir": "coding",
"use_docker": False
}
config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
user_proxy = UserProxyAgent("user_proxy", code_execution_config=code_execution_config)
message = "Create and run the FizzBuzz code."
user_proxy.initiate_chat(assistant, message=message)
? ? ? ?AssistantAgent是一个执行LLM的模块,在FizzBuzz中,它是一个创建源代码的模块。输入要使用的API及其密钥作为配置,AssistantAgent中的LLM推理配置可以通过LLM_cofing进行配置。
? ? ? ? 接下来,让我们建立一个UserProxyAgent。设计用于与个人互动并执行源代码的模块。使用code_execution_config配置执行环境和其他相关设置。
? ? ? ? 执行的预期结果应该类似于以下内容,将观察到FizzBuzz代码的生成???????
assistant (to user_proxy):
This is a very common coding challenge. The task is to print numbers from 1 to 100, but for multiples of 3 print "Fizz" instead of the number and for the multiples of 5 print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".
Here is the Python code that accomplishes the task:
```python
# filename: fizzbuzz.py
for num in range(1, 101):
if num % 3 == 0 and num % 5 == 0:
print('FizzBuzz')
elif num % 3 == 0:
print('Fizz')
elif num % 5 == 0:
print('Buzz')
else:
print(num)
```
To run this script, save it into a file called `fizzbuzz.py`, then run it using Python in a terminal:
```shell
python3 fizzbuzz.py
[1]?https://www.microsoft.com/en-us/research/blog/autogen-enabling-next-generation-large-language-model-applications/
[2]?https://quickaitutorial.com/how-powerful-autogen-is-reshaping-llm/#1_Set_up_your_environment
[3]?https://github.com/microsoft/autogen
[4]?https://microsoft.github.io/autogen/