暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

构建智能体应用,以 AutoGen 开启智能体的第⼀步

Azure云科技 2024-02-21
2042


云布道师‣ 周记

微软云布道师团队致力于向软件生态系统中的开发人员和其他人推广领先技术,进一步提高技术教育以及使用 Microsoft 云 + AI 平台的熟练程度。

微软高级云技术布道师卢建晖老师,将通过「云布道师 ‣ 周记」专栏,为您带来 AI +Data 领域新鲜的技术加餐。






在上一篇文章构建智能体应用 - 认识智能体(⼀) 中,我们介绍了智能体的相关知识。要实现 AI Agents 可通过多种不同框架,其中微软的 AutoGen 是⼀个比较成熟的框架。AutoGen 主要基于两种编程语言 .NET 和 Python,其中Python 的版本会更为成熟一些。在本文中我们主要介绍基于 Python 的 AutoGen 版本,如果您希望了解基于  .NET 版本的内容,可以访问下方地址:

https://microsoft.github.io/autogen-for-net



1

AutoGen 的特点


AutoGen 具备兼容不同大语言模型的能力。针对不同任务的工具链以及人机交互的能力,是用于解决智能体之间交互的开源框架。它的最大特点是能具备自动化的任务编排能力,可优化工作流程,更有强大的多智能体对话交互能力,可针对⼯作流程或者目标进行调整。结合框架中提供的不同 API,可以完成基于智能体所需要的缓存构建,错误处理,不同的大语言模型配置,上下文关联,对话过程设定等。对比基于 Copilot 应用的框架 Semantic Kernel 以及 LangChain,AutoGen 在自动化任务编排场景上更有优势,更偏向前端。当接收到目标任务后,AutoGen 可以为任务进行编排,而 Semantic Kernel 和 LangChain 更像是提供解决任务编排环节上的弹药库,提供可以支撑完成任务的各种工具和方法。 

AutoGen 的构建非常简单,您只需要运行简单的代码,通过构建简单的拟⼈用户代理和助手,即可完成⼀个智能体构建。以下是快速构建单个智能体的方法: 


01




