把通过autogen构建的AI agent接入到自己的应用程序中

这篇具有很好参考价值的文章主要介绍了把通过autogen构建的AI agent接入到自己的应用程序中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

同志们,我很高兴的告诉大家我们有了一个比langchain更好用的构建AI agent的工具。众所周知,langchain主要就是一堆字符串提示模板构成的,这导致,当我们的模型性能不够强大(比如说gpt3.5)时会因为上下文的干扰而产生幻觉,从而无法完成我们所需要让其完成的任务(之前想让它自己跑代码,结果加了点限定条件字符串就匹配不上了/(ㄒoㄒ)/~~)。而Autogen就没这种问题,而且Autogen内部还有一些对LLM记忆的一些优化,构建AI agent的时候简单快捷准确性高。接下来,我将和大家一起学习,如何使用Autogen,以及如何将代理嵌入到自己的应用程序中,让我们开始吧!

环境:conda 4.5.11、python 3.9.12、Windows 11、VScode

一、配置网络环境

可以直连openai api的,或者使用其它国内可以访问的api的,可以忽略此步骤

# 在引入openai api 对环境变量进行初始化
os.environ["OPENAI_API_BASE"] = "这里填你的代理服务器地址/v1"
os.environ["OPENAI_API_PREFIX"] = "这里填你的代理服务器地址"

如何免费获取代理服务请参考这里:

国内开发者如何最小成本调用openai的接口? - 掘金

二、安装Autogen

和其它python库一样,pip install 即可

pip install openai
pip install pyautogen

三、创建配置列表

在autogen的github上有一个模板

[
    {
        "model": "gpt-4",
        "api_key": "<your OpenAI API key here>"
    },
    {
        "model": "gpt-4",
        "api_key": "<your Azure OpenAI API key here>",
        "api_base": "<your Azure OpenAI API base here>",
        "api_type": "azure",
        "api_version": "2023-07-01-preview"
    },
    {
        "model": "gpt-3.5-turbo",
        "api_key": "<your Azure OpenAI API key here>",
        "api_base": "<your Azure OpenAI API base here>",
        "api_type": "azure",
        "api_version": "2023-07-01-preview"
    }
]

你选择你需要的那个,再把其它没用的删了就行。例如说:

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

修改完成之后保存为json文件,记着文件名和路径。

再这之后我们就可以把配置文件引入到我们的py文件中了

#引入autogen的配置文件解析器
from autogen import config_list_from_json
#获取配置文件
#env_or_file这里填写你的配置文件的名字
#file_location这里填写你的配置文件的路径
config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST.json",file_location="D:\\CodeFiles\\CondaProgram\\MieruData\\test")

当然,你也可以直接填写你的配置到config_list 中,问题不大。

config_list = [{'model': 'gpt-3.5-turbo', 'api_key': '<your OpenAI API key here>'}]

