LLM之Agent(六)| 使用AutoGen、LangChian、RAG以及函数调用构建超级对话系统

       本文我们将尝试AutoGen集成函数调用功能。函数调用最早出现在Open AI API中,它允许用户调用外部API来增强系统的整体功能和效率。例如,在对话过程中根据需要调用天气API。

      函数调用和Agent有各种组合,在这里我们将通过函数调用调用RAG检索增强生成机制,并使用结果生成输出。

     本文将介绍如何使用LangchianAutogenRetrieval Augmented Generation(RAG)函数调用来构建超级AI聊天机器人。

一、什么是Langchain?

      LangChain是一个开源库,为开发人员提供了构建由大型语言模型(LLM)支持的LLM应用程序的工具,如OpenAI或Hugging Face。可以构建动态的、响应数据的应用程序,利用自然语言处理方面的最新突破。

       LangChain是一个框架,使开发人员能够构建能够推理问题并将其分解为较小子任务的代理。

二、什么是Autogen?

       AutoGen不仅仅是一种工具,它也是协作人工智能的未来,多个智能体聚集在一起,将想法转化为现实,人工智能智能体团结、创新和提升。

      简单地说,AutoGen和LangChain都是用于开发LLM驱动的应用程序的框架。然而,两者之间存在一些关键区别:

  • AutoGen是一个多智能体框架,而LangChain是一个单智能体框架;
  • AutoGen更专注于代码生成,而LangChain更专注于通用NLP任务

三、什么是检索增强生成?

       检索增强生成RAG是一种人工智能框架,它从外部知识来源检索数据,以提高响应质量。它通过矢量相似性搜索和对外部数据集的实时更新等技术来确保准确性。

四、什么是函数调用?

       函数调用简化了与外部工具和API通信的聊天机器人的创建。

       换句话说,函数调用帮助开发人员向模型描述函数,并让模型智能地选择输出JSON对象。

五、搭建超级对话系统

安装环境以及所需要的包,命令如下:

!pip install langchain , "pyautogen[retrievechat]" , PyPDF2 , faiss-gpu

导入相关包

import autogenfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import FAISSfrom langchain.llms import OpenAIfrom langchain.memory import ConversationBufferMemoryfrom langchain.chains import ConversationalRetrievalChainfrom PyPDF2 import PdfReaderfrom langchain.text_splitter import RecursiveCharacterTextSplitter

步骤1:配置AutoGen和API密钥

AutoGen的配置文件是一个名为config_list的list:

config_list:是一个列表,其中包含使用的模型的配置;

seed:设置为42;

有了这个配置,下面看一下如何使用AutoGen:

config_list = [    {        "model": "gpt-4-1106-preview",        "api_key": "openai_api",    }]llm_config_proxy = {    "seed": 42,  # change the seed for different trials    "temperature": 0,    "config_list": config_list,    "request_timeout": 600}

步骤2:读取PDF文件

  1. 我们上传一个PDF文件并进行处理,使用PyPDF2读取PDF文件;

  2. 使用langchain中的text splitter将文本分割成chunk;

  3. 使用OpenAIEmbeddings嵌入PDF文件,然后FAISS存储在向量数据库中;

  4. Faiss可以将文本chunk转换为embedding。然后,这些向量可以用于各种应用,如相似性搜索。

reader = PdfReader('/content/openchat.pdf')corpus = ''.join([p.extract_text() for p in reader.pages if p.extract_text()])splitter =  RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200,)chunks = splitter.split_text(corpus)embeddings = OpenAIEmbeddings(openai_api_key = openai_api)vectors = FAISS.from_texts(chunks, embeddings)

步骤3:会话检索

一旦创建了数据库,我们就可以对其进行查询。

  1. 我们就可以使用Langchain的ConversationalRetrievalChain对用户的Prompt进行相似性搜索;

  2. let call ConversationBufferMemory是一个简单的内存缓冲区,用于存储会话的历史记录。

qa = ConversationalRetrievalChain.from_llm(    OpenAI(temperature=0),    vectors.as_retriever(),    memory=ConversationBufferMemory(memory_key="chat_history",     return_messages=True),)

