RAG и pgvector: поиск по учебной библиотеке
Создадим «Полку RAG» — поиск по небольшой собственной учебной библиотеке. Пройдём от Markdown-фрагментов к эмбеддингам и PostgreSQL, объединим векторную выдачу с полнотекстовой, добавим контекст, цитаты и необязательный ответ локальной модели. Завершим обновлением корпуса, подготовкой вопросов для оценки и локальным веб-интерфейсом.
Этот маршрут продолжает AI-помощника по документам и опирается на PostgreSQL для веб-приложений. Он посвящён отдельному пространству векторов, транзакционным ревизиям и ограничениям приближённого поиска. Предполагается знакомство с Python, SQL, JSON, Markdown и HTTP.
Среда: Python 3.13, PostgreSQL 18, pgvector 0.8.7, Psycopg 3.3.6. Серверное расширение и Python-драйвер устанавливаются независимо в отдельной учебной среде. Ollama необязателен; его runtime и точные digest моделей читатель фиксирует самостоятельно. По умолчанию используются демонстрационные счётчики слов и выдача цитат: счётчики не являются семантической моделью.
Сервис предназначен для локального изучения. Роль задаётся конфигурацией всего процесса, настоящего входа нет. Страницы учебных источников читаются из файла, поэтому после изменения корпуса необходимо завершить импорт и перезапустить приложение; общего атомарного снимка файла и базы здесь нет. Генерация проверяет форму и обозначения источников, но не доказывает истинность ответа.
В серии 12 уроков. Архив исходников содержит полное самостоятельное состояние lesson-NN для каждого этапа. Программы, база, модели, замеры, тесты и деплой при написании не запускались. Результаты в статьях описаны как ожидаемые.
Оглавление
- Границы RAG и корпус учебной библиотеки — Описать вопрос, доказательство и результат поиска на собственном корпусе.
- Фрагменты Markdown и устойчивые ссылки — Разделить документы по заголовкам и сохранить версии фрагментов.
- Эмбеддинги и договор пространства векторов — Получить векторы через отдельный адаптер и проверить их форму.
- Документы и векторы в PostgreSQL — Создать таблицы документов, ревизий и фрагментов с явной размерностью.
- Идемпотентный импорт и активация ревизии — Подготовить ревизию вне транзакции и атомарно заменить активный текст.
- Косинусный поиск и доступ к источникам — Вернуть только разрешённые активные фрагменты одного векторного пространства.
- Полнотекстовый поиск и объединение рангов — Соединить SQL-поиск по словам с векторной выдачей через RRF.
- Индекс HNSW и ограничения фильтрации — Описать приближённый поиск и отдельный протокол сравнения с точным.
- Контекст, цитаты и отказ от ответа — Собрать ограниченный контекст, цитаты и необязательный ответ локальной модели с проверкой обозначений.
- Обновление, удаление и смена модели — Сохранить согласованность выдачи при изменении текста и пространства.
- Вопросы для оценки поиска и ответа — Подготовить независимые контрольные случаи и договор метрик без выдуманных замеров.
- Локальный веб-интерфейс и передача проекта — Показать разрешённые источники и границы демонстрационного сервиса.
Продолжение маршрута
Безопасные зависимости помогут описать состав и происхождение среды. Все восемь новых серий собраны в 100 уроках актуального веба.