Перейти к основному содержимому

Встроенные виды плагинов

В v1.0 spec-репозиторий нормативно фиксирует два встроенных вида плагинов. Большинство доменных видов (llm, embedder, vector_store, chunker, и т.д.) объявляются приложением-потребителем.

tool

Function-style плагин: принимает структурированные аргументы, возвращает структурированный результат.

  • Hookspec: kinds/tool/v1.yaml
  • kind_api_version: 1.0.0
  • Типичный runtime: in_process или mcp_stdio

Хуки

HookDispatchОписание
get_schemabroadcast_collectВозвращает JSON Schema входа/выхода плагина — для inspector-UI и MCP-registration.
executesingletonВыполнить tool с аргументами, вернуть результат.

Типичные реализации

  • semantic_search — поиск по индексированным документам.
  • http_fetch — скачать страницу по URL.
  • file_read / file_write — работа с файловой системой в sandbox-каталоге.
  • code_execute — выполнить код в изолированной среде (обычно mcp_stdio).
  • sql_query — выполнить SQL-запрос к подключённой БД.

Минимальный манифест

[plugin]
schema_version = "1"
name = "my-tool"
kind = "tool"
runtime = "in_process"
core_version = ">=0.1.0,<1.0.0"
entry_point = "plugin:MyTool"

orchestrator

Управляет жизненным циклом долгоживущих UoW (unit-of-work) — enqueue, status, backfill. Singleton, всегда in_process_only (не может жить через MCP из-за state).

Хуки

HookDispatchОписание
enqueuesingletonПоставить UoW в очередь. Идемпотентно по idempotency_key. Возвращает (unit_id, deduplicated).
statussingletonПолучить текущий статус UoW. Возвращает (state, started_at?, finished_at?, progress?, error?).
backfillsingletonПовторная постановка failed/expired units в очередь. Возвращает (enqueued_count, skipped_count).

Встроенная реализация

Каждый binding включает LocalExecutorOrchestrator — обязательный in-tree плагин. Семантика:

  • in-process executor: enqueue → запуск в той же event loop / thread pool.
  • in-memory очередь (или персистный JSON в Phase 0).
  • Реальная очередь (Postgres-based, Redis-based) — Phase 1+ через внешние orchestrator-плагины (Dagster-wrapper, Celery-wrapper).

Виды, объявляемые приложением-потребителем

Приложения разных доменов используют разные наборы видов. Виды не нормативные — каждое приложение объявляет свои hookspecs. Ниже — несколько типичных кластеров как отправная точка.

Data-обработка

ВидНазначениеТипичный dispatch
sourceИсточник данных (S3, Postgres, Kafka).broadcast_collect (несколько источников) или capability (по формату)
processorТрансформация / обогащение записей.chain (pipeline) или broadcast_collect
sinkЦелевое хранилище (Elasticsearch, warehouse).broadcast_notify (fan-out) или singleton

Уведомления и интеграции

ВидНазначениеТипичный dispatch
notifierОтправка уведомлений (email, SMS, webhook, push).capability (по channel) или broadcast_notify (fan-out)
auth_providerOAuth / SAML / LDAP.capability (по provider-type)
webhook_handlerОбработка входящих webhooks.capability (по event-type)

Бизнес-логика

ВидНазначениеТипичный dispatch
payment_providerStripe / PayPal / внутренний модуль.capability (по валюте / региону) или singleton
tax_calculatorРасчёт налогов по юрисдикции.capability (по стране)
pricing_strategyПравила ценообразования.chain (применяются последовательно)

Observability / platform

ВидНазначениеТипичный dispatch
metric_exporterВыгрузка метрик (Prometheus / OTLP).broadcast_collect или broadcast_notify
audit_loggerAudit-trail событий.broadcast_notify
event_listenerПодписчик на lifecycle-события.broadcast_notify
rate_limiterЛимитирование запросов.chain (в middleware-слое)

AI / RAG-платформы (один из возможных сценариев)

ВидНазначениеТипичный dispatch
llmЯзыковая модель — completion, chat, streaming.singleton
embedderВекторное представление текста.capability (под разные языки) или singleton
vector_storeВекторное хранилище — upsert/search.singleton
chunkerРазбиение текста/кода на фрагменты.capability (под разные форматы)
rerankerПовторное ранжирование результатов поиска.chain
tool_providerИсточник инструментов для агента.broadcast_collect

Объявление собственного вида

Если ни один из перечисленных не подходит, объявите собственный — см. Виды плагинов и ADR-0004.

Шаги:

  1. Написать hookspec в kinds/<name>/v1.yaml.
  2. Описать JSON Schema для входов/выходов каждого хука в kinds/<name>/schemas/.
  3. Сгенерировать типы для своей реализации (pydantic/zod/struct).
  4. Зарегистрировать hookspec при discover() через параметр kind_hookspecs.

Namespace для имён видов

Рекомендуемая конвенция (не enforced):

  • snake_case.
  • Существительные в единственном числе: embedder, не embedders.
  • Без версий в имени: llm, не llm_v2. Версия — в kind_api_version.
  • Префикс организации для необщих: acme_internal_scorer — чтобы не конфликтовать с потенциальными будущими стандартными видами.

Связь с диспетчеризацией

kind сам по себе не задаёт dispatch. Dispatch объявляется на уровне хука в hookspec. Один вид может иметь хуки с разными dispatch-классами (как tool с broadcast_collect для get_schema и singleton для execute).

См. также