เตรียมเอกสารและ vector database
ในแบบฝึกหัดชุดนี้ คุณจะสร้าง RAG workflow แบบครบวงจรเพื่อสนทนากับเอกสาร PDF ที่เป็นบทความวิจัย RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture โดย Balaguer et al. (2024) โดยกระบวนการทำงานจะประกอบด้วยการแบ่งเอกสารเป็น chunk, จัดเก็บลงใน vector database, กำหนด prompt เพื่อเชื่อมต่อเอกสารที่ดึงมากับ input ของผู้ใช้ และสร้าง retrieval chain ให้ LLM เข้าถึงข้อมูลภายนอกได้
ในแบบฝึกหัดนี้ คุณจะเตรียมเอกสารเพื่อจัดเก็บ แล้วนำเข้าสู่ Chroma vector database โดยใช้ RecursiveCharacterTextSplitter ในการแบ่ง PDF เป็น chunk จากนั้นนำเข้าด้วยฟังก์ชัน OpenAI embeddings เช่นเดียวกับแบบฝึกหัดอื่น ๆ ในคอร์สนี้ ไม่จำเป็นต้องใช้ OpenAI API key ของคุณเอง
คลาสต่อไปนี้ถูก import ไว้ให้แล้ว: RecursiveCharacterTextSplitter, Chroma และ OpenAIEmbeddings
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การพัฒนาแอปพลิเคชัน LLM ด้วย LangChain
คำแนะนำการฝึกหัด
- แบ่งเอกสารใน
dataโดยใช้RecursiveCharacterTextSplitterที่กำหนดchunk_sizeเป็น300และchunk_overlapเป็น50 - ใช้เมธอด
.from_documents()เพื่อสร้าง embedding และนำเอกสารเข้าสู่ Chroma vector database ด้วยฟังก์ชัน OpenAI embeddings ที่เตรียมไว้ - กำหนดค่า
vectorstoreให้เป็น retriever object ที่ดึงเอกสารอันดับต้น 3 รายการ เพื่อใช้ใน RAG chain ขั้นสุดท้าย
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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": ____}
)