开始使用免费开始使用

准备文档与向量数据库

在接下来的几个练习中,您将构建一个完整的 RAG 工作流,与一份 PDF 文档进行对话。该文档是 Balaguer 等人在 2024 年发表的论文《RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture》。流程包括:将文档切分为小块、将其存入向量数据库、定义一个提示以连接检索到的文档与用户输入,并构建一个检索链,让 LLM 访问这些外部数据。

在本练习中,您将为存储做好文档准备,并将其导入 Chroma 向量数据库。您将使用 RecursiveCharacterTextSplitter 对 PDF 进行切块,并使用 OpenAI 的嵌入函数将其导入 Chroma 向量数据库。与本课程其余部分一致,您无需提供自己的 OpenAI API 密钥

以下类已为您导入:RecursiveCharacterTextSplitterChromaOpenAIEmbeddings

本练习是课程的一部分

使用 LangChain 开发 LLM 应用

查看课程

练习说明

  • 使用 RecursiveCharacterTextSplitterdata 中的文档切分,chunk_size 设为 300chunk_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": ____}
)
编辑并运行代码