Все статьи
  • ИИ
  • RAG
  • Разработка

RAG для поддержки клиентов: как сделать ответы ИИ действительно точными

Обычная LLM придумывает правдоподобные ответы. Генерация с дополненной выборкой (RAG) привязывает ИИ к вашему собственному контенту. Вот как это устроено в AskAIs, шаг за шагом.

Команда AskAIs

7 мин чтения

Спросите обычную LLM «как сбросить пароль?» — и получите правдоподобный ответ, который, скорее всего, неверен: другая кнопка, другой порядок действий, другой URL. RAG (генерация с дополненной выборкой) решает эту проблему: перед ответом модели в промпт добавляются нужные фрагменты из вашего собственного контента.

Конвейер в общих чертах

Три этапа: загрузка, поиск, генерация.

1. Загрузка

  • Загрузите файлы PDF, DOCX, TXT, Markdown, CSV или JSON, запустите обход сайта или добавьте пары вопрос-ответ в разделе Training.
  • Фоновый обработчик извлекает текст и делит его на фрагменты примерно по 2000 символов (около 500 токенов) с перекрытием в 200 символов. Каждая пара вопрос-ответ остаётся одним фрагментом.
  • Для каждого фрагмента создаётся эмбеддинг с помощью text-embedding-3-small (размерность 1536).
  • Фрагменты хранятся в PostgreSQL с расширением pgvector и индексом HNSW по косинусному расстоянию.

2. Поиск

Когда для ответа на сообщение посетителя нужны факты, мы создаём эмбеддинг его недавних сообщений и выполняем поиск по косинусному расстоянию среди фрагментов рабочей области. Для приветствий и светской беседы этот шаг пропускается. Упрощённая версия запроса:

-- Simplified. The real query also checks that the document is
-- ready, enabled, in date and visible on the visitor's platform.
SELECT c.id, c.content,
       1 - (c.embedding <=> $1::vector) AS similarity
FROM knowledge_chunks c
WHERE c.tenant_id = $2
ORDER BY c.embedding <=> $1::vector
LIMIT $3;  -- 3 × top-K candidates, re-ranked afterwards

Мы выбираем втрое больше кандидатов, чем нужно, переранжируем их, отбрасываем всё, что ниже порога сходства (около 0,3), оставляем не больше двух фрагментов на документ и передаём модели пять лучших (по умолчанию).

3. Генерация

Фрагменты добавляются в системный промпт внутри отделённого справочного блока. Модель получает указание считать этот блок данными, а не инструкциями, использовать только те справочные фрагменты, которые отвечают на вопрос, и не придумывать факты о продукте, которых там нет.

Если посетитель спрашивает о факте, касающемся продукта, и ничего релевантного не найдено, модель вообще не вызывается: посетителю сообщают, что такой информации нет, и чат передаётся человеку, если автоматическая передача не отключена.

Как снизить затраты

Три приёма делают большую базу знаний доступной по цене:

  • Кэш эмбеддингов: один и тот же поисковый текст получает один и тот же эмбеддинг. Ключ кэша — имя модели плюс хеш SHA-1 текста; запись хранится в Redis 24 часа.
  • Кэширование промптов: для моделей Claude запрос просит Anthropic закэшировать промпт, а OpenAI кэширует длинные промпты автоматически. Справочный блок меняется с каждым ответом, поэтому выигрывает в основном неизменная часть промпта.
  • Пропуск по порогу: если ни один фрагмент не проходит порог, в промпт ничего не добавляется.

Когда RAG недостаточно

RAG хорошо справляется с вопросами вида «как мне…?». Но он не может ответить на вопрос «где мой заказ?», потому что этих данных нет в ваших документах.

Для этого в AskAIs есть Custom tools: вы описываете HTTP-эндпоинт в своей системе, например для заказов, бронирований или остатков на складе, и ИИ может вызвать его, пока пишет ответ. Общие вопросы решаются с помощью ваших знаний, личные — с помощью ваших систем, а остальное передаётся вашей команде.

Начните бесплатно уже сегодня.

1 агент, 100 ИИ-ответов в месяц и приложение для iPhone, iPad и Android. Бесплатно навсегда. Когда команда вырастет, просто повысьте тариф.

  • Без банковской карты
  • Настройка за несколько минут