Плагины источников данных — это новый тип плагинов, появившийся в Интеллос 1.9.0. В конвейере знаний они выступают источником данных для документов и отправной точкой всего конвейера. В этой статье описано, как разработать плагин источника данных: архитектура плагина, примеры кода и методы отладки. Это поможет вам быстро разработать и выпустить свой плагин источника данных.

Предварительные требования

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

Типы плагинов источников данных

Интеллос поддерживает три типа плагинов источников данных: веб-краулер, онлайн-документ и онлайн-диск. При реализации кода плагина класс, который предоставляет функциональность плагина, должен наследоваться от определённого класса источника данных. Каждому из трёх типов плагинов соответствует свой родительский класс.
О том, как наследоваться от родительского класса для реализации функциональности плагина, см. Плагин-инструмент: подготовка кода инструмента.
Каждый тип плагина источника данных поддерживает несколько источников данных. Например:
  • Веб-краулер: Jina Reader, FireCrawl
  • Онлайн-документ: Notion, Confluence, GitHub
  • Онлайн-диск: OneDrive, Google Drive, Box, AWS S3, Tencent COS
Связь между типами источников данных и типами плагинов источников данных показана ниже.
Тип источника данных

Разработка плагина источника данных

Создание плагина источника данных

Чтобы создать плагин источника данных, можно воспользоваться командной строкой инструмента-каркаса, выбрав тип datasource. После завершения настройки командная строка автоматически сгенерирует код проекта плагина.
Инициализация плагина источника данных
Как правило, плагину источника данных не требуется использовать другие возможности платформы Интеллос, поэтому дополнительные разрешения не нужны.

Структура плагина источника данных

Плагин источника данных состоит из трёх основных компонентов:
  • Файл manifest.yaml: описывает основную информацию о плагине.
  • Каталог provider: содержит описание поставщика плагина и код реализации аутентификации.
  • Каталог datasources: содержит описание и основную логику получения данных из источника данных.

Установка правильной версии и тега

  • В файле manifest.yaml задайте минимальную поддерживаемую версию Интеллос следующим образом:
  • В файле manifest.yaml добавьте следующий тег, чтобы плагин отображался в категории источников данных в Интеллос Маркетплейс:
  • В файле requirements.txt задайте версию SDK плагина, используемую для разработки плагина источника данных, следующим образом:

Добавление поставщика источника данных

Создание YAML-файла поставщика

Содержимое YAML-файла поставщика по сути такое же, как и для плагинов-инструментов, со следующими двумя отличиями:
Подробнее о создании YAML-файла поставщика см. Плагин-инструмент: заполнение учётных данных стороннего сервиса.
Плагины источников данных поддерживают аутентификацию через OAuth 2.0 или API Key.О настройке OAuth см. Добавление поддержки OAuth в ваш плагин-инструмент.

Создание файла кода поставщика

  • При использовании режима аутентификации по API Key файл кода поставщика для плагинов источников данных идентичен файлу для плагинов-инструментов. Нужно лишь изменить родительский класс, наследуемый классом поставщика, на DatasourceProvider.
  • При использовании режима аутентификации OAuth плагины источников данных немного отличаются от плагинов-инструментов. При получении прав доступа через OAuth плагины источников данных могут одновременно возвращать имя пользователя и аватар для отображения на фронтенде. Поэтому методы _oauth_get_credentials и _oauth_refresh_credentials должны возвращать тип DatasourceOAuthCredentials, который содержит name, avatar_url, expires_at и credentials. Класс DatasourceOAuthCredentials определён следующим образом и при возврате должен быть приведён к соответствующему типу:
Сигнатуры функций _oauth_get_authorization_url, _oauth_get_credentials и _oauth_refresh_credentials выглядят следующим образом:

Добавление источника данных

Формат YAML-файла и формат кода источника данных различаются для трёх типов источников данных.

Веб-краулер

В YAML-файле поставщика для плагина-веб-краулера источника данных output_schema всегда должен возвращать четыре параметра: source_url, content, title и description.
В коде основной логики плагина-веб-краулера класс должен наследоваться от WebsiteCrawlDatasource и реализовывать метод _get_website_crawl. Затем для возврата сообщения о результатах сканирования используется метод create_crawl_message. Чтобы просканировать несколько веб-страниц и возвращать их пакетами, можно задать WebSiteInfo.status значение processing и использовать метод create_crawl_message для возврата каждого пакета просканированных страниц. После сканирования всех страниц задайте WebSiteInfo.status значение completed.

