معالجة المستندات بالذكاء الاصطناعي: OCR + RAG

حوّل PDF لنص → خزّنه في vector database → اسأل AI. معالجة مستندات كاملة على سيرفرك الخاص.
معالجة المستندات بالذكاء الاصطناعي: دليل عملي
تحليل العقود، استخراج البيانات من الفواتير، تصنيف المستندات، الرد على أسئلة من ملفات PDF — كل هذه مهام يمكن أتمتتها بالذكاء الاصطناعي. هذا الدليل يشرح كيفية بناء نظام معالجة مستندات على سيرفرك الخاص.
المشكلة التي تحلها
بدون AI:
├── موظف يقرأ كل فاتورة يدوياً: 3-5 دقائق/فاتورة
├── 100 فاتورة/يوم = 5 ساعات عمل يدوي
└── خطأ بشري: 2-5%
مع AI:
├── معالجة 100 فاتورة: أقل من دقيقة
├── دقة: 94-98% (تحسن مستمر)
└── بيانات منظمة جاهزة للـ ERP
أنواع معالجة المستندات
1. استخراج البيانات (Data Extraction)
import anthropic
import base64
def extract_invoice_data(pdf_path: str) -> dict:
"""استخراج بيانات الفاتورة من PDF"""
client = anthropic.Anthropic
# تحويل PDF لـ base64
with open(pdf_path, "rb") as f:
pdf_data = base64.standard_b64encode(f.read).decode("utf-8")
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": pdf_data,
},
},
{
"type": "text",
"text": """استخرج من هذه الفاتورة:
- رقم الفاتورة
- تاريخ الإصدار
- اسم المورد ورقم السجل التجاري
- القيمة قبل الضريبة
- قيمة الضريبة (15%)
- الإجمالي
أعطني النتيجة كـ JSON."""
}
],
}
],
)
import json
return json.loads(message.content[0].text)
# استخدام
invoice_data = extract_invoice_data("invoice_2024_001.pdf")
print(invoice_data)
# {
# "invoice_number": "INV-2024-001",
# "date": "2024-03-15",
# "vendor": "شركة التقنية المتقدمة",
# "cr_number": "1234567890",
# "subtotal": 10000,
# "vat": 1500,
# "total": 11500
# }
2. تصنيف المستندات (Document Classification)
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
def classify_document(text: str) -> str:
"""تصنيف نوع المستند"""
llm = ChatAnthropic(model="claude-3-5-sonnet-20241022")
prompt = ChatPromptTemplate.from_messages([
("system", """أنت محلل مستندات متخصص.
صنّف المستند التالي في إحدى الفئات:
- عقد
- فاتورة
- عرض سعر
- تقرير مالي
- مراسلة رسمية
- وثيقة قانونية
- أخرى
أعطِ الفئة فقط بدون شرح."""),
("human", "{document_text}")
])
chain = prompt | llm
result = chain.invoke({"document_text": text[:2000]})
return result.content
3. نظام Q&A على مستندات متعددة (RAG)
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import PGVector
from langchain_anthropic import ChatAnthropic
from langchain.chains import RetrievalQA
import psycopg2
# تحميل المستندات وتقطيعها
def load_documents(pdf_paths: list) -> list:
docs = []
for path in pdf_paths:
loader = PyPDFLoader(path)
docs.extend(loader.load)
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
return splitter.split_documents(docs)
# تخزين في pgvector (PostgreSQL)
CONNECTION_STRING = "postgresql+psycopg2://postgres:password@localhost/docdb"
vectorstore = PGVector.from_documents(
documents=load_documents(["contract1.pdf", "contract2.pdf"]),
embedding=embeddings,
connection_string=CONNECTION_STRING,
collection_name="contracts"
)
# الإجابة على أسئلة
qa_chain = RetrievalQA.from_chain_type(
llm=ChatAnthropic(model="claude-3-5-sonnet-20241022"),
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 5})
)
answer = qa_chain.invoke({"query": "ما هي شروط إنهاء العقد؟"})
print(answer["result"])
معالجة دفعات (Batch Processing)
import asyncio
import anthropic
from pathlib import Path
async def process_document_batch(pdf_paths: list) -> list:
"""معالجة مجموعة من المستندات بشكل متوازٍ"""
client = anthropic.Anthropic
async def process_single(path: str) -> dict:
# معالجة مستند واحد
result = extract_invoice_data(path)
return {"file": path, "data": result}
# معالجة 5 مستندات في وقت واحد
semaphore = asyncio.Semaphore(5)
async def limited_process(path):
async with semaphore:
return await process_single(path)
tasks = [limited_process(p) for p in pdf_paths]
return await asyncio.gather(*tasks)
# تشغيل
results = asyncio.run(process_document_batch([
"invoices/inv001.pdf",
"invoices/inv002.pdf",
"invoices/inv003.pdf",
]))
إعداد البيئة على السيرفر
# تثبيت المتطلبات
pip install anthropic langchain langchain-anthropic langchain-community \
pypdf psycopg2-binary pgvector python-dotenv
# PostgreSQL مع pgvector
apt install postgresql postgresql-contrib
sudo -u postgres psql -c "CREATE EXTENSION vector;"
# إنشاء قاعدة بيانات للمستندات
sudo -u postgres psql << SQL
CREATE DATABASE docdb;
CREATE USER docuser WITH PASSWORD 'securepassword';
GRANT ALL PRIVILEGES ON DATABASE docdb TO docuser;
SQL
كلاود (cloud.net.sa) توفر قالب AI Hosting جاهزاً مع PostgreSQL + pgvector مثبت مسبقاً — يمكنك بدء تطوير نظام معالجة المستندات مباشرة بدون إعداد البنية التحتية.
الخلاصة
معالجة المستندات بالذكاء الاصطناعي توفر ساعات عمل يدوي يومياً. الإعداد الكامل يحتاج سيرفر VPS بـ 4+ GB RAM مع PostgreSQL + pgvector، ومكتبات Python المذكورة. الدقة تتجاوز 95% في معظم أنواع المستندات التجارية.
ابدأ الآن
جاهز تشغّل الذكاء الاصطناعي على سيرفرك؟ اكتشف حلول استضافة AI أو صمم سيرفرك بالمواصفات المطلوبة.


