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

Локальный контур

TL;DR

Для локального прототипа ChromaDB используйте PersistentClient с явно указанным каталогом и коллекцию с постоянными идентификаторами фрагментов. После загрузки проверьте поиск, повторное открытие базы и изменение одного источника.

Начните с границы данных. Выберите разрешённые документы, назначьте владельца корпуса и определите, где лежит исходный файл, а где индекс. Коллекция Chroma хранит документы, эмбеддинги и метаданные для поиска. Локальное сохранение означает, что файлы базы лежат по указанному пути; способ получения эмбеддингов следует выбрать отдельно. Если важен изолированный контур, проверьте фактический путь обработки текста и зависимостей выбранной модели эмбеддингов до загрузки материалов.

В официальной документации Python-клиента показан chromadb.PersistentClient(path="./chroma-data") для хранения на диске. Объект коллекции можно получить через get_or_create_collection, но при повторном открытии важно сверить её прежние настройки: переданные заново метаданные существующей коллекции могут игнорироваться. Для чистого эксперимента каталог должен быть отдельным от других проектов, с ограниченными правами файловой системы и резервной копией по правилам команды. Локальный клиент полезен при проверке идеи; необходимость серверного режима оценивают уже по требованиям доступа и эксплуатации.

Соседняя статья о выборе векторной базы для RAG сравнивает варианты хранения. Здесь предмет уже: одна коллекция ChromaDB и воспроизводимый цикл загрузки, поиска и проверки. Результат прототипа — список найденных фрагментов с источниками и известными ограничениями; содержание документа оценивает человек.

Контракт коллекции

Перед индексированием согласуйте формат записи. Каждому фрагменту нужен устойчивый строковый id, текст, адрес исходного документа, версия источника, признак доступной группы и позиция внутри документа. Идентификатор строят из управляемых полей так, чтобы повторная загрузка обновляла ту же запись. Если исходный документ меняется, команда знает, какие фрагменты заменить или удалить. Метаданные помогают фильтровать поиск; полномочия пользователя сервер приложения проверяет до запроса и перед возвратом текста.

ПолеЗачем хранитьПроверка при загрузке
idСвязать фрагмент с обновлениемУникальность и повторяемость
documentИскать по содержаниюЧитаемый текст без лишних данных
source_uriОткрыть первоисточникАдрес и право доступа
source_versionОтличить редакцииСовпадение с реестром корпуса
access_groupОграничить выборкуГруппа назначена владельцем

Фрагментируйте текст по смысловым границам: раздел, пункт, абзац, таблица. Универсальный размер здесь отсутствует; его выбирают на тестовых вопросах и сохраняют вместе с версией подготовки корпуса. Для договоров и инструкций особенно важны заголовок и номер раздела, чтобы найденную выдержку можно было сверить с файлом. Если страница обновилась, индекс должен отражать новую редакцию, а старая перестаёт попадать в рабочую выдачу по согласованному правилу.

Официальный интерфейс коллекции принимает ids, documents, metadatas и при необходимости готовые embeddings. Используйте одну согласованную функцию эмбеддингов для загрузки и текстового запроса либо передавайте рассчитанные векторы на обоих этапах. Смену модели оформляйте как новую версию индекса: сравнение результатов после изменения станет понятным, если старую коллекцию сохранить для проверки.

Загрузка и поиск

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

  1. Создайте отдельный каталог и откройте локальный клиент через PersistentClient.
  2. Создайте коллекцию с утверждённой функцией эмбеддингов и запишите её имя в конфигурации прототипа.
  3. Добавьте фрагменты через collection.add(ids=..., documents=..., metadatas=...) либо передайте готовые векторы.
  4. Выполните collection.query(query_texts=[...], n_results=...) и выведите текст, источник и метаданные для ручной сверки.
  5. Повторно откройте базу из того же каталога и убедитесь, что записи доступны после перезапуска процесса.

При текстовом запросе Chroma использует функцию эмбеддингов коллекции. Для уже рассчитанного вектора API принимает query_embeddings. Сравнивайте запросы одинаковым способом, иначе изменение выдачи может отражать различие представления текста, при неизменном качестве корпуса. Метаданные можно применять как фильтр в запросе, но сервер сначала ограничивает доступ пользователя к источникам. На клиентскую сторону передают только разрешённые фрагменты; скрытый документ нельзя маскировать одним лишь фильтром интерфейса.

