Архитектура ИС "Платформа ИИ"
ООО "ГК "Иннотех", домен Искусственный интеллект, 2026 г.
Глоссарий
| Термин | Описание |
|---|---|
| Agent | Программный исполнитель, который с помощью модели, правил и инструментов решает пользовательскую или системную задачу. |
| AgentVersion | Конкретная неизменяемая версия Agent. В Agent Registry получает непрозрачный UUIDv7 и связана с неизменяемой версией SemVer. |
| Agent Registry (Реестр агентов) | Централизованный каталог карточек агентов и MCP-серверов, автоматически обнаруживающий развернутых агентов в кластере Kubernetes |
| AES (Agent Execution Service) | Сервис исполнения агентов; системный потребитель реестра для подбора агента под запрос пользователя |
| Low-code Runtime (Рантайм low-code) | Универсальный контейнерный образ на базе lfx, исполняющий один опубликованный поток (flow) агента |
| Platform Agent Gateway | Публичный шлюз маршрутизации вызовов агентов; проверяет тождество вызывающей стороны и права через SpiceDB |
| Agent Publisher | Целевой компонент проверки и публикации AgentVersion. В поставке 11.08 отсутствует; отдельная версионированная спецификация отсутствует. |
| PDP | Точка принятия решения о политике доступа (Policy Decision Point). Недоступность PDP приводит к запрету доступа (fail-closed). |
| Рабочее пространство | Доверенная область каталога и прав. Для наблюдения Registry определяется точным соответствием (cluster_id, namespace) → workspace_id. |
| OIDC | OpenID Connect; базовый стандарт аутентификации платформы. |
| OTel | OpenTelemetry — средства метрик, трассировки и распространения контекста. |
| SLO | Измеримая цель качества сервиса. |
| RTO / RPO | Целевое время восстановления / допустимая потеря данных при восстановлении. |
| R1 / R2 / R3 | Горизонты поставки: обязательный первый выпуск / последующее развитие / отложенные возможности. |
| A2A (Agent-to-Agent) | Протокол взаимодействия между агентами, версия 1.0.0, HTTP+JSON |
| MCP (Model Context Protocol) | Протокол предоставления инструментов, версия 2025-11-25, Streamable HTTP |
| Agent Card | Публичная карточка агента (.well-known/agent-card.json), описывающая его возможности, версию, владельца и endpoint |
| SpiceDB | Система ресурсной авторизации; хранит отношения между субъектами и агентами, выдаёт решения agent#invoke |
| Low-code Studio (IDE) | Визуальная среда создания и проверки flow. Отделена от Runtime; |
| PlatformLLM | Платформенная нода (в low-code конструкторе) для вызова языковых моделей через AI Gateway |
| PlatformRAG | Платформенная нода (в low-code конструкторе) для гибридного поиска по знаниям через RAG Service (отложено до R2) |
| PlatformMemory | Платформенная нода (в low-code конструкторе) для краткосрочной и долгосрочной памяти через Memory Service (отложено до R2) |
| PlatformTool | Платформенная нода (в low-code конструкторе) для вызова внешних информационных систем через Tools Hub (отложено до R2) |
| PlatformAgent | Платформенная нода (в low-code конструкторе) для вызова других агентов платформы по A2A (отложено до R2) |
| Platform Memory (Memory Service) | Единый управляемый слой памяти платформы; принимает ход диалога, извлекает факты вне критического пути, отдаёт релевантные факты в пределах бюджета токенов; HTTP API порт 8091 |
| Memory API | Stateless HTTP-сервис (platform-memory-api); пути /v1/memories, /v1/memories/search, /v1/events, /health; порт 8091, ClusterIP |
| Worker (Memory) | Процесс platform-memory-worker: извлечение фактов из очереди memory.add, вызов пайплайна mem0, индексация в OpenSearch и запись истории в PostgreSQL |
| Fact / запись памяти | Атомарный факт о пользователе, агенте или задаче (поле memory); сохраняется в OpenSearch (текст + вектор) и PostgreSQL (события, история) |
| Скоуп (Scope) | Граница изоляции памяти: user_id (из идентичности), agent_id, run_id; для add/list обязателен минимум один из agent_id/run_id; поиск требует фильтров со скоупом |
| Workspace (Memory) | Рабочая область платформы (X-Workspace-Id); факты разных workspace не смешиваются |
| Event store (Memory) | Таблица platform_memory.memory_event в PostgreSQL — источник истины по async add (статусы: PENDING → RUNNING → SUCCEEDED/FAILED) |
| Search (Memory) | Синхронный гибридный поиск Memory: эмбеддинг запроса через AI Gateway + OpenSearch (семантика + BM25), упаковка в token_budget |
| AI Gateway | Единственный разрешённый путь к LLM-извлечению и эмбеддингу для Memory; профили задаются конфигурацией (embedding.model, ai_gateway.llm_model) |
| OpenSearch | Индекс фактов памяти: kNN + BM25; алиас вида mem-facts-<env>; размерность эмбеддинга по умолчанию 1024 |
| RabbitMQ | Брокер уведомлений о заданиях add: exchange memory.add, очередь memory.add.jobs, DLX memory.add.dlx, DLQ memory.add.dlq; источник истины — PostgreSQL, а не RabbitMQ |
| Fail-closed | При недоступности RabbitMQ запись не считается принятой: событие помечается FAILED, клиент получает 503 queue_unavailable |
| lfx (Langflow Executor) | Ядро исполнения потоков; stateless executor, загружающий flow из JSON |
| Flow (Поток) | Визуально собираемый агент из платформенных нод; сохраняется как JSON-артефакт |
| Манифест публикации | Неизменяемое описание исходного flow, образа Runtime, режима исполнения, версии политики компонентов и заявленных возможностей. |
| Рабочая нагрузка | Развёрнутый в Kubernetes экземпляр SDK- или Low-code-агента либо MCP-сервера. |
| Согласование состояния | Повторяемое приведение записей Registry, прав и поисковых проекций к наблюдаемому состоянию Kubernetes. |
| Проекция | Производное представление исходных данных для конкретной задачи: API, поиска или маршрутизации. Проекция может быть пересоздана из источника истины. |
| Outbox (исходящий ящик) | Механизм надёжной доставки событий каталога через транзакционный механизм в PostgreSQL и Redpanda |
| Redpanda | Распределённый журнал сообщений (durable change stream); обеспечивает гарантированную (at-least-once) доставку событий |
| OpenSearch | Поисковая система; хранит гибридный индекс agent-catalog для семантического поиска |
| RAG (Retrieval-Augmented Generation) | Метод генерации с предварительным извлечением контекста из хранилища знаний |
| RAG Service (Platform RAG) | Платформенный сервис уровня COMMON: реестр коллекций, приём нормализованных документов, гибридный поиск с обязательной фильтрацией по правам доступа и выдача фрагментов с цитатами; HTTP API, порт 8090 |
| Коллекция | Управляемый индекс знаний: профиль эмбеддинга, модель ACL, стратегия чанкинга, параметры поиска; создаётся через POST /v1/collections, owner определяется через SpiceDB |
| Канонический документ | Нормализованный документ приёма: content/content_ref, acl, content_hash, idempotency_key; сохраняется в S3 staging на время задания |
| Ingest | Асинхронный конвейер приёма: регистрация задания -> чанкинг -> эмбеддинг через AI Gateway -> bulk-индексация в OpenSearch; источник истины — PostgreSQL |
| Job store | Таблица platform_rag.ingest_job в PostgreSQL — источник истины по заданиям ingest (статусы: PENDING -> RUNNING -> DONE/FAILED/DEDUPLICATED) |
| Retrieval | Синхронный поиск: гибридный kNN+BM25, слияние RRF (Reciprocal Rank Fusion), обязательная фильтрация по tenant_id и ACL вызывающего, выдача фрагментов с цитатами (doc_id, chunk_id, оценка) |
| RAG API | Stateless HTTP-сервис (platform-rag-api); поверхности: collections, ingest, query, /health; порт 8090, ClusterIP |
| Worker | Процесс platform-rag-worker, обрабатывающий задания ingest из RabbitMQ; масштабируется независимо, в т.ч. через KEDA по числу PENDING в PostgreSQL; параллелизм app.worker_concurrency |
| ACL | Список групп и субъектов на документе; перепроверяется в момент retrieval, отзыв прав действует на следующем запросе без переиндексации |
| Fail-closed | При недоступности SpiceDB сервис отвечает 503 authz_unavailable и не выдаёт данные |
| RRF | Reciprocal Rank Fusion — слияние ранжированных списков vector и BM25 с весами, нормализацией min-max и арифметическим средним |
| KEDA | Автомасштабирование воркеров по SQL-запросу SELECT COUNT(*) FROM platform_rag.ingest_job WHERE status = 'PENDING' с целевым значением на реплику (по умолчанию 4) |
| Guardrails | Система проверки входных и выходных данных на prompt injection и безопасность |
| FileRef | Платформенная ссылка на файл с проверкой владельца, TTL, цели и подписи |
| Trace ID | Сквозной идентификатор трассировки по стандарту W3C Trace Context / OpenTelemetry |
Описание архитектуры
Функциональная архитектура
Бизнес-данные
В периметре платформы определяются следующие сущности данных:
| № | Наименование сущности данных | Источник данных | Источник — мастер-система? | Кешируется? |
|---|---|---|---|---|
| 1 | Карточка агента (Agent Card) | Публичный endpoint A2A/MCP workload (.well-known/agent-card.json или tools/list) | Нет — мастером является Kubernetes (существование workload) | Нет — загружается при реконсиляции |
| 2 | Запись реестра (RegistryResource / ResourceVersion) | PostgreSQL —committed state реестра | Да — мастер для API-запросов get / list | Нет |
| 3 | Проекция поиска (SearchProjectionState) | OpenSearch agent-catalog | Нет — производная от committed-состояния PostgreSQL | Нет |
| 4 | Отношения авторизации (SpiceDB relationships) | SpiceDB | Да — мастер для решений agent#invoke | Нет — каждый защищённый запрос выполняет live check |
| 5 | Флоу-артефакт (Flow source + manifest) | Object Storage | Нет — immutable артефакт публикации | Нет |
| 6 | Коллекция знаний (Collection) | PostgreSQL platform_rag.collections | Да — мастер для API-запросов get/list/delete | Нет — создаётся через API, owner в SpiceDB |
| 7 | Задание ingest (IngestJob) | PostgreSQL platform_rag.ingest_job | Да — источник истины по статусам ingest | Нет — цепочка статусов: PENDING → RUNNING → DONE/FAILED/DEDUPLICATED |
| 8 | Канонический документ и чанки (CanonicalDoc + Chunk) | S3 (staging) + OpenSearch rag-kb-{env} | Нет — пересоздаваема из PostgreSQL | Нет — чанки хранятся в OpenSearch с tenant_id, acl, version |
| 9 | Проекция поиска RAG (SearchProjectionStateRAG) | OpenSearch rag-kb-{env} | Нет — производная от PostgreSQL и S3 | Нет — пересоздаваема; вектор BGE-M3, 1024 dim, BM25 |
| 10 | Запись памяти (Fact / Memory record) | OpenSearch mem-facts-{env} + PostgreSQL platform_memory.memory_record | Да — мастер для API list/search | Нет — создаётся через async add, обновляется воркером |
| 11 | Событие async add (MemoryEvent) | PostgreSQL platform_memory.memory_event | Да — источник истины по статусам async add | Нет — цепочка статусов: PENDING → RUNNING → SUCCEEDED/FAILED |
| 12 | История изменений записи памяти | PostgreSQL platform_memory.memory_event | Нет — производная от событий | Нет — журнал ADD/UPDATE/DELETE |
| 13 | Вектор факта памяти | OpenSearch mem-facts-{env} (kNN vector) | Нет — производная от факта через AI Gateway | Нет — размерность 1024, BGE-M3 |
Категории данных
| № | Категория | Тип ПнД | Количество субъектов ПнД | Постоянное хранение данных |
|---|---|---|---|---|
| 1 | Внутренняя информация (Internal) | — | — | Да — карточки агентов, метаданные, версии, статусы |
| 2 | Конфиденциальная информация (Confidential) | — | — | Да — отношения авторизации, данные владельцев, проекции поиска |
| 3 | Ограниченные временные данные (Restricted-transient) | — | — | Нет — пользовательские запросы, оригинальные bearer-токены, учётные данные, приватные endpoint; не сохраняются в PostgreSQL / OpenSearch / Redpanda / audit / telemetry |
Специальные и биометрические персональные данные в описанных сущностях отсутствуют.
Данные RAG Service (коллекции, задания ingest, канонические документы, чанки с ACL, проекты поиска) классифицируются по тем же категориям: метаданные коллекций и job store — Internal; ACL документов, отношения SpiceDB, проекты поиска — Confidential; пользовательские запросы и оригинальные bearer-токены — Restricted-transient (не сохраняются).
Данные Memory Service (факты памяти, события async add, история изменений, векторы фактов) классифицируются аналогично: факты, события и история — Internal (данные об агенте, сессии, задаче); скоупы user_id, agent_id, run_id и workspace_id — Confidential (идентификация субъектов); сообщения диалога (messages) и оригинальные bearer-токены — Restricted-transient (не сохраняются в долговременной памяти). Память не заменяет RAG: Platform RAG отвечает за корпус документов; Platform Memory — за знания о пользователе, агенте и сессии.
Функциональная диаграмма
Платформа ИИ состоит из трёх основных продуктовых слоёв, общего провайдера идентификации и инфраструктуры шлюза.