四、创建第一个autogen程序

  1. 首先,引入并实例化出用户代理对象和助手代理对象

    from autogen import AssistantAgent, UserProxyAgent
    assistant = AssistantAgent(
        name="Monika",
        llm_config={
            "seed": 42,  # seed for caching and reproducibility
            "config_list": config_list,  # a list of OpenAI API configurations
            "temperature": 0,  # temperature for sampling
        },  # configuration for autogen's enhanced inference API which is compatible with OpenAI API
    )
    user_proxy = UserProxyAgent(
        name="user_proxy",
        max_consecutive_auto_reply=2,
        is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
        code_execution_config={
            "work_dir": "coding",
            "use_docker": True,  # set to True or image name like "python:3" to use docker
        },
        llm_config={"config_list": config_list}
    )
    
  2. 使用initiate_chat函数进行推理

    user_proxy.initiate_chat(
        assistant,
        message="""尝试对数据进行分析。【文件地址:D:\CodeFiles\CondaProgram\MieruData\data\inputData\Mytest.csv】"""
        ,clear_history = True
    )
    
  3. 完整代码

    import os
    os.environ["OPENAI_API_BASE"] = "https://transfer-4t4.pages.dev/v1"
    os.environ["OPENAI_API_PREFIX"] = "https://transfer-4t4.pages.dev"
    from autogen import AssistantAgent, UserProxyAgent, config_list_from_json
    config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST.json",file_location="D:\\CodeFiles\\CondaProgram\\MieruData\\test")
    assistant = AssistantAgent(
        name="Monika",
        llm_config={
            "seed": 42,  # seed for caching and reproducibility
            "config_list": config_list,  # a list of OpenAI API configurations
            "temperature": 0,  # temperature for sampling
        },  # configuration for autogen's enhanced inference API which is compatible with OpenAI API
    )
    user_proxy = UserProxyAgent(
        name="user_proxy",
        max_consecutive_auto_reply=2,
        is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
        code_execution_config={
            "work_dir": "coding",
            "use_docker": True,  # set to True or image name like "python:3" to use docker
        },
        llm_config={"config_list": config_list}
    )
    user_proxy.initiate_chat(
        assistant,
        message="""尝试对数据进行分析。【文件地址:D:\CodeFiles\CondaProgram\MieruData\data\inputData\Mytest.csv】"""
        ,clear_history = True
    )
    
  4. 运行结果如下

    autogen连接azure openai,人工智能

    当你键入回车的时候,你的user_proxy 会进行自动回复,有代码的时候会运行代码。如

    autogen连接azure openai,人工智能
    autogen连接azure openai,人工智能
    可以看到我们现在存在两个问题

    1. 输入只能在终端进行,如果我们需要把它接入到应用程序中时,我们的应用程序是输入不进去的。
    2. 代理在自动执行代码的时候会把pip的过程当作python代码去执行,导致我们的对话一直纠缠在安装环境当中。

    之后,我们来解决问题1;对于问题2,你把结果返回给它之后,它接下来就会换成sh脚本了。

    五、获取对话记录

    我们的代理要接入程序的话,得先要获取到代理在说什么对吧。

    在代理类里面有两个可以获取对话记录的函数。一个是chat_messages一个是last_message

    1. 我们先用chat_messages试试

      #在原来的代码后面加上这个
      messge = user_proxy.chat_messages()
      print(f"message:{messge}")
      

      然而结果看来是不行(其实我们也用不上这个)

      autogen连接azure openai,人工智能

    2. 我们再用last_message试试

      message = user_proxy.last_message()
      print(f"message:{message}")
      

      这次没问题了

      autogen连接azure openai,人工智能

    3. 创造一个新的获取所有对话记录的函数

      这个看个人需求需不需要,说实话就我们接下来的要构建的应用来说是用不上这个的。

      ctrl+左键,点击last_message函数,查看源码。

      autogen连接azure openai,人工智能

      可以发现chat_messages是直接返回 ._oai_messages 属性的,而last_message则多出了一个解析的步骤。这可能就是chat_messages报错的原因的所在。

      我们依葫芦画瓢,在后面再添加一个函数all_message,内容如下

      def all_message(self, agent: Optional[Agent] = None) -> Dict:
              """我发现chat_message不能用,但last可以。
              我来把last_massage改改,代替chat_message
              """
              if agent is None:
                  n_conversations = len(self._oai_messages)
                  if n_conversations == 0:
                      return None
                  if n_conversations == 1:
                      for conversation in self._oai_messages.values():
                          return conversation
                  raise ValueError("More than one conversation is found. Please specify the sender to get the last message.")
      

      添加后如图所示
      autogen连接azure openai,人工智能

      接下来,让我们看看它的效果如何

      # 我们定义的新的获取历史信息的函数
      message = user_proxy.all_message()
      print(f"message:{message}")
      

      autogen连接azure openai,人工智能

      可以看到我们已经成功的获取到了历史信息。

    六、由我们自行控制的每一步

解决问题:输入只能在终端进行

先给代码(有时间的话我再说一下为什么这样做)

    #用以下内容替换initiate_chat
    while True:
       text = input("请输入:")
       assistant.reset_consecutive_auto_reply_counter(user_proxy)
       user_proxy.reset_consecutive_auto_reply_counter(assistant)
       assistant.reply_at_receive[user_proxy] = True
       user_proxy.send(message=text,recipient=assistant,request_reply=True)
       lastmsg = user_proxy.last_message()
       print(lastmsg)

结果如图

autogen连接azure openai,人工智能

我们现在已经可以控制每一步的输入了,并且每一步都能捕获到assistant的回复。

现在还有一个缺点,就是我们的user_proxy执行不了代码了。

