准备文档与向量数据库
在接下来的几个练习中,您将构建一个完整的 RAG 工作流,与一份 PDF 文档进行对话。该文档是 Balaguer 等人在 2024 年发表的论文《RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture》。流程包括:将文档切分为小块、将其存入向量数据库、定义一个提示以连接检索到的文档与用户输入,并构建一个检索链,让 LLM 访问这些外部数据。
在本练习中,您将为存储做好文档准备,并将其导入 Chroma 向量数据库。您将使用 RecursiveCharacterTextSplitter 对 PDF 进行切块,并使用 OpenAI 的嵌入函数将其导入 Chroma 向量数据库。与本课程其余部分一致,您无需提供自己的 OpenAI API 密钥。
以下类已为您导入:RecursiveCharacterTextSplitter、Chroma 和 OpenAIEmbeddings。
本练习是课程的一部分
使用 LangChain 开发 LLM 应用
练习说明
- 使用
RecursiveCharacterTextSplitter将data中的文档切分,chunk_size设为300,chunk_overlap设为50。 - 使用
.from_documents()方法,借助提供的 OpenAI 嵌入函数,将文档嵌入并导入到 Chroma 向量数据库。 - 将
vectorstore配置为一个检索器对象,在最终的 RAG 链中返回前 3 个文档。
交互式实操练习
通过完成这段示例代码来试试这个练习。
loader = PyPDFLoader('rag_vs_fine_tuning.pdf')
data = loader.load()
# Split the document using RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=____,
chunk_overlap=____)
docs = splitter.split_documents(data)
# Embed the documents in a persistent Chroma vector database
embedding_function = OpenAIEmbeddings(api_key='', model='text-embedding-3-small')
vectorstore = Chroma.____(
docs,
embedding=embedding_function,
persist_directory=os.getcwd()
)
# Configure the vector store as a retriever
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": ____}
)