Skip to content

Бэкенды хранения (Storage Backends) ​

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

Многоэкземплярное хранилище подходит для следующих сценариев:

  • хранить материалы разных команд или проектов в отдельных бакетах, раздельно управляя использованием и правами;
  • выбирать регион расположения бакета согласно требованиям к размещению данных;
  • при миграции в облачное объектное хранилище позволять новым базам знаний использовать новый бэкенд, а существующим — продолжать обращаться к исходным файлам.

Регистрация и выбор бэкенда хранения ​

Admin пространства может регистрировать экземпляры и управлять ими в «Настройки → Хранилище»:

  1. Создайте бэкенд, выберите provider (local / minio / cos / tos / s3 / oss / ks3 / obs, совпадает с provider хранилища в конвейере добавления документов), заполните параметры подключения (см. таблицу ниже). Список доступных значений ограничен переменной окружения STORAGE_ALLOW_LIST; пустое значение означает, что доступны все;
  2. Проверить подключение: проверка реально читает и записывает в хранилище, проверяя эндпоинт, бакет и учётные данные;
  3. Назначьте экземпляр используемым по умолчанию в пространстве. Когда при создании базы знаний экземпляр не указан, используется это значение по умолчанию;
  4. Если нужно указать отдельно, выберите экземпляр на вкладке «Хранилище» в диалоге редактирования базы знаний.

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

Параметры подключения ​

Разные provider используют общий набор полей конфигурации; access_key_id / secret_access_key сохраняются в зашифрованном виде и в ответах интерфейса показываются замаскированными.

НазваниеТипПо умолчаниюОписание
endpointstringпустоАдрес сервиса. Обязателен для minio (mode=remote), tos, s3, oss, ks3, obs; для cos не требуется. При сохранении выполняется проверка SSRF; адреса внутренней сети нужно добавить в SSRF_WHITELIST
regionstringпустоРегион. Обязателен для cos, tos, s3, oss, ks3, obs
access_key_id / secret_access_keystringпустоКлюч доступа; для COS соответствуют SecretId / SecretKey. Не требуются для local и MinIO в режиме mode=docker
bucket_namestringпустоБакет, обязателен для всех, кроме local
path_prefixstringпустоПрефикс ключа объекта, должен быть относительным путём, не может начинаться с / или содержать ..
modestringremoteТолько MinIO: docker использует MinIO из состава развёртывания (адрес и ключ берутся из переменных окружения вроде MINIO_ENDPOINT), remote подключается к внешнему MinIO
use_sslboolfalseИспользовать ли HTTPS для MinIO, S3, OBS
force_path_styleboolfalseТолько S3: использовать path-style адресацию; для большинства S3-совместимых сервисов её нужно включить
app_idstringпустоТолько COS: AppID облачного вендора
temp_bucket_name / temp_regionstringпустоТолько COS, TOS, OSS: бакет и регион для временных файлов; для OSS дополнительно требуется use_temp_bucket=true
  • OBS: когда endpoint — домен, используется адресация через виртуальный хост (<bucket>.<endpoint>); Huawei Cloud с 2023-12-30 отклоняет path-style запросы к endpoint-домену; когда endpoint — IP, по-прежнему используется path-style. Если домен прокси не настроен, URL файла имеет вид <scheme>://<bucket>.<endpoint-host>/<key>.
  • Таймаут передачи: для одиночной загрузки/скачивания в S3, COS, KS3, OBS, OSS больше нет общего ограничения в 30 секунд — вместо этого одна передача может длиться до 30 минут; установка соединения, TLS-рукопожатие и ожидание заголовков ответа по-прежнему имеют собственные таймауты, и при потере связи с противоположной стороной сбой происходит достаточно быстро.
  • Редиректы KS3: при следовании редиректам на каждом переходе выполняется проверка SSRF, и подпись запроса больше не пересылается на хост-цель редиректа.

Отличия от векторного хранилища ​

Файловое и векторное хранилища управляют соответственно исходными файлами и индексом поиска:

Бэкенд хранения (Storage Backend)Векторное хранилище (Vector Store)
Что хранитИсходные файлы, изображения, экспортируемые артефактыВекторы и индекс поиска
Где настраивается«Настройки → Хранилище»«Настройки → Векторное хранилище»
Поле базы знанийstorage_backend_idvector_store_id
Связанный разделЭтот документДвижки поиска и векторное хранилище

Справочник по интерфейсам ​

МетодПутьПрава
GET/storage-backends/typesViewer+, возвращает список имён provider, разрешённых в STORAGE_ALLOW_LIST
GET/storage-backends, /storage-backends/:idViewer+
POST/storage-backendsAdmin+
PUT / DELETE/storage-backends/:idAdmin+
POST/storage-backends/testAdmin+, пробное подключение с несохранёнными параметрами
POST/storage-backends/:id/testAdmin+, проверка сохранённого экземпляра
PUT/storage-backends/:id/defaultAdmin+, назначить используемым по умолчанию в пространстве

API Key требует возможности manage_storage_backends или full-access.

Модель данных и правила совместимости ​

Ключевые поля таблицы storage_backends (изоляция по tenant_id, мягкое удаление):

ПолеОписание
nameУникально в пространстве (частичный уникальный индекс с учётом мягкого удаления)
providerТип хранилища
configJSONB, содержит зашифрованные ключи
sourceuser (регистрация через интерфейс или API) / env (создано конфигурацией переменных окружения)
statusactive / disabled
legacy_aliasсм. ниже

legacy_alias служит для совместимости с историческими хранилищами, заданными через переменные окружения. При обновлении создаётся запись-псевдоним, чтобы существующие пути к файлам продолжали разрешаться без переноса данных. В одном пространстве для одного provider допускается только одна запись-псевдоним; зарегистрированные вручную экземпляры хранятся отдельно.

Версия v0.8.3 · MIT License