فهرسة مجموعة مستندات
أنشئ embedding لكل مقطع وخزّن المتجهات في فهرس — وهي خطوة الإعداد غير المتصلة بالإنترنت في أي نظام RAG.
فهرسة مجموعة مستندات درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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: إنشاء التضمينات على دفعات
أنشئوا تضمينات لعدة مقاطع في كل استدعاء لواجهة 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الخطوة 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.'))
التحديثات التزايدية
عند تغيّر مستند:
- احسبوا المقاطع الجديدة
- قارنوا المعرّفات بالمعرّفات الحالية
- احذفوا ما أُزيل، وأضيفوا الجديد، وأبقوا ما لم يتغير
النهج الساذج (حذف كل شيء ثم إعادة الإدراج) مناسب للمجموعات الصغيرة، لكنه يهدر استدعاءات واجهة API الخاصة بإنشاء التضمينات.
البيانات الوصفية للتصفية
أدرجوا أي حقل قد ترغبون في التصفية بناءً عليه لاحقًا:
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 حدًا مرتفعًا للمعدل، لكنه حقيقي. استخدموا semaphores أو عمليات إعادة المحاولة باستخدام `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المعرّفات الحتمية للمحتوى
لماذا نستخدم تجزئات المحتوى باعتبارها معرّفات للمقاطع؟
مراجعة
تحميل ← تقسيم إلى مقاطع ← إنشاء تضمينات ← تخزين، مع معرّفات قابلة للتكرار بأمان وبيانات وصفية. الفهرس هو الأساس لكل خطوة استرجاع لاحقة.
الأسئلة الشائعة
هل درس «فهرسة مجموعة مستندات» مجاني؟
نعم — نص درس «فهرسة مجموعة مستندات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.
ماذا ستتعلم في «فهرسة مجموعة مستندات»؟
أنشئ embedding لكل مقطع وخزّن المتجهات في فهرس — وهي خطوة الإعداد غير المتصلة بالإنترنت في أي نظام RAG. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟
لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «فهرسة مجموعة مستندات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟
نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما الذي يحله RAG (حدود المعرفة والهلوسة)
- استراتيجيات تقسيم النص (ثابت، جُملي، دلالي)
- فهرسة مجموعة مستندات
- بناء RAG بسيط باستخدام FAISS أو Chroma