我们再次进行改进:

   while True:
       text = input("请输入:")
       if text == "自动填充代码执行结果":
           text = codeAnswer
       assistant.reset_consecutive_auto_reply_counter(user_proxy)
       user_proxy.reset_consecutive_auto_reply_counter(assistant)
       assistant.reply_at_receive[user_proxy] = True
       user_proxy.send(message=text,recipient=assistant,request_reply=True)
       lastmsg = user_proxy.last_message()
       # 提取代码块
       code = extract_code(lastmsg['content'])
       codeAnswer = ""
       # 它可能一次提供多个代码块,我们试出它的每个结果
       for Acode in code:
           if Acode[0] == "python":
               # 当代码类型是python时运行代码
               # logs_all是代码的执行结果
               logs_all = user_proxy.execute_code_blocks([Acode])
               # 把答案拼起来
               codeAnswer += logs_all[1] + "\n"

现在就可以了。

看看效果

autogen连接azure openai,人工智能

安装库的那一步不管的话,我们的目的其实已经完成了。

七、把AI嵌入到应用中

在这里我用我的大作业Demo「可视化数据分析平台」为例。

后端框架:Flask

大家可以用自己熟悉框架来进行。

# 把对话过程封装成函数
def AIAgent(text,assistant,user_proxy,codeAnswer):
    if text == "自动代码执行":
        text = codeAnswer
		#这个会重置对话次数,给它注释掉
    #assistant.reset_consecutive_auto_reply_counter(user_proxy)
    user_proxy.reset_consecutive_auto_reply_counter(assistant)
    #assistant.reply_at_receive[user_proxy] = True
    user_proxy.send(message=text,recipient=assistant,request_reply=True)
    lastmsg = user_proxy.last_message()
    # 提取代码块
    code = extract_code(lastmsg['content'])
    codeAnswer = ""
    # 它可能一次提供多个代码块,我们试出它的每个结果
    for Acode in code:
        if Acode[0] == "python":
            # 当代码类型是python时运行代码
            # logs_all是代码的执行结果
            logs_all = user_proxy.execute_code_blocks([Acode])
            # 把答案拼起来
            codeAnswer += logs_all[1] + "\n"
    return lastmsg['content'],codeAnswer
@app.route('/chat', methods=['POST'])
def chat():
    # 从请求中获取消息
    message = request.form.get('message')
    full_path = session['full_path']
    if "数据地址" not in message:
        message = f"{message} \n【数据地址:{full_path}】"

    if "自动代码执行" in message:
        message = "自动代码执行"

    if "图" in message or "可视化" in message:
        hack = "如果要绘制图像的话,请把图像保存在/static/img/createdImg/created.png。并且打印'图像已绘制'到控制台"
        message = f"{message} \n 【{hack}】"
    if session['codeAnswer'] != None:
        codeAnswer = str(session['codeAnswer'])
        response,codeAnswer =  AIAgent(text=message,assistant=Globalassistant,user_proxy=Globaluser_proxy,codeAnswer=codeAnswer)
    else:
        response,codeAnswer =  AIAgent(text=message,assistant=Globalassistant,user_proxy=Globaluser_proxy,codeAnswer="")
    session['codeAnswer'] = codeAnswer

    show_image = '图像已绘制' in response
    # 返回一个 JSON 响应
    return jsonify({'response': response, 'show_image': show_image})

结果:

autogen连接azure openai,人工智能

总结

这个框架我也不是很熟悉,我也是摸石头过河的,如有错误请毫不吝啬的指出,我也希望我能在错误中进步。

我构思的项目主要是用它来执行代码的,而网上根本找不到这方面的教程,所以我想自己写一篇。

我的环境好像与docker不兼容,无法在docker环境下运行代码。这个可能会影响sh代码的运行。

项目是一个软件工程的大作业,但我们的评分标准是主要是用例图、文档、PPT这些,Demo主要是用来证明项目是可行的。所以我做的很粗糙,很多东西都不能用,请见谅。

项目地址:https://github.com/mizu1/MieruDataautogen连接azure openai,人工智能文章来源地址https://www.toymoban.com/news/detail-762120.html