Если цель — ответы ИИ по документам, найденные фрагменты поступают в следующий шаг вместе со ссылками. Ответ модели остаётся черновиком, а проверяющий открывает первоисточник. Маршрут чтения и прав подробнее описан в материале о поиске по документам.

Права и исключения

Локальный каталог ChromaDB хранит данные на диске пользователя или сервера. Поэтому сначала ограничьте чтение самого каталога средствами среды, затем проверьте право конкретного сотрудника на каждый источник. Если приложение обслуживает разные группы, сервер получает личность пользователя из своей системы доступа и сужает выборку до разрешённых документов. При выдаче он повторно сверяет источник перед показом текста. Поле access_group в метаданных помогает построить запрос; проверку полномочий выполняет сервер.

  • Пустая выдача: проверьте наличие записей, функцию эмбеддингов, выбранную коллекцию и разрешённые фильтры.
  • Старая редакция: сравните версию источника с реестром корпуса и обновите связанные идентификаторы.
  • Лишний документ: остановите выдачу, проверьте серверные права и источник метаданных до повторного теста.
  • Повторная загрузка: сверяйте постоянные идентификаторы и выбирайте upsert только по утверждённому правилу обновления.

Официальный API коллекции различает add, update, upsert и delete. Для новой редакции заранее решите, нужен ли новый идентификатор или обновление прежней записи. Удаление устаревших фрагментов лучше выполнять по явному списку после сверки с реестром, с сохранением соседних документов в рабочей коллекции. На этапе проверки храните копию индекса, а исправления фиксируйте в журнале подготовки.

Qdrant имеет отдельный материал о векторной базе для RAG: его можно использовать при выборе следующего контура. Здесь сравнение ограничено границей задачи: локальный прототип ChromaDB проверяют на собственном корпусе, а требования к многопользовательской эксплуатации формулируют отдельно. Доступ, качество и сохранность данных оценивают по результатам приёмки и правилам эксплуатации.

● Discovery · 1 час · бесплатно

Хотите проверить локальный поиск на ваших разрешённых документах?

Прийти на Discovery →

Приёмка изменений

Приёмка начинается с набора вопросов, для которых владелец документов заранее указал правильные источники. Добавьте запросы с прямым совпадением термина, перефразированием, похожими названиями и отсутствующим ответом. Проверяющий оценивает, найдена ли нужная редакция, открыт ли исходный фрагмент и достаточно ли его для ответа. Качество ответа проверяют по первоисточнику, даже при высокой близости векторов. Спорные выводы разбирает ответственный человек; модель ИИ может подготовить лишь черновик с опорой на найденные материалы.

Изменение корпуса проверяют отдельно от первого запуска. Обновите один документ, удалите другой, добавьте новый и повторите те же вопросы. Старые фрагменты должны исчезнуть из рабочей выдачи по выбранному правилу, новые — получить источники и разрешённые группы. После перезапуска локального процесса проверьте сохранность коллекции и читаемость записей. Результат теста фиксируйте вместе с версией документов, настройками эмбеддингов, перечнем вопросов и причинами ручных правок.

С чего начать

Возьмите разрешённый небольшой корпус и составьте вопросы с известными ответами и источниками. Соберите коллекцию, проверьте её после перезапуска и поменяйте одну редакцию документа. Сравнение выдачи покажет, где ломается связь между текстом, версией и правом доступа.

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

Частые вопросы

Что такое ChromaDB и для чего она нужна?
ChromaDB, или Chroma, хранит документы, эмбеддинги и метаданные в коллекциях и помогает искать близкие фрагменты. Для локального прототипа база может сохраняться в указанном каталоге.
Как сохранить коллекцию ChromaDB после перезапуска?
Создайте клиент через chromadb.PersistentClient(path="./chroma-data") и повторно откройте коллекцию из того же каталога. Проверьте чтение записей после перезапуска процесса и настройте резервное копирование по правилам проекта.
Как искать по своим документам в ChromaDB?
Добавьте фрагменты с постоянными ids, текстом и метаданными. Затем выполните collection.query с текстовым запросом или готовым вектором и сверьте найденные фрагменты с первоисточником.
Как обновлять документы в коллекции ChromaDB?
Свяжите фрагменты с версией источника и постоянными идентификаторами. Для изменения используйте update или upsert по утверждённому правилу, а устаревшие записи удаляйте после сверки явного списка.
Заменяет ли ChromaDB проверку прав на документы?
Доступ к источникам проверяет сервер приложения до поиска и перед возвратом фрагмента. Метаданные коллекции помогают сузить выборку, но право читать документ следует из действующих полномочий пользователя.