# 📘 מדריך: בניית עוזר משפטי בעברית (RAG מקומי)
## חלק 1 — התקנה והכנה
### יצירת מבנה פרויקט ותיקיית `docs/`
mkdir legal-assistant && cd legal-assistant
mkdir docs
# הנח כאן את כל קבצי ה-PDF / DOCX / TXT שלך
"`
### התקנת Ollama ומשיכת המודלים
ollama pull qwen2.5:7b-instruct
ollama pull bge-m3
### הקמת סביבת Python והתקנות
python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
pip install fastapi uvicorn pydantic==2.* numpy tqdm requests python-docx pypdf
### requirements.txt
fastapi
uvicorn
pydantic==2.*
numpy
tqdm
requests
python-docx
pypdf
## חלק 2 — שרת FastAPI (Python RAG)
קובץ `server.py`
# server.py
# -*- coding: utf-8 -*-
שרת RAG מקומי בעברית: אינדוקס docs/ ושאילתות משפטיות.
from typing import List, Dict, Any
from fastapi import FastAPI
from pydantic import BaseModel
import os, re, json, pickle, uuid
import numpy as np
from tqdm import tqdm
import requests
DOCS_DIR = os.path.abspath("./docs")
INDEX_PATH = os.path.abspath("./index.pkl")
CHAT_MODEL = "qwen2.5:7b-instruct"
EMBED_MODEL = "bge-m3"
app = FastAPI(title="RAG משפטי בעברית - מקומי")
def ollama_embed(texts: List[str], model: str = EMBED_MODEL) -> np.ndarray:
url = "http://localhost:11434/api/embeddings"
vectors = []
for t in texts:
payload = {"model": model, "prompt": t}
r = requests.post(url, json=payload, timeout=120)
r.raise_for_status()
emb = r.json().get("embedding")
vectors.append(emb)
return np.array(vectors, dtype=np.float32)
### הרצת השרת
uvicorn server:app --reload --port 8000
### אינדוקס ראשוני
curl -X POST http://127.0.0.1:8000/reindex -H "Content-Type: application/json" -d "{}"
## חלק 3 — ממשק PHP + מודל מותאם ב־Ollama
### קובץ `index.php`
$ch = curl_init('http://127.0.0.1:8000/ask');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json; charset=utf-8'],
CURLOPT_POSTFIELDS => $payload,
CURLOPT_TIMEOUT => 120,
]);
$res = curl_exec($ch);
if ($res === false) {
return ['ok' => false, 'error' => 'שגיאת תקשורת עם השרת: ' . curl_error($ch)];
}
curl_close($ch);
$data = json_decode($res, true);
return is_array($data) ? $data : ['ok' => false, 'error' => 'תגובה לא תקינה.'];
}
?>
### Modelfile (מודל מותאם)
FROM qwen2.5:7b-instruct
SYSTEM """
את/ה עוזר/ת משפטי/ת בעברית. ענה/י בעברית תקנית, ברור וענייני.
"""
PARAMETER temperature 0.2
PARAMETER num_ctx 4096
### יצירת המודל
ollama create pablo-guides-legal-1.0 -f Modelfile
### עדכון server.py
CHAT_MODEL = "pablo-guides-legal-1.0"
### צ’ק־ליסט סופי
`
ollama pull qwen2.5:7b-instruct
ollama pull bge-m3
ollama create pablo-guides-legal-1.0 -f Modelfile
uvicorn server:app --reload --port 8000
curl -X POST http://127.0.0.1:8000/reindex -H "Content-Type: application/json" -d "{}"
📊 נתוני צפיות
סה"כ צפיות: 16
מבקרים ייחודיים: 16
- 🧍 172.70.200.174 (
Israel)
- 🧍 172.71.126.41 (
France)
- 🧍 172.71.122.232 (
France)
- 🧍 104.23.221.32 (
Sweden)
- 🧍 172.71.135.74 (
France)
- 🧍 172.70.200.175 (
Israel)
- 🧍 172.71.222.125 (
United States)
- 🧍 162.158.41.65 (
United States)
- 🧍 108.162.245.122 (
United States)
- 🧍 172.71.102.196 (
Netherlands)
- 🧍 104.23.219.58 (
Germany)
- 🧍 172.70.111.56 (
United States)
- 🧍 172.68.103.100 (
Portugal)
- 🧍 162.158.111.85 (
Germany)
- 🧍 172.71.148.56 (
Germany)
- 🧍 172.71.144.36 (
Germany)