מדריך-על: מודלי AI קלילים ומהירים (CPU בלבד) – תוספי/תבניות WP, אבטחה ל־PDF, Theme Generator ועוד
מדריך-על: מודלי AI קלילים ומהירים (CPU בלבד)
הכול בעברית, מותאם PHP 8.3, ריצה על CPU בלבד, עם הסברים למתחילים וקוד מלא.
חלק א׳ — מודלי התחלה מומלצים (Starter Models) על CPU בלבד
- LLM שיחה קטן: 
qwen2.5:3b-instruct-q4– קטן, זריז, עובד יפה בעברית, מתאים להנחיות וקוד. חלופות: דגמי 1.5–7B בגרסת instruct ו־q4. - מודל Embeddings: 
bge-m3– אמבדינג כללי מהיר (וקטור בינוני, ריצה טובה על CPU). 
לוגיקת עבודה מומלצת: שליפה מהירה (FTS/BM25) → ריראנק באמבדינג ל־50–200 קטעים → LLM קטן שמייצר את הפלט (קוד/דוח/HTML).
התקנות בסיס והורדת מודלים
# התקנת Ollama (Linux/macOS; ב-Windows מומלץ WSL2)
curl -fsSL https://ollama.com/install.sh | sh
# סביבת Python
python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
pip install fastapi uvicorn requests numpy tqdm pypdf python-docx beautifulsoup4 lxml
# משיכת מודלים קטנים
ollama pull qwen2.5:3b-instruct-q4
ollama pull bge-m3
			חלק ב׳ — בחירת בסיס נתונים (DB): טבלת יתרונות/חסרונות
| DB | מתי לבחור | יתרונות | חסרונות | טיפים | 
|---|---|---|---|---|
| SQLite + FTS5 | פרויקטים קטנים–בינוניים, מקומי, קובץ יחיד | קליל, מהיר, ללא שרת, FTS מעולה | קונקראנס מוגבל; לא לקלאסטרים | בחירה ראשונה לפרוטוטייפים ומדריכים | 
| MySQL / MariaDB (FULLTEXT) | אם יש WP/LAMP והוסטינג סטנדרטי | מוכר, הרשאות ומשתמשים, אינטגרציה עם WP | FTS פחות גמיש מ־Solr | נוח כשכבר יש שרת WP | 
| PostgreSQL (Text Search + GIN) | צריך FTS גמיש ושאילתות עשירות | אינדקסים חזקים, סכמות מורכבות | קצת יותר הגדרות | מעולה לכלי dev ותשתיות | 
| MongoDB | JSON/חצי־מובנה, פילוחים גמישים | קל ל־upsert, text index, אופציות לווקטורים | וקטורים דורשים כיוונון; עדיף קדם־סינון | טוב לפרופילים/לוגים | 
| Apache Solr | אוספים גדולים, חיפוש מהיר מאוד | BM25 חזק, סקלביליות, שאילתות עשירות | שירות נפרד; מעט “כבד” יותר | ל־OSINT אחראי/מעקב שינויים | 
חלק ג׳ — נבנה מודל שמייצר תוספי/תבניות WordPress לפי קלט
המודל יקבל מפרט (spec), ישלוף דוגמאות/חוקים (RAG), ויחזיר קוד PHP 8.3 מאובטח ומוכן ל־ZIP.
מבנה פרויקט מומלץ
wp-maker/
├─ docs/wp/ # מקורות טקסטואליים חוקיים (Handbook, הערות שלך)
├─ docs/snippets/ # סניפטים קצרים משלך (PHP)
├─ data/ # JSONL ל-instructions
├─ db/ # SQLite FTS5
├─ code/ # ingest/server/scripts
├─ export/ # ZIP ותוצרים
└─ models/ # Modelfile
			דוגמאות סניפטים (PHP 8.3)
 $name = esc_html($a['name']);
return "
שלום, {$name}!
";
}
add_shortcode('pg_hello', 'pg_hello_shortcode');
			
 declare(strict_types=1);
