การสร้างดัชนีชุดเอกสาร
สร้าง Embedding ให้ทุกส่วนแล้วเก็บเวกเตอร์ไว้ในดัชนี ซึ่งเป็นขั้นตอนเตรียมข้อมูลล่วงหน้าของระบบ RAG ทุกระบบ
การสร้างดัชนีชุดเอกสาร เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
กระบวนการนำเข้าข้อมูล
กระบวนการ RAG แบบออฟไลน์มีสี่ขั้นตอน:
- โหลด เอกสาร (PDF, HTML, MD)
- แบ่งเป็นส่วนย่อย ในเอกสารแต่ละฉบับ
- สร้างเวกเตอร์ฝังตัว ของส่วนย่อยแต่ละส่วน
- จัดเก็บ เวกเตอร์และข้อมูลเมตาในดัชนี
ขั้นตอนที่ 1: โหลดเอกสาร
ใช้ตัวโหลดเฉพาะสำหรับรูปแบบต่าง ๆ:
# PDFs
from pypdf import PdfReader
text = ''
for page in PdfReader('doc.pdf').pages:
text += page.extract_text()
# HTML
from bs4 import BeautifulSoup
text = BeautifulSoup(html, 'html.parser').get_text()
# Markdown — just read the file
text = open('doc.md').read()ขั้นตอนที่ 2: แบ่งเป็นส่วนย่อย
ใช้ตัวแบ่งจากบทเรียนก่อนหน้า:
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_text(text)ขั้นตอนที่ 3: สร้างเวกเตอร์ฝังตัวเป็นชุด
สร้างเวกเตอร์ฝังตัวของส่วนย่อยจำนวนมากต่อการเรียกส่วนติดต่อโปรแกรมประยุกต์หนึ่งครั้ง:
from openai import OpenAI
client = OpenAI()
def embed_batch(texts, batch_size=100):
vectors = []
for i in range(0, len(texts), batch_size):
batch = texts[i:i + batch_size]
resp = client.embeddings.create(model='text-embedding-3-small', input=batch)
vectors.extend(d.embedding for d in resp.data)
return vectorsขั้นตอนที่ 4: จัดเก็บ
สำหรับส่วนย่อย 10k-50k ส่วน FAISS หรือ Chroma ก็เพียงพอ:
import chromadb
client = chromadb.Client()
collection = client.create_collection('docs')
collection.add(
ids=[f'doc-{i}' for i in range(len(chunks))],
embeddings=vectors,
documents=chunks,
metadatas=[{'source': 'doc.pdf', 'page': i} for i in range(len(chunks))]
)การนำเข้าข้อมูลแบบทำซ้ำได้อย่างปลอดภัย
ทำให้การนำเข้าข้อมูลสามารถเรียกซ้ำได้อย่างปลอดภัย ใช้รหัสที่กำหนดแน่นอน (แฮชของเนื้อหา) เพื่อไม่ให้การเรียกซ้ำสร้างข้อมูลซ้ำ:
import hashlib
def chunk_id(source, text):
h = hashlib.sha256(text.encode()).hexdigest()[:16]
return f'{source}:{h}'
print(chunk_id('handbook.pdf', 'Employees get 20 vacation days per year.'))
print(chunk_id('handbook.pdf', 'Employees get 20 vacation days per year.'))
การอัปเดตแบบเพิ่มเฉพาะส่วน
เมื่อเอกสารมีการเปลี่ยนแปลง:
- คำนวณส่วนย่อยใหม่
- เปรียบเทียบความแตกต่างกับรหัสที่มีอยู่
- ลบส่วนที่ถูกนำออก เพิ่มส่วนใหม่ และคงส่วนที่ไม่เปลี่ยนแปลงไว้
วิธีง่าย ๆ (ลบทั้งหมดแล้วแทรกใหม่) เหมาะสำหรับชุดข้อมูลขนาดเล็ก แต่ทำให้ต้องเรียกส่วนติดต่อโปรแกรมประยุกต์สำหรับสร้างเวกเตอร์ฝังตัวโดยเปล่าประโยชน์
ข้อมูลเมตาสำหรับการกรอง
ใส่ทุกฟิลด์ที่คุณอาจต้องการใช้กรองในภายหลัง:
metadata = {
'source': '/docs/handbook.pdf',
'page': 42,
'department': 'engineering',
'updated_at': '2024-08-12',
'access_level': 'internal'
}
for k, v in metadata.items():
print(f"{k}: {v}")
ความคืบหน้าและจุดตรวจสอบ
สำหรับการนำเข้าข้อมูลขนาดใหญ่ ให้บันทึกความคืบหน้าและสร้างจุดตรวจสอบ:
for i, batch in enumerate(batches):
embed_and_store(batch)
if i % 10 == 0:
save_checkpoint(i)
print(f'Processed {i * 100} chunks')ขีดจำกัดอัตรา
เวกเตอร์ฝังตัวของ OpenAI มีขีดจำกัดอัตราที่สูงแต่มีอยู่จริง ใช้เซมาфอร์หรือการลองใหม่ของ `tenacity`:
from asyncio import Semaphore
sem = Semaphore(10) # 10 concurrent embed calls max
async def safe_embed(batch):
async with sem:
return await client.embeddings.create(...)ตรวจสอบความสมเหตุสมผลของดัชนี
หลังการนำเข้าข้อมูล ให้เรียกใช้คำค้นหาทดลองสองสามรายการและตรวจสอบผลลัพธ์ด้วยตนเอง หากไม่พบสิ่งที่เกี่ยวข้อง แสดงว่าการแบ่งส่วนย่อยหรือการสร้างเวกเตอร์ฝังตัวมีปัญหา ให้ค้นหาสาเหตุก่อนที่ผู้ใช้จะพบ
การกำหนดเวอร์ชันของดัชนี
กำหนดเวอร์ชันให้ดัชนี เพื่อให้คุณสลับไปใช้การแบ่งส่วนย่อยหรือโมเดลสร้างเวกเตอร์ฝังตัวใหม่ได้โดยไม่หยุดให้บริการ:
collection = client.create_collection(f'docs-v2-{date.today()}')
# old collection stays live until new one is validatedรหัสที่ทำซ้ำได้อย่างปลอดภัย
เหตุใดจึงใช้แฮชเนื้อหาเป็นรหัสส่วนย่อย
สรุปทบทวน
โหลด -> แบ่งเป็นส่วนย่อย -> สร้างเวกเตอร์ฝังตัว -> จัดเก็บ โดยใช้รหัสที่ทำซ้ำได้อย่างปลอดภัยและข้อมูลเมตา ดัชนีคือรากฐานของขั้นตอนการดึงข้อมูลต่อเนื่องทุกขั้นตอน
เรียนรู้ AI Agents ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 60
- บทเรียน
- 239
คำถามที่พบบ่อย
บทเรียน “การสร้างดัชนีชุดเอกสาร” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างดัชนีชุดเอกสาร” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างดัชนีชุดเอกสาร”
สร้าง Embedding ให้ทุกส่วนแล้วเก็บเวกเตอร์ไว้ในดัชนี ซึ่งเป็นขั้นตอนเตรียมข้อมูลล่วงหน้าของระบบ RAG ทุกระบบ คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างดัชนีชุดเอกสาร” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- RAG แก้ปัญหาอะไร (จุดตัดความรู้ ภาพหลอน)
- กลยุทธ์การแบ่งเป็นส่วน (คงที่ ประโยค เชิงความหมาย)
- การสร้างดัชนีชุดเอกสาร
- การสร้าง RAG แบบง่ายด้วย FAISS หรือ Chroma