Описание функциональных областей:
- Low-code IDE (Langflow Studio) — визуальный редактор для предметных специалистов. Состоит из Backend и Frontend. OIDC-интеграция через Keycloak. Позволяет собирать агента из платформенных нод и экспортировать флоу как JSON. Включает frontend и backend.
- Low-code Runtime — универсальный контейнерный образ, исполняющий один опубликованный флоу. Публикует A2A/MCP surface за Platform Agent Gateway. Неотличим от SDK-агента для AES и Registry. В fixture-компонентах доступен как
lowcode-linguist-v1(версия 1.0.3). - Agent Registry API — автоматически обнаруживает агентов в Kubernetes, загружает и валидирует карточки, предоставляет permission-aware каталог и семантический поиск с авторизационной фильтрацией. Включает компоненты:
api(основной API сервер),kubernetesReconciler(reconciler Kubernetes-ресурсов),outboxRelay(relay для event-driven интеграций),searchIndexer(индексатор поиска). Jobs:searchReindex(переиндексация поиска),retention(политика хранения данных). - AI Gateway — публичный шлюз для вызовов агентов. Проверяет OIDC-идентичность, выполняет live-проверку прав в SpiceDB, заменяет оригинальный bearer-токен на короткоживущий target-bound identity. Включает Gateway API CRDs (версия 1.5.0), Agentgateway CRDs (4 шт.) и Agentgateway Controller (Deployment в namespace
agentgateway-system). Поддерживает Gateway Topology (Local Gateway в dev-local, ST Gateway во внешней среде). - RAG Service (Platform RAG) — платформенный сервис уровня COMMON: реестр коллекций знаний, приём нормализованных документов (ingest), гибридный поиск с обязательной фильтрацией по
tenant_idи ACL вызывающего, выдача фрагментов с цитатами. Состоит из Stateless API (platform-rag-api, порт 8090) и воркера ingest (platform-rag-worker). Зависимости: PostgreSQL, RabbitMQ, OpenSearch, S3/MinIO, AI Gateway, SpiceDB. В поставке 11.08 вызов из low-code запрещён (отложено до R2). - Memory Service (Platform Memory) — единый управляемый слой памяти платформы. Принимает ход диалога, извлекает факты вне критического пути ответа пользователю и отдаёт релевантные факты в пределах бюджета токенов. Состоит из Stateless API (
platform-memory-api, порт 8091) и воркера извлечения (platform-memory-worker). Зависимости: PostgreSQL (event store, история), RabbitMQ (очередь add), OpenSearch (индекс фактов), AI Gateway (эмбеддинг и LLM-извлечение). Публичный контракт совместим с mem0 (add/search/get_all/history/delete). В поставке 11.08 вызов из low-code запрещён (PlatformMemoryотложена до R2). - Инфраструктурные сервисы — Keycloak Identity Provider, PostgreSQL, SpiceDB, OpenSearch , Redpanda , OpenTelemetry Collector , Embeddings stand-in. Team Docs (предварительно подготовленная онлайн документация). Agentgateway Controller и Gateway API (CRD уровня k8s кластера).
Принятые ключевые архитектурные решения
| № | Раздел | Описание |
|---|---|---|
| 1 | Agent Registry §1.2 | Кластер Kubernetes — единственный источник истины о существовании workload. Registry сходится к состоянию кластера (reconcile loop), а не наоборот. Расхождение всегда разрешается в пользу кластера. |
| 2 | Agent Registry §1.2, AR-D-02 | Публичный ручной API для создания и удаления агентов запрещён. Publisher (или оператор в поставке 11.08) создаёт workload в Kubernetes, а Registry только наблюдает его через Service/EndpointSlice. |
| 3 | Agent Registry §1.2, AR-D-12 | Публичный вызов агента проходит только через Platform Agent Gateway. Исходные Pod/Service адреса агентов наружу не публикуются. |
| 4 | Agent Registry §1.2, AR-D-06 | GitOps не является обязательной стратегией деплоя текущих релизов. Registry не принимает команды публикации. |
| 5 | Agent Registry §1.2, AR-D-14 | Redis отсутствует в R1. Каждый защищённый запрос выполняет live SpiceDB check; при недоступности PDP — fail-closed (503), без кеширования allow/deny. |
| 6 | Agent Registry §1.2, AR-D-17 | SpiceDB выполняет все проверки в режиме fully_consistent. Workspace-видимость не означает invoke-право. Owner проверяется через trusted Owner Directory. |
| 7 | Agent Registry §1.2, AR-D-16 | Гибридный поиск: BM25 (лексический) + k-NN (векторный, BGE-M3, 1024 измерения), веса 0.70/0.30, нормализация min-max + арифметическое среднее. Порог релевантности — не ниже 0.30. |
| 8 | Agent Registry §4, AR-D-07 | События изменения каталога доставляются через транзакционный outbox в PostgreSQL и Redpanda (at-least-once). Search Indexer и ReindexJob используют отдельные consumer groups, оба обработчика идемпотентны. |
| 9 | Low-code PRD §1.2 | Один образ рантайма на базе lfx для всех low-code агентов. Публикация создаёт новый Deployment с флоу-артефактом, а не собирает образ под каждого агента. |
| 10 | Low-code PRD §1.2 | Low-code агент неотличим от SDK-агента: тот же A2A-интерфейс, agent-card, авторизация через SpiceDB, наблюдаемость по единому trace_id. |
| 11 | Low-code PRD §3.2, NODE-4 | Из форка LangFlow удалены все внешние LLM-провайдеры, облачные vector-store и внешние memory-backend. Только платформенные ноды (PlatformLLM, PlatformRAG, PlatformMemory, PlatformTool, PlatformAgent). |
| 12 | Low-code Runtime §Architecture | Object Storage — нормативный источник флоу-артефактов в production. |
| 13 | Low-code Runtime §Architecture | Runtime не подключается к базе Studio и не обновляет конфигурацию flow. |
| 14 | Low-code Runtime §Architecture, LC-RT-D-01 | Поставка 11.08 не включает Agent Publisher. Runtime разворачивается вручную typed Kubernetes-манифестами, флоу-артефакт выкладывается вручную в Object Storage. |
| 15 | Low-code Runtime §Requirements, LC-RT-D-11 | PlatformRAG и PlatformMemory отложены до R2 — сервисы ещё не готовы как platform-контракты. Flow с такими нодами отклоняется с component_not_allowed. |
| 16 | Agent Registry §Architecture | PostgreSQL — записи реестра и источник для API; OpenSearch — пересоздаваемый индекс для поиска. |
| 17 | RAG Service §1.2, RAG-D-01 | Platform RAG — сервис уровня COMMON; consumers обращаются только через SDK (platform-rag) или low-code компонент; построение собственного retrieval не допускается. |
| 18 | RAG Service §1.3, RAG-D-02 | Разделение ответственности: интеграционные сервисы приводят данные к каноническому виду; Platform RAG выполняет чанкинг, эмбеддинг, индексацию, авторизацию и поиск. Прямая запись интеграций в OpenSearch/S3/RabbitMQ запрещена. |
| 19 | RAG Service §1.3, RAG-D-03 | Идентичность пользователя (а не агента) определяет видимость чанков: один и тот же агент для разных пользователей возвращает разный набор результатов (RET-2). |
| 20 | RAG Service §4.2, RAG-D-04 | SpiceDB — fail-closed: при недоступности сервис отвечает 503 authz_unavailable, не «прощая» запросы. |
| 21 | RAG Service §1.4, RAG-D-05 | Автомасштабирование воркеров через KEDA по SQL-запросу SELECT COUNT(*) FROM platform_rag.ingest_job WHERE status = 'PENDING'; источник истины — PostgreSQL, а не глубина очереди RabbitMQ. |
| 22 | RAG Service §3, RAG-D-06 | Эмбеддинг и реранк — только через AI Gateway; профили задаются конфигурацией (text-default-v1, rerank-default-v1), не хардкодом; смена профиля без переиндексации делает векторный поиск несовместимым. |
| 23 | RAG Service §1.4, RAG-D-07 | Гибридный поиск RAG: BM25 (лексический) + k-NN (векторный, BGE-M3, 1024 измерения), слияние RRF (Reciprocal Rank Fusion). |
| 24 | Memory Service §1.2, MEM-D-01 | Platform Memory — единый управляемый слой памяти платформы. Память не заменяет RAG: RAG отвечает за корпус документов, Memory — за знания о пользователе, агенте и сессии. Сборка промпта комбинирует оба источника. |
| 25 | Memory Service §1.2, MEM-D-02 | Разделение ответственности: API (синхронное чтение и приём записи) и воркер извлечения (асинхронный write-path). Агент не проектирует хранилище и пайплайн извлечения. |
| 26 | Memory Service §1.3, MEM-D-03 | Запись async: API создаёт событие PENDING в PostgreSQL, публикует в RabbitMQ, отвечает 202; воркер захватывает, вызывает mem0 пайплайн (LLM через AI Gateway при infer: true), пишет в OpenSearch и историю PostgreSQL, статус SUCCEEDED/FAILED. |
| 27 | Memory Service §1.3, MEM-D-04 | Поиск синхронный: эмбеддинг запроса через AI Gateway, гибридный поиск в OpenSearch (семантика + BM25), упаковка в token_budget. Обязательны фильтры со скоупом. |
| 28 | Memory Service §2.5, MEM-D-05 | Воркер в Kubernetes: текущий чарт создаёт Deployment API; воркер запускается отдельным Deployment с командой platform-memory-worker и тем же ConfigMap/Secret (уточняется при внедрении). Без воркера add остаётся в PENDING. |
| 29 | Memory Service §4.1, MEM-D-06 | Идентичность передаётся заголовками X-Workspace-Id / X-User-Id; поля в теле запроса не доверяются. Целевой контракт (JWT + SpiceDB check) — R1 по PRD, в текущем API не включён. |
| 30 | Memory Service §4.2, MEM-D-07 | Факты изолируются по комбинации workspace, user_id, agent_id, run_id. Удаление по фильтру не позволяет указать чужой user_id (403 Wrong user ID). |
| 31 | Memory Service §3, MEM-D-08 | Все вызовы эмбеддинга и LLM-извлечения — только через AI Gateway. Ключи инференса хранятся у шлюза. infer: false позволяет записать факт без LLM (дешевле, предсказуемее). |
| 32 | Memory Service §5.2, MEM-D-09 | Fail-closed: при недоступности RabbitMQ запись не принимается — событие помечается FAILED, клиент получает 503 queue_unavailable. Источник истины — PostgreSQL, а не RabbitMQ. |
| 33 | Memory Service §8.1, MEM-D-10 | Масштабирование воркеров: параллелизм worker.concurrency (по умолчанию 4), prefetch rabbitmq.prefetch (16), DLQ после rabbitmq.delivery_limit (5). Горизонтальное масштабирование независимо от API. |
| 34 | Memory Service §2.3, MEM-D-11 | Размерность эмбеддинга (embedding.dimension и opensearch.embedding_dimension) закрепляется за индексом. Смена модели/размерности без переиндексации делает векторный поиск несовместимым. |
Информационная архитектура
Диаграмма информационных потоков
Диаграмма отражает потоки данных и событий между компонентами платформы. Потоки классифицированы по типам: HTTP/API, OIDC/JWT, Message Queue, Event Stream, File/Artifact, Observation.