add_action('admin_menu', function() {
add_options_page('PG Settings','PG Settings','manage_options','pg-settings','pg_settings_page');
});
function pg_settings_page(): void {
if (!current_user_can('manage_options')) return;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
check_admin_referer('pg_save_settings');
$title = sanitize_text_field($_POST['pg_title'] ?? ");
update_option('pg_title', $title);
echo '
נשמר.
';
}
$title = esc_attr(get_option('pg_title',"));
			PG Settings
חלק ד׳ — מודל ביקורת אבטחה אחראית לאתרים שלך + הפקה ל־PDF
קלט: רשימת דומיינים
# data/domains.csv
domain
https://your-site-1.com
https://your-site-2.com
			Baseline (לא אגרסיבי) עם OWASP ZAP
docker run –rm -t -v "$PWD:/zap/wrk" owasp/zap2docker-stable zap-baseline.py \
-t https://your-site-1.com -r zap_your-site-1.html
			פרסור ממצאים ל־SQLite
# code/ingest_findings.py
import sqlite3, re
from bs4 import BeautifulSoup
DB="db/sec.db"; HTML="zap_your-site-1.html"
con=sqlite3.connect(DB); cur=con.cursor()
cur.execute("CREATE VIRTUAL TABLE IF NOT EXISTS findings USING fts5(domain, text, level);")
soup=BeautifulSoup(open(HTML,"r",encoding="utf-8").read(),"html.parser")
for tr in soup.select("tr"):
t=" ".join(re.sub(r"\s+"," ", tr.get_text(" ", strip=True)).split())
if len(t) < 40: continue
lvl="info"
if "High" in t: lvl="high"
elif "Medium" in t: lvl="medium"
cur.execute("INSERT INTO findings(domain,text,level) VALUES (?,?,?)", ("your-site-1.com", t, lvl))
con.commit(); con.close(); print("✓ findings stored")
			דוח טקסטואלי מסביר (לא PDF)
# code/sec_report.py
import sqlite3, requests
DB="db/sec.db"; CHAT="qwen2.5:3b-instruct-q4"
def gather(domain, limit=80):
con=sqlite3.connect(DB); con.row_factory=sqlite3.Row
rows = con.execute("SELECT text, level FROM findings WHERE domain=? LIMIT ?", (domain,limit)).fetchall()
con.close(); return rows
def write_report(domain):
rows=gather(domain)
bullets="\n".join([f"- [{r['level']}] {r['text']}" for r in rows])
sys="הפק דוח אבטחה בעברית ללא הוראות התקפיות. ציין השפעה עסקית וצעדי תיקון מדויקים."
prompt=f"אתר: {domain}\nממצאים:\n{bullets}\n\nבבקשה הפק דוח מסכם."
r=requests.post("http://localhost:11434/api/chat", json={
"model":CHAT,
"messages":[{"role":"system","content":sys},{"role":"user","content":prompt}],
"stream":False,"options":{"temperature":0.1,"num_ctx":2048}
}, timeout=180)
r.raise_for_status()
print(r.json()["message"]["content"])
write_report("your-site-1.com")
			הפקה ל־PDF (RTL יפה) — HTML → wkhtmltopdf
# התקנת wkhtmltopdf (התאם להפצה שלך)
sudo apt-get update && sudo apt-get install -y wkhtmltopdf
# code/sec_report_html.py
import sqlite3, requests, os
DB="db/sec.db"; CHAT="qwen2.5:3b-instruct-q4"
os.makedirs("export", exist_ok=True)
def gather(domain, limit=100):
con=sqlite3.connect(DB); con.row_factory=sqlite3.Row
rows = con.execute("SELECT text, level FROM findings WHERE domain=? LIMIT ?", (domain,limit)).fetchall()
con.close(); return rows
def write_html(domain):
rows = gather(domain)
bullets = "\n".join([f"
- [{r['level']}] {r['text']}
 
" for r in rows])
sys = "הפק דוח אבטחה בעברית ללא הוראות התקפיות. ציין השפעה עסקית וצעדי תיקון מדויקים."
prompt = f"אתר: {domain}\nממצאים:\n" + "\n".join([f"- [{r['level']}] {r['text']}" for r in rows]) + "\n\nבבקשה הפק דוח מסכם."
r = requests.post("http://localhost:11434/api/chat", json={
"model":CHAT,
"messages":[{"role":"system","content":sys},{"role":"user","content":prompt}],
"stream":False,"options":{"temperature":0.1,"num_ctx":2048}
}, timeout=180)
r.raise_for_status()
report = r.json()["message"]["content"]
html = f"""<!doctype html>
דוח אבטחה: {domain}
תקציר ממצאים
{bullets}
סיכום והמלצות
{report}
"""
open("export/sec_report.html","w",encoding="utf-8").write(html)
print("✓ export/sec_report.html נוצר")
write_html("your-site-1.com")
# המרה ל-PDF
wkhtmltopdf export/sec_report.html export/sec_report.pdf
			חלק ה׳ — מודל שמייצר קוד־בסיס Production לפי מפרט (תבנית Skeleton)
לא שיבוט אתר קיים, אלא יצירה מחדש לפי מפרט (דפים, תפריטים, טפסים, DB, RTL).
Blueprint קצר
# blueprint.txt
שם: MySite
דפים: home, about, contact
DB: SQLite
תכונות: טופס קשר מאובטח, תפריט עליון, footer, תבנית RTL
			מחולל Skeleton ב-PHP 8.3
# code/generate_skeleton.py
import os, sys, pathlib, textwrap
name=sys.argv[1] if len(sys.argv)>1 else "mysite"
root=pathlib.Path("export")/name
(root/"public").mkdir(parents=True, exist_ok=True)
(root/"src").mkdir(exist_ok=True)
(root/"templates").mkdir(exist_ok=True)
(root/"public"/".htaccess").write_text("Options -Indexes\n", encoding="utf-8")
(root/"public"/"index.php").write_text(textwrap.dedent("""\
 """), encoding="utf-8")
(root/"src"/"bootstrap.php").write_text(textwrap.dedent("""\
 function h(string $s): string { return htmlspecialchars($s, ENT_QUOTES|ENT_SUBSTITUTE, 'UTF-8'); }
function render(string $tpl, array $vars=[]): string {
extract($vars, EXTR_SKIP);
ob_start(); include __DIR__ . '/../templates/' . $tpl; return ob_get_clean();
}
"""), encoding="utf-8")
for page in ["home","about","contact"]:
(root/"templates"/f"{page}.php").write_text(textwrap.dedent(f"""\
<!doctype html>
{page.title()}
תוכן ראשוני לעמוד {page}.
"""), encoding="utf-8")
print("✓ נוצר שלד ב:", root)
			אריזה ל־ZIP
python code/generate_skeleton.py mysite
cd export && zip -r mysite.zip mysite
			חלק ו׳ — Theme Generator: Dataset מלא + פרסר “FILE:” → ZIP
המודל יחזיר פלט בפורמט קבצים: FILE: path ואז התוכן. נפרסר לקבצים ואריזה ל־ZIP.
מבנה יעד
mytheme/
├─ style.css
├─ functions.php
├─ rtl.css
├─ index.php
├─ header.php
├─ footer.php
├─ templates/
│ ├─ home.php
│ ├─ page.php
│ └─ single.php
└─ assets/
├─ css/
└─ js/
			Dataset (JSONL) לדוגמאות ערכות
# data/theme_generator.jsonl
{"instruction":"צור ערכת WP RTL נקייה עם Bootstrap, כותרת/תפריט עליון, footer, RTL, SEO בסיסי","input":"שם ערכה: PG Corporate\nצבע ראשי: #204ECF\nפונטים: Heebo\nניווט: עליון דביק\nFooter: קישורים ותיאור קצר\nRTL: כן\nSEO: meta ו-title דינמי","output":"FILE: style.css\n/*\nTheme Name: PG Corporate\nAuthor: Pablo Guides\nVersion: 1.0.0\nText Domain: pg-corp\n*/\nbody{direction:rtl}\n\nFILE: functions.php\n\n
 
\n\nFILE: footer.php\n
\n\nFILE: index.php\n\n
\n\n\nFILE: rtl.css\n/* התאמות RTL נוספות */"}
{"instruction":"ערכת בלוג מינימלית בעברית עם Heebo, צבע משני #17a2b8, סיידבר ימני","input":"שם ערכה: PG Blog RTL\nתפריט: עליון\nסיידבר: ימני עם ווידג׳טים\nFooter: זכויות יוצרים\nSEO: פעיל","output":"FILE: style.css\n/* Theme Name: PG Blog RTL */\nbody{direction:rtl;font-family:Heebo,sans-serif}\n\nFILE: functions.php\n
\n\nFILE: index.php\n
\n
 
\n
\n"}
			פרסר “FILE:” לכתיבת קבצים ויצירת ZIP
# code/theme_writer.py
import os, re, zipfile, pathlib, sys
out = sys.argv[1] if len(sys.argv)>1 else "mytheme-output.txt"
root = pathlib.Path("export/theme")
zip_path = pathlib.Path("export/theme.zip")
root.mkdir(parents=True, exist_ok=True)
txt = open(out, "r", encoding="utf-8", errors="ignore").read()
parts = re.split(r"FILE:\s*([^\n\r]+)\s*", txt)[1:]
for i in range(0, len(parts), 2):
path = parts[i].strip()
content = parts[i+1]
p = root / path
p.parent.mkdir(parents=True, exist_ok=True)
open(p, "w", encoding="utf-8").write(content.strip()+"\n")
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as z:
for p in root.rglob("*"):
z.write(p, arcname=str(p.relative_to(root)))
print("✓ Theme ZIP:", zip_path)
			פרומפט SYSTEM מומלץ ל־Theme Generator
SYSTEM:
"את/ה מחולל/ת ערכות WordPress בעברית (RTL). החזר/י תמיד בפורמט קבצים:
FILE: style.css
<תוכן>
FILE: functions.php
<תוכן>
…
כללים:
– PHP 8.3, תקני WP, title-tag, post-thumbnails לפי צורך.
– תמיכה ב-RTL (style.css + rtl.css).
– הימנע/י מקוד לא בטוח."
			חלק ז׳ — דוגמאות שימושיות נוספות למודל
1) ייצור המוני של עמודי נחיתה (Landing Pages) מ־CSV
# data/landing_topics.csv
title,keywords,tone
"חבילות אחסון אתרים","אחסון,שרת,וורדפרס","מקצועי"
"עיצוב אתרים מהיר","עיצוב,UX,UI","ידידותי"
# code/bulk_landing.py
import csv, os, re, requests
os.makedirs("export/landing", exist_ok=True)
API="http://127.0.0.1:11434/api/chat"; MODEL="qwen2.5:3b-instruct-q4"
SYS="את/ה מחולל/ת עמודי נחיתה בעברית: HTML מלא עם H1/H2, CTA, SEO meta, ללא קישורים שקריים."
TEMPLATE = """כותרת: {title}
מילות מפתח: {keywords}
טון: {tone}
דרישות: HTML מלא RTL, H1/H2, מטא title/description, קריאה לפעולה ברורה."""
with open("data/landing_topics.csv",encoding="utf-8") as f:
rd=csv.DictReader(f)
for row in rd:
prompt=TEMPLATE.format(**row)
r=requests.post(API,json={"model":MODEL,"messages":[
{"role":"system","content":SYS},{"role":"user","content":prompt}],
"stream":False,"options":{"temperature":0.2,"num_ctx":2048}},timeout=240)
r.raise_for_status()
html=r.json()["message"]["content"]
slug=re.sub(r"[^\w\s-]","",row["title"]); slug=re.sub(r"\s+","-",slug).lower()
open(f"export/landing/{slug}.html","w",encoding="utf-8").write(html)
print("✓ export/landing/*.html")
			2) “מבקר קוד” ל־PHP 8.3 (Hardening & Best Practices)
# code/php_review.py
import requests, sys
MODEL="qwen2.5:3b-instruct-q4"; API="http://127.0.0.1:11434/api/chat"
php = open(sys.argv[1],"r",encoding="utf-8").read()
sysmsg = "בדוק קוד PHP 8.3 לוורדפרס: אבטחה (nonce, esc_, sanitize_), ביצועים, תאימות. החזר דגשים + דוגמה מתוקנת."
r=requests.post(API,json={"model":MODEL,"messages":[
{"role":"system","content":sysmsg},
{"role":"user","content":php}],
"stream":False,"options":{"temperature":0.2,"num_ctx":2048}},timeout=240)
r.raise_for_status(); print(r.json()["message"]["content"])
			3) OSINT אחראי עם Solr + מודל מסכם
# הפעלת Solr ויצירת Core
docker run -d -p 8983:8983 –name solr solr:9
docker exec -it solr solr create -c osint-core
# שאילתה לדוגמה (BM25):
curl "http://localhost:8983/solr/osint-core/select?q=דיווח+אבטחה+וורדפרס&rows=50&fl=id,path,ts,text,score"
			4) SaaS קטן לטלגרם (Webhook PHP 8.3 + LLM מקומי)
 * ודא/י HTTPS אמיתי ו-setWebhook לטלגרם.
*/
$TOKEN = getenv('TG_TOKEN'); // הגדר בשרת
$CHAT_MODEL = 'qwen2.5:3b-instruct-q4';
$input = file_get_contents('php://input');
$update = json_decode($input, true);
$text = $update['message']['text'] ?? ";
$chat_id = $update['message']['chat']['id'] ?? null;
if ($chat_id && $text !== ") {
// קריאה מקומית ל-Ollama
$payload = json_encode([
"model" => $CHAT_MODEL,
"messages" => [
["role"=>"system","content"=>"ענה/י בעברית בקצרה ולעניין."],
["role"=>"user","content"=>$text]
],
"stream" => false,
"options" => ["temperature"=>0.2,"num_ctx"=>1024]
], JSON_UNESCAPED_UNICODE);
$ch = curl_init("http://localhost:11434/api/chat");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/json; charset=utf-8"],
CURLOPT_POSTFIELDS => $payload
]);
$resp = curl_exec($ch);
curl_close($ch);
$data = json_decode($resp, true);
$reply = $data['message']['content'] ?? 'מצטער/ת, לא הצלחתי לעבד.';
// החזרה ל-Telegram
$send_url = "https://api.telegram.org/bot{$TOKEN}/sendMessage";
$params = ["chat_id"=>$chat_id, "text"=>$reply];
$ch2 = curl_init($send_url);
curl_setopt_array($ch2, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => $params
]);
curl_exec($ch2);
curl_close($ch2);
}
echo "OK";
			חלק ח׳ — מילון מונחים וכיוונונים חשובים