Онлайн-документ

Возвращаемое значение для плагина-онлайн-документа источника данных должно содержать как минимум поле content, представляющее содержимое документа. Например:
В коде основной логики плагина-онлайн-документа класс должен наследоваться от OnlineDocumentDatasource и реализовывать два метода: _get_pages и _get_content. Когда пользователь запускает плагин, тот сначала вызывает метод _get_pages для получения списка документов. После того как пользователь выбирает документ из списка, плагин вызывает метод _get_content для получения содержимого документа.

Онлайн-диск

Плагин-онлайн-диск источника данных возвращает файл, поэтому он должен соответствовать следующей спецификации:
В коде основной логики плагина-онлайн-диска класс должен наследоваться от OnlineDriveDatasource и реализовывать два метода: _browse_files и _download_file. Когда пользователь запускает плагин, тот сначала вызывает _browse_files для получения списка файлов. На этом этапе prefix пуст, что означает запрос списка файлов корневого каталога. Список файлов содержит переменные как типа «папка», так и типа «файл». Если пользователь открывает папку, метод _browse_files вызывается снова. На этом этапе prefix в OnlineDriveBrowseFilesRequest будет идентификатором папки, который используется для получения списка файлов внутри этой папки. После того как пользователь выбирает файл, плагин использует метод _download_file и идентификатор файла для получения содержимого файла. С помощью метода _get_mime_type_from_filename можно получить MIME-тип файла, что позволяет конвейеру корректно обрабатывать файлы разных типов. Когда список файлов содержит несколько файлов, можно задать OnlineDriveFileBucket.is_truncated значение True и задать OnlineDriveFileBucket.next_page_parameters параметры, необходимые для получения следующей страницы списка файлов, например идентификатор или URL запроса следующей страницы — в зависимости от поставщика сервиса.
Для сервисов хранения вроде AWS S3 переменные prefix, bucket и id имеют особое назначение и могут гибко применяться по необходимости в ходе разработки:
  • prefix: представляет префикс пути к файлу. Например, prefix=container1/folder1/ извлекает файлы или список файлов из папки folder1 в бакете container1.
  • bucket: представляет файловый бакет. Например, bucket=container1 извлекает файлы или список файлов в бакете container1. Это поле можно оставить пустым для дисков с нестандартным протоколом S3.
  • id: поскольку метод _download_file не использует переменную prefix, полный путь к файлу должен быть включён в id. Например, id=container1/folder1/file1.txt означает извлечение файла file1.txt из папки folder1 в бакете container1.
Вы можете обратиться к конкретным реализациям официального плагина Google Drive и официального плагина AWS S3.

Отладка плагина

Плагины источников данных поддерживают два метода отладки: удалённую отладку или установку как локального плагина для отладки. Обратите внимание на следующее:
  • Если плагин использует аутентификацию OAuth, redirect_uri для удалённой отладки отличается от такового для локального плагина. Обновите соответствующую конфигурацию в OAuth-приложении вашего поставщика сервиса.
  • Хотя плагины источников данных поддерживают пошаговую отладку, мы всё же рекомендуем тестировать их в полном конвейере знаний, чтобы убедиться в полной работоспособности.

Финальные проверки

Перед упаковкой и публикацией убедитесь, что вы выполнили всё перечисленное ниже:
  • Задали минимальную поддерживаемую версию Интеллос как 1.9.0.
  • Задали версию SDK как dify-plugin>=0.5.0,<0.6.0.
  • Написали файлы README.md и PRIVACY.md.
  • Включили в файлы кода только англоязычный контент.
  • Заменили иконку по умолчанию на логотип поставщика источника данных.

Упаковка и публикация

В каталоге плагина выполните следующую команду, чтобы сгенерировать пакет плагина .difypkg:
Далее вы можете:
  • Импортировать и использовать плагин в вашей среде Интеллос.
  • Опубликовать плагин в Интеллос Маркетплейс, отправив pull request.
О процессе публикации плагинов см. Публикация плагинов.

Edit this page | Report an issue