0Pricing
Learn AI with Python · درس

تحميل المستندات وتقسيمها وتضمينها

‏PyPDFLoader وRecursiveCharacterTextSplitter وOpenAIEmbeddings واستراتيجيات التضمين

تحميل المستندات وتقسيمها وتضمينها درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

مسار إدخال بيانات RAG

قبل أن يتمكن LLM من الإجابة بالاعتماد على مستنداتكم، يجب عليكم تحميلها وتقسيمها وتضمينها. يغطّي هذا الدرس مسار إدخال البيانات هذا، وهو أساس كل نظام للتوليد المعزَّز بالاسترجاع.

pip install langchain-community pypdf langchain-openai

تحميل ملف PDF

يقرأ PyPDFLoader ملف PDF ويعيد قائمة من كائنات Document، كائناً واحداً لكل صفحة. ويحتوي كل Document على page_content (النص) وmetadata (المصدر ورقم الصفحة).

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("handbook.pdf")
docs = loader.load()
print(len(docs), "pages")

لماذا نقسم المستندات؟

غالباً ما تكون الصفحات الكاملة كبيرة جداً بحيث يتعذر تضمينها أو وضعها في مطالبة. ويؤدي التقسيم إلى تجزئة النص إلى مقاطع أصغر يمكن تضمينها بسهولة، كما يتيح للاسترجاع إعادة المقطع ذي الصلة فقط بدلاً من صفحة كاملة.

RecursiveCharacterTextSplitter

المقسِّم الموصى به هو RecursiveCharacterTextSplitter. فهو يحاول التقسيم على الفقرات أولاً، ثم الجمل، ثم الكلمات، مع الحفاظ على تماسك المقاطع دلالياً بدلاً من القطع في منتصف الكلمة.

from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)

chunk_size و chunk_overlap

تحدد chunk_size الحد الأقصى لعدد المحارف في المقطع، بينما تكرر chunk_overlap جزءاً من النص بين المقاطع المتجاورة حتى لا يُفقد السياق عند الحدود. ويُعد التقسيم بنسبة 1000/200 نقطة بداية شائعة.

chunks = splitter.split_documents(docs)
print(len(chunks), "chunks")
print(chunks[0].page_content[:120])

ضبط حجم المقطع

توفر المقاطع الصغيرة استرجاعاً دقيقاً، لكنها قد تفوّت السياق المحيط. وتحافظ المقاطع الكبيرة على السياق، لكنها تخفف الصلة وتستهلك رموزاً أكثر. ويُعد التداخل بنسبة 10-20% من حجم المقطع إعداداً افتراضياً جيداً لربط الحدود.

ما هي التضمينات؟

يحوّل التضمين النص إلى متجه ثابت الطول من الأرقام يلتقط معناه. وتنتج النصوص المتشابهة متجهات متقاربة. وهذا ما يتيح لنا البحث وفق التشابه الدلالي بدلاً من الكلمات المفتاحية.

OpenAIEmbeddings

أنشئوا التضمينات باستخدام OpenAIEmbeddings. ويُعد النموذج text-embedding-3-small منخفض التكلفة وفعالاً. يضمّن embed_query سلسلة واحدة، بينما يضمّن embed_documents قائمة.

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vector = embeddings.embed_query("How do I reset my password?")
print(len(vector))  # 1536

تضمين دفعة

ضمّنوا جميع مقاطعكم دفعة واحدة. يتحول كل مقطع إلى متجه ستخزنونه لاحقاً في قاعدة بيانات متجهية لإجراء بحث سريع عن التشابه.

texts = [c.page_content for c in chunks]
vectors = embeddings.embed_documents(texts)
print(len(vectors), "vectors of dim", len(vectors[0]))

تقدير تكلفة التضمين

تُحتسب تكلفة التضمينات لكل رمز. قدّروا إجمالي الرموز في جميع المقاطع، ثم اضربوه في السعر لكل 1K رمزاً. ويمنع العدّ قبل التضمين صدور فواتير غير متوقعة عند معالجة مجموعات كبيرة من المستندات.

import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
total = sum(len(enc.encode(c.page_content)) for c in chunks)
price_per_1k = 0.00002
print("tokens:", total, "cost $:", total / 1000 * price_per_1k)

ملخص مسار المعالجة

يتكون مسار إدخال البيانات من: تحميل المستندات، وتقسيمها إلى مقاطع متداخلة، وتضمين كل مقطع في متجه، ثم تخزينها (في الدرس التالي). ويحدد حسن التقسيم والوعي بالتكلفة هنا جودة نظام RAG بأكمله وسعره.

تحقق سريع

اختبروا معرفتكم بإدخال البيانات.

مراجعة: التحميل والتقسيم والتضمين

استخدمتم PyPDFLoader لتحميل المستندات، وRecursiveCharacterTextSplitter مع chunk_size وchunk_overlap لتقسيمها إلى مقاطع، وOpenAIEmbeddings لتحويل المقاطع إلى متجهات. كما تعلمتم تقدير تكلفة التضمين لكل رمز قبل معالجة مجموعة كبيرة من المستندات.

الأسئلة الشائعة

هل درس «تحميل المستندات وتقسيمها وتضمينها» مجاني؟

نعم — نص درس «تحميل المستندات وتقسيمها وتضمينها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

ماذا ستتعلم في «تحميل المستندات وتقسيمها وتضمينها»؟

‏PyPDFLoader وRecursiveCharacterTextSplitter وOpenAIEmbeddings واستراتيجيات التضمين تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟

لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تحميل المستندات وتقسيمها وتضمينها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟

نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بنية LangChain وLCEL
  2. تحميل المستندات وتقسيمها وتضمينها
  3. مخازن المتجهات: Chroma وFAISS
  4. بناء نظام أسئلة وأجوبة بتقنية RAG من البداية إلى النهاية
← العودة إلى Learn AI with Python