К весне 2023-го RAG стал стандартным ответом на вопрос «как заставить LLM отвечать по нашим данным». Мы собрали четыре RAG-системы за последние полгода. Делимся выводами, чтобы вы не повторяли наши ошибки.
Что вообще такое RAG
Retrieval-augmented generation - это паттерн, в котором перед обращением к LLM мы из базы знаний достаём релевантные куски документов и кладём их в контекст промпта. Модель отвечает с опорой на эти куски, а не на свои тренировочные данные.
Vector DB: что выбрать
На проектах до 10 миллионов векторов мы по умолчанию берём pgvector. Postgres у заказчика обычно уже есть, дополнительная инфраструктура не нужна, performance - приемлемая. Pinecone, Weaviate и Qdrant имеет смысл, когда либо очень большой объём, либо нужны специфичные фильтры по метаданным.
Embedding-модель
- OpenAI text-embedding-ada-002 - дефолт. Дешёвая, качественная, не требует self-hosting. 90% проектов - на ней.
- Open-source модели (instructor, e5) - когда данные нельзя слать в OpenAI. Качество чуть ниже, но управляемо.
- Multilingual модели - отдельная тема. Для русского контента ada-002 работает терпимо, но не идеально.
Chunking - самая недооценённая часть
Большинство наших ранних провалов в RAG были из-за плохого chunking. Если резать документ на куски по 500 токенов without overlap - теряются связи между разделами. Если оставлять документы целиком - модель тонет в шуме.
Что у нас работает: семантический chunking по структуре документа (заголовки, параграфы), куски 200–400 токенов, overlap 50 токенов, обогащение каждого куска метаданными (источник, раздел, дата). Точность retrieval после такой нарезки вырастает в 1.5–2 раза по сравнению с наивной.
Reranking - почти всегда стоит того
Достали top-50 кандидатов, прогнали через cross-encoder, вернули top-5. Время - +200мс, точность - +15–20%. На большинстве задач трейдофф очевидно в плюс.
Числа с реального проекта
Корпоративная база знаний на 12 000 документов. pgvector + ada-002 + bge-reranker. Top-1 hit rate - 73%, top-5 - 91%. Среднее время ответа - 2.3 секунды (без стриминга). Cost per query - $0.012.