準備文件與向量資料庫
在接下來的幾個練習中,你會打造一個完整的 RAG 工作流程,與一份 PDF 文件進行對話。該 PDF 為 Balaguer 等人(2024)的論文《RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture》。其流程包含將文件切成多個區塊、將區塊存入向量資料庫、定義提示詞以串接檢索到的文件與使用者輸入,並建立讓 LLM 存取這些外部資料的檢索鏈。
在本練習中,你會先將文件整理為可儲存的形式,並匯入到 Chroma 向量資料庫。你會使用 RecursiveCharacterTextSplitter 來切分 PDF,並透過 OpenAI 的嵌入向量(embedding)函式將其匯入 Chroma 向量資料庫。與本課程其餘部分相同,你不需要自行提供 OpenAI API 金鑰。
以下類別已為你匯入:RecursiveCharacterTextSplitter、Chroma、OpenAIEmbeddings。
本練習屬於課程
使用 LangChain 開發 LLM 應用
練習說明
- 使用
RecursiveCharacterTextSplitter以chunk_size為300、chunk_overlap為50來切分data中的文件。 - 使用
.from_documents()方法,搭配提供的 OpenAI 嵌入向量函式,將文件嵌入並匯入至 Chroma 向量資料庫。 - 將
vectorstore設定為一個檢索器物件,回傳前 3 筆文件,供最終的 RAG 鏈使用。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
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": ____}
)