Идея выглядит простой: сложить все заметки в папку, пустить туда агента и получить помощника, который помнит всё. На практике агент находит не то, путает документы и забывает сказанное пять минут назад. Причина в том, как у него устроена память.
У агента нет памяти
У модели есть только контекстное окно, и оно живёт одну сессию. В нём лежат сообщения и файлы текущего разговора, правила, навыки и короткие заметки из прошлых сессий, если инструмент их ведёт. Всё остальное для модели не существует.
То, что принято называть памятью агента, состоит из двух частей: внешнее хранилище и механизм, который достаёт из него нужные куски и кладёт в контекст. Этот механизм называется RAG.
Что такое RAG
RAG расшифровывается как Retrieval-Augmented Generation. В названии три шага:
- Retrieval — найти в хранилище фрагменты, подходящие к вопросу.
- Augmented — добавить их к запросу.
- Generation — получить ответ модели, которая опирается на добавленный текст.
Так обходится ограничение контекста. Целую книгу или базу заметок в запрос не вставить: либо не влезет, либо выйдет дорого. RAG передаёт модели только выжимку.
Как это работает по шагам
Подготовка данных. Текст режется на небольшие фрагменты, их называют чанками. Каждый чанк проходит через embed-модель, которая превращает его в длинный набор чисел, эмбеддинг. Числа описывают смысл текста. Эмбеддинги складываются в векторную базу данных.
Обработка вопроса. Вопрос пользователя тоже превращается в эмбеддинг. База сравнивает его с сохранёнными и находит самые близкие. Это и есть семантический поиск: совпадение по смыслу, а не по словам.
Сборка контекста. Текст найденных чанков подставляется в запрос и уходит в модель.
Любой инструмент памяти для агента построен на этих трёх шагах. Отличаются детали.
RAG — это разработка, а не кнопка
Готового «RAG для Claude Code» в одном файле нет. Это отдельная инженерная дисциплина, и путей два: собрать конвейер самому или подключить готовое решение. Ниже оба.
Собираем сами: основа
Удобнее всего начать с фреймворка LlamaIndex. Это набор готовых модулей под каждую задачу RAG. Он может закрыть весь конвейер в одиночку, а может связать между собой более сильные инструменты на отдельных этапах. Этапов три: чанкинг, эмбеддинг, векторная база.
Чанкинг
Поиск идёт по чанкам, поэтому от нарезки зависит всё остальное. Основные стратегии:
- По размеру. Текст режется через каждые 400–512 токенов без оглядки на смысл. Быстро и предсказуемо, но предложение или таблица могут оказаться разрезанными. Спасает перекрытие: 10–20% конца одного чанка повторяются в начале следующего.
- Рекурсивный. Режет по естественным границам, сначала по абзацам. Разделители можно задать свои, поэтому способ подходит и для кода.
- По предложениям. Набирает целые предложения, пока не упрётся в лимит. Мысль не обрывается, но длинные предложения дают слишком большие чанки. Хорош для диалогов и вопросов с ответами.
- По страницам. Одна страница — один чанк. Подходит для PDF, отчётов и презентаций, где важно сохранить таблицу рядом с её подписью.
- Семантический. Считает эмбеддинг для каждого предложения и режет там, где соседние предложения расходятся по смыслу. Точнее, но каждый вызов embed-модели стоит времени и денег.
- Силами модели. Документ отдаётся языковой модели, и она сама решает, где границы, а заодно пишет краткое описание каждого чанка. Самый дорогой и медленный способ.
- Поздний (late chunking). Модель сначала обрабатывает документ целиком, чтобы каждое слово получило контекст всего текста, и только потом текст делится на чанки. Это дополнительный слой поверх обычной нарезки. Нужна embed-модель с длинным контекстом.
Что выбрать. Начните с рекурсивной нарезки на 400–512 токенов с перекрытием 10–20%. Есть разбор, по которому простая рекурсивная нарезка по 512 токенов обходит сложные методы по точности ответов. Семантический и модельный чанкинг имеют смысл на больших базах под аналитические задачи.
Больше пользы обычно дают две вещи:
- метаданные у чанков (теги, даты, тип документа) и фильтрация по ним;
- чистка исходников от мусора до нарезки.
Инструменты. Для простого конвейера хватит LlamaIndex. Если хочется больше стратегий и скорости, посмотрите библиотеку Chonkie. Для PDF и офисных файлов пригодятся:
- pytesseract, pdf2image, PIL — базовая связка для распознавания сканов.
- LlamaParse — парсер из экосистемы LlamaIndex, сохраняет таблицы и многоколоночную вёрстку.
- Unstructured — вытаскивает текст из PDF, Word, PowerPoint, HTML и писем с сохранением заголовков и списков.
- Docling — близкий по задачам инструмент с широким набором форматов.
- pdfplumber — отдаёт текст вместе с координатами слов, поэтому можно показывать, из какого места документа взята цитата.
Для заметок в Markdown в LlamaIndex есть парсер, который сохраняет структуру заголовков в метаданных чанка.
Эмбеддинг
На этом этапе не стоит застревать: embed-моделей много, а разница между ними для личной базы невелика. Подойдёт локальная многоязычная модель вроде paraphrase-multilingual-MiniLM-L12-v2 или nomic-embed-text.
Отдельный случай — мультимодальные модели, например Gemini Embedding 2. Они переводят в одно смысловое пространство текст, картинки, аудио, видео и PDF, и не нужно строить отдельную цепочку под каждый формат. Модель платная.
Векторная база
Здесь эмбеддинги хранятся и по ним идёт поиск. Базы бывают локальные и облачные. Локальная держит векторы в оперативной памяти, поэтому её нужно настроить на сохранение на диск. Иначе после перезапуска всё придётся считать заново. В облаке об этом заботится провайдер.
- Pinecone — облачная, без администрирования. Есть гибридный поиск и фильтры по метаданным. Платная, локально не ставится.
- Qdrant — открытая и быстрая, с развитой фильтрацией. Хороший выбор для локальной установки.
- Chroma — лёгкая, ставится одной командой. Подходит для прототипа и небольшой личной базы.
- Milvus — для очень больших объёмов, работает локально и в облаке.
- pgvector — расширение PostgreSQL. Удобно, если данные уже лежат в Postgres.
Дальше конвейер можно собирать вместе с агентом: вы уже знаете этапы и термины и можете описать, что хотите получить.
Какие ещё бывают RAG
Graph RAG
Обычный RAG режет текст на независимые куски и теряет связи между ними. Графовый вариант извлекает из текста сущности и отношения между ними и хранит их в графовой базе. Агент видит не только фрагмент, но и то, с чем он связан. Подход хорошо работает на связных текстах: книгах, статьях, расшифровках, личных заметках. Для разрозненных таблиц он подходит хуже.
Важная оговорка для пользователей Obsidian: ссылки вида [[заметка]] графовому конвейеру ничего не дают. Для него это обычный текст, связи он строит сам.
Инструменты: Microsoft GraphRAG как фреймворк, Neo4j как графовая база, Gephi для визуализации. Для глубокого погружения есть книга Essential GraphRAG.
Agentic RAG
Это надстройка над любым конвейером. Агент сам управляет поиском: разбирает запрос, выбирает инструмент, оценивает найденное и повторяет поиск с другой формулировкой, если данных мало. Цикл идёт, пока контекста не хватит для ответа.
Инструменты: LangChain для простых случаев и LangGraph, когда нужны циклы, ветвления и самопроверка.
Hierarchical RAG
Документ делится на крупные родительские фрагменты, а те на мелкие дочерние. Ищут по мелким, потому что в них меньше шума, а модели отдают родительский фрагмент целиком. Так решается старая дилемма: мелкие чанки точны, но бедны контекстом, крупные наоборот.
В LlamaIndex для этого есть RaptorPack, а также пара HierarchicalNodeParser и AutoMergingRetriever: первый режет документ на несколько уровней, второй склеивает найденные мелкие куски в родительские.
Готовые решения
Почти все перечисленные инструменты подключаются к агенту по MCP.
- Mem0 — конвейер под ключ, облачный или локальный. Совмещает векторный поиск, граф и метаданные, умеет переранжировать результаты. Память пополняется сама: система вытаскивает из сессий ключевые факты и решения. Графовая часть заметно проще векторной.
- QMD — локальный поиск по Markdown-заметкам. Локальная модель расширяет запрос, затем параллельно идут поиск по словам и по смыслу, результаты объединяются и переранжируются. Нарезка учитывает структуру Markdown. Требователен к оперативной памяти.
- OpenViking — хранит память как файловую систему с адресами вида viking://. У каждой записи три уровня детализации: короткое резюме, обзор и полный текст. Поиск сначала выбирает подходящий каталог, потом идёт вглубь, поэтому его легче проверять.
- Graphiti — надстройка над графовыми базами с привязкой фактов ко времени: когда появилась сущность, как менялись связи, когда факт устарел. Удобно для данных, которые постоянно меняются, например для истории проекта.
- Hindsight — графовая память с четырьмя типами записей: факты о мире, опыт агента, мнения с оценкой уверенности и наблюдения. Ищет по смыслу, словам, графу и времени. Работает сразу после установки, к Claude Code подключается плагином.
- Cognee — настраиваемый движок знаний: векторы, граф и метаданные. Принимает десятки форматов, сам строит граф сущностей, поднимается несколькими командами.
С чего начать
- Соберите минимальный конвейер: рекурсивная нарезка, локальная embed-модель, Chroma или Qdrant.
- Проверьте его на десяти своих реальных вопросах.
- Добавьте метаданные и фильтры.
- Усложняйте только там, где видите конкретную ошибку поиска.
Большая часть инструментов из статьи бесплатна при локальной установке.