Семантический поиск по книгам: RAG для художественной литературы 2026 | AiManual
AiManual Logo Ai / Manual.
30 Мар 2026 Гайд

Практическое руководство: как построить семантический поиск по художественным произведениям с помощью RAG

Пошаговый гайд по созданию семантического поиска по 90k историй с учетом сюжета и контекста. Выбор эмбеддинг-моделей, стратегии чанкинга и реранкеров на 2026 го

Художественный текст – это не просто мешок слов

Запросы вроде «найди сцены, где герой испытывает экзистенциальный ужас» или «покажи все диалоги о предательстве в третьей главе» ломают стандартный RAG. Почему? Потому что модели эмбеддингов, обученные на Википедии и научных статьях, плохо понимают метафоры, развитие персонажей и саспенс. Они видят текст, но не видят историю.

Основная проблема – контекстная целостность. Разбивая роман на куски по 512 токенов, вы гарантированно теряете нить повествования. Герой влюбляется в одном чанке, а признается в любви в другом, и между ними – пропасть в векторном пространстве.

1 Выбор модели эмбеддингов: не верьте бенчмаркам

На 30 марта 2026 года ландшафт моделей изменился. Модели типа BGE-M3 или Snowflake Arctic Embed с длиной контекста в 128k токенов стали нормой. Но для художественной прозы важна не длина, а чувствительность к нарративу.

💡
Ищите модели, дообученные на литературных корпусах. Например, GritLM-Literary-7B (выпущена в начале 2026) специально оптимизирована для захвата эмоциональных тонов и сюжетных архетипов. Её эмбеддинги лучше отражают, скажем, разницу между "страхом" в хорроре и "страхом" в психологической драме.

Не гонитесь за размерностью 1024. Для поиска по 90k историй хватит 768 измерений, особенно если вы планируете использовать реранкер. Экономия на вычислениях будет существенной.

2 Чанкинг: как резать, чтобы не искалечить сюжет

Тупое разбиение по символам или предложениям – путь в никуда. Художественный текст имеет структуру: главы, сцены, абзацы, диалоги.

  • Сценарный чанкинг: Разделяйте текст по смене локации, времени или группы персонажей. Библиотеки типа nlp-text-splitter на 2026 год научились определять сцены с точностью около 85%.
  • Семантическое слияние: Получили два маленьких, но семантически связанных абзаца? Склейте их. Алгоритмы вроде SemanticChunker из LangChain 0.2.x (актуально на 2026) делают это на лету, используя тот же эмбеддингер для оценки когерентности.
  • Наложение (overlap) – ваш друг и враг. Да, 10% оверлапа помогают сохранить контекст. Но в диалогах это приводит к дублированию реплик. Настройте оверлап адаптивно: больше для описаний, меньше для прямой речи.
# Пример адаптивного чанкинга с использованием литературно-ориентированного сплиттера
from literary_splitter import SceneAwareSplitter

splitter = SceneAwareSplitter(
    chunk_size=1000,  # токенов
    chunk_overlap=50,  # базовый оверлап
    sensitivity="high",  # режим для художественной прозы
    model="gritlm-literary"  # модель для оценки сцен
)

chunks = splitter.split_text(full_novel_text)

3 Векторная БД и гибридный поиск: не кладите все яйца в один вектор

Чисто семантический поиск по художественным текстам часто выдает красиво звучащие, но нерелевантные отрывки. Тут спасает гибридный подход.

Используйте Qdrant или Weaviate (актуальные версии на 2026) с включенным BM25. Эти базы научились эффективно комбинировать sparse и dense вектора. Запрос «любовное письмо Татьяны к Онегину» найдет и по ключевым словам («письмо», «Татьяна»), и по семантике («исповедь», «чувства»).

Хранилище Плюс для литературы Минус
Qdrant 1.9.x Отличная фильтрация по метаданным (автор, жанр, год) Требует больше RAM для больших коллекций
Weaviate 1.24 Встроенные модули реранкинга Сложнее в кастомной настройке
Elasticsearch 10.x Невероятно мощный гибридный поиск Настройка – это отдельный ад (но оно того стоит)

