AI Agents · บทเรียน

การสร้างดัชนีชุดเอกสาร

สร้าง Embedding ให้ทุกส่วนแล้วเก็บเวกเตอร์ไว้ในดัชนี ซึ่งเป็นขั้นตอนเตรียมข้อมูลล่วงหน้าของระบบ RAG ทุกระบบ

บทเรียน 3 จาก 414 ขั้นตอน

การสร้างดัชนีชุดเอกสาร เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

กระบวนการนำเข้าข้อมูล

กระบวนการ RAG แบบออฟไลน์มีสี่ขั้นตอน:

  1. โหลด เอกสาร (PDF, HTML, MD)
  2. แบ่งเป็นส่วนย่อย ในเอกสารแต่ละฉบับ
  3. สร้างเวกเตอร์ฝังตัว ของส่วนย่อยแต่ละส่วน
  4. จัดเก็บ เวกเตอร์และข้อมูลเมตาในดัชนี

ขั้นตอนที่ 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.'))

การอัปเดตแบบเพิ่มเฉพาะส่วน

เมื่อเอกสารมีการเปลี่ยนแปลง:

  1. คำนวณส่วนย่อยใหม่
  2. เปรียบเทียบความแตกต่างกับรหัสที่มีอยู่
  3. ลบส่วนที่ถูกนำออก เพิ่มส่วนใหม่ และคงส่วนที่ไม่เปลี่ยนแปลงไว้

วิธีง่าย ๆ (ลบทั้งหมดแล้วแทรกใหม่) เหมาะสำหรับชุดข้อมูลขนาดเล็ก แต่ทำให้ต้องเรียกส่วนติดต่อโปรแกรมประยุกต์สำหรับสร้างเวกเตอร์ฝังตัวโดยเปล่าประโยชน์

ข้อมูลเมตาสำหรับการกรอง

ใส่ทุกฟิลด์ที่คุณอาจต้องการใช้กรองในภายหลัง:

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. RAG แก้ปัญหาอะไร (จุดตัดความรู้ ภาพหลอน)
  2. กลยุทธ์การแบ่งเป็นส่วน (คงที่ ประโยค เชิงความหมาย)
  3. การสร้างดัชนีชุดเอกสาร
  4. การสร้าง RAG แบบง่ายด้วย FAISS หรือ Chroma
← กลับไปที่ AI Agents