到了这里,关于把通过autogen构建的AI agent接入到自己的应用程序中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 使用Gradio构建生成式AI应用程序; Stability AI推出Stable Diffusion XL 1.0

    使用Gradio构建生成式AI应用程序; Stability AI推出Stable Diffusion XL 1.0

    🦉 AI新闻 🚀 Stability AI推出最先进的AI工具Stable Diffusion XL 1.0 摘要 :Stability AI宣布推出Stable Diffusion XL 1.0,该版本是其迄今为止最先进的AI工具。Stable Diffusion XL 1.0提供更鲜艳、更准确的图片生成,包括对比度、阴影和光照效果。该版本还支持用户定制生成的图片风格和在图片

    2024年02月14日
    浏览(9)
  • 在开源的基础上构建 AI 需要一种全新的应用程序安全方法

    在开源的基础上构建 AI 需要一种全新的应用程序安全方法

    关注公众号: 网络研究观 获取更多信息 人工智能已经从科幻小说中涌现出来,进入了我们的日常生活。 在开源软件(OSS)模型的支持下,人工智能革命正在加速。这些模型是专为开发 AI 而制作的复杂开源代码包,使组织能够高效、大规模地部署 AI 模型。 虽然大多数组织

    2024年04月27日
    浏览(12)
  • 什么是RESTful API,以及如何它使用构建 web 应用程序(InsCode AI 创作助手)

    RESTful API 是一种基于 REST(Representational State Transfer,表征状态转移) 架构风格的 API,它使用 HTTP 协议的方法(GET,POST,PUT,DELETE)来实现资源的创建、读取、更新和删除。通过这种方式,API 可以更加简单和灵活,使得不同编程语言之间的交互更加容易。 使用 RESTful API 构建

    2024年02月09日
    浏览(24)
  • LangChain(6)构建用户自己的Agent

    LangChain(6)构建用户自己的Agent

    LangChain 中有一些可用的Agent内置工具,但在实际应用中我们可能需要编写自己的Agent。 输出的答案为 49.03,是个错误答案,实际上为 49.07=(7.81 * 2) * pi 可见模型并没有使用我们定义的 Circumference calculator 进行计算,而是LLM模型自己进行了推理,但LLM不善于数据计算,所以最后的

    2024年02月16日
    浏览(8)
  • Building AI-Copilot:构建 LLM 支持的生成应用程序的一些经验教训和模式

    我们正在构建一个用于产品策略和生成创意的实验性人工智能副驾驶,名为“Boba”。一路上,我们学到了一些关于如何构建此类应用程序的有用经验,我们已经根据模式制定了这些应用程序。这些模式允许应用程序帮助用户更有效地与大语言模型 (LLM) 交互,编排提示以获得

    2024年02月14日
    浏览(10)
  • 【AI的未来 - AI Agent系列】【MetaGPT】2. 实现自己的第一个Agent

    【AI的未来 - AI Agent系列】【MetaGPT】2. 实现自己的第一个Agent

    在MetaGPT中定义的一个agent运行示例如下: 一个agent在启动后他会观察自己能获取到的信息,加入自己的记忆中 下一步进行思考,决定下一步的行动,也就是从Action1,Action2,Action3中选择执行的Action 决定行动后,紧接着就执行对应行动,得到这个环节的结果 以Task3 作业为例,

    2024年01月20日
    浏览(14)
  • 如何利用 Agent 构建AI服务

    如何利用 Agent 构建AI服务

    近年来,人工智能(AI)技术的飞速发展引起了广泛的关注和讨论。而如今,我们正站在一个全新的时代门槛前,面对着AI Agent带来的的崭新未来。以LLM(大型语言模型)作为其核心控制器构建代理是一个很酷的概念。它模拟人类的工作流程,能够自主进行信息搜索、分析、利

    2024年02月11日
    浏览(11)
  • 为应用程序接入阿里云CDN优化网站访问速度

    网站接入CDN的前提必须域名要备案,否则无法使用。 如果你的域名没有进行备案,但是你有真实的域名,在配置CDN的时候加速区域可以选择全球非中国大陆,通过这种配置可以去验证CDN的效果,配置完成后,

    2024年02月11日
    浏览(15)
  • 文心一言接入Promptulate,开发复杂LLM应用程序

    最近在尝试将文心一言的LLM能力接入Promptulate,故写了一篇博客记录一下,Promptulate 是 Promptulate AI 旗下的大语言模型自动化与应用开发框架,旨在帮助开发者通过更小的成本构建行业级的大模型应用,其包含了LLM领域应用层开发的大部分常用组件,如外部工具组件、模型组件

    2024年02月10日
    浏览(26)
  • Flutter中的Web应用程序开发:构建现代Web应用程序

    作者:禅与计算机程序设计艺术 作为人工智能专家,程序员和软件架构师,CTO,我今天将为大家分享有关 Flutter 中 Web 应用程序开发的见解。在这篇文章中,我们将深入探讨 Flutter Web 应用程序的开发过程、技术原理以及最佳实践。 引言 随着移动设备的普及,Web 应用程序在全

    2024年02月12日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包