逐步掌握最佳Ai Agents框架-AutoGen 九 RAG应用

在最近的几篇文章里,我们使用AutoGen实现了一些Demo。这篇文章,我们将使用AutoGen来完成RAG应用开发。

RAG应用

RAG全称"Retrieval-Augmented Generation",即检索增强生成,它是自然语言处理中的一项技术。这种模型结合了检索式(retrieval-based)和生成式(generative)两种组件,以生成更准确、更相关的回答。

在之前我们的基于文档的聊天机器人的例子,就是RAG的一种应用。在本系列的逐步掌握最佳Ai Agents框架-AutoGen 五 与LangChain手拉手 - 掘金 (juejin.cn),我们将文档读取、向量化和存储工作交给了LangChain, AutoGen以agent with function calls 的方式调用LangChain封装好的函数。AutoGen在最近版本里,新增了RetriveChat,可以减少对LangChain的依赖。那么,我们一起来看下AutoGen如何独立完成RAG应用开发。

RetrievalAgent

让我们来看下,官方文档对Retrieval-Augmented Generation (RAG) Applications with AutoGen | AutoGen (microsoft.github.io)的介绍。

image.png

从上图可以看出,AutoGen提供了Retrieval-augmented User Proxy 和Retrieval-augmented Assistant两个agent。

现在就让我们开干。

实战

  • 文档

之前的RAG项目中我们用到的是Uniswap的白皮书,这个项目里,我们换成了arxiv.org/pdf/2308.00…, 这是一份rag和向量技术在医疗教育中的相关研究文章。让我们在notebook里把它下载到当前项目中。

python复制代码!wget -o rag.pdf https://arxiv.org/pdf/2308.00479.pdf

image.png

  • 安装库
python复制代码%pip install pyautogen[retrievechat] langchain "chromadb<0.4.15" -q

这次安装pyautogen,多加了retrieveChat功能包的声明。我们依然安装了langchain, 在这里主要使用它的splitter功能,当然autogen也是提供了。最后我们安装了指定版本的chromadb 向量数据库,存储文档embedding。

  • 配置autogen config_list
