【AI开发】RAG基础

在这里插入图片描述
RAG的基本流程:

  1. 用一个loader把knowledge base里的知识做成一个个的document,然后把document切分成snippets,把snippets通过embedding(比如openai的embedding模型或者huggingface的)向量化,存储到vectordb向量数据库,以供后续相关性检索。至此便完成了私域数据集的索引indexing。
  2. 第二部分是retrieval检索,主要是先把自己的问题query向量化,然后在vectordb中进行相似度检索,得到相关的snippets。
  3. 最后一部分是把原问题和相关的snippets拼合起来组成prompt,一起送到LLM中,从而得到最想要的答案。

下面用notebook来做一个小demo:

from langchain.chat_models import ChatOpenAI
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

chat = ChatOpenAI(
    model='deepseek-chat',
    openai_api_key="sk-f8f1fab675ea4d2d9e565877d354d464",
    openai_api_base='https://api.deepseek.com',
    max_tokens=1024
)
from langchain.schema import(
    SystemMessage,
    HumanMessage,
    AIMessage
)

messages = [
    SystemMessage(content="You are a helpful assistant."),
    HumanMessage(content="Do you know GPT-4?")
]
res = chat(messages=messages)
print(res.content)

创建一个RAG对话模型

1.加载数据(以GPT-4论文为例)

! pip install pypdf #一个pdf解析器
from langchain.document_loaders import PyPDFLoader

loader = PyPDFLoader("https://arxiv.org/pdf/2303.08774")

pages = loader.load_and_split()
pages[0]

2.知识切片 将文档分割成均匀的块,每个块是一段原始文本

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_spliter = RecursiveCharacterTextSplitter(
    chunk_size = 500,     #最大500为一段
    chunk_overlap = 50     #最多重叠50
)
docs = text_spliter.split_documents(pages)
len(docs)

3.用embedding模型把切片向量化,存储到向量数据库中,方便下次问问题的时候进行相关性检索

from langchain.embeddings.openai import OpenAIEmbeddings #embedding模型用的openai的达芬奇模型,收费且deepseek没有开发,所以不用
#! pip install sentence-transformers #我们用免费的sentence-transformers
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma  #向量库chroma

model_name = '.cache/huggingface/hub/models--sentence-transformers--sentence-t5-large/snapshots/7f77100e0c564a5c2faeebd3cac0e5c1771b257e'
embedding = HuggingFaceEmbeddings(model_name=model_name)
vectorstore_hf = Chroma.from_documents(documents=docs,   
                                       embedding=embedding,
                                       collection_name="test_LangchainRAG_hf_embed")

4.通过向量相似度检索和问题最相关的k个文档

query = "How large is GPT-4 vocabulary"
result = vectorstore_hf.similarity_search(query=query, k=2)

5.原始query和检索得到的文本组合起来输入语言模型,得到最终的输出

def augment_prompt(query: str):
    #获取top3的文本片段
    result3 = vectorstore_hf.similarity_search(query=query,k=3)
    source_knowledge = "\n".join([x.page_content for x in result3])

    #构建prompt
    #这里是一个f-string的用法,允许在字符串中嵌入表达式,运行的时候表达式会被其value代替
    augment_prompt = f"""Using the contexts below, answer the query.   
    
    contexts:
    {source_knowledge}

    query: {query}"""

    return augment_prompt
print(augment_prompt(query))
#创建prompt
prompt = HumanMessage(
    content=augment_prompt(query=query)
)

messages.append(prompt)
res_afteraug = chat(messages=messages)
print(res.content)

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

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

相关文章

男士内裤哪个品牌质量好?国内质量好的男士内裤推荐

男士内裤,作为每日贴身陪伴的必需品,舒适度无疑是我们的首要考量。想象一下,闷热不透气、夹臀卡裆、或是束缚紧勒,这些不舒适的感觉无疑会破坏我们一整天的美好心情。 虽然它看似只是一块简单的布料,但这个小伙伴却与…

随心笔记,第六更

目录 一、 三步构建 XML转成java bean 1.XML转XSD 2.XSD转JavaBean 3.jaxb 工具类 4.测试 📢📢📢📣📣📣 哈喽!大家好,我是「Leen」。刚工作几年,想和大家一同进步&am…

QTday2

使用手动连接,将登录框中的取消按钮使用第二中连接方式,右击转到槽,在该槽函数中,调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0…

迷你手持小风扇十大名牌排名有哪些?公认迷你小风扇排行榜揭开!

随着夏季高温的来临,迷你小风扇成为了大家追求清凉和舒适的必备工具。其小巧便携的设计、强劲的风力和长续航时间,使得迷你小风扇迅速在市场上走红。然而,面对琳琅满目的品牌和各种型号,如何选择一款既高效又耐用的迷你小风扇成为…

基于VTK9.3.0+Visual Studio2017 c++实现DICOM影像MPR多平面重建+V R体绘制4个视图展示功能的实现