Про настройку гибридного поиска в Elasticsearch мы уже подробно писали в отдельном руководстве. Для 90k историй и 8 ГБ VRAM я бы стартовал с Qdrant – он проще и жрет меньше ресурсов.

4 Реранкинг: финальная полировка результатов

Векторный поиск вернет 20-30 потенциальных чанков. Половина будет не у дел. Реранкер – это кросс-энкодер, который берет ваш запрос и каждый чанк, и выдает точную оценку релевантности.

На 2026 год модели типа BGE-Reranker-v3-M3 или Cohere Rerank 3.5 (если бюджет позволяет) справляются с литературными нюансами. Они понимают, что запрос «момент moral dilemma» лучше соответствует внутреннему монологу, чем описанию погоды, даже если в последнем есть слово "difficulty".

Важный нюанс: не посылайте в реранкер огромные чанки. Обрежьте их до 256-512 токенов вокруг ключевой фразы. Этого достаточно для оценки, а скорость возрастет в разы.

# Пример пайплайна с реранкером
from sentence_transformers import CrossEncoder

reranker = CrossEncoder('BAAI/bge-reranker-v3-m3', device='cuda')

# Допустим, candidates - это чанки, найденные векторным поиском
pairs = [[query, chunk] for chunk in candidates]
scores = reranker.predict(pairs)

# Сортируем кандидатов по убыванию score
ranked_indices = np.argsort(scores)[::-1]
top_chunks = [candidates[i] for i in ranked_indices[:5]]  # Берем топ-5

5 Сборка пайплайна и подача LLM

Теперь у вас есть 3-5 идеально подобранных отрывков. Не сваливайте их в промпт как есть. Художественный текст требует аккуратной контекстуализации.

  1. Добавьте метаданные к каждому чанку: название произведения, главу, окружающие события. Это помогает LLM сориентироваться.
  2. Используйте продвинутые шаблоны промптов, которые заставляют модель фокусироваться на сюжете и персонажах, а не пересказывать текст. Готовые работающие промпты можно взять здесь.
  3. Выберите LLM с длинным контекстом и способностью понимать нарративы. Claude-3.7-Sonnet или Gemini 2.5 Pro (актуально на март 2026) справляются лучше, чем чисто инженерные модели вроде GPT-4o.

Где все ломается: 5 ошибок, которые сведут ваш поиск на нет

  • Игнорирование метаданных. Без жанра, года и автора поиск "готическая атмосфера" выдаст и "Дракулу", и современный любовный роман с вампирами. Фильтруйте.
  • Чанкинг по абзацам в стихах. Поэзию вообще нельзя резать стандартными методами. Для нее нужны отдельные правила – по строфам или даже по ритмическим паттернам. (Об этом мало кто говорит, а потом плачут).
  • Экономия на реранкере. Думаете, можно обойтись без него? Для технических текстов – может быть. Для художественных – нет. Это единственный способ отсечь красиво звучащий, но нерелевантный мусор.
  • Использование общей эмбеддинг-модели. Модель, обученная на новостях, будет кодировать "темный лес" как экосистему, а не как символ опасности и неизвестности.
  • Поиск по всему корпусу сразу. 90k историй – это много. Если не использовать эффективную фильтрацию (хотя бы по жанру), поиск будет медленным и неточным. Сегментируйте базу.

Что в итоге?

Строительство семантического поиска по художественным текстам – это не применение стандартного RAG, а его переосмысление. Вы имеете дело не с фактами, а с смыслами, спрятанными в метафорах, сюжетных поворотах и характерах.

Инструменты 2026 года дают для этого все возможности: специализированные эмбеддинг-модели, умный чанкинг, гибридный поиск и мощные реранкеры. Но самый важный компонент – это понимание, что вы работаете с литературой. Без этого даже самая сложная архитектура будет выдавать технически точные, но бессмысленные в контексте повествования ответы.

Для дальнейшего углубления в тему рекомендую ознакомиться с обзором свежих исследований RAG, где рассматриваются подходы вроде GraphRAG, которые могут лучше улавливать связи между персонажами и событиями.

Подписаться на канал