ChromaDB помогает собрать локальный поиск по небольшому корпусу документов: вы создаёте коллекцию, добавляете тексты или эмбеддинги с идентификаторами, сохраняете базу на диске и проверяете выдачу запросами. Для рабочего прототипа дополнительно задайте версию корпуса, источник каждого фрагмента и правила доступа. Близость текста в выдаче остаётся подсказкой для поиска, а спорный вывод подтверждает ответственный сотрудник.
Локальный контур
Для локального прототипа 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. Используйте одну согласованную функцию эмбеддингов для загрузки и текстового запроса либо передавайте рассчитанные векторы на обоих этапах. Смену модели оформляйте как новую версию индекса: сравнение результатов после изменения станет понятным, если старую коллекцию сохранить для проверки.
Загрузка и поиск
Постройте малый сценарий на копиях разрешённых документов. Сначала извлеките текст и сохраните ссылку на исходную редакцию. Затем разбейте его на фрагменты, присвойте идентификаторы и метаданные. Проверка входа должна находить пустой текст, повторный идентификатор, пропавший источник и несогласованную версию. Исправляйте такие записи до индексации, иначе похожая выдача будет выглядеть убедительно при неверной привязке к документу.
- Создайте отдельный каталог и откройте локальный клиент через
PersistentClient. - Создайте коллекцию с утверждённой функцией эмбеддингов и запишите её имя в конфигурации прототипа.
- Добавьте фрагменты через
collection.add(ids=..., documents=..., metadatas=...)либо передайте готовые векторы. - Выполните
collection.query(query_texts=[...], n_results=...)и выведите текст, источник и метаданные для ручной сверки. - Повторно откройте базу из того же каталога и убедитесь, что записи доступны после перезапуска процесса.
При текстовом запросе Chroma использует функцию эмбеддингов коллекции. Для уже рассчитанного вектора API принимает query_embeddings. Сравнивайте запросы одинаковым способом, иначе изменение выдачи может отражать различие представления текста, при неизменном качестве корпуса. Метаданные можно применять как фильтр в запросе, но сервер сначала ограничивает доступ пользователя к источникам. На клиентскую сторону передают только разрешённые фрагменты; скрытый документ нельзя маскировать одним лишь фильтром интерфейса.
Если цель — ответы ИИ по документам, найденные фрагменты поступают в следующий шаг вместе со ссылками. Ответ модели остаётся черновиком, а проверяющий открывает первоисточник. Маршрут чтения и прав подробнее описан в материале о поиске по документам.
Права и исключения
Локальный каталог ChromaDB хранит данные на диске пользователя или сервера. Поэтому сначала ограничьте чтение самого каталога средствами среды, затем проверьте право конкретного сотрудника на каждый источник. Если приложение обслуживает разные группы, сервер получает личность пользователя из своей системы доступа и сужает выборку до разрешённых документов. При выдаче он повторно сверяет источник перед показом текста. Поле access_group в метаданных помогает построить запрос; проверку полномочий выполняет сервер.
- Пустая выдача: проверьте наличие записей, функцию эмбеддингов, выбранную коллекцию и разрешённые фильтры.
- Старая редакция: сравните версию источника с реестром корпуса и обновите связанные идентификаторы.
- Лишний документ: остановите выдачу, проверьте серверные права и источник метаданных до повторного теста.
- Повторная загрузка: сверяйте постоянные идентификаторы и выбирайте
upsertтолько по утверждённому правилу обновления.
Официальный API коллекции различает add, update, upsert и delete. Для новой редакции заранее решите, нужен ли новый идентификатор или обновление прежней записи. Удаление устаревших фрагментов лучше выполнять по явному списку после сверки с реестром, с сохранением соседних документов в рабочей коллекции. На этапе проверки храните копию индекса, а исправления фиксируйте в журнале подготовки.
Qdrant имеет отдельный материал о векторной базе для RAG: его можно использовать при выборе следующего контура. Здесь сравнение ограничено границей задачи: локальный прототип ChromaDB проверяют на собственном корпусе, а требования к многопользовательской эксплуатации формулируют отдельно. Доступ, качество и сохранность данных оценивают по результатам приёмки и правилам эксплуатации.
Хотите проверить локальный поиск на ваших разрешённых документах?
Приёмка изменений
Приёмка начинается с набора вопросов, для которых владелец документов заранее указал правильные источники. Добавьте запросы с прямым совпадением термина, перефразированием, похожими названиями и отсутствующим ответом. Проверяющий оценивает, найдена ли нужная редакция, открыт ли исходный фрагмент и достаточно ли его для ответа. Качество ответа проверяют по первоисточнику, даже при высокой близости векторов. Спорные выводы разбирает ответственный человек; модель ИИ может подготовить лишь черновик с опорой на найденные материалы.
Изменение корпуса проверяют отдельно от первого запуска. Обновите один документ, удалите другой, добавьте новый и повторите те же вопросы. Старые фрагменты должны исчезнуть из рабочей выдачи по выбранному правилу, новые — получить источники и разрешённые группы. После перезапуска локального процесса проверьте сохранность коллекции и читаемость записей. Результат теста фиксируйте вместе с версией документов, настройками эмбеддингов, перечнем вопросов и причинами ручных правок.
Возьмите разрешённый небольшой корпус и составьте вопросы с известными ответами и источниками. Соберите коллекцию, проверьте её после перезапуска и поменяйте одну редакцию документа. Сравнение выдачи покажет, где ломается связь между текстом, версией и правом доступа.
Если поиск станет частью сервиса для сотрудников, заранее согласуйте владельца корпуса, правила доступа, частоту обновления и процедуру отката индекса. Стоимость проекта обсуждают по составу документов, интеграциям и требованиям к защите, без универсального тарифа. На странице работы с документами и ИИ можно обсудить контур под ваш источник; напишите нам, и мы оценим состав работ после изучения задачи.
Частые вопросы
Что такое ChromaDB и для чего она нужна?
Как сохранить коллекцию ChromaDB после перезапуска?
chromadb.PersistentClient(path="./chroma-data") и повторно откройте коллекцию из того же каталога. Проверьте чтение записей после перезапуска процесса и настройте резервное копирование по правилам проекта.Как искать по своим документам в ChromaDB?
ids, текстом и метаданными. Затем выполните collection.query с текстовым запросом или готовым вектором и сверьте найденные фрагменты с первоисточником.Как обновлять документы в коллекции ChromaDB?
update или upsert по утверждённому правилу, а устаревшие записи удаляйте после сверки явного списка.