0Pricing
AI Agents · Pelajaran

Mengindeks Sekumpulan Dokumen

Buat embedding untuk setiap bagian dan simpan vektornya dalam indeks—langkah persiapan offline bagi sistem RAG apa pun.

Mengindeks Sekumpulan Dokumen adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Alur Pemasukan Data

Alur kerja RAG luring memiliki empat langkah:

  1. Muat dokumen (PDF, HTML, MD)
  2. Bagi menjadi potongan setiap dokumen
  3. Sematkan setiap potongan
  4. Simpan vektor + metadata dalam indeks

Langkah 1: Memuat Dokumen

Gunakan pemuat khusus untuk berbagai format:

# 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()

Langkah 2: Membagi Menjadi Potongan

Gunakan pemisah dari pelajaran sebelumnya:

from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_text(text)

Langkah 3: Menyematkan dalam Kelompok

Sematkan banyak potongan dalam setiap panggilan API:

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

Langkah 4: Menyimpan

Untuk 10–50 ribu potongan, FAISS atau Chroma sudah cukup:

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))]
)

Pemasukan Data Idempoten

Jadikan proses pemasukan data aman untuk dijalankan ulang. Gunakan ID deterministik (hash konten) agar menjalankannya kembali tidak menghasilkan duplikat:

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.'))

Pembaruan Inkremental

Ketika sebuah dokumen berubah:

  1. Hitung potongan baru
  2. Bandingkan dengan ID yang ada
  3. Hapus yang dihapus, gunakan add untuk yang baru, dan pertahankan yang tidak berubah

Pendekatan naif (hapus semua lalu masukkan ulang) cukup baik untuk korpus kecil, tetapi membuang panggilan API penyematan.

Metadata untuk Penyaringan

Sertakan setiap bidang yang mungkin ingin Anda gunakan untuk menyaring di kemudian hari:

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}")

Kemajuan dan Titik Pemeriksaan

Untuk pemasukan data berukuran besar, catat kemajuan dan buat titik pemeriksaan:

for i, batch in enumerate(batches):
    embed_and_store(batch)
    if i % 10 == 0:
        save_checkpoint(i)
        print(f'Processed {i * 100} chunks')

Batas Laju

Vektor penyematan OpenAI memiliki batas laju yang tinggi, tetapi nyata. Gunakan semaphore atau percobaan ulang `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(...)

Memeriksa Kewajaran Indeks

Setelah pemasukan data, jalankan beberapa kueri pengujian dan periksa hasilnya secara manual. Jika tidak ada hasil yang relevan, pembagian potongan atau penyematan Anda bermasalah—temukan penyebabnya sebelum pengguna menemukannya.

Membuat Versi Indeks

Buat versi indeks agar Anda dapat beralih ke model pembagian potongan atau penyematan yang baru tanpa waktu henti:

collection = client.create_collection(f'docs-v2-{date.today()}')
# old collection stays live until new one is validated

ID Idempoten

Mengapa menggunakan hash konten sebagai ID potongan?

Ringkasan

Muat -> bagi menjadi potongan -> sematkan -> simpan, dengan ID idempoten dan metadata. Indeks adalah fondasi bagi setiap langkah pengambilan berikutnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengindeks Sekumpulan Dokumen” gratis?

Ya — teks lengkap “Mengindeks Sekumpulan Dokumen” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengindeks Sekumpulan Dokumen”?

Buat embedding untuk setiap bagian dan simpan vektornya dalam indeks—langkah persiapan offline bagi sistem RAG apa pun. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Mengindeks Sekumpulan Dokumen” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Apa yang Diatasi RAG (Batas Pengetahuan, Halusinasi)
  2. Strategi Pemotongan (Tetap, Kalimat, Semantik)
  3. Mengindeks Sekumpulan Dokumen
  4. Membangun RAG Naif dengan FAISS atau Chroma
← Kembali ke AI Agents