步骤4:指定Assistant代理的配置

       AutoGen Agent支持对OpenAI模型的函数调用,但我们需要使用以下代码段指定函数:

llm_config_assistant = {    "Seed" : 42,    "temperature": 0,        "functions": [        {            "name": "answer_PDF_question",            "description": "Answer any PDF related questions",            "parameters": {                "type": "object",                "properties": {                    "question": {                        "type": "string",                        "description": "The question to ask in relation to PDF",                    }                },                "required": ["question"],            },                    }    ],    "config_list": config_list,    "timeout": 120,}

步骤5:配置Assistant Agent

        让我们创建一个名为“assistant”的具有特定配置的自动化助理代理。我们使用该assistant阅读PDF并生成准确的答案。

assistant = autogen.AssistantAgent(            name="assistant",            llm_config=llm_config_assistant,            system_message="""You are a helpful assistant, Answer the question                               based on the context. Keep the answer accurate.                               Respond "Unsure about answer" if not sure about                               the answer."""                    )

步骤6:配置UserProxy代理。

       User Proxy代理包括一个独特的功能:function_map参数,此参数用于将函数调用的配置与实际函数本身链接起来,确保无缝集成和操作。

user_proxy = autogen.UserProxyAgent(              name="user_proxy",            human_input_mode="NEVER",             max_consecutive_auto_reply=10,            code_execution_config={"work_dir": "coding"},            # llm_config_assistant = llm_config_assistant,            function_map={                "answer_PDF_question": answer_PDF_question            }        )

       一旦设置了代理,该脚本就会启动用户和聊天机器人之间的对话。这是通过调用user_proxy对象上的initiate_chat方法来完成的。initiate_chat方法需要两个参数:充当聊天机器人的assistant实例和描述任务的文本消息。

user_proxy.initiate_chat(    assistant,    message="""Write a Openchat word blog post titled why openchat better than GPT3 that uses the exact keyword OpenChat at least once every 100 words. The blog post should include an introduction, main body, and conclusion. The conclusion should invite readers to leave a comment. The main body should be split into at least 4 different subsections.""")

结果如下所示:

user_proxy (to assistant):Write a Openchat word blog post titled why openchat better than GPT3 that uses the exact keyword OpenChat at least once every 100 words. The blog post should include an introduction, main body, and conclusion. The conclusion should invite readers to leave a comment. The main body should be split into at least 4 different subsections.--------------------------------------------------------------------------------assistant (to user_proxy):# Why OpenChat is Better Than GPT-3## IntroductionIn the ever-evolving landscape of artificial intelligence, OpenChat has emerged as a groundbreaking platform, offering a unique set of capabilities that set it apart from its predecessors like GPT-3. In this blog post, we will delve into the reasons why OpenChat is not just a step ahead but a leap forward in AI communication technology.## Main Body### Enhanced Contextual UnderstandingOpenChat's ability to understand context surpasses that of GPT-3. It can maintain the thread of a conversation over a longer period, which allows for more coherent and meaningful interactions. This is particularly beneficial in customer service applications where conversations can be complex and require a deep understanding of the issue at hand.### Superior CustomizationOne of the key advantages of OpenChat is its superior customization options. Unlike GPT-3, OpenChat can be tailored to fit the specific needs of any business or application. This means that it can adhere to brand voice, manage specialized knowledge bases, and integrate seamlessly with existing systems, providing a more personalized experience for users.### Advanced Learning CapabilitiesOpenChat is designed to learn and adapt more efficiently than GPT-3. It can quickly incorporate new information and adjust its responses accordingly. This continuous learning process ensures that OpenChat remains up-to-date with the latest data, trends, and user preferences, making it an invaluable tool for dynamic and fast-paced environments.### Open-Source CommunityThe open-source nature of OpenChat is a game-changer. It allows developers from around the world to contribute to its development, leading to rapid innovation and improvement. This collaborative approach ensures that OpenChat is constantly evolving and benefiting from the collective expertise of a global community, unlike the more closed ecosystem of GPT-3.## ConclusionOpenChat represents a significant advancement in AI-powered communication, offering enhanced contextual understanding, superior customization, advanced learning capabilities, and the support of an open-source community. Its ability to provide more nuanced and adaptable interactions makes it a superior choice for businesses and developers looking to harness the power of AI.We invite you to share your thoughts and experiences with OpenChat and GPT-3. Have you noticed the differences in your interactions? Leave a comment below and join the conversation about the future of AI communication.

结论:

       在这篇文章中,我们解释了如何使用AutoGen、langchain、函数调用和检索增强生成来创建一个超级AI聊天机器人。当这些组件结合在一起时,能够更有效地处理复杂的任务,生成更相关和更了解上下文的内容,响应将更加强大和通用。

参考文献:

[1] https://levelup.gitconnected.com/autogen-langchian-rag-function-call-super-ai-chabot-3951911607f2

[2] https://www.microsoft.com/en-us/research/blog/autogen-enabling-next-generation-large-language-model-applications/

[3] https://github.com/microsoft/autogen

[4] https://python.langchain.com/docs/get_started/introduction

[5] https://www.microsoft.com/en-us/research/blog/autogen-enabling-next-generation-large-language-model-applications/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/254239.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 3.2.0 版本 mysql 依赖下载错误

最近想尝试一下最新的 SpringBoot 项目,于是将自己的开源项目进行了一些升级。 JDK 版本从 JDK8 升级至 JDK17。SpringBoot 版本从 SpringBoot 2.7.3 升级到 SpringBoot 3.2.0 其中 JDK 的升级比较顺利,毕竟 JDK 的旧版本兼容性一直非常好。 但是在升级…

红酒为何会变蓝?这是什么原因?

有的朋友发现红酒酒渍当天没有清洗,第二天会变蓝。于是非常好奇,明明红色的葡萄酒,怎么会变蓝呢? 葡萄酒不但含有酒精,还含有丰富的天然色素花青素。就像我们平时在家煮紫薯粥,加一点小苏打明明紫红色的粥就…

C++计算(a+b)*(c-b)的值 2023年9月c++一级 电子学会中小学生软件编程C++等级考试一级真题答案解析

目录 C计算(ab)*(c-b)的值 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C计算(ab)*(c-b)的值 2023年9月 C编程等级考试一级编程题 一、题目要求 1、编程实现 给定3个整数a、b、c,计算表达…

爬楼梯算法

计算跳到n阶的跳法总数 package com.zxj.algorithm.动态规划;import lombok.extern.slf4j.Slf4j;import java.util.Arrays;/*** 递归函数 f(n): 计算跳到n阶的跳法总数。* <p>* f(0) 0,* f(1) 1,* f(2) 2,* f(n) f(n-1) f(n-2)*/ Slf4j public class 爬楼梯 {/*** …

【MATLAB】数据拟合第12期-基于高斯核回归的拟合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 基于高斯核回归的拟合算法是一种处理回归问题的机器学习方法。以下是该算法的简单介绍&#xff1a; 核心思想&#xff1a;高斯核回归的核心思想是利用高斯核函数对数据点进行非线性映射&a…

SpringBoot已经禁掉了循环依赖!

还在问循环依赖嘛&#xff1f;SpringBoot已经禁掉了循环依赖&#xff01; 首发2023-12-18 11:26yuan人生 如果现在面试时还有人问你循环依赖&#xff0c;你就这样怼他&#xff1a;循环依赖是一种代码质量低下的表现&#xff0c;springboot2.6之后的版本已经默认禁用了。 Spr…

【MySQL】数据库基础入门 安装MySQL

目录 介绍&#xff1a; 安装MySQL: 设置 root 账号密码 2.配置环境变量 2.找到 Path 系统变量, 点击 "编辑" 介绍&#xff1a; MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一种用于管理和存储数据的软件。 安装MySQL: …

Vue3进阶:常用的指令缩写详解,以及代码使用示例

目录 v-bind缩写 v-on缩写 v-if和v-show缩写 v-for缩写 总结 更多关于Vue前端相关技术点&#xff0c;敬请关注公众号&#xff1a;CTO Plus后续的发文&#xff0c;有问题欢迎后台留言交流。 注意&#xff1a;由于排版太费时间&#xff0c;所以还是多多注重技术干货的内容吧…

国产电源芯片SCT2450QSTER,替代TPS54540-Q1,车规级36V 5A输出同步降压DCDC转换器

国产SCT2450Q是一款输出电流高达5A的高功率密度全集成同步降压DCDC转换器。其输入电压范围为3.8V到36V&#xff0c;集成了48mΩ高压侧MOSFET和23mΩ低压侧MOSFET。SCT2450Q采用峰值电流控制模式&#xff0c;可支持具有典型25uA低静态电流的脉冲跳过调制&#xff08;PSM&#xf…

Charles 安装与激活

步骤 1&#xff1a;购买 Charles 许可证 访问 Charles 官方网站&#xff1a;https://www.charlesproxy.com/ 在网站上查找并选择 “Buy” 或类似的选项。 选择适合你需求的许可证类型&#xff0c;填写相关信息并完成购买。 如果不想购买可点击此链接Charles 步骤 2&#xff…

ESP32 连接阿里云 MQTT 报错MQTT Connect err:2

解决方法 跳转到 这个头文件<PubSubClient.h>里 MQTT_MAX_PACKET_SIZE 把这个的大小从原来的256 改为1024 MQTT_KEEPALIVE 把这个大小从原来的15 改为65 修改后再次连接即可成功 如下图&#xff1a;

人工智能在电子商务中的十大最佳用例

“如果你没有躲在山洞里&#xff0c;你可能听说过人工智能&#xff08;AI&#xff09;这个神奇的东西。它就像一个超级智能的计算机大脑&#xff0c;像电子商务中的人工智能一样无处不在。你猜怎么着&#xff1f;它甚至进入了在线购物领域&#xff0c;这真是太棒了。” 人工智…

【贪心算法】【中位贪心】LeetCode:100123.执行操作使频率分数最大

涉及知识点 双指针 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 贪心算法 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 你可以对数组执行 至多 k 次操作&#xff1a; 从数组中选择一个下标 i &#xff0c;将 nums[i] …

分享!!!(一)小编总结的base64、blob、图片文件二进制相互转换的方式以及源码

目录 第一章 了解 1.1 大概结构 1.2 准备阶段 1.2.1 了解canvas 1.2.2 了解imageData 1.2.3 了解imgUrl 1.2.4 了解base64 1.2.5 了解blob/文件二进制流 1.2.6 了解arraybuffer 1.2.7 文件、图片 第二章 掌握图中的相互转换 2.1 cavas 与 imageData的互相转换 2.1…

【Java】基于fabric8io库操作k8s集群实战(pod、deployment、service、volume)

目录 前言一、基于fabric8io操作pod1.1 yaml创建pod1.2 fabric8io创建pod案例 二、基于fabric8io创建Service&#xff08;含Deployment&#xff09;2.1 yaml创建Service和Deployment2.2 fabric8io创建service案例 三、基于fabric8io操作Volume3.1 yaml配置挂载存储卷3.2 基于fa…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)控件的部分公共属性和事件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;控件的部分公共属性和事件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、公共属性 常用的公共属性有&#xff1a; 宽(with)、高(height)、…

Python Pandas 如何增加/插入一列数据(第5讲)

Python Pandas 如何增加/插入一列数据(第5讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

17.Oracle中instr()函数查询字符位置

1、instr()函数的格式 &#xff08;俗称&#xff1a;字符查找函数&#xff09; 格式一&#xff1a;instr( string1, string2 ) // instr(源字符串, 目标字符串) 格式二&#xff1a;instr( string1, string2 [, start_position [, nth_appearance ] ] ) // instr(源字符…

docker-harbor 私有仓库

docker三大组件&#xff1a;镜像、容器、仓库 仓库&#xff1a;保存镜像 私有&#xff0c;自定义用户的形式登陆仓库&#xff0c;拉取或者上传镜像&#xff08;内部管理的用户&#xff09; harbor是VMware公司开发的开源的企业级的docker registry项目 帮助用户快速的搭建一…

mov格式怎么转换成mp4

在现代数字化时代&#xff0c;视频成为人们交流、娱乐和记录生活的重要工具。然而&#xff0c;不同的视频格式可能会给我们的使用带来一些不便。其中&#xff0c;MOV格式是一种常见的视频格式&#xff0c;而MP4格式则更加广泛兼容于不同的设备和平台。 一般来说&#xff0c;MP…