对于配置文件,Azure OpenAI 服务⼀般放置在根目录下的 AOAI_CONFIG_LIST,内容包括:

    [ 
       {
           "model": "Your Azure OpenAI Service Deployment Model Name",
           "api_key": "Your Azure OpenAI Service API Key",
           "base_url": "Your Azure OpenAI Service Endpoin",
           "api_type": "azure",
           "api_version": "Your Azure OpenAI Service version, eg 2023-12-01-preview"
       },
       {
           "model": "Your Azure OpenAI Service Deployment Model Name",
           "api_key": "Your Azure OpenAI Service API Key",
           "base_url": "Your Azure OpenAI Service Endpoin",
           "api_type": "azure",
           "api_version": "Your Azure OpenAI Service version, eg 2023-12-01-preview"
       },
       {
           "model": "Your Azure OpenAI Service Deployment Model Name",
           "api_key": "Your Azure OpenAI Service API Key",
           "base_url": "Your Azure OpenAI Service Endpoin",
           "api_type": "azure",
           "api_version": "Your Azure OpenAI Service version, eg 2023-12-01-preview"
       }
    ]
    复制

    如果是 OpenAI 服务 , 放置在根目录下的 OAI_CONFIG_LIST , 内容包括:

      [ 
         {
             "model": "Your OpenAI Model Name",
             "api_key": "Your OpenAI API Key"
         },
         {
             "model": "Your OpenAI Model Name",
             "api_key": "Your OpenAI API Key"
         },
         {
             "model": "Your OpenAI Model Name",
             "api_key": "Your OpenAI API Key"
         },
      ]
      复制

      完成配置后就可以通过 Python 加载:

        config_list = autogen.config_list_from_json( 
           env_or_file="AOAI_CONFIG_LIST",
           file_location=".",
           filter_dict={
               "model": {
                   "Your Model list"

               }
           },
        )
        复制


        02




        创建用户代理,以及智能体助手:

          # Create an AssistantAgent instance named "assistant" 
          assistant = autogen.AssistantAgent(
             name="assistant",
             llm_config={
                 "cache_seed": 42,
                 "config_list": config_list,
             }
          )
          # create a UserProxyAgent instance named "user_proxy"
          user_proxy = autogen.UserProxyAgent(
             name="user_proxy",
             human_input_mode="ALWAYS"
          )
          复制

          注意 

          A. 智能体助手和配置文件对应,并添加缓存,配置的作用是等于赋予智能体⼀个强大的“大脑”,并给予缓存记忆。 

          B. 用户代理可以模拟人的行为,您可以设置是否人为介入。我们知道智能体的特点是不仅有人的思维,也有人的交互行为。当我们通过智能体解决问题时,就需要考虑是否需要人为介入,如果不需要,您可以选择 Never。但有时候您必须选择 ALWAYS,因为当我们需要获取⼀些 API 时需要⼀些 Key ,或者⼀些网络地址文件的配合。您可以根据自己的场景去设定。



          03




          最后就是把拟人代理以及智能体助手关联在一起,并给予一个任务:

            messages = "tell me today's top 10 news in the world " 

            user_proxy.initiate_chat(assistant, message=messages)
            复制

            我们可以清晰看到智能体是如何完成完整交互,生成代码获取到今天最新的新闻的。如果您希望了解更多该案例,可以参考:

            https://github.com/kinfey/AutoGenDemo/blob/main/agent_demo_step01.ipynb 



            2

            AutoGen 的使用场景


            基于 AutoGen 的实现场景非常多,本文我更希望通过两个场景告诉⼤家如何利用 AutoGen 完成⼀个进化的智能体应用场景。如您想了解更多案例,可以参考:https://microsoft.github.io/autogen/docs/Examples


            案例一:结合多模态的能力

            完成一个计算机视觉标注的工作


            需求:在生产过程中,我们需要设立一个安全帽检测机制,一旦发现员⼯没有佩戴安全帽,需要标注出来。 

            从传统人工智能应用思考,我们需要做的是收集佩戴安全帽的图片数据,打标签,通过深度学习训练完成模型,然后进行判断并标注。现在我们有了多模态模型,它简化我们的工作。 在该场景中我们可以结合多模态的智能体,代码智能体,以及运行代码的智能体相结合完成目标任务。 



            AutoGen 中支持群聊,您可以在会话中结合多个智能,该代码如下: 

              groupchat = autogen.GroupChat(agents=[user_proxy, checker,coder, commander], messages=[], max_round=10) 

              manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)
              复制

              如果您希望了解更多,请访问该案例的 Repo: https://github.com/kinfey/AutoGenDemo/blob/main/agent_demo_step02.ipynb 


              案例二:

              在 Assistant API 加持下的 AutoGen


              Assistant API 是专为智能体而生的,您可以借助 Assistant API 通过更少的代码构建智能体应用。它集成了状态管理、上下⽂关联、聊天线程以及代码执行等能力,更容易实现第三方扩展接入 (代码解释器, 知识检索以及 Function Calling 等)。 AutoGen 在没有 Assistant API 之前,虽然已经具备类似的功能,但在 Assistant API 加持下,AutoGen 在多智能体场景下可以更灵活定义,可以设定更多的交互场景,更灵活的任务执⾏,以及进行更好的端到端流程管理。 


              注意: 

              在文本创作之前 AutoGen 还没有支持 Azure OpenAI 服务上提供的 Assistant API , 所以本文将基于 OpenAI Assistant API 来完成。 

              在使用 Assistant API 之前,必须在 OpenAI 或者 Azure OpenAI 服务的门户上创建好相关的 Assistants。



              具体请参考:

              https://learn.microsoft.com/en-us/azure/ai-services/openai/assistants-quickstart 


              在 AutoGen 使用 Assistant API 需要调整配置,tools 类型可以设置 code_interpreter, retrival, function calling: 

                llm_config = { 
                   "config_list": config_list,
                   "assistant_id": "Your OpenAI Assistant ID ",  
                   "tools": [{"type": "code_interpreter"}],
                   "file_ids": [
                       "Your OpenAI Assistant File 1",
                       "Your OpenAI Assistant File 2"
                   ],
                }
                复制

                基于 Agent 的设置:

                  gpt_assistant = GPTAssistantAgent( 
                     name="Your Assistant Agent Name", instructions="Your Assistant Agent Instructions ", llm_config=llm_config
                  )
                  复制

                  如果想尝试运行这个 repo 的内容,请访问: 

                  https://github.com/kinfey/AutoGenDemo/blob/main/agent_demo_step03.ipynb 



                  3

                  构建 AutoGen 的可视化方案

                   - AutoGen Studio


                  对于企业解决方案,更多⼈喜欢使用可视化和低代码相结合的方式完成工作流设定。AutoGen Studio 为企业带来了更好的基于工作流的智能体定制的可视化方案。



                  安装方法 

                  AutoGen Studio 建议在 Python 3.11 环境下启动,您可以结合 conda 安装 Python 环境以及安装 AutoGen Studio 包。

                    conda create -n agstudioenv python=3.11.7 

                    conda activate agstudioenv

                    pip install autogenstudio
                    复制

                    在启动前记得配置好 OPENAI_API_KEY 或者您的 AZURE_OPENAI_API_KEY:

                      export OPENAI_API_KEY='Your OpenAI Key' 

                      export AZURE_OPENAI_API_KEY='Your Azure OpenAI Service Key'
                      复制

                      启动您的 AutoGen Studio,其中 port 是端口可以根据需要设定: 

                        autogenstudio ui --port 8088
                        复制

                        场景 

                        我是⼀个英超球迷,我希望构建⼀个智能体,帮我根据积分榜分析⼀下新赛季英超各队的情况。


                        为您的智能体装配弹药 

                        现在 AutoGen Studio 支持配置技能、模型、多智能体交互、以及智能体之间的互动流程。通过选择 Build 菜单,可以看到这四个功能:


                        01




                        Skills 通过 Python 代码可以针对智能体添加不同功能。 这里我添加⼀个 get_league_standing 的 Skills:



                        注意:

                        您需要注册 https://www.football-data.org/ 获取 API Key



                          import requests 
                          import json

                          def get_league_standings(api_key='Your football-data API Key'):
                             url = "http://api.football-data.org/v4/competitions/PL/standings"
                             headers = {"X-Auth-Token": api_key}
                             response = requests.get(url, headers=headers)
                             data = response.json()

                             standings = []  

                             if 'standings' in data:
                                 for standing in data['standings']:
                                     if standing['type'] == 'TOTAL':  
                                         for team in standing['table']:
                                             team_data = {
                                                 "position": team['position'],
                                                 "teamName": team['team']['name'],
                                                 "playedGames": team['playedGames'],
                                                 "won": team['won'],
                                                 "draw": team['draw'],
                                                 "lost": team['lost'],
                                                 "points": team['points'],
                                                 "goalsFor": team['goalsFor'],
                                                 "goalsAgainst": team['goalsAgainst'],
                                                 "goalDifference": team['goalDifference']
                                             }
                                             standings.append(team_data)
                                         break  

                                 standings_json = json.dumps(standings, ensure_ascii=False, indent=4)
                                 return standings_json
                             else:
                                 return "Error"
                          复制

                          保存后,如图所示:



                          02




                          Models 对应模型的绑定,设计在启动之前要把 OpenAI 或者 Azure OpenAI 服务的 Key 设定好, 我们添加⼀个 gpt-4-turbo 模型的绑定, 在这里我使用 Azure OpenAI 服务。注意:部署的名字和 EndPoint 需要和您的 Azure OpenAI服务一一对应。



                          03




                          Agents 添加您的智能体,您可以在这里设定不同的智能体,我们这个案例只需要设置单个智能体即可以完成。在这里添加⼀个 football_expert_assistant 的智能体,并为系统设置⼀个角色,以及把刚才添加的 Skill - get_league_standing 和 Models 绑定进去,如图:



                          04




                          Workflows 可以设定智能体的工作流方式,可以设定智能体的交互对话工作流,我们设置最简单的两个智能体交互⽅式 - “Two Agents” :



                          我们需要针对接收者 – Receiver 进行设置,绑定设置好的 football_expert_assistant 的智能体和模型。


                          运行您的智能体 

                          在 AutoGen Studio UI 中可以通过 Playground 运行您的应用,只需要通过创建 Session 来对应设定的 Workflows 即可。



                          运行效果:



                          当然您也可以通过选中 Session,来发布智能体,通过 Gallery 菜单即可查看到。


                          AutoGen 是比较全面的智能体框架,对于希望构建智能体的企业不仅提供了应用框架,还提供了可视化、可交互的 UI,降低了智能体的入门门槛,让更多⼈可以利用智能体构建应用。




                          相关资源


                          Microsoft AutoGen

                          https://microsoft.github.io/autogen/


                          Microsoft AutoGen Studio UI 2.0

                          https://microsoft.github.io/autogen/blog/2023/12/01/AutoGenStudio/ 


                          AutoGen Studio: Interactively Explore Multi-Agent Workflows

                          https://microsoft.github.io/autogen/blog/2023/12/01/AutoGenStudio/ 


                          Azure OpenAI Service Assistant API Docs

                          https://learn.microsoft.com/azure/ai-services/openai/assistants-quickstart 





                          本文作者|卢建晖

                          微软高级云技术布道师 



                          文章转载自Azure云科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论