Mengindeks Set Dokumen
Hasilkan embedding bagi setiap bahagian dan simpan vektor dalam indeks — langkah penyediaan luar talian bagi mana-mana sistem RAG.
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:
- Muatkan dokumen (PDF, HTML, MD)
- Pecahkan setiap dokumen kepada serpihan
- Benamkan setiap serpihan
- 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 vectorsLangkah 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:
- Kira serpihan baharu
- Bandingkan dengan ID sedia ada
- 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 validatedID 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.
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
- Perkara yang Diselesaikan oleh RAG (Had Pengetahuan, Halusinasi)
- Strategi Pembahagian (Tetap, Ayat, Semantik)
- Mengindeks Set Dokumen
- Membina RAG Naif dengan FAISS atau Chroma