【实践】LangChain + OpenAI 实现基本的 RAG

本篇文章通过使用 LangChain + OpenAI 来搭建一个基本的 RAG,实现根据本地文档来进行知识问答。

完整代码如下:

import os

from langchain.chains import RetrievalQA
from langchain.document_loaders import UnstructuredMarkdownLoader
from langchain.text_splitter import MarkdownTextSplitter
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI

# OpenAI 的相关 key
os.environ["OPENAI_API_BASE"] = 'xxxx'
os.environ["OPENAI_API_KEY"] = 'xxxx'

# 加载文档
loader = UnstructuredMarkdownLoader("./TypingWord.md")
documents = loader.load()

# 切分文本
text_splitter = MarkdownTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()  # Document Encoder
db = Chroma.from_documents(texts, embeddings)  # 文档库

llm = ChatOpenAI(model='gpt-3.5-turbo', temperature=1)  # Generator

qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type='stuff',
    retriever=db.as_retriever(),
    verbose=True
)

qa.run("你了解 Typing Word 软件吗")

在这里,本地文档使用了从 Gitee 上的一个项目上下载的 README.md:Typing Word | Gitee,这个 markdown 是对软件产品 Typing Word 的描述。我们使用这个文档构建本地文档库,使用 UnstructuredMarkdownLoader 来加载的这个文档。

因为一个 markdown 文件可能很大,所以需要对其切分为多个 chunk,一个 chunk 也就是一个文档,之后使用 OpenAI 的 Embeddings 将其转化为文档向量,进而构建成本地文档库。

Generator 使用 OpenAI 的对话模型,并借助 LangChain 提供的 RetrievalQA 搭建出 RAG 产品。

运行上述代码后,模型输出为:

RAG 模型输出

可以看到,输出中包含了本地文档库的知识,如果没有本地文档库的辅助,那么 ChatGPT 的回答会是如下:

ChatGPT 输出
可以看到,ChatGPT 将 Typing Word 当做了一个打字练习软件,而非我们本地知识库中的“背单词软件”。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模型+RAG(Retrieval-Augmented Generation)是一种结合了检索和生成的方法,用于实现数据采集。具体步骤如下: 1. 数据收集:首先需要收集大量的原始数据,可以是文本、图像、音频等形式的数据。这些数据可以从互联网、数据库、文档等多个渠道获取。 2. 数据预处理:对收集到的原始数据进行预处理,包括数据清洗、去重、标注等操作。这一步骤旨在提高数据的质量和准确性,为后续的模型训练做准备。 3. 模型训练:使用大模型进行训练,可以选择使用预训练的语言模型(如GPT)或自定义的模型。在训练过程中,可以采用生成式对抗网络(GAN)等方法来增强模型的生成能力。 4. 检索模块构建:为了提高生成结果的准确性和相关性,需要构建一个检索模块。该模块可以使用传统的信息检索技术,如倒排索引、向量检索等,也可以使用深度学习方法,如BERT、Dense Retrieval等。 5. 数据采集:利用构建好的检索模块,对用户提出的问题或需求进行检索,获取与之相关的数据。可以根据检索结果的相关性进行排序,选择最相关的数据进行生成。 6. 数据生成:基于检索到的数据,使用大模型进行生成。可以采用生成式模型,根据检索到的数据进行文本、图像等内容的生成。生成的结果可以根据需求进行进一步的处理和优化。 7. 结果评估:对生成的结果进行评估,可以使用人工评估或自动评估的方式。评估指标可以包括生成结果的准确性、流畅性、相关性等。 8. 迭代优化:根据评估结果,对模型和检索模块进行优化和调整。可以通过增加训练数据、调整模型参数、改进检索算法等方式来提升系统的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值