LLM之Agent(七)| AutoGen介绍

机器学习

picture.image

一、Autogen介绍

   Autogen是Microsoft开发的一个用于简化LLM工作流的编排、优化和自动化的框架。它提供了可定制和可交谈的代理,充分利用了大模型(比如GPT-4)的能力,并且可以集成人类智慧和工具,在多个代理之间可以实现自动化聊天。

picture.image

   如上图所示:AutoGen使用多智能体对话实现了复杂的基于LLM的工作流。(左)AutoGen代理可以定制,可以基于LLM、工具、人员,甚至是它们的组合。(右上角)代理可以通过对话解决任务。(右下角)该框架支持许多其他复杂的对话模式。

使用AutoGen,构建一个复杂的多智能体对话系统可以归结为:

  • 定义一组具有专门功能和角色的代理集合;

  • 定义代理之间的交互行为,比如,一个代理接收到来自另一个代理的消息时要回复什么。

    这两个步骤都是直观的和模块化的,使这些代理可以重复使用和组合。例如,要构建一个基于代码的问答系统,可以如下图所示设计代理及其交互,这样的系统可以在像 supply-chain optimization(https://github.com/microsoft/OptiGuide)的应用中可以将所需的手动交互次数从3倍减少到10倍。使用AutoGen可以将编码工作量减少4倍以上。
    

picture.image

   如上图所示:Commander接收用户的问题,并与Writer和Safeguard进行协调。Writer编写代码和注释,Safeguard确保安全,Commander执行代码。如果出现问题,可以重复此过程,直到问题得到解决。带阴影的圆表示可以重复多次的步骤。


   在这个框架中,是将每个代理(agents)视为具有其独特系统指令的单个ChatGPT会话。例如,可以指示一个代理充当编程助手,根据用户请求生成Python代码。另一个代理可以是代码审查器,它获取Python代码片段并对其进行故障排除。然后,可以将第一个代理的响应作为输入传递给第二个代理。其中一些代理甚至可以访问外部工具,比如ChatGPT插件,如Code Interpreter或Wolfram Alpha。


   使用AutoGen内置代理的一种简单方法是调用助理代理和用户代理之间的自动聊天。如下图所示,可以轻松构建ChatGPT+ Code Interpreter+plugins的增强版,具有可定制的自动化程度,可在自定义环境中使用,并可嵌入更大的系统中。同样也可以根据历史交互记录添加个性化。

picture.image

以代理会话为中心的设计有许多好处,包括:

  • 更自然地处理歧义、反馈、进度和协作;

  • 实现有效的 编码相关任务,如来回故障排除的工具使用;

  • 允许用户通过聊天中的代理无缝选择加入或退出;

  • 通过多位专家的合作实现集体目标。

     AutoGen支持自动化聊天和多样化的通信模式,可以轻松地协调复杂、动态的工作流程并进行多功能性实验。下图展示了一个由AutoGen启用的会话象棋。
    

picture.image

二、Autogen实战

   下面我们以FizzBuzz游戏进行演示autogen的使用方法,FizzBuzz游戏是一个报数游戏,从1开始报数,如果这个数可以被3整除,你就要改为说"Fizz",如果能被5整除,就改为说"Buzz"。如果同时是35的倍数,打印"FizzBuzz"。现在,你的数学老师开始轮流指向每个同学,他们开心的喊出"1!""2!""Fizz!""4!""Buzz!"...

2.1 设置环境

   Agent创建的代码可以在各种环境中执行,例如在Colab、Docker或原始环境中。推荐

使用Colab和Docker作为执行环境。

2.2 初始设置

  首先,我们必须配置Open API密钥以及其他内容。为此,我们复制autogen根目录中的OAI\_CONFIG\_LIST\_sample来生成OAI\_CONFIG \_LIST文件,并将此文件与稍后运行的脚本放在同一目录中。

          
[              {                  "model": "gpt-4",                  "api_key": "<your OpenAI API key here>"              }          ]
      

2.3 安装相关包

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:

          
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/

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 NoSQL 的实践与探索
随着 NoSQL 的蓬勃发展越来越多的数据存储在了 NoSQL 系统中,并且 NoSQL 和 RDBMS 的界限越来越模糊,各种不同的专用 NoSQL 系统不停涌现,各具特色,形态不一。本次主要分享字节跳动内部和火山引擎 NoSQL 的实践,希望能够给大家一定的启发。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论