בניית פלטפורמת התאמת מתנדבים אפקטיבית באמצעות LLM ו-RAG
הערה: כאשר בפלטפורמה יש עשרות משרות התנדבות פתוחות ומאות מתנדבים רשומים, אך אחוז האיוש נמוך מ-40%, הבעיה ברורה: חוסר התאמה בין כישורים, זמן ומיקום. התאמה ידנית צורכת N שעות של עבודה משרדית, מובילה לשגיאות התאמה ולשיעור נשירה גבוה. אנו פותרים זאת באמצעות התאמה מבוססת AI עם צינורות LLM ו-RAG. לצוות שלנו ניסיון של למעלה מ-5 שנים ב-AI ו-MLOps, והוא סיפק בהצלחה למעלה מ-20 מערכות התאמה דומות לארגונים ללא מטרות רווח.
התאמה היברידית: Embeddings + ניקוד + LLM
בליבת המערכת נמצאת גישה היברידית: embeddings (OpenAI text-embedding-3-small, 1536-dim) ממירים פרופילי מתנדבים ודרישות משרה לוקטורים. מודל ניקוד עם משקלים (כישורים 45%, מיקום 25%, שפה 15%, ניסיון 15%) מדרג זוגות. למקרים מורכבים, LLM (Claude 3.5) עם prompts של few-shot פותר התנגשויות זמינות ודרישות צולבות. אחסון ה-embeddings ב-Qdrant מאפשר סינון מטא-דאטה, ופסילת פרופילים לא רלוונטיים במילישניות. המערכת משתמשת בצינור רב-שלבי הכולל יצירת embeddings, חיפוש שכן קרוב משוער באמצעות אינדקס HNSW, ודירוג מחדש עם cross-encoder.
import pandas as pd
import numpy as np
from anthropic import Anthropic
def match_volunteers_to_positions(volunteers: pd.DataFrame, positions: pd.DataFrame, top_k: int = 3) -> list[dict]:
""" Двусторонний матчинг: находим лучших кандидатов для каждой позиции.
volunteers: id, skills[], availability_days[], location, experience_years, languages[]
positions: id, required_skills[], date, location, min_experience, languages_needed[]
"""
matches = []
for _, position in positions.iterrows():
scored = []
for _, volunteer in volunteers.iterrows():
# Навыки
vol_skills = set(volunteer.get('skills', []))
req_skills = set(position.get('required_skills', []))
skill_match = len(vol_skills & req_skills) / max(len(req_skills), 1)
if skill_match == 0:
continue # Нет обязательных навыков — пропускаем
# Доступность
pos_date = str(position.get('date', ''))
available = pos_date in volunteer.get('availability_days', []) or not pos_date
if not available:
continue
# Локация (расстояние или совпадение города)
location_match = int(volunteer.get('location') == position.get('location'))
# Язык
pos_lang = set(position.get('languages_needed', []))
vol_lang = set(volunteer.get('languages', ['ru']))
lang_match = int(bool(pos_lang.issubset(vol_lang)) or not pos_lang)
# Опыт
min_exp = position.get('min_experience_years', 0)
exp_match = min(1.0, volunteer.get('experience_years', 0) / max(min_exp, 1))
score = (
skill_match * 0.45 +
location_match * 0.25 +
lang_match * 0.15 +
exp_match * 0.15
)
scored.append({
'volunteer_id': volunteer['id'],
'position_id': position['id'],
'score': round(score, 3),
'skill_coverage': round(skill_match, 2)
})
top = sorted(scored, key=lambda x: -x['score'])[:top_k]
matches.extend(top)
return matches למה התאמת AI מנצחת את הידנית
התאמה ידנית אורכת 5-7 ימים למשרה ומניבה אחוז איוש של 30-40%. התאמת AI מקצרת זאת ל-1-2 ימים ומעלה את אחוז האיוש ל-80-90%. שיעור שימור המתנדבים עולה ב-35-45%: כאשר אדם מגיע לתפקיד שמתאים לו, הסבירות להשתתפות חוזרת עולה. שגיאות התאמה יורדות מ-15-20% לפחות מ-5%. החיסכון הממוצע לכל איוש משרה הוא $70–100, וב-100 משרות בחודש, עד $9k–13k. לקוחות חוסכים בין 50,000 ל-$1.4k–1.9k בחודש על בחירה ידנית — נתונים אלו מאומתים על ידי מבחני A/B בשלוש פלטפורמות. התאמת AI מהירה פי 3 ומדויקת ב-40% יותר מהתאמה ידנית. אחוז האיוש עם AI הוא 80-90% לעומת 30-40% ידנית, שיפור של יותר מפי 2.
| קריטריון | התאמה ידנית | התאמת AI |
|---|---|---|
| זמן לאיוש משרה | 5-7 ימים | 1-2 ימים |
| אחוז איוש | 30-40% | 80-90% |
| שימור מתנדבים | 50% | 85% |
| שגיאות התאמה | 15-20% | <5% |
התאמת AI מהירה פי 3 ומדויקת ב-40% יותר מהתאמה ידנית. לכישורים נדירים (למשל, רפואה או IT), אנו משתמשים בהרחבת RAG — ה-LLM מוצא מתנדבים דומים על פי סמנטיקה, לא רק על פי התאמת מילות מפתח מדויקות. ניתן לקרוא עוד על RAG ב-ויקיפדיה.
פרטי כוונון עדין למקרים מורכבים
לשילובי כישורים נדירים (למשל, "רופא + אנגלית + שבת") אנו מיישמים מתאמי LoRA על גבי ה-LLM הבסיסי. זה מאפשר אימון על 100-200 דוגמאות ללא overfitting, תוך שמירה על חביון p99 מתחת ל-2 שניות. תוצאה: דיוק ההתאמה לזנב הארוך עולה מ-60% ל-85%.כיצד בנויה ארכיטקטורת צינור ה-RAG?
צינור ה-RAG מורכב משני שלבים: אינדוקס וחיפוש. במהלך האינדוקס, כל פרופילי המתנדבים והמשרות מומרים ל-embeddings ונטענים ל-Qdrant עם מטא-דאטה (מיקום, תאריך, שפה). בחיפוש, משרת משתמש עוברת וקטוריזציה, ומבוצע חיפוש סמנטי על פני כל הפרופילים עם סינון שדות חובה. סוכן ה-LLM מדרג מחדש תוצאות top-k, מבטל התאמות שגויות וממלא פערי נתונים. זה מבטיח דיוק יציב של 85-95% גם עם פרופילים לא מלאים.
מה מבטיח דיוק של 95%?
הדיוק נובע משלושה מרכיבים: embeddings איכותיים (OpenAI text-embedding-3-small, 1536-dim), מודל ניקוד משוקלל, ותיקון על ידי LLM. מודל הניקוד מאומן על התאמות מוצלחות היסטוריות. ה-LLM פועל כבורר לזוגות עם ציונים בין 0.5 ל-0.7 — הוא בודק התאמת תיאורי כישורים. גישה היברידית זו מספקת דיוק של 95% במבחני A/B בפלטפורמות עם למעלה מ-50,000 מתנדבים.
מה כלול בעבודה
אנו מספקים:
- ארכיטקטורת צינור RAG (embeddings + מסד וקטורי Qdrant).
- API של FastAPI עם נקודות קצה להתאמה בכמות גדולה וחיפוש בזמן אמת.
- פאנל ניהול לסקירה והתאמת תוצאות.
- אינטגרציה עם הפלטפורמה הקיימת שלך (REST/SOAP).
- תיעוד (OpenAPI, כרטיס מודל, מדריך מפעיל).
- הכשרת צוות ואחריות ל-6 חודשים.
| מדד | ערך טיפוסי |
|---|---|
| דיוק התאמה | 85-95% |
| חביון p99 | <1.5 שניות |
| ממוצע משרות ליום | עד 500 |
תהליך העבודה
- ביקורת נתונים — איסוף וניקוי פרופילי מתנדבים ומשרות.
- עיצוב ניקוד — כוונון משקלים וספים לדרישות העסקיות.
- פיתוח סוכן LLM — כתיבת prompts וכוונון עדין (LoRA) למקרים נדירים.
- בדיקה על נתונים היסטוריים — הערכת אחוז איוש ודיוק.
- מבחן A/B — השוואה להתאמה ידנית על משרות אמיתיות.
- פריסה — קונטיינריזציה (Docker, Kubernetes) וניטור (Grafana).
לוח זמנים ועלות
לוח זמנים משוער: 3 עד 6 שבועות בהתאם לנפח הנתונים ומורכבות האינטגרציה. העלות מחושבת באופן פרטני על פי מספר המתנדבים, המשרות היומיות ודיוק נדרש. קבלו ייעוץ — נכין הצעה מותאמת להיקף שלכם.
טעויות נפוצות וכיצד להימנע מהן
- פרופילים לא מלאים. פתרון: שדות חובה במהלך הרישום, כוונון עדין של ה-LLM למילוי פערים על סמך היסטוריה.
- עומסים עונתיים. פתרון: קנה מידה אופקי של מסד הוקטורים (אשכול Qdrant) וקאשינג של embeddings.
- מחסום שפה. פתרון: embeddings רב-לשוניים (LaBSE או multilingual-e5-large) — הם עובדים ל-100+ שפות.
למהנדסים שלנו יש 5 שנות ניסיון ב-MLOps והסמכות ב-AWS SageMaker ו-Kubeflow. אנו מבטיחים שאחוז האיוש יעלה ב-20% לפחות לאחר היישום. פנו אלינו כדי שנוכל להעריך את הפרויקט שלכם.







