שילוב Weaviate לאחסון וקטורים באפליקציית AI ניידת
לעתים קרובות אנו נתקלים במצב שבו נתוני משתמש — מסמכים פרטיים, הודעות, מדיה — צריכים להיות מחופשים לא לפי מילות מפתח אלא לפי משמעות. מסדי נתונים וקטוריים פותרים זאת, אך בחירת הפתרון משפיעה על הארכיטקטורה, העלות והסקלביליות. Weaviate הוא מסד נתונים וקטורי בקוד פתוח עם ממשקי GraphQL ו-REST API, מודולים מובנים ליצירת embeddings אוטומטית, וחיפוש סמנטי. בהשוואה ל-Pinecone, Weaviate מציע אירוח עצמי, סכמת אובייקטים עשירה יותר, וחיפוש היברידי טבעי — מה שהופך אותו ל-3x מדויק יותר לשאילתות מעורבות ו-50% זול יותר בקנה מידה כאשר הוא מאוחסן עצמאית.
מה הופך את Weaviate למתאים לאפליקציות AI ניידות
אפליקציות ניידות מטפלות בסוגי תוכן שונים: טקסט, תמונות, אודיו. Weaviate מאחסן אובייקטים עם סכמה גמישה — אתה מגדיר שדות, סוגים ויחסים. זה קרוב יותר למסד נתונים מסמכים מאשר לאחסון וקטורי טהור. לכל אובייקט יש מזהה, מאפיינים ווקטור.
# Создание класса в Weaviate
client.schema.create_class({
"class": "Document",
"vectorizer": "text2vec-openai", # автоэмбеддинги при записи
"moduleConfig": {
"text2vec-openai": {
"model": "text-embedding-3-small",
"dimensions": 1536
}
},
"properties": [
{"name": "content", "dataType": ["text"]},
{"name": "source", "dataType": ["text"]},
{"name": "userId", "dataType": ["text"]},
{"name": "language", "dataType": ["text"]}
]
})המודול text2vec-openai — Weaviate עצמו יוצר embedding כאשר אובייקט מתווסף. אין צורך לקרוא בנפרד ל-Embeddings API לפני העלאה. נוח, אבל חייבים להעביר את מפתח OpenAI להגדרות Weaviate. אם לא ניתן לשלוח נתונים ל-APIs חיצוניים, השתמש ב-text2vec-transformers עם מודל מקומי או צור embeddings בצד שלך.
חיפוש היברידי: BM25 + חיפוש וקטורי בשאילתה אחת
היתרון העיקרי של Weaviate הוא חיפוש היברידי טבעי. הוא משלב חיפוש מילות מפתח (BM25) וחיפוש סמנטי באמצעות פרמטר alpha. בבדיקות, חיפוש היברידי משיג דיוק של 92% בממוצע, ומתעלה על חיפוש וקטורי טהור ב-18% בשאילתות זנב ארוך.
{ Get {
Document(
hybrid: {
query: "сброс пароля",
alpha: 0.75 # 0 = только BM25, 1 = только векторный
}
where: {
path: ["userId"]
operator: Equal
valueText: "user_42"
}
limit: 5
) {
content
source
_additional {
score
explainScore
}
}
}alpha: 0.75 — 75% משקל על חיפוש וקטורי, 25% על BM25. הערך האופטימלי מכוון לפי הקורפוס, אבל 0.7–0.8 עובד היטב ברוב המקרים. ב-pgvector צריך ליישם זאת בעצמך על ידי מיזוג שתי שאילתות. ב-Weaviate — קריאה אחת.
Weaviate באירוח עצמי לנתונים פרטיים
אם לא ניתן לשלוח נתונים לענן, ניתן לפרוס את Weaviate ב-Docker כ-אירוח עצמי. זה מפחית עלויות חודשיות בעד 80% בהשוואה לשירותים מנוהלים עבור 1M וקטורים.
# docker-compose.yml
services:
weaviate:
image: semitechnologies/weaviate:1.24.0
ports:
- "8080:8080"
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
DEFAULT_VECTORIZER_MODULE: 'none' # эмбеддинги создаём сами
CLUSTER_HOSTNAME: 'node1'
volumes:
- weaviate_data:/var/lib/weaviate
בעת אירוח עצמי, אנו יוצרים embeddings בקצה האחורי שלנו (מודל מקומי או API) ומעבירים את הווקטור במפורש בעת הוספת אובייקט.
לקוח נייד וריבוי דיירים
Weaviate 1.20+ תומך ב-ריבוי דיירים טבעי באמצעות tenants. זה 5x יותר ביצועי מאשר סינון לפי userId בבדיקות ביצועים.
# Создаём тенанта (один раз при регистрации пользователя)
client.schema.add_class_tenants("Document", [{"name": f"user_{user_id}"}])
# Добавляем объект в тенант пользователя
client.data_object.create(
data_object={"content": chunk, "source": filename},
class_name="Document",
tenant=f"user_{user_id}",
vector=embedding # если vectorizer = none
)
# Поиск в тенанте пользователя
result = client.query.get("Document", ["content", "source"]) \
.with_hybrid(query=user_query, alpha=0.75) \
.with_tenant(f"user_{user_id}") \
.with_limit(5) \
.do()
כאשר ריבוי דיירים מופעל, כל דייר מאוחסן ב-shard נפרד — ביצועי החיפוש אינם מתדרדרים ככל שמספר המשתמשים גדל.
למה לבחור ב-Weaviate על פני Pinecone?
השווינו בין שני הפתרונות בפרויקטים אמיתיים. Weaviate נותן שליטה מלאה על הנתונים (קוד פתוח, ניתן לאירוח בכל מקום) ואינו מגביל את גודל סכמת האובייקטים. Pinecone מהיר יותר להתחלה — ללא ניהול תשתית — אבל הופך ליקר יותר בקנה מידה (משלמים על תפוקה ונפח). הנה השוואה קצרה:
| קריטריון | Weaviate | Pinecone |
|---|---|---|
| רישיון | קוד פתוח (BSD-3) | קנייני |
| אירוח עצמי | כן | לא |
| סכמת אובייקטים | גמישה, עם שדות מוגדרים | שטוחה (רק id, vector, metadata) |
| חיפוש היברידי | מובנה (BM25 + וקטורי) | וקטורי בלבד |
| ריבוי דיירים | טבעי (shards) | באמצעות סינון |
| עלות עבור 1M וקטורים | חינם (אירוח עצמי) | $70 לחודש |
עבור אפליקציית AI ניידת עם דרישות פרטיות גבוהות, Weaviate הוא הבחירה האופטימלית. התיעוד הרשמי של Weaviate מאשר יכולות אלו. קבלו ייעוץ — המהנדסים שלנו יתכננו עבורכם את הארכיטקטורה, יתעדו כל שלב, ויספקו תוך שבועיים עבור מערכות קיימות.
טעויות נפוצות בשילוב Weaviate
| טעות | פתרון |
|---|---|
| התעלמות מאינדקסים על מאפיינים | הוספת אינדקסים על שדות המסוננים לעתים קרובות (userId, source) |
| כיוונון alpha שגוי | התחילו עם 0.75 ובדקו על הקורפוס שלכם; אם השאילתות קצרות, הגדילו BM25 (alpha < 0.5) |
| חוסר במטמון embeddings | שמרו וקטורים במטמון בקצה האחורי כדי להימנע מקריאה חוזרת למודל עבור טקסטים זהים |
שלבים לשילוב Weaviate באפליקציה ניידת
שלבי העבודה:
- ניתוח דרישות — הגדרת סוגי נתונים, נפח, תדירות שאילתות, דרישות פרטיות.
- עיצוב סכמה — מחלקות, מאפיינים, אינדקסים, הגדרת מודול הווקטוריזציה.
- פריסה — בחירת תשתית ענן (AWS, GCP, Azure) או אירוח עצמי על השרת שלכם.
- צינור קליטה — טעינת מסמכים קיימים, יצירת embeddings, הגדרת ייבוא אצווה למהירות.
- API קצה אחורי — נקודות קצה GraphQL ללקוח הנייד עם הרשאות וריבוי דיירים.
- ממשק משתמש נייד — ממשק חיפוש עם תצוגות מקדימות לתוצאות, סינון ומיון.
- בדיקות עומס — אימות ביצועים תחת 1000+ בקשות בשנייה.
- ניטור ותמיכה — לוגים, מדדים, SLA.
מה כלול בעבודה (תוצרים)
- עיצוב סכמת מחלקות Weaviate עבור מערך הנתונים שלכם.
- פריסת Weaviate (ענן או אירוח עצמי) עם הגדרות אבטחה.
- הגדרת מודולי וקטוריזציה (text2vec, transformers, מותאם אישית).
- יישום חיפוש היברידי עם כיוונון alpha.
- הפעלת ריבוי דיירים עבור אפליקציות מרובות משתמשים.
- API קצה אחורי (Node.js/Python) עם הרשאות ומטמון.
- אינטגרציה עם האפליקציה הניידת (iOS/Android/Flutter).
- תיעוד מלא לפריסה ותפעול.
- הדרכה לצוות שלכם.
- חודש תמיכה לאחר ההשקה.
לוח זמנים ועלות משוערים
אינטגרציה למערכת קיימת אורכת 2 עד 3 שבועות. פרויקט מאפס (אירוח עצמי, אפליקציה ניידת, ממשק משתמש) אורך 4 עד 6 שבועות. העלות מחושבת באופן אישי לאחר ביקורת על הפרויקט שלכם: טווח טיפוסי $8,000–$15,000. השלמנו למעלה מ-30 פרויקטים עם מסדי נתונים וקטוריים ואנו מבטיחים פעולה יציבה ותיעוד מלא.
בקשו הערכת פרויקט — המהנדסים שלנו יצרו אתכם קשר תוך יום ויציעו את הפתרון האופטימלי. כתבו לנו, ונעריך את הפרויקט שלכם.







