检索增强内容生成(RAG)2·RAG及其技术的代码实现

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

1. 前言

2. 概述RAG流程

3. 代码实现——前提准备

3.1 安装必要的Python包

3.2 获取OpenAI API密钥

4. 代码实现

4.1 导入API

4.2 加载文档

4.3 文档切片

4.4 量化产生向量数据库

4.5 相似性检索

4.6 完整代码

5. 总结


1. 前言

通过第一篇文章检索增强内容生成(RAG)1·RAG及其技术的概述-CSDN博客,我们已经知道RAG技术的作用就是用来增强生成式大语言模型(GPT4.0、GPT3.5等)。

而想要方便灵活的增强生成式大语言模型就需要用到LangChain框架,在LangChain框架中调用OpenAI的接口,同时结合RAG等技术来强化大语言模型,从而实现对LLM模型的强化

2. 概述RAG流程

完整运用RAG技术可以分为三个部分:

1、建立索引知识库(Indexing);

2、检索索引知识库(Retrieval);

3、生成增强回答(Generate Augmented answer);

如下图:

其中,

建立索引知识库(Indexing):加载(loader)--》切片(splitter)--》量化(Embedding)--》整合(Vector Database)

检索索引知识库(Retrieval):问题量化(Embedding)--》检索(相似度计算)--》相关度高的切片文档(Relevant Snippets)

生成增强回答(Generate Augmented answer):切片文档+问题输入LLM模型 --》得到增强后的生成式回答

3. 代码实现——前提准备

3.1 安装必要的Python包

pip install langchain openai weaviate-client
  • langchain :基于大语言模型构建用于端到端语言模型应用框架

  • openai :用于嵌入langchain 框架的LLM

  • weaviate-client 用于向量数据库

3.2 获取OpenAI API密钥

要获取 OpenAI API 密钥,需要拥有 OpenAI 账户

具体流程参照下面文章:如何获取OpenAI API Key_openai key-CSDN博客

我获得OpenAI API密钥的页面如下图:

4. 代码实现

4.1 导入API

1、在根目录下创建.env 文件,在其中定义OpenAI的API。

结构如下图:

内容如下:

OPENAI_API_KEY="你的API"

2、运行下面命令获取环境变量中的API

import dotenv
dotenv.load_dotenv()

dotenv.load_dotenv():将.env 文件中的变量加载到当前进程的环境变量

因此可以利用os库查看当前进程的环境变量,从而查看我们加载进来的 OPENAI_API_KEY

代码如下:

import dotenv
import os
dotenv.load_dotenv()
database_url = os.getenv('OPENAI_API_KEY')
print(f'Database URL: {database_url}')

4.2 加载文档

将文档保存在本地项目中,命名为state_of_the_union.txt

from langchain_community.document_loaders import TextLoader
# 加载
loader = TextLoader('state_of_the_union.txt')
documents = loader.load()

4.3 文档切片

将文档切片,切片的参数(切片大小、切片重复数)可以自己调整

from langchain.text_splitter import CharacterTextSplitter
# 切片
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)

4.4 量化产生向量数据库

from langchain_community.embeddings import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
# 量化并生成向量数据库
db = Chroma.from_documents(chunks, OpenAIEmbeddings())

4.5 相似性检索

将问题也利用嵌入技术向量化后进行相似性检索

query = "在一片连绵不绝的广阔山脉之中,两座足有千丈高的剑型山峰相隔百米的距离矗立在茫茫云海之下"
embedding_vector = OpenAIEmbeddings().embed_query(query)
docs = db.similarity_search_by_vector(embedding_vector)
print(docs[0].page_content)

4.6 完整代码

import dotenv
import os
import getpass
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma

# 加载OpenAI API KEY到进程中
dotenv.load_dotenv()
# database_url = os.getenv('OPENAI_API_KEY')
# print(f'Database URL: {database_url}')

# 加载
loader = TextLoader('state_of_the_union.txt')
documents = loader.load()

# 切片
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)

# 量化并生成向量数据库
db = Chroma.from_documents(chunks, OpenAIEmbeddings())

# 相似性检索
query = "在一片连绵不绝的广阔山脉之中,两座足有千丈高的剑型山峰相隔百米的距离矗立在茫茫云海之下"
embedding_vector = OpenAIEmbeddings().embed_query(query)
docs = db.similarity_search_by_vector(embedding_vector)
print(docs[0].page_content)

5. 总结

如果想要学习更多深度学习的知识,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

实现大模型的RAG(Retrieval Augmented Generation)主要包括**数据准备阶段和应用阶段**两个关键环节。具体步骤如下: 1. **数据准备阶段**: - **数据提取**:首先需要确定并提取适用于特定领域的私域数据,这些数据可以是PDF文件、数据库内容或其他形式的私有知识库。 - **文本分割**:将提取出的文档进行分块处理,以便于后续的处理和检索。 - **向量化**:对分割后的文本块进行向量化操作,即将文本转换为机器能够高效处理的数值表示形式。 - **数据入库**:处理好的数据需要构建索引并存入向量数据库中,为接下来的检索任务做准备。 2. **应用阶段**: - **用户提问**:当用户提出问题时,同样需要将这个查询向量化。 - **数据检索**:利用向量数据库的检索能力,找出与用户提问相似度最高的k个文档片段。 - **注入Prompt**:将检索到的结果结合用户的原始提问,按照一定的Prompt模板组装成一个完整的输入提示给大语言模型。 - **LLM生成答案**:大语言模型根据提供的Prompt生成最终的回答。 此外,还需要考虑如何优化数据的准备过程,比如选择适合的向量化技术(如使用词嵌入模型)以及如何设计高效的检索算法来快速准确地从大量数据中找到相关信息。同时,在应用阶段,需要精心设计Prompt模板,以便大模型能更好地理解问题和检索到的信息,从而给出更准确的回答。 值得一提的是,RAG架构的优势在于它结合了大模型的强大语言理解和生成能力以及向量检索系统的高效信息获取能力,使得大模型能够在专业场景或行业细分领域中提供更加精准和丰富的回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十二月的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值