- RAG: שליפה (FTS/BM25) → ריראנק (Embeddings) → LLM קטן.
 - Embeddings: הַטמעות מספריות; מחשבים דמיון בקוסינוס.
 - temperature: גיוון – נמוך (0.1–0.3) לקוד/דוחות; גבוה לטקסט יצירתי.
 - num_ctx: חלון הקשר; 1536–3072 ל־CPU חלש. יותר הקשר = יותר RAM.
 - top_k (בשליפה אחרי ריראנק): 4–8 לרוב איזון טוב.
 - CHUNK/overlap: 1800–2200 / 120–180 – רצף טוב עם מעט חפיפות.
 - DB: קטן/בינוני → SQLite; WP/הוסטינג → MySQL; אוספים גדולים → Solr; JSON/פרופילים → MongoDB.
 
חלק ט׳ — צ׳ק־ליסט קצר לסיום
# 1) התקנות: Ollama + Python venv
# 2) מודלים: qwen2.5:3b-instruct-q4, bge-m3
# 3) הכנת docs/ ו-snippets/ (חומר חוקי בלבד)
# 4) אינגסט: python code/ingest_sqlite.py
# 5) Modelfile: התאמת SYSTEM/temperature/num_ctx -> create
# 6) API: uvicorn code.server:app –port 8000
# 7) WP Maker: POST /plugin -> שמירת קוד -> ZIP
# 8) אבטחה: ZAP baseline -> ingest_findings -> sec_report_html -> PDF
# 9) Theme Generator: dataset JSONL -> קריאה למודל -> theme_writer -> ZIP
# 10) שימושים: Landing bulk, מבקר קוד, OSINT Solr, SaaS Telegram
# 11) שיפור מתמשך: few-shot, tuning פרמטרים, Cache לאמבדינגים
			
📊 נתוני צפיות
סה"כ צפיות: 17
מבקרים ייחודיים: 17
- 🧍 172.71.135.73 (
France) - 🧍 141.101.97.95 (
France) - 🧍 172.70.200.155 (
Israel) - 🧍 172.71.250.3 (
Germany) - 🧍 172.71.126.41 (
France) - 🧍 172.71.131.102 (
France) - 🧍 172.70.240.181 (
Germany) - 🧍 172.68.10.130 (
Russia) - 🧍 172.70.200.153 (
Israel) - 🧍 172.70.248.115 (
Germany) - 🧍 172.70.243.65 (
Germany) - 🧍 172.71.144.36 (
Germany) - 🧍 104.23.225.169 (
France) - 🧍 162.158.94.197 (
Germany) - 🧍 172.71.172.225 (
Germany) - 🧍 141.101.97.94 (
France) - 🧍 172.69.130.219 (
Canada) 
								
France)
Israel)
Germany)
Russia)
Canada)