Таблица информационных потоков
| № | Откуда | Куда | Тип потока | Протокол | Описание |
|---|---|---|---|---|---|
| F1 | Пользователь (Low-code IDE) | Gateway api-platform | HTTP | HTTPS | Вход в Low-code IDE, аутентификация через SSO |
| F2 | Пользователь (Каталог) | Gateway api-platform | HTTP | HTTPS | Запросы к каталогу агентов: GET /agent-registry, POST /search |
| F3 | Потребитель агента | Gateway api-platform | HTTP | HTTPS | Вызов агента: POST /a2a/... (A2A/JSON, SSE streaming) |
| F4 | Gateway api-platform | Keycloak | HTTP | HTTPS | OIDC-эндпоинты: /.well-known/openid-configuration, /token, /realms/... |
| F5 | Пользователи | Keycloak | OIDC | HTTPS | Аутентификация: Authorization Code Flow (PKCE), Resource Owner Password Credentials |
| F6 | Keycloak | Пользователи | JWT | JSON | Access Token / ID Token / Refresh Token (Bearer) |
| F7 | Gateway api-platform | Agent Registry API | HTTP | HTTP(S) | REST API: /api/v1/agents, /api/v1/agents/search, /health |
| F8 | Agent Registry API | PostgreSQL | SQL CRUD | asyncpg | CRUD метаданных агентов, версий, workspace-контекста; транзакционная блокировка |
| F9 | Agent Registry API | SpiceDB | AuthZ | gRPC / HTTP | Рекурсивная проверка прав (ReBAC): agent#view, agent#invoke, agent#manage |
| F10 | Agent Registry API | OpenSearch | HTTP | HTTP(S) | Поиск агентов: семантическое + лексическое совпадение, фильтрация по правам |
| F11 | Agent Registry API | Redpanda | Event Stream | Kafka protocol | Event-driven интеграции: Outbox-паттерн, события создания/обновления/удаления агентов |
| F12 | Kubernetes Reconciler | K8s API | Watch | Kubernetes API | Наблюдение за Service, EndpointSlice, HTTPRoute; периодический full resync (>300 с) |
| F13 | Outbox Relay | Redpanda | Event Relay | Kafka protocol | Публикация зафиксированных событий из PostgreSQL в Redpanda; retry + DLQ |
| F14 | Search Indexer | OpenSearch | HTTP | HTTP(S) | Индексация документов агентов; создание нового поколения индекса; переключение псевдонима |
| F15 | Search Indexer | SpiceDB | HTTP | HTTP(S) | Обновление разрешений в SpiceDB по событиям; cleanup при потере EndpointSlice |
| F16 | Автор Low-code агента | Low-code IDE | HTTP | HTTPS | Визуальное редактирование Потока (Flow): создание, сохранение, проверка схемы |
| F17 | Low-code IDE | Keycloak | SSO / OIDC | HTTPS | Единый вход: login → callback → token refresh → logout; Web Origin валидация |
| F18 | Low-code IDE | Low-code Runtime | File / Artifact | HTTPS / Storage | Передача артефактов: source.json (Поток (Flow), SHA-256), manifest.json (platform.low-code.publish-manifest/v1) |
| F19 | Low-code Runtime | Kubernetes | K8s Resource | Kubernetes API | Публикация Service с регистрационными метками (registrable: true, protocol: a2a, workspace, agent-name, version) |
| F20 | Kubernetes API | Agent Registry API | Auto-discovery | Kubernetes API | Reconciler обнаруживает Service, проверяет метки, ждёт EndpointSlice, загружает agent-card.json |
| F21 | Low-code Runtime | Gateway | HTTP | HTTPS | A2A 1.0 вызовы: POST /message, POST /message:stream (SSE); MCP интерфейсы |
| F22 | Low-code Runtime | AI Gateway | HTTP | HTTPS | Вызов LLM и эмбеддинга: /v1/chat/completions, /v1/embeddings (через Scibox / AI Gateway) |
| F23 | Low-code Runtime | SpiceDB | AuthZ | gRPC / HTTP | Проверка прав до Guardrails и FileRef; fail-closed при недоступности |
| F24 | Gateway api-platform | Langflow Frontend | HTTP | HTTPS | Маршрутизация к визуальному редактору: GET /ide/* |
| F25 | Langflow Backend | Keycloak | OIDC | HTTPS | Client langflow-studio, scope openid profile email, admin role admin |
| F26 | Langflow Backend | AI Gateway | HTTP | HTTPS | LLM вызовы через LiteLLM: https://litellm.ai-dev.inno.tech/v1 |
| F27 | Low-code IDE | RAG API | SDK | HTTP(S) | RagClient.query(), RagClient.retrieve_and_pack() — поиск по коллекциям, упаковка контекста |
| F28 | Low-code Runtime | RAG API | SDK | HTTP(S) | RagClient.query(), RagClient.retrieve_and_pack() — агент извлекает контекст перед ответом |
| F29 | RAG API | PostgreSQL | SQL CRUD | asyncpg | Реестр коллекций, job store (ingest_job), история операций; схема platform_rag |
| F30 | RAG API | RabbitMQ | AMQP | AMQP 0-9-1 | Уведомления о заданиях ingest: exchange rag.ingest, queue rag.ingest.jobs, DLX/DLQ |
| F31 | RAG API | OpenSearch | HTTP | HTTP(S) | Гибридный поиск: kNN (vector) + BM25 (text), слияние RRF, фильтрация по tenant_id + ACL |
| F32 | RAG API | AI Gateway | HTTP | HTTPS | Эмбеддинг запросов и реранк: bge-m3, text-default-v1, rerank-default-v1 |
| F33 | RAG API | SpiceDB | AuthZ | gRPC | Права на коллекцию: collection.owner, collection.reader, collection.writer; fail-closed |
| F34 | RAG Worker | RabbitMQ | AMQP | AMQP 0-9-1 | Claim заданий: PENDING → RUNNING; prefetch=16, delivery_limit=5 |
| F35 | RAG Worker | OpenSearch | HTTP | HTTP(S) | Bulk-индексация чанков: embedding (kNN), text (BM25), tenant_id, acl, version |
| F36 | RAG Worker | AI Gateway | HTTP | HTTPS | Эмбеддинг документов: bge-m3, dimension=1024, normalize=true |
| F37 | RAG Worker | S3 / MinIO | HTTP | HTTPS | Staging канонического JSON: payload_uri, content_hash, idempotency_key |
| F38 | Low-code IDE | Memory API | SDK | HTTP(S) | MemoryClient.add(), MemoryClient.search(), MemoryClient.get_all(), MemoryClient.delete() |
| F39 | Low-code Runtime | Memory API | SDK | HTTP(S) | MemoryClient.add(), MemoryClient.search() — агент запоминает и извлекает факты |
| F40 | Memory API | PostgreSQL | SQL CRUD | asyncpg | Event store (memory_event), история изменений записей; схема platform_memory |
| F41 | Memory API | RabbitMQ | AMQP | AMQP 0-9-1 | Уведомления о заданиях add: exchange memory.add, queue memory.add.jobs, DLX/DLQ |
| F42 | Memory API | OpenSearch | HTTP | HTTP(S) | Гибридный поиск фактов: kNN (vector) + BM25 (text), фильтрация по скоупу (user_id, agent_id, run_id) |
| F43 | Memory API | AI Gateway | HTTP | HTTPS | Эмбеддинг запросов: bge-m3, dimension=1024 |
| F44 | Memory Worker | RabbitMQ | AMQP | AMQP 0-9-1 | Claim заданий: PENDING → RUNNING; concurrency=4 (worker.concurrency) |
| F45 | Memory Worker | OpenSearch | HTTP | HTTP(S) | Индексация фактов: текст + вектор; алиас mem-facts-<env> |
| F46 | Memory Worker | AI Gateway | HTTP | HTTPS | LLM-извлечение фактов: infer: true через AI Gateway; дедупликация по mem0 |
| F47 | Agent Registry API | Fixtures | Auto-discovery | Kubernetes API | Обнаружение Smoke Agent (sdk-smoke-v1) и Low-code Fixture (lowcode-linguist-v1) через Service метки |
Классификация потоков
| Тип | Протоколы | Примеры | Характер |
|---|---|---|---|
| HTTP / REST | HTTPS, HTTP(S) | F1, F2, F3, F7, F10, F21, F24, F31, F42 | Синхронный запрос-ответ |
| OIDC / JWT | HTTPS, Bearer Token | F5, F6, F17, F25 | Аутентификация и авторизация |
| SQL / CRUD | asyncpg | F8, F29, F40 | Транзакционная работа с БД |
| AMQP / Queue | AMQP 0-9-1 | F30, F34, F41, F44 | Асинхронная обработка заданий |
| Event Stream | Kafka protocol | F11, F13 | Event-driven интеграции |
| AuthZ / ACL | gRPC, HTTP | F9, F15, F23, F33 | Рекурсивная проверка прав |
| Vector Search | HTTP (kNN+BM25) | F10, F31, F42 | Гибридный поиск с RRF |
| Artifact Transfer | HTTPS, Storage | F18 | Передача source.json + manifest.json |
| K8s Watch | Kubernetes API | F12, F19, F20 | Наблюдение и discovery |
| LLM / Embedding | HTTPS (OpenAI-compatible) | F22, F26, F32, F36, F43, F46 | Вызов моделей через AI Gateway |
Техническая архитектура
Сетевое взаимодействие
| № | Инициатор | Сегмент инициатора | Получатель | Сегмент получателя | Порт и протокол | Межсетевой экран | Описание |
|---|---|---|---|---|---|---|---|
| 1 | Пользователь / AES / Control Plane | Нет данных | Registry API через Gateway | Нет данных | HTTPS/TLS, TCP-порт — нет данных | GET/LIST/SEARCH, OIDC/delegation, ограничение размера и частоты | |
| 2 | Пользователь / AES | Нет данных | Platform Agent Gateway | Нет данных | HTTPS/TLS, A2A HTTP+JSON или MCP Streamable HTTP; TCP-порт — нет данных | Единственная целевая публичная граница вызова | |
| 3 | Platform Agent Gateway | Нет данных | Адаптер авторизации вызова | Нет данных | Протокол extAuth и TCP-порт — нет данных | Передаёт проверенную идентичность и привязанный к маршруту AgentVersion | |
| 4 | Адаптер авторизации / Registry API | Нет данных | SpiceDB | Нет данных | Authzed API; транспорт и TCP-порт — нет данных | Актуальные проверки view, invoke, diagnose, manage | |
| 5 | Platform Agent Gateway | Нет данных | A2A/MCP Runtime | Нет данных | A2A HTTP+JSON или MCP Streamable HTTP поверх принятого mTLS-профиля; TCP-порт — нет данных | Передаётся краткоживущая идентичность, привязанная к цели | |
| 6 | Registry API / Reconciler / Relay / Indexer | Нет данных | PostgreSQL | Нет данных | Протокол PostgreSQL; TCP-порт — нет данных | Каноническое состояние каталога, аудит, outbox и задания | |
| 7 | Registry API / Indexer / Reindex | Нет данных | OpenSearch | Нет данных | Протокол и TCP-порт — нет данных | Поиск и запись пересоздаваемой проекции | |
| 8 | Reconciler | Нет данных | Kubernetes API | Нет данных | Native Kubernetes API TLS; TCP-порт — нет данных | get/list/watch Service и EndpointSlice, отдельное чтение HTTPRoute | |
| 9 | Reconciler | Нет данных | Рабочая нагрузка A2A/MCP | Нет данных | HTTP для Agent Card; MCP Streamable HTTP; TCP-порт выбирается из проверенного Service | Получение только ограниченного описания протокола | |
| 10 | Outbox Relay | Нет данных | Redpanda | Нет данных | Kafka-совместимый протокол, mTLS либо SCRAM+TLS; TCP-порт — нет данных | Публикация CloudEvents, acks=all в промышленном профиле | |
| 11 | Search Indexer / Reindex | Нет данных | Redpanda | Нет данных | Kafka-совместимый протокол; TCP-порт — нет данных | Чтение изменений независимыми группами/позициями | |
| 12 | Registry API / Search Indexer / Reindex | Нет данных | AI Gateway | Нет данных | Протокол и TCP-порт — нет данных | Эмбеддинги запроса и описаний агента | |
| 13 | Low-code Runtime | Нет данных | Object Storage | Нет данных | S3-совместимый либо OCI-профиль; транспорт и TCP-порт — нет данных | Загрузка неизменяемого flow и манифеста | |
| 14 | Low-code Runtime | Нет данных | Vault | Нет данных | Протокол и TCP-порт — нет данных | Получение секретов без записи во flow | |
| 15 | Low-code Runtime | Нет данных | AI Gateway / Guardrails | Нет данных | HTTP/типизированный клиент; TCP-порт — нет данных | Вызов модели и обязательные проверки | |
| 16 | Low-code Runtime | Нет данных | RAG Service / Memory Service | Нет данных | Нет данных | Связь целевая и отложена; в поставке 11.08 отсутствует | |
| 17 | Компоненты платформы | Нет данных | OTel-коллектор | Нет данных | OTLP; транспорт и TCP-порт — нет данных | Экспорт метрик и трасс без чувствительных данных | |
| 18 | Low-code Runtime | Нет данных | RAG API | Нет данных | HTTP/HTTPS, порт 8090; TCP-порт — нет данных | Вызов RAG API: POST /v1/documents:submit, POST /v1/query, POST /v1/collections (отложено до R2; в 11.08 запрещено) | |
| 19 | Worker / Search Indexer | Нет данных | AI Gateway | Нет данных | Протокол и TCP-порт — нет данных | Эмбеддинг документов (worker) и описаний агентов (Search Indexer) через AI Gateway; профили задаются конфигурацией | |
| 20 | Worker | Нет данных | RabbitMQ | Нет данных | AMQP; TCP-порт — нет данных | Подписка на exchange rag.ingest, очередь rag.ingest.jobs, DLX/DLQ для повторной доставки | |
| 21 | Worker | Нет данных | OpenSearch | Нет данных | Протокол и TCP-порт — нет данных | Bulk-индексация чанков в индекс rag-kb-{env}; mapping: knn_vector (BGE-M3, 1024 dim) + BM25 | |
| 22 | Worker / API | Нет данных | S3 / MinIO | Нет данных | S3-совместимый протокол; TCP-порт — нет данных | Staging канонического JSON (payload_uri) на время ingest-задания; в локальном Compose допускается s3.dry_run: true | |
| 23 | API / Worker | Нет данных | PostgreSQL | Нет данных | Протокол PostgreSQL; TCP-порт — нет данных | Реестр коллекций, job store platform_rag.ingest_job (источник истины), миграции схемы | |
| 24 | API | Нет данных | SpiceDB | Нет данных | gRPC; TCP-порт — нет данных | Проверка прав на коллекцию: read/write/owner; fail-closed при недоступности (503) | |
| 25 | API | Нет данных | OpenSearch | Нет данных | Протокол и TCP-порт — нет данных | Гибридный поиск (kNN + BM25) со слиянием RRF, фильтрация по tenant_id и ACL | |
| 26 | Memory API / Consumer | Нет данных | Memory API | Нет данных | HTTP/HTTPS, порт 8091; TCP-порт — нет данных | Вызов Memory API: POST /v1/memories, POST /v1/memories/search, GET /v1/memories, DELETE /v1/memories, GET /v1/events/{id}, /health (заголовки X-Workspace-Id, X-User-Id) | |
| 27 | Memory API | Нет данных | PostgreSQL | Нет данных | Протокол PostgreSQL; TCP-порт — нет данных | Event store platform_memory.memory_event, история записей, schema platform_memory | |
| 28 | Memory API | Нет данных | RabbitMQ | Нет данных | AMQP; TCP-порт — нет данных | Публикация уведомлений: exchange memory.add, очередь memory.add.jobs, DLX memory.add.dlx, DLQ memory.add.dlq | |
| 29 | Memory API | Нет данных | AI Gateway | Нет данных | Протокол и TCP-порт — нет данных | Эмбеддинг запросов (search) и LLM-извлечение (infer: true) | |
| 30 | Memory Worker | Нет данных | RabbitMQ | Нет данных | AMQP; TCP-порт — нет данных | Подписка на memory.add.jobs, claim события; DLQ memory.add.dlq после delivery_limit неудач | |
| 31 | Memory Worker | Нет данных | AI Gateway | Нет данных | Протокол и TCP-порт — нет данных | LLM-извлечение фактов (при infer: true) и эмбеддинг | |
| 32 | Memory Worker / API | Нет данных | OpenSearch | Нет данных | Протокол и TCP-порт — нет данных | Гибридный поиск (kNN + BM25) и индексация фактов в алиас mem-facts-{env}; размерность 1024 | |
| 33 | Memory Worker | Нет данных | PostgreSQL | Нет данных | Протокол PostgreSQL; TCP-порт — нет данных | Обновление статуса события (RUNNING → SUCCEEDED/FAILED), запись истории ADD/UPDATE/DELETE |
Инфраструктурные сервисы
| № | Сервис | Назначение | Подтверждённый профиль |
|---|---|---|---|
| 1 | Kubernetes | Развёртывание Runtime, наблюдение Service/EndpointSlice, маршруты HTTPRoute и выбор ведущего Registry Reconciler | Промышленная базовая версия v1.36.2; поддерживаемый диапазон Registry >=1.27; один кластер, до 100 пространств имён |
| 2 | PostgreSQL | Канонический каталог Registry, наблюдения, аудит, outbox, фазы и задания | 18.4.0; промышленный внешний управляемый PostgreSQL >=18; резервные копии/PITR 35 дней |
| 3 | OpenSearch | Гибридный поиск и пересоздаваемая векторная проекция | 3.7.0; BGE-M3, 1024 измерения, HNSW/cosine |
| 4 | RAG Service (Platform RAG) | Реестр коллекций, приём документов (ingest), гибридный поиск с ACL-фильтрацией, статус заданий; HTTP API порт 8090, внешние зависимости: PostgreSQL, RabbitMQ, OpenSearch, S3/MinIO, AI Gateway, SpiceDB | platform-rag-api (port 8090) + platform-rag-worker; Helm chart helm/platform-rag; PostgreSQL platform_rag схема; OpenSearch алиас rag-kb-{env}; AI Gateway для эмбеддинга/реранка; SpiceDB для прав на коллекции и ACL документов; S3 для staging канонических документов |
| 5 | Memory Service (Platform Memory) | Единый управляемый слой памяти платформы; async add через RabbitMQ, гибридный поиск памяти в OpenSearch, event store и история в PostgreSQL; HTTP API порт 8091, внешние зависимости: PostgreSQL, RabbitMQ, OpenSearch, AI Gateway | platform-memory-api (port 8091) + platform-memory-worker; Helm chart helm/platform-memory; PostgreSQL platform_memory схема; OpenSearch алиас mem-facts-{env}; RabbitMQ exchange memory.add, queue memory.add.jobs; AI Gateway для эмбеддинга и LLM-извлечения; публичный контракт совместим с mem0 |
| 6 | SpiceDB | Решения авторизации и отношения | v1.54.0, fully_consistent для защищённых проверок |
| 6 | Redpanda Community | Надёжный поток изменений каталога | Broker v26.1.13, chart 26.1.9; 3 раздела, replication factor 3, min.insync.replicas=2, хранение 14 дней |
| 7 | AI Gateway | Эмбеддинги Registry и вызовы PlatformLLM | Для поиска принят псевдоним agent-platform.agent-registry.embedding.bge-m3-v1 |
| 8 | Object Storage | Неизменяемые flow и манифесты по хешу | Шифрование при хранении, запрет перезаписи, S3- и дополнительный OCI-профиль |
| 9 | Vault | Секреты Runtime и привязка идентичности рабочей нагрузки | Секреты не включаются во flow/журналы |
| 10 | OTel-коллектор / платформа наблюдаемости | Метрики и распределённая трассировка | W3C Trace Context, OpenTelemetry/OTLP |
Аппаратная часть
Серверы и параметры
| № | Ядра CPU | ОЗУ (Гб) | Дисковая подсистема | ОС | ПО | Описание |
|---|---|---|---|---|---|---|
Примечание: все компоненты решения развертываются в kubernetes кластере. Отдельные сервсеры и ВМ не требуются.
Платформа контейнеризации
| № | Контур | Платформа | Ядра CPU | ОЗУ (Гб) |
|---|---|---|---|---|
| 1 | dev | Kubernetes 1.36.x (shared ai-dev) | 2–4 | 4–8 |
| 2 | UAT | Kubernetes 1.36.x | в зависимости от ожидаемой нагрузки | в зависимости от ожидаемой нагрузки |
| 3 | PreProd | Kubernetes 1.36.x | в зависимости от ожидаемой нагрузки | в зависимости от ожидаемой нагрузки |
| 4 | Prod | Kubernetes 1.36.x | в зависимости от ожидаемой нагрузки | в зависимости от ожидаемой нагрузки |
Системное и прикладное программное обеспечение
| № | ПО | Версия | Комментарий |
|---|---|---|---|
| 1 | Python | ~=3.14.0 | Язык исполнения low-code Runtime |
| 2 | lfx (Langflow Executor) | 1.11.1 | Ядро исполнения потоков; pinned by digest |
| 3 | OpenTelemetry / OTLP | latest pinned | Трассировка и наблюдаемость |
| 4 | OIDC Core | 1.0 + errata | Аутентификация |
| 5 | agentgateway | 1.3.1 | Платформенный шлюз агентов |
| 6 | Gateway API | 1.5.0 | Kubernetes Gateway API |
| 7 | BGE-M3 | — | Модель эмбеддингов (1024 dim) |
Лицензирование ПО
нет данных
Мониторинг
Наблюдаемость платформы реализована через OpenTelemetry SDK без sidecar.
| Компонент | Покрытие трассировки | Примечание |
|---|---|---|
| Registry API | API-запросы, get/list/search | Server/application spans |
| Kubernetes Reconciler | Reconciliation loop | Lifecycle phases |
| Platform Agent Gateway | OIDC validation, extAuth→SpiceDB, routing | Transport/application spans |
| Invocation authz adapter | Live SpiceDB agent#invoke | Downstream spans |
| Outbox Relay | Claim/retry/publish | Application spans |
| Search Indexer | Embedding, OpenSearch upsert | Application spans |
| Low-code Agent Pod | Transport → use case → lfx graph → platform nodes | Server/application/downstream spans |
Промпт, вывод, извлечённый текст, память, JWT, содержимое файлов и presigned URL по умолчанию не записываются в telemetry.
Средства журналирования
| № | Объект | Событие | Формат протокола | Средство хранения | Доступ к журналу | Глубина хранения |
|---|---|---|---|---|---|---|
| 1 | Agent Registry | Регистрация, дерегистрация, деградация, удаление, синхронизация прав | AuditRecord (actor, action, resource, decision, trace_id, timestamp) | Append-only в PostgreSQL | Через agent#diagnose (требуется permission) | По AR-D-18 retention policy |
| 2 | Platform Agent Gateway | Аутентификация, авторизация, маршрутизация | OTel spans + structured log | OpenSearch / centralized logging | Через Trace ID | По AR-D-18 retention policy |
| 3 | Low-code Agent Pod | Старт, readiness, invocation, ошибка ноды | OTel spans + structured log | OpenSearch / centralized logging | Через Trace ID | По AR-D-18 retention policy |
| 4 | Kubernetes Reconciler | Discovery, validation, phase transition | Registry audit + metrics | PostgreSQL audit + Prometheus metrics | Через Registry API | По AR-D-18 retention policy |
Решения по информационной безопасности
Перечень объектов защиты системы
| № | Объект | Описание |
|---|---|---|
| 1 | Карточки агентов и метаданные | Внутренняя информация: имя, версия, capabilities, endpoint, владелец |
| 2 | Отношения авторизации (SpiceDB) | Конфиденциальная информация: связи principal/service/team ↔ agent |
| 3 | Флоу-артефакты | Внутренняя информация: JSON-поток агента, структура нод |
| 4 | Пользовательские запросы | Ограниченные временные данные: не сохраняются |
| 5 | Bearer-токены (original user) | Ограниченные временные данные: не передаются upstream, не сохраняются |
| 6 | Секреты и учётные данные | Ограниченные временные данные: только через Vault/workload identity |
| 7 | Приватные endpoint workload | Ограниченные временные данные: не публикуются, не сохраняются |
| 8 | Аудит-записи | Конфиденциальная информация: actor, action, resource, decision |
| 9 | Связь кластер–пространство имён | Конфиденциальная информация: deployment configuration |
Перечень и политика хранения журналов аудита
События
| № | Событие | Решение | Код события в логе |
|---|---|---|---|
| 1 | Регистрация агента | agent-registry.created | Успешная валидация Card, commit в PostgreSQL, создание отношений в SpiceDB |
| 2 | Отказ регистрации | agent-registry.rejected | Невалидная Card, identity mismatch, unsupported version |
| 3 | Деградация агента | agent-registry.degraded | Потеря usable endpoint, stale projection |
| 4 | Удаление агента | agent-registry.removed | Удаление Service, scope revoked |
| 5 | Синхронизация прав | agent-registry.permissions_synced / permissions_sync_failed | Result SpiceDB relationship write |
| 6 | Прямой вызов через Gateway | gateway.invocation | Allow / deny / unavailable (typed 401/403/503) |
| 7 | Проверка авторизации поиска | search.authz_check | BulkCheckPermission result per candidate |
Структура лога
| № | Поля | View log | Правила |
|---|---|---|---|
| 1 | actor/caller | Через Registry API / Trace ID | Safe IDs; JWT и credentials запрещены |
| 2 | action | Через Registry API / Trace ID | create, reject, degrade, remove, sync, invoke |
| 3 | resource | Через Registry API / Trace ID | Оpaque UUID, resource kind |
| 4 | decision | Через Registry API / Trace ID | allow, deny, unavailable |
| 5 | trace_id | Через OTel / Trace ID | W3C Trace Context |
| 6 | timestamp | Через Registry API | UTC, ISO 8601 |
| 7 | safe metadata | Через Registry API | Environment, time; unbounded external текст запрещён |
Ролевая модель и права доступа пользователей
Пользовательская ролевая структура
Модель основана на отношениях SpiceDB, а не на единственном поле роли в JWT.
Субъектами могут быть principal, service и team#member. Роли рабочего
пространства и конкретного агента назначаются независимо. Право видеть каталог
не даёт права вызывать агента, а владение агентом не даёт права вызова или
полного управления. Все приведённые разрешения относятся к принятой схеме
Agent Registry; отдельная ролевая модель Low-code IDE/Publisher/Runtime не
определена.
Роли
| № | Роль | Описание доступных действий и полномочий |
|---|---|---|
| 1 | Участник рабочего пространства (workspace#member) | Просмотр каталога своего рабочего пространства; не получает invoke, manage или view_drift автоматически |
| 2 | Администратор рабочего пространства (workspace#admin) | Просмотр и управление каталогом, диагностика агентов и просмотр отчёта о расхождениях; вызов агента требует отдельного назначения invoker |
| 3 | Аудитор рабочего пространства (workspace#auditor) | Просмотр R2-отчёта о текущих расхождениях; доступ к каталогу возникает только при отдельном отношении member/admin |
| 4 | Владелец агента (agent#owner) | Просмотр и диагностика конкретного агента; не получает manage или invoke автоматически. Идентификатор команды проверяется через Platform Owner Directory |
| 5 | Наблюдатель агента (agent#viewer) | Просмотр конкретного агента |
| 6 | Пользователь агента (agent#invoker) | Вызов конкретного агента; это единственный источник разрешения agent#invoke |
| 7 | Администратор агента (agent#administrator) | Просмотр, диагностика и управление конкретным агентом; вызов требует отдельного отношения invoker |
| 8 | Участник команды (team#member) | Наследует только те отношения рабочего пространства или агента, в которых команда явно указана субъектом |
Соответствие продуктовых персон — Low-code разработчик, платформенный администратор, DevOps и сотрудник службы ИБ — перечисленным отношениям не определено.
Описание модели служебных ролей
| № | Роль | Описание | Права |
|---|---|---|---|
| 1 | Служебный субъект SpiceDB (service) | Сервис или агент как субъект авторизации | Может быть участником команды/рабочего пространства и получить viewer/invoker/administrator только через явное отношение |
| 2 | ServiceAccount Kubernetes Reconciler | Наблюдение Registry в одном кластере | get/list/watch для Service и EndpointSlice только через RoleBinding в целевых пространствах имён; без Secret, Pod, logs, exec и write |
| 3 | Роль координатора Reconciler | Выбор ведущей реплики | get/create/update/patch только для именованного Lease в платформенном пространстве имён |
| 4 | Search Indexer | Поддержание поисковой проекции | Чтение своей группы потребителей и PostgreSQL, вызов AI Gateway, запись в OpenSearch; |
| 5 | Search Reindex | Построение нового поколения индекса | Чтение снимка PostgreSQL и собственных позиций Redpanda, вызов AI Gateway, запись и переключение псевдонима OpenSearch; |
| 6 | Agent Publisher / оператор Runtime | Создание Kubernetes-ресурсов и размещение артефакта | Точные служебные учётные записи и права не определены; |
Библиотека API
| № | Метод / интерфейс | Наименование | Описание |
|---|---|---|---|
| 1 | GET /api/v1/agents/{agentId} | Получение агента | R1 Registry API; требует view, а поле интерфейса вызова дополнительно требует invoke |
| 2 | GET /api/v1/agents | Список агентов | R1 Registry API; фильтры workspace, protocol, implementationType, status, owner; серверная фильтрация view, без числа скрытых объектов |
| 3 | POST /api/v1/agents/search | Гибридный поиск | R1 Registry API; фильтрация кандидатов по invoke; пустой результат — 200 и matches=[] |
| 4 | GET /health/live | Проверка процесса Registry/Runtime | Проверка работоспособности процесса (liveness); не проверяет ресурсоёмкие зависимости |
| 5 | GET /health/ready | Проверка готовности Registry/Runtime | Registry проверяет конфигурацию и критические зависимости; Runtime — артефакт, политику, точку входа, Agent Card и клиентов |
| 6 | GET /api/v1/drift | Отчёт о расхождениях | R2, принят только смысл; конечная точка отсутствует в R1 OpenAPI и Runtime |
| 7 | GET /.well-known/agent-card.json | Agent Card Runtime | Проверенное описание A2A-интерфейса и фактических возможностей |
| 8 | POST /message:send | Синхронный A2A-вызов | Поддерживается Low-code Runtime; вызывает выбранный граф lfx и возвращает итоговое Message |
| 9 | POST /message:stream | Потоковый A2A-вызов | SSE при streaming=true: Task, упорядоченные статусы/артефакты и закрытие после итогового статуса |
| 10 | A2A task get/list | Снимки задач | Только память процесса одной реплики; после перезапуска задача может отсутствовать |
| 11 | A2A SubscribeToTask | Подписка на текущую задачу | Сначала текущее Task, затем обновления; для завершённой задачи — UnsupportedOperationError |
| 12 | MCP initialize + notifications/initialized | Установление MCP-сессии | Версия 2025-11-25 |
| 13 | MCP tools/list | Получение инструментов | Runtime возвращает один неизменяемый flow tool; Registry импортирует ограниченный неизменяемый снимок |
| 14 | MCP tools/call | Вызов инструмента | Поддерживается Runtime; Registry никогда не вызывает его при обнаружении |