Контекстуализация чанков: как улучшить поиск в векторной базе
Если ты с RAG еще не знаком, то читай прошлые статьи:
Категориальный роутинг в RAG: Пошаговый гайд
🧠 Контекстуализация чанков: как улучшить поиск в векторной базе без магии
Если ты уже работаешь с RAG-системами и векторными базами, то знаешь:
🚨 просто порезать документ на чанки — недостаточно.
Модель может не понять смысл куска текста, если тот вырван из контекста. В результате:
Anthropic предложили интересное решение: контекстуализировать чанки на этапе загрузки. Дальше покажу, как это реализовать в N8n без лишнего геморроя.
🔍 Что такое контекстуализация?
Это процесс, при котором каждый чанк (фрагмент текста) получает краткое описание в контексте всего документа.
Ты подаёшь:
🔹 Полный текст документа
🔹 Один чанк На выходе: краткая выжимка смысла этого чанка с учётом всего документа.
📦 Как это реализовать в N8n: пошаговая схема
Весь флоу строится на базе N8n + ChatGPT.
⚙️ Общий флоу
[1] Trigger: Upload file
↓
[2] Extract text from PDF
↓
[3] Save full text in Set
↓
[4] Split into chunks (~500 символов, с учётом переносов)
↓
[5] Loop: For each chunk
↳ [6] Prompt Claude:
- full document = System
- chunk = User message
- контекстуализация
↓
[7] Собрать: оригинал + "контекст: ..." → записать в Supabase
🛠️ Детализация шагов
Воркфлоу можно скачать в нашем Telegram-канале по ссылке
Через Google Drive в N8n загружаем PDF.
Извлекаем текст → сохраняем в переменную.
Нода разбивает текст с помощью кода по ~500 символов, стараясь обрезать по завершённым предложениям.
3. Контекстуализация через ноду LLM.
Как подаётся промпт:
Пример system prompt:
<document>
{{ $('HTTP Request3').item.json.markdown }}
</document>
Here is the chunk we want to situate within the whole document
<chunk>
{{ $json.chunk }}
</chunk>
Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. Answer only with the succinct context and nothing else, and only in Russian.
🧩 Финальный вид объекта для базы:
Каждый документ сохраняется в векторную базу данных как строка:
Оригинал: [исходный чанк] Контекст: [результат от Claude]
🟡 По желанию: добавь в метаданные ключевые слова, имена, темы — также можно вытащить из Claude в JSON (показано в следующих видео).
Как добавлять метаданные читай в статье.
🧠 Зачем всё это?
- 📈 Повышает релевантность поиска
- 🧠 Делает семантику текста более очевидной для модели
- 💡 Упрощает интерпретацию фрагментов, даже если они короткие или абстрактные
🚀 Что дальше?
- ✅ Контекстуализируй документы при загрузке — как в этом гайде
- 🔜 Контекстуализируй запросы пользователей перед поиском
- ⚙️ На базе контекста можно делать: фильтрацию, приоритизацию, мультистейдж-поиск
📌 Вывод: делай не больше, а лучше
Если ты просто загоняешь чанки в векторку — ты теряешь качество.
Контекстуализация — это отличный способ повысить качество ответов.
Наш Telegram - https://t.me/neurofolder