كلاود
ذكاء اصطناعي

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

كلاود|١٧ أبريل ٢٠٢٦|4 دقائق قراءة|٣٠١ مشاهدة
معالجة المستندات بالذكاء الاصطناعي: 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 أو صمم سيرفرك بالمواصفات المطلوبة.

مشاركة