Skip to content

Интеграция с Seafile ​

seafile синхронизирует выбранные папки и файлы из библиотеки Seafile в базу знаний. Поддерживает плановый запуск, инкрементальную синхронизацию, докачку с места обрыва и сверку удаления на стороне источника. Совместим с Seafile Community Server 10.0.1 (API v2). Общий процесс синхронизации см. в Синхронизация источников данных.

Учётная запись и API-токен ​

Используйте учётную запись, которая может входить в Seafile и имеет как минимум права только на чтение целевой библиотеки. Область синхронизации определяется правами этой учётной записи. В качестве учётных данных используется пользовательский API-токен этой учётной записи. Коннектор хранит и использует только токен, не обрабатывает пароль, SSO-авторизацию или библиотечные токены.

На Seafile 10.0.1 в разделе «Персональные настройки» пункт «Web API Auth Token» по умолчанию не отображается — администратор должен включить ENABLE_GET_AUTH_TOKEN_BY_SESSION = True в seahub_settings.py и перезапустить Seahub. Также можно получить токен, вызвав POST /api2/auth-token/ с логином и паролем. Если включена двухфакторная аутентификация, потребуется передать код подтверждения в заголовке X-Seafile-OTP согласно ответу.

Тест подключения в aihelpme.ru вызывает /api2/auth/ping/ для проверки токена. Доступность библиотек и каталогов проверяется только при загрузке дерева ресурсов.

Настройка в базе знаний ​

  1. Настройки базы знаний → Источники данных → Создать, выбрать «Seafile».
  2. Указать адрес Seafile и API-токен, выполнить тест подключения. Адрес может содержать префикс пути развёртывания, например https://example.com/seafile.
  3. В дереве ресурсов выбрать корень библиотеки, любую папку или отдельный файл. На верхнем уровне отображаются только те библиотеки, к которым у учётной записи есть доступ и которые не зашифрованы. Папки разворачиваются по уровням. Один источник данных может выбирать только одну библиотеку — попытка выбрать вторую будет отклонена.
  4. Выбрать режим полной/инкрементальной синхронизации, расписание, стратегию разрешения конфликтов и опцию синхронизации удалений. После сохранения сначала выполнить ручную синхронизацию небольшого набора файлов, проверить логи и результаты разбора.

Выбор папки означает рекурсивную синхронизацию — новые файлы и подпапки будут автоматически включаться в следующий раз. Выбор отдельного файла синхронизирует только его. При перекрытии дочерних элементов родительской папкой сохраняется только родительская. В дереве выбора отображаются только те расширения, которые aihelpme.ru поддерживает для импорта (.zip и неподдерживаемые форматы не отображаются и не синхронизируются).

Сеть и SSRF ​

ЗапросЦельТокен в запросе
API (/api2/...)Указанный адрес SeafileДа, Authorization: Token ...
Загрузка файлаСсылка fileserver, возвращаемая Seafile (обычно /seafhttp/... на том же домене, либо отдельный домен)Нет

Оба типа адресов проходят проверку SSRF. Если Seafile развёрнут во внутренней сети или использует отдельный домен fileserver, необходимо добавить соответствующий хост в SSRF_WHITELIST в .env. Иначе при сохранении учётных данных может появиться ошибка base_url SSRF validation failed, а в логах синхронизации — seafile_ssrf_blocked.

Папки, форматы и размеры ​

Файлы, загруженные в результате синхронизации, помещаются в каталог базы знаний по пути <имя_библиотеки>/<путь_внутри_библиотеки>. Метка источника — «Seafile». Имя библиотеки фиксируется при первой синхронизации и не меняется при переименовании в Seafile — это не приведёт к повторной загрузке. Имена папок и файлов нормализуются с удалением недопустимых символов.

Диапазон поддерживаемых форматов совпадает с загрузкой файлов в базу знаний (PDF, Office, Markdown, HTML, распространённые изображения, аудио и др.), он определяется в internal/utils/import_filetypes.go. Для изображений требуется настроить VLM в базе знаний, для аудио — ASR. Если конфигурация отсутствует, запись будет помечена в журнале синхронизации как неуспешно загруженная, другие файлы при этом продолжат обработку.

Максимальный размер одного файла ограничен MAX_FILE_SIZE_MB (по умолчанию 50 МБ). Файлы, превышающие лимит, в списке каталогов сразу помечаются как seafile_file_too_large и не скачиваются; если при скачивании фактический размер превысит лимит — загрузка также отклоняется (без обрезки). При увеличении этого значения необходимо одновременно увеличить DOCREADER_GRPC_MAX_FILE_SIZE_MB в DocReader, перезапустить app, docreader и frontend — иначе файл может быть скачан, но отклонён на этапе разбора через gRPC.

Поведение синхронизации ​

Для каждого файла формируется отпечаток (fingerprint) из «ID объекта + время изменения + размер» и сохраняется в курсоре. Если все три значения совпадают — скачивание пропускается. При изменении отпечатка файл скачивается повторно и перезаписывает старую запись (удаление старой с последующим созданием новой; в момент разбора этот документ может быть временно недоступен). В проходе без изменений выполняется только сканирование каталогов, количество запросов равно количеству каталогов.

Операция на стороне SeafileПоведение
Добавление файла или подпапкиБудет включено при следующей синхронизации
Изменение содержимогоБудет скачано повторно и обновлено
Удаление файлаЕсли включена опция «Синхронизировать удаления» — соответствующая запись в БЗ будет удалена. Иначе только курсор освободит ссылку на этот файл
Переименование/перемещениеТрактуется как удаление старого пути и создание по новому. При включённой синхронизации удалений старое знание удаляется, новое добавляется как отдельная запись (исторические ссылки не сохраняются автоматически)
Переименование библиотекиИмя библиотеки фиксировано при первой синхронизации — переименование в Seafile не повлияет на каталог в БЗ и не вызовет повторной загрузки

При ручном повторном запуске синхронизации (force resync) всё содержимое выбранных папок помечается как требующее переоценки отпечатка и повторно скачивается/перерабатывается. Эта операция не удаляет знания, отсутствующие в текущем дереве, если синхронизация удалений не включена. Количество одновременных загрузок файлов ограничено конфигурацией источника данных (параллелизм), чтобы не перегружать Seafile.

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