css复制代码import autogen # 大家可以使用gpt-4 或其它,我这里用的是3.5, 还能用。 config_list = [ { 'model': 'gpt-3.5-turbo', 'api_key': '' }]
llm_config={ "seed": 42, #为缓存做的配置 "config_list": config_list }

接下来是比较典型的文档机器人的构建步骤

  • 配置embedding函数

我们会对question和文档都在embedding, AI助理回答问题的过程,其实就是将question的embedding和文档的embedding进行cosine 计算,得到相似度的过程。我们使用openai 做embedding。

ini复制代码# 从chromadb数据库中引入embedding_functions
from chromadb.utils import embedding_functions
# 调用OpenAIEmbeddingFunction 
openai_embedding_function = embedding_functions.OpenAIEmbeddingFunction(api_key = config_list[0]["api_key"])
  • 设置文本拆分器
python复制代码from langchain.text_splitter import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter(separators=["\n\n", "\n", "\r", "\t"])
  • 实例化arg agents
python复制代码from autogen.agentchat.contrib.retrieve_assistant_agent import RetrieveAssistantAgent
from autogen.agentchat.contrib.retrieve_user_proxy_agent import RetrieveUserProxyAgentllm_config = {"request_timeout": 600,"config_list": config_list,"temperature": 0
}assistant = RetrieveAssistantAgent(name="assistant",system_message="You are a helpful assistant.",llm_config=llm_config,
)rag_agent = RetrieveUserProxyAgent(human_input_mode="NEVER",retrieve_config={"task": "qa","docs_path": "./rag.pdf","collection_name": "rag_collection","embedding_function": openai_embedding_function,"custom_text_split_function": text_splitter.split_text,},
)

首先我们引入了RetrieveUserProxyAgentRetrieveAssistantAgent两个agent。从引入的路径autogen.agentchat.contrib.retrieve_assistant_agent来看,rag agent也是由autogen的chat agent派生,它这里称为"contrib"。接着,我们定义了llm_config,autogen使用的大模型配置,注意,这里的temperature为0, 基于文档的Q/A应该严谨。RetrieveAssistantAgent负责执行rag工作,system_message 指定了assistant的角色。RetrieveUserProxyAgent 的retrieve_config,提起了RAG的重担,我们做了以下配置:

  1. task:qa 指定任务为 QA问答任务类型
  2. docs_path 指定文档路径
  3. collection_name chromadb 向量数据库的名字
  4. embedding_function为上面设置的openai_embedding_function
  5. custom_text_split_function为上面设置的langchain的文本分割器
  • 启动对话,执行QA
python复制代码assistant.reset()
rag_agent.initiate_chat(assistant, problem="What is the workflow in docGPT?", n_results=2)

Rag_agent 初始化任务,提的问题是What is the workflow in docGPT?, n_results 表示返回多少个结果,默认是20个, 这里只需要2个。

image.png

  • 结果分析

image.png

在这里看到有两个文档分块被加入到上下文当中。上下文即context,等下将会交给assistant 进行回答生成。RetrieveChatAgent(to assistant) 表示向assistant提供了如下的内容,也就是上下文。

image.png

如上图,它包括了RAG QA任务的模板(You're a retrieve aumented chatbot. You answer user's questions based on your own knowledge and the context provied by the user....)和内容(context)。模板中也说的很清楚,如果基于context无法回复用户提出的问题,那么就向proxy 发出UPDATE CONTEXT的需要。上图的后半部分,就是通过embedding查询获得的文档内容。

image.png

最后, RetrieveAssistantAgent根据RetrieveUserProxyAgent提供的context,完成了回答的生成, 这也是大模型最擅长的summarize。

总结

RAG是LLM的经典应用,AutoGen通过提供chat agent的 rag 升级agent,完成了相应功能。

  • RetrieveUserProxyAgent的配置需要完成文档读取、向量数据库、分词器的配置
  • RetrieveUserProxyAgent的prompt模板预置了QA 内容。
  • RetrieveAssistantAgent对RetrieveUserProxyAgent提供的context,完成回答生成。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Latex之图片排列的简单使用(以MiKTeX工具为例)

一、参考资料 Latex如何插入图片 Latex 学术撰写工具推荐&#xff08;在线、Windows、Mac、Linux&#xff09; 关于Latex并排多张图片及加入图片说明的方法 二、准备工作 1. 在线LaTex工具 Overleaf 2. 本地LaTex工具 MiKTeX 3. 测试用例 \documentclass{article} \ti…

拓展商机的金钥匙:成为SSL证书合作商的长期回报

在当今数字化浪潮中&#xff0c;网络安全已经成为企业生存和发展不可或缺的一部分。随着在线交易和数据交换的增多&#xff0c;SSL证书作为保障网站安全和增强用户信任的关键工具&#xff0c;其重要性日益凸显。成为SSL证书的合作商后&#xff0c;不仅能够立即开启新的收入来源…

解决微信小程序分享按钮不可用

问题描述 在微信小程序中点击胶囊按钮上的三个点&#xff0c;在弹出的对话框中的【分享给好友】【分享到朋友圈】按钮都属于不可用的状态&#xff0c;显示未设置。 问题截图 解决方案 在每个需要此功能的页面都需要添加此代码&#xff0c;否则就不能进行使用。 // vue3时&l…

证件照太大了怎么压缩到100k?6个软件教你快速进行压缩

证件照太大了怎么压缩到100k&#xff1f;6个软件教你快速进行压缩 压缩证件照大小通常需要使用专门的图片压缩工具或者图片编辑软件。以下是六款常用的软件&#xff0c;它们可以帮助你快速压缩证件照大小到100KB以内&#xff1a; 1.迅捷压缩&#xff1a;这是一款图片压缩工具…

【Kubernetes】k8s的调度约束(亲和与反亲和)

一、调度约束 list-watch 组件 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件&#xff0c;向 APIServer 发送命令&#xff0c;在 Node 节点上面建立 Pod 和…

每天的CTF小练--6.5(ascll码高级运用)

题目&#xff1a;[HUBUCTF 2022 新生赛]baby_encrypt hint&#xff1a; 781612443113954655886887407898899451044114412011257135914071455155316031651170318041861191719652013207021272183228423832485254125932643269827992924 注意查看前面的数字&#xff0c;这题不想现…

Mybatis01-初识Mybatis

简介 1、 什么是Mybatis MyBatis 是一款优秀的持久层框架; 它支持自定义 SQL、存储过程以及高级映射 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Ol…

try…except语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在程序开发时&#xff0c;有些错误并不是每次运行都会出现。例如&#xff0c;实例01&#xff0c;只要输入的数据符合程序的要求&#xff0c;程序就可…

推荐一个免费的相亲工具

推荐一个免费的相亲工具&#xff0c;步骤如下&#xff1a; 1&#xff09;微信里面搜索公众号“光源桥”&#xff0c;并关注 2&#xff09;输入搜索条件进行搜索对象 例如下面搜索&#xff1a;

CDH服务红,查看日志发现host有问题

看host后&#xff0c;发现里面节点ip都是127.0.0.1然后全部改成对应的ip&#xff0c; 1.在/etc/hosts里面全部加上了 ip以及对应的角色名称 2然后注释了127.0.0.1 hostname 3.然后重启所有的机器agent和server&#xff0c;在重新登录&#xff0c;点击重新部署。 重启agent sy…

电子凭证3.0,助力企业实现报销自动化

在数字化浪潮汹涌澎湃的今天&#xff0c;企业对于高效、便捷、安全的财务管理需求日益凸显。传统的报销流程繁琐、耗时&#xff0c;不仅增加了企业的运营成本&#xff0c;还影响了员工的工作效率和满意度。用友BIP电子凭证3.0的发布&#xff0c;无疑为企业实现报销自动化提供了…

Linux:共享内存介绍(进程间通信)

共享内存 共享内存原理介绍共享内存系统调用接口shmget 创建共享内存段ftok 生成唯一键 key开始创建共享内存指令 ipcs -m 查看共享内存指令 ipcrm -m 删除共享内存段shmctl 控制创建的共享内存通过系统调用来删除共享内存 共享内存权限问题关联/去关联共享内存封装处理 共享内…

数据采集项目结案报告

常州嘉爵机械机床采集项目案例 项目背景 常州市嘉爵机械配件厂 响应国家政策&#xff0c;申报智能车间&#xff0c;优化管理 车间设备包括&#xff1a;发那科机床、三菱机床。 项目需求调研分析 采集设备工艺参数&#xff0c;计算设备稼动率。 车间设备情况&#xff1a; …

HarmonyOS应用开发深度指南:从基础到高级实践

1. HarmonyOS开发概述 HarmonyOS是华为推出的分布式操作系统,旨在为不同设备提供统一的体验。它支持多种编程语言,包括ArkTS、JS、C/C++和Java。开发者需要了解HarmonyOS的分布式架构,包括Ability、Service、Data Ability等核心概念。 了解HarmonyOS的分布式架构:HarmonyO…

在视频号上面怎么卖货?只需要开一个店铺即可!具体怎么操作?

大家好&#xff0c;我是电商小V 最近这段时间在视频号上面卖货的热度可以说是非常大的&#xff0c;也是创业者常常提起的话题&#xff0c;大家之所以对视频号卖货非常感兴趣那是因为视频号和抖音处于一个赛道&#xff0c;也是朝着电商的方向发展&#xff0c; 所以说大家对于腾讯…

cmake使用(01)

顶层CMakeLists.txt cmake_minimum_required (VERSION 3.5)# 配置 交叉编译 放置在 project() 命令之前# /opt/fslc-wayland/2.5.2/sysroots/aarch64-fslc-linux/usr/bin/make: error # while loading shared libraries: libdl.so.2: cannot open shared object file: # No su…

c++ 模板类的泛化版本,只声明,不定义,可以么?可以

王建伟老师的课本&#xff0c;413 页讲解过这个情况。只要不创建泛化模板的对象即可。最近看源码时&#xff0c;也出现了这种情况&#xff0c;大师们也这么写。故简化逻辑&#xff0c;测试一下&#xff1a; 谢谢

家庭海外仓系统:做好标准化管理,小空间也能做出高收益

家庭海外仓凭借其运营模式灵活&#xff0c;合作成本低的独有特点&#xff0c;还是被很多跨境卖家所接受的。不过家庭海外仓的盈利也面临着一些问题。 首先&#xff0c;家庭海外仓的仓储空间有限&#xff0c;很难通过规模效应放大收益。家庭海外仓通常只能存储少量货物&#xf…

个人参与场外期权交易的最全指南

个人参与场外期权交易的最全指南 一、引言 场外期权作为金融市场中的一大亮点&#xff0c;为个人投资者提供了多样化的风险管理及投资策略选择。本文将详细探讨个人如何安全、有效地参与场外期权交易。 文章来源/&#xff1a;财智财经 二、理解场外期权 场外期权是双方通过协…

fastjson反序列化漏洞复现

靶机IP&#xff1a;192.168.253.134 攻击机IP&#xff1a;192.168.142.44 1、靶机环境搭建 靶机&#xff1a;http://caiyun.feixin.10086.cn/dl/095CteuquNKVq 提取密码:NNPD RCE&#xff1a;http://caiyun.feixin.10086.cn/dl/095CuIsJQOw14 提取密码:J2vd 靶机账号密码&…