开源库:VTK9.3.0 开发工具:Visual Studio2017 开发语言:C 实现过程: class vtkImageInteractionCallback : public vtkCommand { public:static vtkImageInteractionCallback* New(){return new vtkImageInteractionCallback()…

Fiddler实现重定向

fiddler设置响应后断点 命令:bpafter url 配置以后,此时服务器响应的数据在fiddler中被劫持,浏览器显示的是一片空白(类似加载不出的效果) fiddler中可以修改返回的响应内容 选择一个图片,然后点击run t…

6.S081——CPU调度部分(Xv6中的进程的状态转换)——xv6源码完全解析系列(11)

0.briefly speaking 时隔9个月,我又回来继续更新Xv6内核源码相关的内容了,上次更新之后经历了3个月的秋招,之后紧接着是实验室的中期检查,之后又是遥遥无期的毕业论文写作和修改,总算到现在有了一些自己的时间来继续做…

三分钟了解链动3+1模式

在电商领域的营销策略中,链动31模式以其独特的魅力和优势,吸引了众多商家的目光。下面,我们将对这一模式进行深度剖析,并探讨其相较于链动21模式的优势所在。 一、身份设置与奖励机制 链动31模式在身份设置上分为三种&#xff1…

历年各地区养老金发放人数,多图可用,含shp和excel格式

基本信息. 数据名称: 历年各地区养老金发放人数 数据格式: Shpexcel 数据几何类型: 面 数据坐标系: WGS84 数据时间:2012-2021年 数据来源:网络公开数据 数据可视化.

Python深度学习基于Tensorflow(17)基于Transformer的图像处理实例VIT和Swin-T

文章目录 VIT 模型搭建Swin-T 模型搭建参考 这里使用 VIT 和 Swin-T 在数据集 cifar10 上进行训练 VIT 模型搭建 导入需要的外部库 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec这里我们接着使用 ci…

华为手环9省电设置

1、 手环开启熄屏显示续航约3天,原因为屏幕持续常亮显示;如不需要可通过手环“设置->表盘->熄屏显示”路径进行关闭; 2、 手环具备后台健康自动检测功能,您可根据需要选择是否使用或关闭: (1&#x…

使用Python进行并发和并行编程:提高效率的秘诀

使用Python进行并发和并行编程:提高效率的秘诀 ​ 大家好,今天我们来聊聊如何使用Python进行并发和并行编程,以提升数据处理的效率;在之前的文章中,我们探讨了Python的函数式编程和数据流处理。今天,我们将…

SGPT论文阅读笔记

这是篇想要用GPT来提取sentence embedding的工作,提出了两个框架,一个是SGPT-BE,一个是SGPT-CE,分别代表了Bi-Encoder setting和Cross-Encoder setting。CE的意思是在做阅读理解任务时,document和query是一起送进去&am…

【启明智显产品介绍】Model4 工业级HMI芯片详解系列专题(二):高清解码

Model4 工业级HMI芯片详解系列专题(二)【高清解码】 Model4 工业级HMI芯片集成了图形显示和编解码相关的硬件模块,为高清图像显示、高清视频播放和高清摄像头输入提供了强大的硬件基础: DE 显示引擎: 1 个 UI 图层&…

Unity引擎UGUI上特效处理重叠和裁剪问题的多种解决办法

大家好,我是阿赵。   使用Unity引擎开发项目,使用UGUI做界面,经常会遇到需要把特效放在UI上,但UI本身和特效又需要有遮挡关系和裁剪效果。   之前我介绍了一下使用MaskableGraphic的方式把粒子特效渲染在UI上,把粒…

电手出软件啦!各种姿势一键重装你的系统

电手的兄弟们你们好啊,很多兄弟都知道,我们老大傲梅是做软件的,例如大伙儿都用过的傲梅分区助手,还有傲梅轻松备份。相信不少兄弟都是用了分区助手才关注到电手的。 而我们电手,在电脑和手机玩机内容方面一直深耕。 跟…

【车载音视频AI电脑】全国产海事船载视频监控系统解决方案

海事船载视频监控系统解决方案针对我国快速发展的内河航运、沿海航运和远洋航运中存在的航行安全和航运监管难题,为船舶运营方、政府监管部门提供一套集视频采集、存储、回放调阅为一体的视频监控系统,对中大型船舶运行中的内部重要部位情况和外部环境进…

实现锚点链接点击tab跳转到指定位置 并且滚动鼠标顶部锚点的样式也跟随变化

实现效果如下 不管是点击还是 滚动鼠标 顶部的样式也会跟随变化 点击会跳转到指定的位置 通过IntersectionObserver 监听是否可见 下面代码可以直接执行到vue的文件 <template><div><ul class"nav"><li v-for"tab in tabs" :key…

京东和天猫各渠道区别是什么?你了解吗?如何快速了解两个平台渠道推广

1.快车/直通车区别: 京东:不能投竞品词,能投定向商品选竞品,因为京东是卖平台流量和商品(自营(主收入)),不可以投竞品词是为了保护自己店铺的品牌流量; 天猫:只卖平台流量,不卖商品,所以允许竞品词投放; 2.竞品人群圈选: 因为数坊是自身品牌数据分析平台,所…

php配合fiddler批量下载淘宝天猫商品数据分享

有个做电商的朋友问我&#xff0c;每次上款&#xff0c;需要手动去某宝去搬运商品图片视频&#xff0c;问我能不能帮忙写个脚本&#xff0c;朋友开口了&#xff0c;那就尝试一下 首先打开某宝&#xff0c;访问一款商品&#xff0c;找出他的数据来源 通过观察我们发现主图数据来…