คลังเวกเตอร์: Chroma และ FAISS
การสร้างและบันทึกคลังเวกเตอร์ การค้นหาความคล้ายคลึง การดึงข้อมูลด้วย MMR และการค้นหาแบบผสม
คลังเวกเตอร์: Chroma และ FAISS เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
ที่จัดเก็บเวกเตอร์คืออะไร
ที่จัดเก็บเวกเตอร์จะเก็บส่วนย่อยที่ฝังเวกเตอร์แล้ว และค้นหาส่วนย่อยที่มีความคล้ายคลึงกับเวกเตอร์คำค้นมากที่สุด นี่คือเครื่องมือค้นหาที่เป็นหัวใจของ RAG ตัวเลือกยอดนิยมสองแบบคือ โครมาและ FAISS
pip install langchain-chroma faiss-cpuการสร้างที่จัดเก็บโครมา
Chroma.from_documents จะฝังเวกเตอร์ส่วนย่อยและสร้างดัชนีในคำสั่งเดียว ส่งเอกสารและออบเจ็กต์เวกเตอร์ฝังตัวเข้าไป แล้วโครมาจะส่งคืนที่จัดเก็บซึ่งคุณค้นหาได้ทันที
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
db = Chroma.from_documents(chunks, embeddings)การบันทึกโครมาลงดิสก์
ส่งค่า persist_directory เพื่อบันทึกดัชนีลงดิสก์และเก็บไว้ได้แม้เริ่มระบบใหม่ ภายหลังให้โหลดกลับมาโดยสร้าง Chroma ด้วยไดเรกทอรีและออบเจ็กต์เวกเตอร์ฝังตัวเดิม ซึ่งช่วยหลีกเลี่ยงค่าใช้จ่ายในการฝังเวกเตอร์ซ้ำ
db = Chroma.from_documents(
chunks, embeddings,
persist_directory="./chroma_db"
)
# Reload later
db = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)การค้นหาความคล้ายคลึง
ค้นหาด้วย similarity_search(query, k=4) ระบบจะฝังเวกเตอร์คำค้น ค้นหาส่วนย่อยที่ใกล้ที่สุดจำนวน k รายการ และส่งคืนเป็นเอกสาร k ใช้ควบคุมจำนวนข้อความที่ดึงมา
results = db.similarity_search("How do I reset my password?", k=4)
for doc in results:
print(doc.page_content[:80])คะแนนจากการค้นหา
ใช้ similarity_search_with_score เพื่อรับคะแนนระยะห่างของผลลัพธ์แต่ละรายการด้วย ระยะห่างที่ต่ำกว่าหมายถึงมีความคล้ายคลึงมากกว่า คะแนนช่วยให้คุณกรองผลลัพธ์ที่ตรงกันอย่างอ่อนออกก่อนส่งต่อให้ LLM
pairs = db.similarity_search_with_score("password reset", k=4)
for doc, score in pairs:
print(round(score, 3), doc.page_content[:60])ทำความรู้จัก FAISS
FAISS (การค้นหาความคล้ายคลึงด้วยปัญญาประดิษฐ์ของ Facebook) คือไลบรารีประสิทธิภาพสูงสำหรับการค้นหาเวกเตอร์ มีความรวดเร็วและใช้หน่วยความจำอย่างมีประสิทธิภาพเป็นอย่างมาก เหมาะสำหรับดัชนีขนาดใหญ่ภายในเครื่องที่ไม่ต้องใช้เซิร์ฟเวอร์แยกต่างหาก
การสร้างที่จัดเก็บ FAISS
ส่วนติดต่อการใช้งานมีรูปแบบคล้ายกับโครมา: FAISS.from_documents ใช้สร้างดัชนี FAISS จะเก็บดัชนีไว้ในหน่วยความจำ จึงเหมาะอย่างยิ่งกับการค้นหาภายในกระบวนการที่เน้นการอ่าน
from langchain_community.vectorstores import FAISS
db = FAISS.from_documents(chunks, embeddings)
results = db.similarity_search("refund policy", k=3)การบันทึกและโหลด FAISS
บันทึกดัชนี FAISS ถาวรด้วย save_local และโหลดกลับมาด้วย load_local การโหลดกลับมาต้องใช้ allow_dangerous_deserialization=True เนื่องจากดัชนีใช้รูปแบบพิกเคิล
db.save_local("faiss_index")
db = FAISS.load_local(
"faiss_index", embeddings,
allow_dangerous_deserialization=True
)ความเกี่ยวข้องกับความหลากหลาย
การค้นหาด้วยความคล้ายคลึงแบบธรรมดาอาจส่งคืนส่วนย่อยสี่ส่วนที่แทบเหมือนกันทุกประการ บางครั้งคุณต้องการผลลัพธ์ที่ หลากหลาย และครอบคลุมแง่มุมต่าง ๆ ของคำตอบ นี่คือจุดที่ MMR เข้ามาช่วย
การดึงข้อมูลด้วย MMR
ความเกี่ยวข้องส่วนเพิ่มสูงสุด (MMR) สร้างสมดุลระหว่างความเกี่ยวข้องกับความหลากหลาย โดยเลือกส่วนย่อยที่เกี่ยวข้องแต่ไม่ซ้ำซ้อน ใช้ search_type="mmr" ผ่านส่วนติดต่อของตัวดึงข้อมูล
retriever = db.as_retriever(
search_type="mmr",
search_kwargs={"k": 4, "fetch_k": 20}
)
docs = retriever.invoke("password reset")การเลือกโครมาหรือ FAISS
โครมาใช้งานง่าย เก็บข้อมูลถาวรได้ และเหมาะกับต้นแบบและแอปพลิเคชันขนาดเล็ก ส่วน FAISS ทำงานได้เร็วกว่าเมื่อขยายขนาด และเหมาะกับการค้นหาในหน่วยความจำ ทั้งสองแบบมี similarity_search และ as_retriever ให้ใช้ จึงสลับไปมาได้ง่าย
ตรวจสอบความเข้าใจ
ทดสอบความรู้เกี่ยวกับที่จัดเก็บเวกเตอร์ของคุณ
ทบทวน: โครมาและ FAISS
คุณสร้างที่จัดเก็บเวกเตอร์ด้วย Chroma.from_documents (โดยใช้ persist_directory) และ FAISS.from_documents ค้นหาด้วย similarity_search(query, k=4) และบันทึกหรือโหลดที่จัดเก็บทั้งสองแบบ คุณใช้ as_retriever ร่วมกับ MMR เพื่อรับผลลัพธ์ที่หลากหลาย และเรียนรู้ว่าเมื่อใดควรเลือกใช้ที่จัดเก็บแต่ละแบบ
คำถามที่พบบ่อย
บทเรียน “คลังเวกเตอร์: Chroma และ FAISS” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คลังเวกเตอร์: Chroma และ FAISS” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คลังเวกเตอร์: Chroma และ FAISS”
การสร้างและบันทึกคลังเวกเตอร์ การค้นหาความคล้ายคลึง การดึงข้อมูลด้วย MMR และการค้นหาแบบผสม คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “คลังเวกเตอร์: Chroma และ FAISS” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สถาปัตยกรรม LangChain และ LCEL
- การโหลด แบ่ง และสร้างเวกเตอร์ฝังสำหรับเอกสาร
- คลังเวกเตอร์: Chroma และ FAISS
- การสร้างระบบถาม–ตอบ RAG ตั้งแต่ต้นจนจบ