Ejen AI · Pelajaran

Mengindeks Set Dokumen

Hasilkan embedding bagi setiap bahagian dan simpan vektor dalam indeks — langkah penyediaan luar talian bagi mana-mana sistem RAG.

Pelajaran 3 daripada 414 langkah

Mengindeks Set Dokumen ialah pelajaran Ejen AI percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Ejen AI, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.

Saluran Pengambilan Masuk

Saluran RAG luar talian mempunyai empat langkah:

  1. Muatkan dokumen (PDF, HTML, MD)
  2. Pecahkan setiap dokumen kepada serpihan
  3. Benamkan setiap serpihan
  4. Simpan vektor + metadata dalam indek

Langkah 1: Muatkan Dokumen

Gunakan pemuat khusus untuk format yang berbeza:

# 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: Pecahkan

Gunakan pemisah daripada pelajaran sebelumnya:

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

Langkah 3: Benamkan Secara Berkumpulan

Benamkan banyak serpihan bagi 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: Simpan

Untuk 10k-50k serpihan, FAISS atau Chroma sudah memadai:

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

Pengambilan Masuk Idempoten

Pastikan pengambilan masuk selamat untuk dijalankan semula. Gunakan ID yang deterministik (cincangan kandungan) supaya pelaksanaan semula tidak menghasilkan pendua:

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

Kemas Kini Berperingkat

Apabila dokumen berubah:

  1. Kira serpihan baharu
  2. Bandingkan dengan ID sedia ada
  3. Padam yang telah dibuang, tambah yang baharu dan kekalkan yang tidak berubah

Pendekatan naif (padam semua + masukkan semula) sesuai untuk korpus kecil tetapi membazirkan panggilan API pembenaman.

Metadata untuk Penapisan

Sertakan apa-apa medan yang mungkin ingin anda gunakan untuk penapisan kemudian:

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 Semak

Untuk pengambilan masuk yang besar, catat kemajuan dan buat titik semak:

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

Had Kadar

Pembenaman OpenAI mempunyai had kadar yang tinggi tetapi benar-benar wujud. Gunakan semafor atau percubaan semula `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(...)

Semak Kewajaran Indek

Selepas pengambilan masuk, jalankan beberapa pertanyaan ujian dan periksa hasilnya secara manual. Jika tiada hasil yang berkaitan muncul, pemecahan serpihan atau pembenaman anda rosak — cari puncanya sebelum pengguna menyedarinya.

Pemberian Versi pada Indek

Berikan versi kepada indek supaya anda boleh bertukar kepada pemecahan serpihan atau model pembenaman baharu tanpa masa henti:

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

ID Idempoten

Mengapa menggunakan cincangan kandungan sebagai ID serpihan?

Ringkasan

Muatkan -> pecahkan -> benamkan -> simpan, dengan ID idempoten dan metadata. Indek ialah asas bagi setiap langkah pengambilan seterusnya.

Percuma untuk bermula

Pelajari Ejen AI dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
60
Pelajaran
239

Soalan Lazim

Adakah pelajaran “Mengindeks Set Dokumen” percuma?

Ya — teks penuh “Mengindeks Set Dokumen” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Ejen AI, tingkat taraf kepada CoddyKit PRO. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mengindeks Set Dokumen”?

Hasilkan embedding bagi setiap bahagian dan simpan vektor dalam indeks — langkah penyediaan luar talian bagi mana-mana sistem RAG. Anda berlatih Ejen AI menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Ejen AI?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Ejen AI di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Mengindeks Set Dokumen” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Ejen AI ini?

Ya. Setiap pelajaran Ejen AI menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Perkara yang Diselesaikan oleh RAG (Had Pengetahuan, Halusinasi)
  2. Strategi Pembahagian (Tetap, Ayat, Semantik)
  3. Mengindeks Set Dokumen
  4. Membina RAG Naif dengan FAISS atau Chroma
← Kembali ke Ejen AI