RAG для поддержки клиентов: как сделать ответы ИИ действительно точными
Ответы чистой LLM галлюцинируют. RAG (генерация с дополненной выборкой) привязывает ИИ к вашим документам. Вот как AskAIs Customer Service делает это, не сжигая токены.
Без извлечения LLM, отвечая на вопрос "как сбросить пароль?", выдаст правдоподобный, но, вероятно, неверный ответ — другая кнопка, другой сценарий, другой URL. RAG (генерация с дополненной выборкой) решает это, вставляя нужный фрагмент вашей документации в промпт до того, как модель заговорит.
Конвейер с высоты птичьего полёта
Три этапа: загрузка, извлечение, генерация.
1. Загрузка
- Загружайте PDF, Markdown и файлы Office через интерфейс базы знаний
- Worker извлекает текст и режет его на фрагменты по ~800 token с перекрытием в 100 token
- Каждый фрагмент эмбеддится с помощью
text-embedding-3-small(1536-мерный) - Хранится в Postgres с расширением
pgvector
2. Извлечение
Когда посетитель отправляет сообщение, мы эмбеддим запрос и выполняем поиск по косинусному расстоянию среди фрагментов арендатора. Извлекаются Top-K (по умолчанию 5), с порогом схожести для отсева нерелевантных совпадений.
SELECT id, content, 1 - (embedding <=> $1) AS similarity
FROM knowledge_chunks
WHERE tenant_id = $2
ORDER BY embedding <=> $1
LIMIT 5;3. Генерация
Извлечённые фрагменты добавляются в начало системного промпта с явными инструкциями: ссылаться на источники, отказываться, если контекст не покрывает вопрос, и передавать диалог человеку при низкой уверенности.
Сокращаем счёт за токены
Три приёма реально экономят деньги на больших базах знаний:
- Кэш эмбеддингов — один и тот же текст запроса → один и тот же эмбеддинг. Ключ — хеш SHA1, TTL 24 ч в Redis. Сводит стоимость повторного эмбеддинга к нулю на повторяющихся вопросах.
- Кэширование промптов —
cache_controlот Anthropic и автоматическое кэширование OpenAI означают, что статический системный промпт считается лишь один раз за 5-минутное окно. - Пропуск по порогу— если ни один фрагмент не проходит порог схожести, ничего не вставляйте. Пусть модель скажет "я не знаю."
Когда RAG недостаточно
RAG хорошо справляется с вопросами "как сделать X?". Он не работает с персонализированными данными ("где мой заказ?") — для этого нужен вызов функций, который мы рассматриваем в отдельной статье. Именно сочетание даёт вам ИИ уровня Intercom за малую долю стоимости.