pgvector добавляет PostgreSQL хранение векторов и поиск близких представлений текста. Для RAG это вариант хранить фрагменты документов рядом с привычными таблицами, сохраняя проверку прав доступа в приложении.
Место в системе
pgvector — расширение PostgreSQL для векторного поиска; права на документы задаются в приложении или политиках PostgreSQL. Само расширение отвечает за поиск по векторам.
Вектор представляет смысл фрагмента числовым набором. Поисковый запрос получает такое же представление, после чего база возвращает близкие записи. PostgreSQL хранит рядом текст, идентификатор источника, редакцию и служебные поля. По официальному описанию pgvector поддерживает точный и приближённый поиск; конкретный режим выбирают после проверки требований к выдаче.
Для небольшой базы знаний удобен знакомый операционный контур: резервные копии, наблюдение и схема данных уже есть в PostgreSQL. Одного расширения мало для готового помощника. Понадобятся загрузка документов, получение векторов, фильтрация и ответ языковой модели. Общую последовательность объясняет схема архитектуры RAG.
Отдельная статья о Qdrant разбирает специализированное векторное хранилище. Здесь вопрос уже: когда команда предпочитает остаться внутри PostgreSQL и как при этом сохранить управляемость данных. Сравнивайте на собственной коллекции запросов, без опоры на общее обещание скорости.
При выборе расширения учитывайте привычки команды эксплуатации. Если администраторы уже следят за резервными копиями и нагрузкой PostgreSQL, новый тип поля легче встроить в существующие процедуры. Однако качество поиска всё равно подтверждают вопросами пользователей.
Сначала уточните, какие документы уже лежат в PostgreSQL и кто управляет их обновлением. Это влияет на схему связей и тестирование.
Схема данных
Запись фрагмента должна содержать исходный текст, вектор, ссылку на документ, идентификатор редакции и признаки доступа. Если файл удалён либо заменён, связанные записи обновляют согласованно. Иначе поиск будет предлагать старые условия как действующие. Для документов с разделами полезно хранить заголовок и позицию фрагмента: пользователь должен понимать, откуда взялась цитата.
| Поле | Зачем хранить | Что проверить |
|---|---|---|
| Идентификатор файла | Связь с оригиналом | Файл открывается |
| Редакция | Отбор актуального | Старое исключено |
| Группа доступа | Фильтр выдачи | Чужое скрыто |
| Текст фрагмента | Контекст ответа | Границы сохранены |
Вектора для вопроса и документов должны создаваться совместимым способом. Если команда меняет модель представления текста, сравнивать новые вопросы со старым набором записей без проверки нельзя: результаты станут трудно объяснимыми. Планируйте переиндексацию и отмечайте версию процесса, который создал каждую запись.
SQL помогает соединить фрагменты с таблицей разрешённых документов и ограничить выборку. Но политику доступа формулирует приложение: кто спрашивает, какие папки ему доступны и что делать при смене роли. Расширение исполняет запрос к данным, а права на содержание файлов возникают из бизнес-правил организации.
Сохраняйте исходное расположение текста: страница, раздел или строка таблицы дают возможность проверить цитату. Один вектор без связанного источника почти бесполезен для рабочего ответа, где сотрудник обязан понимать основание рекомендации.
Маршрут запроса
На входе сотрудник задаёт вопрос. Приложение проверяет его роль, определяет доступные документы, строит вектор запроса и передаёт поиск в PostgreSQL. Затем выбранные фрагменты проходят проверку актуальности и попадают в контекст модели. Сохраняйте порядок операций в журнале: иначе трудно объяснить, почему сотрудник увидел конкретный источник.
- Опишите проверяемый набор вопросов и ожидаемых фрагментов.
- Сделайте таблицу текстов, векторов, редакций и признаков доступа.
- Запускайте поиск только для разрешённых сотруднику документов.
- Сравните найденное с эталоном и проверьте ссылки на исходные файлы.
Индексы приближённого поиска имеют смысл, когда обычный поиск уже измерен и стал ограничением. По официальной документации pgvector доступны разные варианты индексации, но настройки зависят от данных и запроса. До изменения индекса сохраните контрольный набор: это позволит увидеть, что ускорение сопровождается приемлемым качеством выдачи.
Результат поиска должен быть понятен пользователю. Выводите название документа, редакцию и участок текста до генерации длинного ответа. Если подходящего фрагмента нет, помощник сообщает о пробеле в источниках, а владелец базы знаний получает сигнал на обновление.
Хотите проверить поиск по вашим документам в PostgreSQL?
Повторите одинаковый запрос от роли с доступом и роли без доступа. Сравните промежуточные кандидаты, контекст модели и видимый ответ. Такой тест проверяет весь маршрут данных, включая финальный экран пользователя.
Права и границы
Условный сценарий: инженер видит технический регламент, а коммерческий отдел работает с договорными шаблонами. Фрагменты хранятся в одной базе, но поиск для каждого сотрудника ограничен доступными файлами. Проверять право только после выдачи опасно: промежуточный контекст уже может содержать чужой текст. Поэтому ограничение входит в запрос к данным и повторно проверяется перед передачей текста модели.
Фильтр по отделу редко достаточен. У документов бывают исключения, временные права, закрытые приложения и изменения владельца. Проектируйте связь с существующей системой доступа и продумайте отзыв права: после смены роли выдача должна измениться сразу. Журнал полезен для разбора обращений, но в нём тоже есть чувствительные вопросы, поэтому доступ к журналу ограничивают.
Оценка качества включает отрицательные запросы: вопрос о чужом документе, вопрос по удалённой редакции, вопрос с точным номером, отсутствующим в базе. Успешный результат означает корректный отказ от цитирования закрытого или отсутствующего материала. Для понимания места поиска в полном процессе смотрите проект базы знаний RAG.
Приложение также решает, какие метаданные видны в ответе. Даже название закрытого файла может раскрывать лишнее. Проверяйте вместе с владельцем данных, что сотрудник видит лишь допустимые названия и фрагменты.
Для удаления документа предусмотрите последовательность действий: убрать запись из активной выдачи, обновить векторы и проверить журнал. Если источник исчез из файлового хранилища, но остался в индексе, сотрудник получит убедительную цитату из уже недействующего текста.
Когда выбирать
pgvector удобен, если команда уже уверенно обслуживает PostgreSQL, данные связаны с другими таблицами, а поиск по собственным документам проверяется на понятной коллекции запросов. Отдельное хранилище обсуждают, когда требования к поиску, масштабированию или эксплуатации делают самостоятельный контур полезным. Универсального победителя здесь нет: два варианта надо сравнить на одинаковых фрагментах и с одинаковыми правилами доступа.
План проекта включает подготовку текстов, выбор способа создания векторов, миграцию схемы, фильтры, контрольный набор и наблюдение. На стоимость влияют состояние базы, частота обновлений и сложность разрешений. Обсуждая решение для поиска по документам, просите в смете отдельно показать очистку источников и проверку прав, вместе с созданием таблицы.
Возьмите документ, к которому доступна лишь одна рабочая группа. Проверьте два запроса от разных ролей и убедитесь, что закрытый фрагмент отсутствует даже среди промежуточных результатов.
После пилота сохраняйте результаты поиска до и после каждого обновления индекса. Если ответы ухудшились, такой журнал помогает установить причину: новый документ, иной вектор, изменённый фильтр или настройки индекса. Именно воспроизводимость делает поиск пригодным для рабочего процесса.
Запишите критерии перехода на иной контур заранее: управляемость обновлений, нагрузка, стоимость обслуживания и качество выдачи. Тогда выбор базы останется решением по измерениям, без реакции на моду или знакомое название инструмента.
При передаче контура администратору опишите обычное обновление документа и аварийное удаление закрытого файла. Обе операции должны завершаться проверкой выдачи от разных ролей. Так поддержка получит ясный сценарий действий, а владельцы данных смогут подтвердить, что изменения дошли до пользовательского поиска и ответа.