עוזר AI לתמיכה: שילוב RAG באתר שלך
שאלות תמיכה חוזרות ונשנות מבזבזות שעות של זמן. עוזר RAG מטפל ב-80% מהשאילתות, ומשאיר רק מקרים מורכבים לנציגים. אנו בונים עוזרי AI לאתרים — לא צ'אטבוט טיפוסי, אלא מערכת חכמה המבוססת על RAG (יצירה מוגברת שליפה). היא מתחברת למאגר הידע שלך, לתיעוד ול-CRM. כשמשתמש כותב "למה הייצוא לא עובד?", העוזר מוצא את התשובה במרכז העזרה שלך תוך שניות, בודק את התעריף והסטטוס של המשתמש, ונותן תשובה מותאמת אישית. אין תבניות. אין אובדן הקשר.
הדיוק של פתרונות כאלה מגיע ל-95% — פי 3 גבוה יותר מצ'אטבוטים מבוססי כללים. עוזר RAG מעבד פי 4 יותר בקשות בשעה, ומשחרר נציגים למצבים לא סטנדרטיים. אנו מפחיתים את עומס התמיכה ב-40%, וחוסכים חלק משמעותי מהתקציב השנתי שלך. אנו לוקחים את הפרויקט במפתח מלא: מהקמת מסד נתונים וקטורי ועד כוונון עדין של המודל. המהנדסים שלנו מוסמכים ב-OpenAI וב-AWS, עם למעלה מ-50 התקנות.
כיצד RAG משפר את דיוק התשובות
RAG היא גישה שבה מודל השפה אינו זוכר את המוצר שלך אלא שולף קטעי תיעוד רלוונטיים לכל שאלה. זה פותר בעיות של הזיות ומיושנות ידע.
תהליך:
- שאלת המשתמש מומרת ל-embedding (וקטור) באמצעות OpenAI או מודל מקומי.
- הווקטור מחפש קטעים דומים במסד הנתונים הווקטורי (Qdrant, Pinecone, Weaviate, pgvector).
- LLM (GPT-4o-mini, Claude 3.5 Haiku) מקבל שאלה + הקשר מהתיעוד.
- מייצר תשובה עם הפניות למקורות.
גישה זו משיגה עד 95% דיוק בשאלות טיפוסיות — פי 3 גבוה יותר מצ'אטבוט מבוסס כללים. לפי תיעוד OpenAI, text-embedding-3-small מספק את התוצאות הטובות ביותר בגודל וקטור קטן.
למה עוזר RAG מנצח צ'אטבוט טיפוסי
צ'אטבוטים טיפוסיים מסתמכים על סקריפטים נוקשים: אם השאלה לא תואמת תבנית, המשתמש מקבל תשובה לא רלוונטית או תפריט אינסופי. עוזר RAG מבין הקשר, מחפש בתיעוד בזמן אמת, ומתאים אישית את התשובה למשתמש. אוטומציה של תמיכה עם RAG מפחיתה את זמן התגובה הממוצע ב-60%. בנוסף, RAG פותר מיושנות ידע: פשוט עדכן את מאגר הידע, והעוזר משתמש מיד בנתונים חדשים.
מה כלול בשילוב במפתח מלא
| רכיב | תיאור |
|---|---|
| פיתוח צינור RAG | אינדוקס תיעוד, חיפוש וקטורי, יצירת תשובות |
| התאמה אישית | החלפת נתוני משתמש: תעריף, היסטוריית כרטיסים, סטטוס |
| הסלמה לנציג | יצירת כרטיס אוטומטית בביטחון נמוך או לפי בקשת אדם |
| אנליטיקה | רישום שיחות, דירוג שימושיות, 20 השאלות המובילות ללא מענה |
| תיעוד והדרכה | הוראות לעדכון מאגר הידע, לוח מחוונים אנליטי |
אנו מבטיחים פעולה יציבה בעומס של עד 10,000 בקשות ביום.
כיצד אנו מגדירים מסד נתונים וקטורי ואינדוקס
import OpenAI from 'openai';
import { QdrantClient } from '@qdrant/js-client-rest';
const openai = new OpenAI();
const qdrant = new QdrantClient({ url: 'http://localhost:6333' });
// Подготовка коллекции
await qdrant.createCollection('support-docs', {
vectors: {
size: 1536,
distance: 'Cosine',
},
});
// Индексирование статей
async function indexArticle(article) {
// Разбиваем на чанки по 500 токенов с перекрытием 100
const chunks = splitIntoChunks(article.content, { size: 500, overlap: 100 });
const embeddings = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: chunks.map(c => c.text),
});
const points = chunks.map((chunk, i) => ({
id: generateId(),
vector: embeddings.data[i].embedding,
payload: {
text: chunk.text,
articleId: article.id,
articleTitle: article.title,
category: article.category,
url: article.url,
},
}));
await qdrant.upsert('support-docs', { points });
} יצירת תשובות עם הקשר משתמש
async function answerQuestion(userId, question) {
// Контекст пользователя из БД
const user = await db.users.findById(userId);
const userContext = `
Пользователь: ${user.name}
Тариф: ${user.plan}
Дата регистрации: ${user.createdAt}
Последние 3 обращения: ${user.recentTickets.join(', ')}
`;
// Векторный поиск
const queryEmbedding = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: question,
});
const results = await qdrant.search('support-docs', {
vector: queryEmbedding.data[0].embedding,
limit: 4,
score_threshold: 0.75,
});
const context = results.map(r => `[${r.payload.articleTitle}](${r.payload.url})\n${r.payload.text}`
).join('\n\n---\n\n');
// Генерация ответа
const response = await openai.chat.completions.create({
model: 'gpt-4o-mini',
stream: true,
messages: [
{
role: 'system',
content: `Ты ассистент технической поддержки. Отвечай ТОЛЬКО на основе предоставленной документации. Если ответа нет в документации, скажи это явно и предложи создать тикет. Всегда указывай источник (ссылку на статью). Контекст пользователя: ${userContext}`,
},
{
role: 'user',
content: `Вопрос: ${question}\n\nРелевантная документация:\n${context}`,
},
],
max_tokens: 600,
temperature: 0.2,
});
return {
stream: response,
sources: results.map(r => ({
title: r.payload.articleTitle,
url: r.payload.url
})),
};
} מתי להסלים לנציג אנושי?
אנו מיישמים גלאי הסלמה: על בסיס מילות מפתח ("תלונה", "החזר", "נציג") או ציון ביטחון נמוך (<0.6). לאחר מכן נוצר כרטיס במערכת התמיכה שלך, והמשתמש רואה הודעה על ההעברה. זמן התגובה הממוצע של נציג הוא שעתיים; באמצעות אנליטיקה אנו מפחיתים בקשות לא רלוונטיות ב-40%.
const ESCALATION_TRIGGERS = [
'хочу поговорить с человеком',
'оператор',
'жалоба',
'возврат денег',
'удалить аккаунт',
];
function shouldEscalate(message, confidenceScore) {
const lowerMessage = message.toLowerCase();
const hasKeyword = ESCALATION_TRIGGERS.some(t => lowerMessage.includes(t));
const lowConfidence = confidenceScore < 0.6;
return hasKeyword || lowConfidence;
}
async function handleMessage(userId, message) {
const { answer, confidence, sources } = await answerQuestion(userId, message);
if (shouldEscalate(message, confidence)) {
await createSupportTicket(userId, message);
return {
type: 'escalation',
message: 'Передаю ваш запрос оператору. Среднее время ответа — 2 часа.',
ticketId: ticket.id,
};
}
await logConversation(userId, message, answer);
return {
type: 'answer',
content: answer,
sources,
};
} עדכון מאגר ידע באמצעות Webhook
// Webhook от CMS при обновлении статьи
app.post('/webhooks/docs-updated', async (req, res) => {
const { articleId, action } = req.body;
if (action === 'delete') {
await qdrant.delete('support-docs', {
filter: {
must: [
{
key: 'articleId',
match: { value: articleId },
},
],
},
});
} else {
const article = await fetchArticle(articleId);
// Удаляем старые чанки
await qdrant.delete('support-docs', {
filter: {
must: [
{
key: 'articleId',
match: { value: articleId },
},
],
},
});
// Переиндексируем
await indexArticle(article);
}
res.json({ ok: true });
});
אנליטיקת ביצועים
אנו מתעדים את כל השיחות ומבקשים מהמשתמש לדרג את התשובה. דוח שבועי מציג את 20 השאלות המובילות עם תשובות גרועות — ועוזר לשפר את מאגר הידע. שאילתת SQL לדוח:
SELECT question, COUNT(*) as count
FROM support_conversations
WHERE feedback = 'not-helpful'
GROUP BY question
ORDER BY count DESC
LIMIT 20;אנו מגדירים לוח מחוונים במערכת ה-BI שלך כדי לעקוב אחר מגמות.
שלבי יישום
| שלב | משך | מה אנו עושים |
|---|---|---|
| גרסת RAG בסיסית (עד 500 מאמרים) | 5–7 ימים | אינדוקס, הגדרת חיפוש וקטורי, יצירת תשובות |
| התאמה אישית | 1–2 ימים | חיבור CRM, הזרקת הקשר משתמש |
| העברה לנציג | 2–3 ימים | שילוב מערכת כרטיסים, טריגרים להסלמה |
| אנליטיקה ולוח מחוונים | 3–4 ימים | רישום, דוחות, לוח מחוונים BI |
עבור WordPress אנו מכינים תוסף ששולח מאמרים אוטומטית בעת פרסום. עבור Strapi — webhook כפי שמוצג לעיל. אם יש לך CMS מותאם אישית, כל נקודת קצה API עובדת. לוחות הזמנים מותאמים לאחר הערכת המחסן הטכנולוגי שלך ונפח מאגר הידע. התמחור נקבע באופן אישי. כדי לדון בפרויקט שלך, צור קשר. קבל ייעוץ — נראה לך כיצד המערכת מתאימה למחסן הטכנולוגי שלך. הזמן שילוב עכשיו.







