检索增强生成(RAG)生成实战(langchain+chatglm)


最近在学习如何使用langchain实现一套rag的问答系统, 用于解决大模型幻觉问题, 对比了几套别人的问答系统代码, 大致学习了一下别人的代码, 故有此笔记, 记录一些重点

代码下载 : 涉及的技术面比较全, 传到了csdn上, 可以用于研究之用

通过阅读这套代码, 对RAG的各模块有了一些比较清晰的认知,以下是研究的各种资料, 以飨读者

什么是检索增强生成?

检索增强生成(RAG)是一个概念,它旨在为大语言模型(LLM)提供额外的、来自外部知识源的信息。这样,LLM 在生成更精确、更贴合上下文的答案的同时,也能有效减少产生误导性信息的可能。


问题
当下领先的大语言模型 (LLMs) 是基于大量数据训练的,目的是让它们掌握广泛的普遍知识,这些知识被储存在它们神经网络的权重(也就是参数记忆)里。但是,如果我们要求 LLM 生成的回答涉及到它训练数据之外的知识——比如最新的、专有的或某个特定领域的信息——这时就可能出现事实上的错误(我们称之为“幻觉”)

解决方案

传统上,要让神经网络适应特定领域或私有信息,人们通常会对模型进行微调。这种方法确实有效,但同时也耗费大量计算资源、成本高昂,且需要丰富的技术知识,因此在快速适应信息变化方面并不灵活。

2020 年,Lewis 等人在论文《知识密集型 NLP 任务的检索增强生成》(Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks) [1] 中,提出了一种更为灵活的技术——检索增强生成(Retrieval-Augmented Generation,RAG)。该研究将生成模型与检索模块结合起来,能够从易于更新的外部知识源中获取额外信息。

用一个简单的比喻来说, RAG 对大语言模型(Large Language Model,LLM)的作用,就像开卷考试对学生一样。在开卷考试中,学生可以带着参考资料进场,比如教科书或笔记,用来查找解答问题所需的相关信息。开卷考试的核心在于考察学生的推理能力,而非对具体信息的记忆能力。

同样地,在 RAG 中,事实性知识与 LLM 的推理能力相分离,被存储在容易访问和及时更新的外部知识源中,具体分为两种:

参数化知识(Parametric knowledge): 模型在训练过程中学习得到的,隐式地储存在神经网络的权重中。
非参数化知识(Non-parametric knowledge): 存储在外部知识源,例如向量数据库中。

基于 LangChain 实现的检索增强生成方法

在开始之前,请确保你的系统中已安装以下 Python 包:

langchain —— 用于整体编排
openai —— 提供嵌入模型和大语言模型 (LLM)
weaviate-client —— 用于操作向量数据库

第一步:检索

一旦向量数据库准备好,你就可以将它设定为检索组件,这个组件能够根据用户查询与已嵌入的文本块之间的语义相似度,来检索出额外的上下文信息。

第二步:增强

接下来,你需要准备一个提示模板,以便用额外的上下文信息来增强原始的提示。你可以根据下面显示的示例,轻松地定制这样一个提示模板。

from langchain.prompts import ChatPromptTemplate

template = """You are an assistant for question-answering tasks.
Use the following pieces of retrieved context to answer the question.
If you don't know the answer, just say that you don't know.
Use three sentences maximum and keep the answer concise.
Question: {question}
Context: {context}
Answer:
"""
prompt = ChatPromptTemplate.from_template(template)

print(prompt)

生成

在 RAG (检索增强生成) 管道的构建过程中,可以通过将检索器、提示模板与大语言模型 (LLM) 相结合来形成一个序列。定义好 RAG 序列之后,就可以开始执行它。

注意 , 在 这套代码 , 需要考虑的细节更多, 比如向量模型的选择(他可以支持多种embedding模型 比如bge的), 支持多种向量数据库等等, 这些都是在实际工程中需要仔细处理的问题, 他们极大的影响rag问答系统的效果

代码包: https://download.csdn.net/download/xziyuan/89334382?spm=1001.2014.3001.5501)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值