AI personal knowledge base: RAG по личному тексту

Обновлено:

AI personal knowledge base можно собрать вокруг одного текстового файла: в нём есть даты, заметки, задачи и контекст. Для небольших архивов достаточно поиска и ручной вставки фрагментов в модель. RAG нужен, когда файл стал большим или когда вы хотите автоматизировать поиск и ответы с цитатами.

Когда хватит обычного поиска

Начните с простого. Найдите нужные записи через rg или grep, передайте модели несколько фрагментов и задайте вопрос. Для файла на несколько сотен килобайт этого часто достаточно.

rg -n "проект X|TODO|Идея" everything.txt | head -40

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

ПодходКогда подходитПлюсыМинусы
Поиск и вставка вручнуюНебольшой файл, редкие вопросыПросто, прозрачно, без зависимостейНужно каждый раз искать самому
Передать файл целикомФайл помещается в контекстМодель видит весь текстДорого и медленно на больших файлах
RAGБольшой архив, частые вопросы, автоматизацияНаходит нужные фрагменты и цитирует ихНужно поддерживать индекс и проверять ответы

Как устроен RAG

Схема простая: текст разбивается на части, для каждой части строится векторное представление, представления сохраняются в хранилище. На вопрос система находит несколько ближайших фрагментов и передаёт их модели вместе с вопросом.

  1. Разбить файл на фрагменты.
  2. Построить эмбеддинги для каждого фрагмента.
  3. Сохранить векторы и метаданные.
  4. Найти несколько ближайших фрагментов по вопросу.
  5. Передать фрагменты модели и попросить ответ с цитатами.

Последний шаг важен. Модель должна отвечать по найденным фрагментам, а не по своей памяти. Иначе вы получите красивый ответ, который не связан с вашими записями.

Как разбивать OBTF

Не режьте файл по случайным символам. Лучше делить его по смыслу: по датам, заголовкам или блокам записей. Один фрагмент может содержать от нескольких абзацев до одной страницы текста.

Метаданные важнее размера фрагмента. Если модель знает дату и источник, ответ можно проверить. Если нет, цитата превращается в догадку.

Эмбеддинги и хранилище

Эмбеддинг превращает фрагмент текста в набор чисел. Похожие по смыслу фрагменты оказываются рядом в векторном пространстве. Для русских и английских текстов подойдут модели nomic-embed-text, bge-m3 и другие многоязычные варианты.

Для хранения можно использовать Chroma, LanceDB или sqlite-vec. Для небольшого личного архива подойдёт и простой файл с векторами, но готовое хранилище экономит время.

Локальный вариант

Если данные не должны покидать компьютер, используйте локальные модели. Ollama умеет запускать и генеративную модель, и модель эмбеддингов.

ollama pull llama3.1
ollama pull nomic-embed-text
ollama run llama3.1

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

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

Внешние модели

Внешние модели проще в настройке и обычно сильнее. Но текст уходит на чужой сервер. Не отправляйте пароли, ключи и чужие персональные данные. Проверьте настройки хранения и обучения на ваших данных, если они есть.

Для облачного варианта можно использовать API модели и отдельный сервис эмбеддингов. Схема остаётся той же: найти фрагменты, передать их модели, получить ответ со ссылками на даты и записи.

Запросы с цитатами

Хороший запрос требует опоры на текст. Примеры:

После ответа проверьте цитаты по файлу. Модель может перепутать дату, склеить два фрагмента или добавить вывод, которого не было.

Конфиденциальность и безопасность

Индекс содержит те же данные, что и исходный файл. Если файл зашифрован, индекс тоже нужно защищать. Не храните эмбеддинги в открытом виде, если в заметках есть чувствительная информация.

Для локального варианта держите модели и индекс на своём диске. Для облачного проверьте, кто имеет доступ к аккаунту, и включите двухфакторную аутентификацию. Подробнее о шифровании есть в отдельном руководстве.

Ограничения

Контрольный список

Если вы ещё выбираете между обычным поиском и RAG, начните с поиска через grep и rg. Если хотите связать бумажный блокнот с моделями, посмотрите руководство про блокнот, OBTF и LLM.

Начните с готового файла. В шаблоне уже есть дата, маркеры и примеры записей.

Скачать шаблон .txt →