AI Platform Docs
Корпоративные документы

Архитектура ИС "Платформа ИИ"

ООО "ГК "Иннотех", домен Искусственный интеллект, 2026 г.

1. Глоссарий

ТерминОписание
AgentПрограммный исполнитель, который с помощью модели, правил и инструментов решает пользовательскую или системную задачу.
AgentVersionКонкретная неизменяемая версия Agent. В Agent Registry получает непрозрачный UUIDv7 и связана с неизменяемой версией SemVer.
Agent Registry (Реестр агентов)Централизованный каталог карточек агентов и MCP-серверов, автоматически обнаруживающий развернутых агентов в кластере Kubernetes
AES (Agent Execution Service)Сервис исполнения агентов; системный потребитель реестра для подбора агента под запрос пользователя
Low-code Runtime (Рантайм low-code)Универсальный контейнерный образ на базе lfx, исполняющий один опубликованный Поток агента
Platform Agent GatewayПубличный шлюз маршрутизации вызовов агентов; проверяет тождество вызывающей стороны и права через SpiceDB
Agent PublisherЦелевой компонент проверки и публикации AgentVersion. В поставке 11.08 отсутствует; отдельная версионированная спецификация отсутствует.
PDPТочка принятия решения о политике доступа (Policy Decision Point). Недоступность PDP приводит к запрету доступа (fail-closed).
Рабочее пространствоДоверенная область каталога и прав. Для наблюдения Registry определяется точным соответствием (cluster_id, namespace) → workspace_id.
OIDCOpenID Connect; базовый стандарт аутентификации платформы.
OTelOpenTelemetry — средства метрик, трассировки и распространения контекста.
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 Конструктор (IDE)Визуальная среда создания и проверки Потока. Отделена от 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 APIStateless 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Поисковая система; хранит гибридные индексы: agent-catalog (семантический поиск агентов), rag-kb-<env> (коллекции RAG), mem-facts-<env> (факты памяти, kNN + BM25); размерность эмбеддинга по умолчанию 1024
RabbitMQБрокер уведомлений о заданиях add: exchange memory.add, очередь memory.add.jobs, DLX memory.add.dlx, DLQ memory.add.dlq; источник истины — PostgreSQL, а не RabbitMQ
Fail-closedПринцип отказа в сторону запрета: при недоступности критической зависимости (PDP/SpiceDB, очередь) сервис не «прощает» запрос — запись не принимается (событие FAILED, 503 queue_unavailable) либо данные не выдаются (503 authz_unavailable)
lfxЯдро исполнения потоков; stateless-исполнитель, загружающий Поток из JSON (форк LangFlow — только источник исходного кода)
Flow (Поток)Визуально собираемый агент из платформенных нод; сохраняется как JSON-артефакт
Манифест публикацииНеизменяемое описание исходного Потока, образа Runtime, режима исполнения, версии политики компонентов и заявленных возможностей.
Рабочая нагрузкаРазвёрнутый в Kubernetes экземпляр SDK- или Low-code-агента либо MCP-сервера.
Согласование состоянияПовторяемое приведение записей Registry, прав и поисковых проекций к наблюдаемому состоянию Kubernetes.
ПроекцияПроизводное представление исходных данных для конкретной задачи: API, поиска или маршрутизации. Проекция может быть пересоздана из источника истины.
Outbox (исходящий ящик)Механизм надёжной доставки событий каталога через транзакционный механизм в PostgreSQL и Redpanda
RedpandaРаспределённый журнал сообщений (durable change stream); обеспечивает гарантированную (at-least-once) доставку событий
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 APIStateless HTTP-сервис (platform-rag-api); поверхности: collections, ingest, query, /health; порт 8090, ClusterIP
WorkerПроцесс platform-rag-worker, обрабатывающий задания ingest из RabbitMQ; масштабируется независимо, в т.ч. через KEDA по числу PENDING в PostgreSQL; параллелизм app.worker_concurrency
ACLСписок групп и субъектов на документе; перепроверяется в момент retrieval, отзыв прав действует на следующем запросе без переиндексации
RRFReciprocal Rank Fusion — слияние ранжированных списков vector и BM25 с весами, нормализацией min-max и арифметическим средним
KEDAАвтомасштабирование воркеров по SQL-запросу SELECT COUNT(*) FROM platform_rag.ingest_job WHERE status = 'PENDING' с целевым значением на реплику (по умолчанию 4)
GuardrailsСистема проверки входных и выходных текстов (запросов и ответов модели) на запрещённое содержимое и персональные данные; выносит вердикт pass/deny/mask — отклонить текст или замаскировать чувствительные данные до попадания в модель или возврата клиенту. Два слоя: Control Plane (версии политик, доставка, привязка к модели) и Guardrails Runtime (проверка текста)
Guardrails RuntimeОтдельный stateless-процесс проверки текста: при старте загружает неизменяемый набор политик, выполняет секции request/response и возвращает вердикт pass/deny/mask; не пишет в RAG/Memory/Kubernetes и не обращается к Control Plane на каждый запрос; HTTP API: POST /request, POST /response, GET /readyz, GET /metrics
Политика Guardrails (Guardrail Policy)Версионируемое описание проверки: две стадии request (вход) и response (выход), каждая с бюджетом deadlineMs, обязательными правилами baseline (всегда enforce, до 64) и дополнительными additional (до 64), плюс список одобренных providers; модель Policy → Stage → Rule[]
Правило Guardrails (Rule)Конкретная проверка текста внутри стадии: типы regex (RE2), stop_list (стоп-список), external_pipeline (внешний детектор, всегда deny), llm_classifier (проверка LLM-моделью); параметры mode (enforce/observe), onMatch (deny/redact), timeoutMs
Bundle (набор политик)Неизменяемый артефакт доставки политик в Guardrails Runtime; schemaVersion: agent-platform.guardrail-runtime.bundle/v1; целостность — SHA-256 канонического JSON (RFC 8785) bundleDigest; без hot-reload — смена требует нового процесса/поколения
FileRefПлатформенная ссылка на файл с проверкой владельца, TTL, цели и подписи
Trace IDСквозной идентификатор трассировки по стандарту W3C Trace Context / OpenTelemetry
Control PlaneУправляющая подсистема платформы: владеет desired state и длительными операциями, управляет моделями, виртуальными ключами LLM и публикацией агентов. Вне путей инференса LLM и A2A-вызова
Platform API Gateway (api-gw)Общий южно-северный шлюз управления и каталога; маршрутизирует Control Plane API (/control-plane) и Agent Registry API (/agent-registry) под одним origin. Не владеет бизнес-логикой и не смешивается с Platform Agent Gateway
Agent PublicationCapability Control Plane: публикация low-code агентов; выделяет идентификаторы, создаёт Kubernetes-ресурсы и ждёт фидбэка Registry. Не отдельный сервис или bounded context
cpctlТонкий CLI-клиент Control Plane API (Go, static binary); не обращается к БД, Kubernetes и worker-очерям напрямую
TierПрофиль обслуживания ключа LLM: лимит запросов в минуту и квота токенов в минуту; без членов и унаследованных прав
Provider (LLM)Конфигурация внешнего LLM-провайдера: адаптер openai_compatible, HTTPS-конечная точка, зашифрованные учётные данные
ModelКонкретная модель с именем для шлюза (gatewayName), привязкой к провайдеру и профилем internal/external
ApiKey (виртуальный ключ LLM)Виртуальный ключ доступа к LLM: один владелец (principal/service/agent), один Tier, явный набор моделей (до 256); сырой ключ не хранится, только fingerprint
KeyShardВнутреннее byte-bounded размещение render-политики ключей в ConfigMap (лимит менее 1 MiB); не создаёт grouping или права
PublicationПривязка агента к выбранной версии в окружении; состояния active/degraded/suspended/unpublished
PublishJobУстойчивая (durable) попытка выполнения публикации: validate/apply/verify/select/unpublish
Operation (durable)Устойчивое намерение мутации в PostgreSQL; переживает перезапуск, повторяется до завершения или компенсации
Gate (гейт публикации)Независимое наблюдаемое условие валидации публикации: pending/passed/failed/not_applicable
Reconciler (CP)Фоновый воркер, детерминированно применяющий desired state во внешних системах (Kubernetes, LLM Gateway)

2. Описание архитектуры

2.1. Функциональная архитектура

2.1.1. Бизнес-данные

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

№Наименование сущности данныхИсточник данныхИсточник — мастер-система?Кешируется?
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
14Профиль обслуживания (Tier)PostgreSQL control_plane.tierДа — мастер для API get/listНет — неизменяемый технический профиль rate/quota
15Конфигурация провайдера (Provider)PostgreSQL control_plane.provider (учётные данные — application-encrypted)Да — мастер; сырой credential не возвращаетсяНет — сырой ключ только в зашифрованной строке, delivery через Kubernetes Secret
16Модель (Model)PostgreSQL control_plane.modelДа — мастер; привязка Provider → ModelНет — gatewayName уникален в routing scope
17Виртуальный ключ LLM (ApiKey)PostgreSQL control_plane.api_keyДа — мастер; сырой secret не хранится, только fingerprintНет — один владелец, один Tier, до 256 моделей; key_id → shard_id
18Публикация агента (Publication / AgentVersion)PostgreSQL control_plane.agent, agent_version, publicationДа — источник истины desired state публикацииНет — immutable AgentVersion, монотонная publication revision
19Операция публикации (PublishJob / Operation)PostgreSQL control_plane.publish_job, operation + Temporal WorkflowДа — источник истины по статусам операцииНет — фазы: accepted → running → verifying → succeeded/failed/cancelled
20Запись аудита управления (AuditRecord)PostgreSQL control_plane.audit (append-only)Да — источник истины audit-фактовНет — без секретного payload, с actor, action, decision, trace
21Политика Guardrails (GuardrailPolicy)PostgreSQL control_plane (версии политик, ревизии)Да — мастер для API get/list/revisionsНет — неизменяемые ревизии, definitionDigest
22Привязка модели к политике (GuardrailBinding)PostgreSQL control_plane (привязка модели)Да — состояние применения: pending/applied/failed/disabled/unboundНет — policyId, policyRevision, generationId, bundleDigest
23Набор политик Runtime (GuardrailBundle)Файл на диске процесса Guardrails Runtime (AP_GUARDRAIL_RUNTIME_BUNDLE_FILE)Да — источник политик для проверкиНет — неизменяемый на время жизни процесса, bundleDigest (SHA-256 RFC 8785)

2.1.2. Категории данных

№КатегорияТип ПнДКоличество субъектов ПнДПостоянное хранение данных
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 — за знания о пользователе, агенте и сессии.

Данные Control Plane классифицируются по тем же категориям: метаданные Tier/Provider/Model, Publication и Operation — Internal; зашифрованные учётные данные провайдера и агента, fingerprint ключей, отношения авторизации управления и записи аудита — Confidential; сырой virtual-key secret, учётные данные провайдера и оригинальные bearer-токены — Restricted-transient (сырой ключ возвращается один раз в oneTimeSecret и не сохраняется в PostgreSQL / Kubernetes / audit / telemetry).

Данные Guardrails классифицируются по тем же категориям: версии политик, их ревизии и привязка к модели — Internal; сервисный токен Runtime и учётные данные внешних провайдеров/классификаторов — Confidential (хранятся в Kubernetes Secret/файлах, не попадают в политику или Git); проверяемый текст запроса/ответа, оригинальные bearer-токены и полный ответ классификатора — Restricted-transient (не сохраняются в БД, журнале или метриках процесса — метрики содержат только счётчики проверок, ошибок, срабатываний и длительности без текста и имён политик).

2.1.3. Функциональная диаграмма

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

functional-diagram.drawio.png

Таблица потоков

№ИсточникПолучательПротоколОписание
Ф1Low-code КонструкторControl Plane APIHTTP (REST)Экспорт неизменяемой версии flow в виде команды публикации.
Ф2Control PlaneKubernetes, OCI-реестр артефактовKubernetes API, OCIРазвёртывание workload'а и публикации артефакта.
Ф3Agent RegistryRegistry PostgreSQLSQL (PostgreSQL)Регистрация агента в каталоге по наблюдению за кластером.
Ф4ПользовательAgent Registry APIHTTP (REST)Поиск и просмотр доступных агентов.
Ф5ВызывающийАгентский шлюзHTTP (A2A)Запрос к опубликованному агенту.
Ф6Агентский шлюзLow-code RuntimeHTTP (A2A/MCP)Передача запроса в исполняющий агент после проверки.
Ф7Control PlaneKubernetesKubernetes APIСнятие агента с публикации (route-first unpublish).
Ф8Вызывающий, пользовательPlatform IdP, шлюзыOIDCПолучение и проверка access-токена.
Ф9Low-code RuntimeLLM GatewayHTTP (REST)Вызов модели с ключом агента.
Ф10Все компонентыOpenTelemetryOTLPСбор метрик, логов и трассировок.
Ф11Low-code КонструкторPlatform RAG APIHTTP (REST)Извлечение знаний при проектировании flow.
Ф12Low-code КонструкторPlatform Memory APIHTTP (REST)Работа с памятью при проектировании flow.
Ф13Low-code RuntimePlatform RAG APIHTTP (REST)Извлечение знаний при исполнении агента.
Ф14Low-code RuntimePlatform Memory APIHTTP (REST)Работа с памятью при исполнении агента.
Ф15Владелец политик (Control Plane)Guardrails RuntimeHTTP (REST)Доставка неизменяемого набора политик; привязка политики к модели через шлюз (webhook promptGuard).
Ф16LLM GatewayGuardrails RuntimeHTTP (REST)Проверка запроса модели (POST /request) до отправки в модель.
Ф17Guardrails RuntimeLLM GatewayHTTP (REST)Проверка ответа модели (POST /response) перед возвратом клиенту.
Ф18RAG/Memory-адаптерGuardrails RuntimeHTTP (REST)Прямая проверка текста перед индексацией/записью (request) и выдачей (response).

3. Принятые ключевые архитектурные решения

№РазделОписание
1Agent Registry §1.2Кластер Kubernetes — единственный источник истины о существовании workload. Registry сходится к состоянию кластера (reconcile loop), а не наоборот. Расхождение всегда разрешается в пользу кластера.
2Agent Registry §1.2, AR-D-02Публичный ручной API для создания и удаления агентов запрещён. Publisher (или оператор в поставке 11.08) создаёт workload в Kubernetes, а Registry только наблюдает его через Service/EndpointSlice.
3Agent Registry §1.2, AR-D-12Публичный вызов агента проходит только через Platform Agent Gateway. Исходные Pod/Service адреса агентов наружу не публикуются.
4Agent Registry §1.2, AR-D-06GitOps не является обязательной стратегией деплоя текущих релизов. Registry не принимает команды публикации.
5Agent Registry §1.2, AR-D-14Redis отсутствует в R1. Каждый защищённый запрос выполняет live SpiceDB check; при недоступности PDP — fail-closed (503), без кеширования allow/deny.
6Agent Registry §1.2, AR-D-17SpiceDB выполняет все проверки в режиме fully_consistent. Workspace-видимость не означает invoke-право. Owner проверяется через trusted Owner Directory.
7Agent Registry §1.2, AR-D-16Гибридный поиск: BM25 (лексический) + k-NN (векторный, BGE-M3, 1024 измерения), веса 0.70/0.30, нормализация min-max + арифметическое среднее. Порог релевантности — не ниже 0.30.
8Agent Registry §4, AR-D-07События изменения каталога доставляются через транзакционный outbox в PostgreSQL и Redpanda (at-least-once). Search Indexer и ReindexJob используют отдельные consumer groups, оба обработчика идемпотентны.
9Low-code PRD §1.2Один образ рантайма на базе lfx для всех low-code агентов. Публикация создаёт новый Deployment с флоу-артефактом, а не собирает образ под каждого агента.
10Low-code PRD §1.2Low-code агент неотличим от SDK-агента: тот же A2A-интерфейс, agent-card, авторизация через SpiceDB, наблюдаемость по единому trace_id.
11Low-code PRD §3.2, NODE-4Из форка LangFlow удалены все внешние LLM-провайдеры, облачные vector-store и внешние memory-backend. Только платформенные ноды (PlatformLLM, PlatformRAG, PlatformMemory, PlatformTool, PlatformAgent).
12Low-code Runtime §ArchitectureObject Storage — нормативный источник артефактов Потока в production.
13Low-code Runtime §ArchitectureRuntime не подключается к базе Конструктора и не обновляет конфигурацию Потока.
14Low-code Runtime §Architecture, LC-RT-D-01Поставка 11.08 не включает Agent Publisher. Runtime разворачивается вручную typed Kubernetes-манифестами, артефакт Потока выкладывается вручную в Object Storage.
15Low-code Runtime §Requirements, LC-RT-D-11PlatformRAG и PlatformMemory отложены до R2 — сервисы ещё не готовы как platform-контракты. Flow с такими нодами отклоняется с component_not_allowed.
16Agent Registry §ArchitecturePostgreSQL — записи реестра и источник для API; OpenSearch — пересоздаваемый индекс для поиска.
17RAG Service §1.2, RAG-D-01Platform RAG — сервис уровня COMMON; consumers обращаются только через SDK (platform-rag) или low-code компонент; построение собственного retrieval не допускается.
18RAG Service §1.3, RAG-D-02Разделение ответственности: интеграционные сервисы приводят данные к каноническому виду; Platform RAG выполняет чанкинг, эмбеддинг, индексацию, авторизацию и поиск. Прямая запись интеграций в OpenSearch/S3/RabbitMQ запрещена.
19RAG Service §1.3, RAG-D-03Идентичность пользователя (а не агента) определяет видимость чанков: один и тот же агент для разных пользователей возвращает разный набор результатов (RET-2).
20RAG Service §4.2, RAG-D-04SpiceDB — fail-closed: при недоступности сервис отвечает 503 authz_unavailable, не «прощая» запросы.
21RAG Service §1.4, RAG-D-05Автомасштабирование воркеров через KEDA по SQL-запросу SELECT COUNT(*) FROM platform_rag.ingest_job WHERE status = 'PENDING'; источник истины — PostgreSQL, а не глубина очереди RabbitMQ.
22RAG Service §3, RAG-D-06Эмбеддинг и реранк — только через AI Gateway; профили задаются конфигурацией (text-default-v1, rerank-default-v1), не хардкодом; смена профиля без переиндексации делает векторный поиск несовместимым.
23RAG Service §1.4, RAG-D-07Гибридный поиск RAG: BM25 (лексический) + k-NN (векторный, BGE-M3, 1024 измерения), слияние RRF (Reciprocal Rank Fusion).
24Memory Service §1.2, MEM-D-01Platform Memory — единый управляемый слой памяти платформы. Память не заменяет RAG: RAG отвечает за корпус документов, Memory — за знания о пользователе, агенте и сессии. Сборка промпта комбинирует оба источника.
25Memory Service §1.2, MEM-D-02Разделение ответственности: API (синхронное чтение и приём записи) и воркер извлечения (асинхронный write-path). Агент не проектирует хранилище и пайплайн извлечения.
26Memory Service §1.3, MEM-D-03Запись async: API создаёт событие PENDING в PostgreSQL, публикует в RabbitMQ, отвечает 202; воркер захватывает, вызывает mem0 пайплайн (LLM через AI Gateway при infer: true), пишет в OpenSearch и историю PostgreSQL, статус SUCCEEDED/FAILED.
27Memory Service §1.3, MEM-D-04Поиск синхронный: эмбеддинг запроса через AI Gateway, гибридный поиск в OpenSearch (семантика + BM25), упаковка в token_budget. Обязательны фильтры со скоупом.
28Memory Service §2.5, MEM-D-05Воркер в Kubernetes: текущий чарт создаёт Deployment API; воркер запускается отдельным Deployment с командой platform-memory-worker и тем же ConfigMap/Secret (уточняется при внедрении). Без воркера add остаётся в PENDING.
29Memory Service §4.1, MEM-D-06Идентичность передаётся заголовками X-Workspace-Id / X-User-Id; поля в теле запроса не доверяются. Целевой контракт (JWT + SpiceDB check) — R1 по PRD, в текущем API не включён.
30Memory Service §4.2, MEM-D-07Факты изолируются по комбинации workspace, user_id, agent_id, run_id. Удаление по фильтру не позволяет указать чужой user_id (403 Wrong user ID).
31Memory Service §3, MEM-D-08Все вызовы эмбеддинга и LLM-извлечения — только через AI Gateway. Ключи инференса хранятся у шлюза. infer: false позволяет записать факт без LLM (дешевле, предсказуемее).
32Memory Service §5.2, MEM-D-09Fail-closed: при недоступности RabbitMQ запись не принимается — событие помечается FAILED, клиент получает 503 queue_unavailable. Источник истины — PostgreSQL, а не RabbitMQ.
33Memory Service §8.1, MEM-D-10Масштабирование воркеров: параллелизм worker.concurrency (по умолчанию 4), prefetch rabbitmq.prefetch (16), DLQ после rabbitmq.delivery_limit (5). Горизонтальное масштабирование независимо от API.
34Memory Service §2.3, MEM-D-11Размерность эмбеддинга (embedding.dimension и opensearch.embedding_dimension) закрепляется за индексом. Смена модели/размерности без переиндексации делает векторный поиск несовместимым.
35ADR-0004, CP-G-01/CP-API-01Control Plane — единый management owner: один versioned API, один UI и cpctl как тонкий клиент. Platform API Gateway (api-gw) маршрутизирует Control Plane API (/control-plane) и Agent Registry API (/agent-registry) под одним origin, без слияния bounded contexts.
36ADR-0004, CP-REC-01/CP-PUB-02Agent Publication — capability Control Plane, а не отдельный сервис/Publisher API. Первый и единственный source adapter R2 — low-code: клиент передаёт immutable артефакт (URI + digest), не Kubernetes-манифест, namespace или ServiceAccount.
37ADR-0004, CP-PUB-04/CP-PUB-10Publisher выделяет стабильные UUIDv7 agent_id/agent_version_id до Kubernetes apply; Registry независимо наблюдает Kubernetes и никогда не пишется Control Plane (нет ручных create/delete в Registry).
38ADR-0004, CP-KEY-04/CP-KEY-06/CP-NFR-08Сырой virtual-key secret возвращается один раз (one-time oneTimeSecret) только после Gateway-верификации; в PostgreSQL хранится только fingerprint (SHA-256), сам ключ не сохраняется. Agent-owned key доставляется runtime через immutable Kubernetes Secret, а не Studio/Registry/Поток.
39ADR-0004, CP-SH-01…08Размещение политик ключей — sequential byte-bounded allocator (не hash mod N): shard существует только из-за лимита ConfigMap менее 1 MiB, не создаёт owner/права/quota; batch-изменение выполняет ≤1 apply на затронутый shard.
40ADR-0002/0003/0004, CP-NFR-06/CP-REC-08Control Plane и его воркер вне LLM-инференса и A2A-вызова: недоступность останавливает новые операции управления, но не становится синхронной зависимостью уже допущенного data-plane трафика. Reconcile fail-closed, после восстановления догоняет durable desired state без client replay.
41Guardrails: разделение слоёвControl Plane владеет версиями политик и доставкой, но не вызывается на каждый запрос: он один раз доставляет неизменяемый набор в отдельный процесс Guardrails Runtime, который на лету проверяет текст. Недоступность управления не останавливает уже работающие проверки.
42Guardrails: FailClosedТаймаут правила или стадии, недоступность внешнего провайдера и неопределённый ответ LLM-классификатора трактуются как запрет, а не как пропуск. Все три результата (pass/deny/mask) возвращаются с HTTP 200; проверка по HTTP-статусу недостаточна.
43Guardrails: два способа примененияЧерез шлюз (Agentgateway): политика привязывается к модели в Control Plane, шлюз вызывает Runtime как webhook promptGuard с failureMode: FailClosed. Прямой HTTP-вызов: RAG/Memory-адаптер сам вызывает Runtime перед индексацией/записью/выдачей. Автоматической привязки «политика → коллекция/память» нет.
44Guardrails: нет hot-reload и встроенного аудитаСмена политики требует нового процесса/поколения; управляющего метода перезагрузки нет. Встроенного журнала решений нет — только метрики процесса (счётчики проверок, ошибок, срабатываний, длительности), сбрасываемые при перезапуске, без текста и имён политик.
45Guardrails: передача ПД внешним моделямТекст уходит во внешний детектор/классификатор только для правил external_pipeline/llm_classifier; локальные regex/stop_list внешних моделей не используют. Порядок правил не скрывает исходник: все правила видят исходный текст, поэтому маскирование от модели требует отдельной предварительной проверки.

3.1. Компонентная диаграмма

component-diagram.drawio.png

3.1.1. Перечень компонентов

КомпонентТехнологияНазначение
API-шлюз платформыHTTP-ингресс (Gateway API)Единая точка входа для управления и обнаружения; маршрутизирует Control Plane API и Registry API.
Агентский шлюзHTTP-ингресс (Gateway API)Граница A2A-вызова: проверка OIDC, привязка маршрута, удаление identity.
Control Plane APIPython (FastAPI)Управление ресурсами и командами публикации.
Publisher workerPython (worker)Разворачивает workload агента в кластер.
ReconcilersPythonПоддержание desired state ресурсов Control Plane.
Control Plane DBPostgreSQLХранилище ресурсов Control Plane.
Registry APIPython (FastAPI)Обслуживание get/list/search каталога.
Registry Kubernetes ReconcilerPythonRead-only наблюдение за кластером.
Outbox RelayPythonДоставка событий из outbox в шину.
Search IndexerPythonФормирование индекса поиска.
Registry PostgreSQLPostgreSQLХранилище проекции каталога.
Low-code Конструктор(внешний, источник исходного кода)Авторing flow и фиксация FlowVersion.
Low-code RuntimePythonИсполнение неизменяемого flow-артефакта.
KubernetesKubernetes APIРазвёртывание и наблюдение workload'ов.
OCI artifact registryOCIХранение неизменяемых артефактов.
OpenSearchOpenSearchИндекс поиска.
RedpandaRedpanda (совместимо с Kafka)Шина событий.
Authzed / SpiceDBSpiceDBМодель доступа (permissions).
LLM GatewayHTTP (REST)Прокидка запросов к моделям.
Platform IdPOIDC (Keycloak)Выпуск и проверка access-токенов.
RAG APIPython (FastAPI)Общеплатформенный сервис извлечения знаний.
RAG WorkerPython (worker)Асинхронная обработка: чанкинг, эмбеддинги, запись в индекс.
Memory APIPython (FastAPI)Общеплатформенный сервис персистентной памяти.
Memory WorkerPython (worker)Асинхронная обработка записей памяти.
Guardrails RuntimePythonПроверка входных/выходных текстов: pass/deny/mask; stateless, загружает неизменяемый набор политик при старте.

3.1.2. Пояснение компонентов

  • API-шлюз платформы — единая точка входа для управления и обнаружения: маршрутизирует Control Plane API и Agent Registry API. Не владеет их данными.
  • Control Plane — управление платформенными ресурсами (модели, провайдеры, API-ключи) и публикацией агентов. Publisher worker разворачивает workload в кластер; reconcilers поддерживают desired state.
  • Agent Registry — независимый каталог. Read-only наблюдает кластер, хранит проекцию каталога и обслуживает поиск. Ручного CRUD агентов нет.
  • Low-code Конструктор — создание flow и фиксация неизменяемой версии. Провайдер экспортирует версию в Control Plane, но сам workload не разворачивает.
  • Low-code Runtime — исполняет неизменяемый flow-артефакт. Личности вызывающего не получает.
  • Агентский шлюз — единственная граница A2A-вызова: проверяет OIDC, связывает маршрут, удаляет bearer и личность вызывающего перед runtime.
  • Guardrails Runtime — отдельный stateless-процесс проверки текста: загружает неизменяемый набор политик при старте, выполняет секции request/response и выдаёт вердикт pass/deny/mask. Не пишет в RAG, Memory или Kubernetes и не обращается к Control Plane на каждый запрос. Подключается двумя способами: как webhook шлюза (через привязку политики к модели) и прямым HTTP-вызовом из RAG/Memory-адаптера.

3.1.3. Таблица связей

№ИсточникПолучательПротоколОписание
C1Low-code КонструкторAPI-шлюз платформыHTTP (REST)Экспорт версии flow для публикации.
C2API-шлюз платформыControl Plane APIHTTP (REST)Маршрутизация команд управления.
C3API-шлюз платформыRegistry APIHTTP (REST)Маршрутизация запросов каталога.
C4Control Plane APIControl Plane DBSQL (PostgreSQL)Запись ресурсов и операций.
C5Control Plane DBReconcilersSQL (PostgreSQL)Чтение desired state для сопоставления.
C6Control Plane DBPublisher workerSQL (PostgreSQL)Забрать (claim) опубликованную ревизию.
C7Publisher workerOCI artifact registryOCIПубликация неизменяемого артефакта.
C8ReconcilersKubernetesKubernetes APIПрименение desired state ресурсов.
C9Publisher workerKubernetesKubernetes APIРазвёртывание workload'а агента.
C10KubernetesLow-code RuntimeKubernetes APIЗапуск и управление runtime-контейнером.
C11KubernetesRegistry Kubernetes ReconcilerKubernetes APIRead-only наблюдение (LIST/WATCH).
C12Registry Kubernetes ReconcilerRegistry PostgreSQLSQL (PostgreSQL)Запись проекции каталога.
C13Registry APIRegistry PostgreSQLSQL (PostgreSQL)Чтение данных каталога.
C14Registry PostgreSQLOutbox RelaySQL (PostgreSQL)Чтение событий из outbox-таблицы.
C15Outbox RelayRedpandaKafka-совместимый протоколПубликация событий в шину.
C16RedpandaSearch IndexerKafka-совместимый протоколПолучение событий для индексации.
C17Registry PostgreSQLSearch IndexerSQL (PostgreSQL)Чтение данных для формирования индекса.
C18Search IndexerOpenSearchHTTP (REST)Запись записей в индекс.
C19Registry APIOpenSearchHTTP (REST)Выполнение поиска.
C20Registry APIAuthzed / SpiceDBgRPC (SpiceDB API)Проверка прав доступа (permissions).
C21Platform IdPАгентский шлюзOIDCВыпуск и проверка access-токенов.
C22Агентский шлюзLow-code RuntimeHTTP (A2A/MCP)Передача запроса в исполняющий агент.
C23Low-code RuntimeLLM GatewayHTTP (REST)Вызов модели с ключом агента.
C24Low-code КонструкторRAG APIHTTP (REST)Извлечение знаний при проектировании flow.
C25Low-code КонструкторMemory APIHTTP (REST)Работа с памятью при проектировании flow.
C26Low-code RuntimeRAG APIHTTP (REST)Извлечение знаний при исполнении агента.
C27Low-code RuntimeMemory APIHTTP (REST)Работа с памятью при исполнении агента.
C28RAG APIRAG Workerасинхронная очередьПередача задач извлечения на асинхронную обработку.
C29Memory APIMemory Workerасинхронная очередьПередача задач записи памяти на асинхронную обработку.
C30Control Plane APIGuardrails RuntimeHTTP (REST)Доставка неизменяемого набора политик и привязка политики к модели.
C31LLM Gateway (Agentgateway)Guardrails RuntimeHTTP (REST)Проверка запроса (/request) и ответа (/response) модели через webhook promptGuard.
C32RAG APIGuardrails RuntimeHTTP (REST)Прямая проверка текста перед индексацией (request) и выдачей (response).
C33Memory APIGuardrails RuntimeHTTP (REST)Прямая проверка диалога/фактов перед записью (request) и выдачей (response).
C34Guardrails RuntimeОдобренный провайдер / LLM-классификаторHTTPS (REST)Вызов внешнего детектора (external_pipeline) и LLM-классификатора; TLS, без редиректов.

4. Информационная архитектура

4.1. Диаграмма информационных потоков

Диаграмма отражает потоки данных и событий между компонентами платформы. Потоки классифицированы по типам: HTTP/API, OIDC/JWT, Message Queue, Event Stream, File/Artifact, Observation.

information-flow-diagram.drawio.png

4.2. Таблица информационных потоков

№ОткудаКудаТип потокаПротоколОписание
F1Пользователь (Low-code IDE)Агентский шлюз (A2A invocation)HTTPHTTPSВход в Low-code IDE, аутентификация через SSO
F2Пользователь (Каталог)Агентский шлюз (A2A invocation)HTTPHTTPSЗапросы к каталогу агентов: GET /agent-registry, POST /search
F3Потребитель агентаАгентский шлюз (A2A invocation)HTTPHTTPSВызов агента: POST /a2a/... (A2A/JSON, SSE streaming)
F4Агентский шлюз (A2A invocation)KeycloakHTTPHTTPSOIDC-эндпоинты: /.well-known/openid-configuration, /token, /realms/...
F5ПользователиKeycloakOIDCHTTPSАутентификация: Authorization Code Flow (PKCE), Resource Owner Password Credentials
F6KeycloakПользователиJWTJSONAccess Token / ID Token / Refresh Token (Bearer)
F7Агентский шлюз (A2A invocation)Agent Registry APIHTTPHTTP(S)REST API: /api/v1/agents, /api/v1/agents/search, /health
F8Agent Registry APIPostgreSQLSQL CRUDasyncpgCRUD метаданных агентов, версий, workspace-контекста; транзакционная блокировка
F9Agent Registry APISpiceDBAuthZgRPC / HTTPРекурсивная проверка прав (ReBAC): agent#view, agent#invoke, agent#manage
F10Agent Registry APIOpenSearchHTTPHTTP(S)Поиск агентов: семантическое + лексическое совпадение, фильтрация по правам
F11Agent Registry APIRedpandaEvent StreamKafka protocolEvent-driven интеграции: Outbox-паттерн, события создания/обновления/удаления агентов
F12Kubernetes ReconcilerK8s APIWatchKubernetes APIНаблюдение за Service, EndpointSlice, HTTPRoute; периодический full resync (>300 с)
F13Outbox RelayRedpandaEvent RelayKafka protocolПубликация зафиксированных событий из PostgreSQL в Redpanda; retry + DLQ
F14Search IndexerOpenSearchHTTPHTTP(S)Индексация документов агентов; создание нового поколения индекса; переключение псевдонима
F15Search IndexerSpiceDBHTTPHTTP(S)Обновление разрешений в SpiceDB по событиям; cleanup при потере EndpointSlice
F16Автор Low-code агентаLow-code КонструкторHTTPHTTPSВизуальное редактирование Потока: создание, сохранение, проверка схемы
F17Low-code КонструкторKeycloakSSO / OIDCHTTPSЕдиный вход: login → callback → token refresh → logout; Web Origin валидация
F18Low-code КонструкторLow-code RuntimeFile / ArtifactHTTPS / StorageПередача артефактов: source.json (Поток, SHA-256), manifest.json (platform.low-code.publish-manifest/v1)
F19Low-code RuntimeKubernetesK8s ResourceKubernetes APIПубликация Service с регистрационными метками (registrable: true, protocol: a2a, workspace, agent-name, version)
F20Kubernetes APIAgent Registry APIAuto-discoveryKubernetes APIReconciler обнаруживает Service, проверяет метки, ждёт EndpointSlice, загружает agent-card.json
F21Low-code RuntimeАгентский шлюз (A2A invocation)HTTPHTTPSA2A 1.0 вызовы: POST /message, POST /message:stream (SSE); MCP интерфейсы
F22Low-code RuntimeAI GatewayHTTPHTTPSВызов LLM и эмбеддинга: /v1/chat/completions, /v1/embeddings
F23Low-code RuntimeSpiceDBAuthZgRPC / HTTPПроверка прав до Guardrails и FileRef; fail-closed при недоступности
F24Агентский шлюз (A2A invocation)Low-code Конструктор (Frontend)HTTPHTTPSМаршрутизация к визуальному редактору: GET /ide/*
F25Low-code Конструктор (Backend)KeycloakOIDCHTTPSClient scope openid profile email, admin role admin
F26Low-code Конструктор (Backend)AI GatewayHTTPHTTPSLLM вызовы через LiteLLM
F27Low-code КонструкторRAG APISDKHTTP(S)RagClient.query(), RagClient.retrieve_and_pack() — поиск по коллекциям, упаковка контекста
F28Low-code RuntimeRAG APISDKHTTP(S)RagClient.query(), RagClient.retrieve_and_pack() — агент извлекает контекст перед ответом
F29RAG APIPostgreSQLSQL CRUDasyncpgРеестр коллекций, job store (ingest_job), история операций; схема platform_rag
F30RAG APIRabbitMQAMQPAMQP 0-9-1Уведомления о заданиях ingest: exchange rag.ingest, queue rag.ingest.jobs, DLX/DLQ
F31RAG APIOpenSearchHTTPHTTP(S)Гибридный поиск: kNN (vector) + BM25 (text), слияние RRF, фильтрация по tenant_id + ACL
F32RAG APIAI GatewayHTTPHTTPSЭмбеддинг запросов и реранк: bge-m3, text-default-v1, rerank-default-v1
F33RAG APISpiceDBAuthZgRPCПрава на коллекцию: collection.owner, collection.reader, collection.writer; fail-closed
F34RAG WorkerRabbitMQAMQPAMQP 0-9-1Claim заданий: PENDING → RUNNING; prefetch=16, delivery_limit=5
F35RAG WorkerOpenSearchHTTPHTTP(S)Bulk-индексация чанков: embedding (kNN), text (BM25), tenant_id, acl, version
F36RAG WorkerAI GatewayHTTPHTTPSЭмбеддинг документов: bge-m3, dimension=1024, normalize=true
F37RAG WorkerS3 / MinIOHTTPHTTPSStaging канонического JSON: payload_uri, content_hash, idempotency_key
F38Low-code КонструкторMemory APISDKHTTP(S)MemoryClient.add(), MemoryClient.search(), MemoryClient.get_all(), MemoryClient.delete()
F39Low-code RuntimeMemory APISDKHTTP(S)MemoryClient.add(), MemoryClient.search() — агент запоминает и извлекает факты
F40Memory APIPostgreSQLSQL CRUDasyncpgEvent store (memory_event), история изменений записей; схема platform_memory
F41Memory APIRabbitMQAMQPAMQP 0-9-1Уведомления о заданиях add: exchange memory.add, queue memory.add.jobs, DLX/DLQ
F42Memory APIOpenSearchHTTPHTTP(S)Гибридный поиск фактов: kNN (vector) + BM25 (text), фильтрация по скоупу (user_id, agent_id, run_id)
F43Memory APIAI GatewayHTTPHTTPSЭмбеддинг запросов: bge-m3, dimension=1024
F44Memory WorkerRabbitMQAMQPAMQP 0-9-1Claim заданий: PENDING → RUNNING; concurrency=4 (worker.concurrency)
F45Memory WorkerOpenSearchHTTPHTTP(S)Индексация фактов: текст + вектор; алиас mem-facts-<env>
F46Memory WorkerAI GatewayHTTPHTTPSLLM-извлечение фактов: infer: true через AI Gateway; дедупликация по mem0
F47Agent Registry APIFixturesAuto-discoveryKubernetes APIОбнаружение Smoke Agent (sdk-smoke-v1) и Low-code Fixture (lowcode-linguist-v1) через Service метки
F48Администратор / cpctlAPI-шлюз платформы (management/discovery)HTTPHTTPSManagement-запросы Control Plane: GET /control-plane/api/v1/*, POST /control-plane/api/v1/*; OIDC Bearer, Idempotency-Key
F49Low-code КонструкторAPI-шлюз платформы (management/discovery)HTTPHTTPSПубликация low-code агента: POST /control-plane/api/v1/agents с LowCodeSource (uri S3/OCI + sourceSha256)
F50API-шлюз платформы (management/discovery)Control Plane APIHTTPHTTP(S)Маршрутизация под prefix /control-plane; OIDC/аудит; не владеет бизнес-логикой
F51Control Plane APIPostgreSQLSQL CRUDasyncpgDesired state, идентичности, операции, аудит; схема control_plane; application-encrypted значения
F52Control Plane APISpiceDBAuthZgRPCПрямые функциональные права control_plane#publish/#administer/#observe, agent#view/#manage/#diagnose; fail-closed
F53Control Plane APITemporalgRPCgRPCЗапуск durable Operation: одна операция = одна конечная Workflow; порядок, таймеры, retry/cancel
F54Model/Key reconciler (CP)Kubernetes APIK8s ResourceKubernetes APIRender/apply Tier/Provider/Model и шардов политик ключей; derived immutable Secrets; read-only верификация
F55Publisher worker (CP)Kubernetes APIK8s ResourceKubernetes APIСоздание allowlisted workload, Service, HTTPRoute, AgentgatewayPolicy; dedicated Publisher ServiceAccount
F56Publisher worker (CP)AI Gateway / LLM GatewayHTTPHTTPSВерификация кандидатского virtual key (accept/reject probe) в фазе публикации
F57Publisher worker (CP)Agent RegistryRead-onlyHTTP(S)Наблюдение фидбэка candidate_validated/withheld и agent.active.v2; запись в Registry не выполняется
F58Publisher worker (CP)Object StorageFile / ArtifactS3/OCIЧтение low-code артефакта по uri для гейта artifactIntegrity; проверка соответствия sourceSha256
F59Key reconciler (CP)AI Gateway / LLM GatewayHTTPHTTPSВерификация selected-revision выданных виртуальных ключей (Gateway probe); жизненный цикл Agent secret
F60Control Plane APIGuardrails RuntimeHTTPHTTPSДоставка неизменяемого набора политик и привязка политики к модели; Runtime загружает набор при старте, hot-reload отсутствует
F61AI Gateway (Agentgateway)Guardrails RuntimeHTTPHTTPSWebhook promptGuard: проверка запроса модели (/request) до отправки; failureMode: FailClosed; политика задаётся заголовками (policy-id, revision, bundle-digest, content-profile)
F62Guardrails RuntimeAI Gateway (Agentgateway)HTTPHTTPSПроверка ответа модели (/response) перед возвратом клиенту; вердикт pass / deny / mask
F63RAG APIGuardrails RuntimeHTTPHTTPSПрямая проверка текста перед индексацией (/request) и выдачей (/response)
F64Memory APIGuardrails RuntimeHTTPHTTPSПрямая проверка диалога/фактов перед записью (/request) и выдачей (/response)
F65Guardrails RuntimeОдобренный детектор / LLM-классификаторHTTPSHTTPSПравила external_pipeline (протокол detector/v1, всегда deny) и llm_classifier (вердикт allow/deny/uncertain); TLS, без редиректов

4.3. Классификация потоков

ТипПротоколыПримерыХарактер
HTTP / RESTHTTPS, HTTP(S)F1, F2, F3, F7, F10, F21, F24, F31, F42, F48, F49, F50, F57, F60, F61, F62, F63, F64, F65Синхронный запрос-ответ
OIDC / JWTHTTPS, Bearer TokenF5, F6, F17, F25, F48Аутентификация и авторизация
SQL / CRUDasyncpgF8, F29, F40, F51Транзакционная работа с БД
AMQP / QueueAMQP 0-9-1F30, F34, F41, F44Асинхронная обработка заданий
Event StreamKafka protocolF11, F13Event-driven интеграции
AuthZ / ACLgRPC, HTTPF9, F15, F23, F33, F52Рекурсивная проверка прав
Vector SearchHTTP (kNN+BM25)F10, F31, F42Гибридный поиск с RRF
Artifact TransferHTTPS, StorageF18, F58Передача/чтение source.json + manifest.json (F58 — чтение low-code артефакта Publisher worker)
K8s Watch / ResourceKubernetes APIF12, F19, F20, F54, F55Наблюдение и application
LLM / EmbeddingHTTPS (OpenAI-compatible)F22, F26, F32, F36, F43, F46, F56, F59Вызов моделей и верификация ключей через AI Gateway
Durable WorkflowgRPC (Temporal)F53Устойчивые операции управления (Control Plane)
Guardrails CheckHTTPSF61, F62, F63, F64, F65Проверка текста: вердикт pass / deny / mask; доставка политик (F60) — разовая, не на каждый запрос

5. Техническая архитектура

5.1. Сетевое взаимодействие

№ИнициаторСегмент инициатораПолучательСегмент получателяПорт и протоколМежсетевой экранОписание
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-порт — нет данныхЕдинственная целевая публичная граница вызова
3Platform Agent GatewayНет данныхАдаптер авторизации вызоваНет данныхПротокол extAuth и TCP-порт — нет данныхПередаёт проверенную идентичность и привязанный к маршруту AgentVersion
4Адаптер авторизации / Registry APIНет данныхSpiceDBНет данныхAuthzed API; транспорт и TCP-порт — нет данныхАктуальные проверки view, invoke, diagnose, manage
5Platform Agent GatewayНет данныхA2A/MCP RuntimeНет данныхA2A HTTP+JSON или MCP Streamable HTTP поверх принятого mTLS-профиля; TCP-порт — нет данныхПередаётся краткоживущая идентичность, привязанная к цели
6Registry API / Reconciler / Relay / IndexerНет данныхPostgreSQLНет данныхПротокол PostgreSQL; TCP-порт — нет данныхКаноническое состояние каталога, аудит, outbox и задания
7Registry API / Indexer / ReindexНет данныхOpenSearchНет данныхПротокол и TCP-порт — нет данныхПоиск и запись пересоздаваемой проекции
8ReconcilerНет данныхKubernetes APIНет данныхNative Kubernetes API TLS; TCP-порт — нет данныхget/list/watch Service и EndpointSlice, отдельное чтение HTTPRoute
9ReconcilerНет данныхРабочая нагрузка A2A/MCPНет данныхHTTP для Agent Card; MCP Streamable HTTP; TCP-порт выбирается из проверенного ServiceПолучение только ограниченного описания протокола
10Outbox RelayНет данныхRedpandaНет данныхKafka-совместимый протокол, mTLS либо SCRAM+TLS; TCP-порт — нет данныхПубликация CloudEvents, acks=all в промышленном профиле
11Search Indexer / ReindexНет данныхRedpandaНет данныхKafka-совместимый протокол; TCP-порт — нет данныхЧтение изменений независимыми группами/позициями
12Registry API / Search Indexer / ReindexНет данныхAI GatewayНет данныхПротокол и TCP-порт — нет данныхЭмбеддинги запроса и описаний агента
13Low-code RuntimeНет данныхObject StorageНет данныхS3-совместимый либо OCI-профиль; транспорт и TCP-порт — нет данныхЗагрузка неизменяемого Потока и манифеста
14Low-code RuntimeНет данныхVaultНет данныхПротокол и TCP-порт — нет данныхПолучение секретов без записи в Поток
15Low-code RuntimeНет данныхAI Gateway / GuardrailsНет данныхHTTP/типизированный клиент; TCP-порт — нет данныхВызов модели и обязательные проверки
16Low-code RuntimeНет данныхRAG Service / Memory ServiceНет данныхНет данныхСвязь целевая и отложена; в поставке 11.08 отсутствует
17Компоненты платформыНет данныхOTel-коллекторНет данныхOTLP; транспорт и TCP-порт — нет данныхЭкспорт метрик и трасс без чувствительных данных
18Low-code RuntimeНет данныхRAG APIНет данныхHTTP/HTTPS, порт 8090; TCP-порт — нет данныхВызов RAG API: POST /v1/documents:submit, POST /v1/query, POST /v1/collections (отложено до R2; в 11.08 запрещено)
19Worker / Search IndexerНет данныхAI GatewayНет данныхПротокол и TCP-порт — нет данныхЭмбеддинг документов (worker) и описаний агентов (Search Indexer) через AI Gateway; профили задаются конфигурацией
20WorkerНет данныхRabbitMQНет данныхAMQP; TCP-порт — нет данныхПодписка на exchange rag.ingest, очередь rag.ingest.jobs, DLX/DLQ для повторной доставки
21WorkerНет данныхOpenSearchНет данныхПротокол и TCP-порт — нет данныхBulk-индексация чанков в индекс rag-kb-{env}; mapping: knn_vector (BGE-M3, 1024 dim) + BM25
22Worker / APIНет данныхS3 / MinIOНет данныхS3-совместимый протокол; TCP-порт — нет данныхStaging канонического JSON (payload_uri) на время ingest-задания; в локальном Compose допускается s3.dry_run: true
23API / WorkerНет данныхPostgreSQLНет данныхПротокол PostgreSQL; TCP-порт — нет данныхРеестр коллекций, job store platform_rag.ingest_job (источник истины), миграции схемы
24APIНет данныхSpiceDBНет данныхgRPC; TCP-порт — нет данныхПроверка прав на коллекцию: read/write/owner; fail-closed при недоступности (503)
25APIНет данныхOpenSearchНет данныхПротокол и TCP-порт — нет данныхГибридный поиск (kNN + BM25) со слиянием RRF, фильтрация по tenant_id и ACL
26Memory 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)
27Memory APIНет данныхPostgreSQLНет данныхПротокол PostgreSQL; TCP-порт — нет данныхEvent store platform_memory.memory_event, история записей, schema platform_memory
28Memory APIНет данныхRabbitMQНет данныхAMQP; TCP-порт — нет данныхПубликация уведомлений: exchange memory.add, очередь memory.add.jobs, DLX memory.add.dlx, DLQ memory.add.dlq
29Memory APIНет данныхAI GatewayНет данныхПротокол и TCP-порт — нет данныхЭмбеддинг запросов (search) и LLM-извлечение (infer: true)
30Memory WorkerНет данныхRabbitMQНет данныхAMQP; TCP-порт — нет данныхПодписка на memory.add.jobs, claim события; DLQ memory.add.dlq после delivery_limit неудач
31Memory WorkerНет данныхAI GatewayНет данныхПротокол и TCP-порт — нет данныхLLM-извлечение фактов (при infer: true) и эмбеддинг
32Memory Worker / APIНет данныхOpenSearchНет данныхПротокол и TCP-порт — нет данныхГибридный поиск (kNN + BM25) и индексация фактов в алиас mem-facts-{env}; размерность 1024
33Memory WorkerНет данныхPostgreSQLНет данныхПротокол PostgreSQL; TCP-порт — нет данныхОбновление статуса события (RUNNING → SUCCEEDED/FAILED), запись истории ADD/UPDATE/DELETE
34Администратор / cpctl / КонструкторНет данныхPlatform API Gateway (api-gw)Нет данныхHTTPS/TLS; TCP-порт — нет данныхManagement-запросы Control Plane под prefix /control-plane/api/v1; OIDC Bearer, Idempotency-Key
35Platform API Gateway (api-gw)Нет данныхControl Plane APIНет данныхHTTP/HTTPS; TCP-порт — нет данныхМаршрутизация под prefix /control-plane; общий транспорт/аутентификация; бизнес-логика не выполняется в шлюзе
36Control Plane APIНет данныхPostgreSQLНет данныхПротокол PostgreSQL; TCP-порт — нет данныхDesired state, идентичности, операции, аудит, application-encrypted значения; схема control_plane
37Control Plane APIНет данныхSpiceDBНет данныхgRPC; TCP-порт — нет данныхПрямые функциональные права control_plane#publish/#administer/#observe, agent#view/#manage/#diagnose; fail-closed при недоступности (503)
38Control Plane APIНет данныхTemporalНет данныхgRPC; TCP-порт — нет данныхЗапуск durable Operation: порядок Workflow, таймеры, retry/cancel; одна операция = одна конечная Workflow
39Model/Key reconciler (CP)Нет данныхKubernetes APIНет данныхNative Kubernetes API TLS; TCP-порт — нет данныхRender/apply Tier/Provider/Model и шардов политик ключей; derived immutable Secrets; dedicated ServiceAccount, least-privilege RBAC
40Publisher worker (CP)Нет данныхKubernetes APIНет данныхNative Kubernetes API TLS; TCP-порт — нет данныхСоздание allowlisted workload, Service, HTTPRoute, AgentgatewayPolicy; dedicated Publisher ServiceAccount; fail-closed admission
41Publisher worker (CP)Нет данныхAI Gateway / Agent RegistryНет данныхHTTP/HTTPS; TCP-порт — нет данныхВерификация кандидатского virtual key (accept/reject probe) в фазе публикации; read-only наблюдение фидбэка Registry candidate_validated/withheld/agent.active.v2
42Publisher worker (CP)Нет данныхObject StorageНет данныхS3-совместимый либо OCI-профиль; TCP-порт — нет данныхЧтение low-code артефакта по uri для гейта artifactIntegrity; проверка соответствия sourceSha256
43Key reconciler (CP)Нет данныхAI Gateway / LLM GatewayНет данныхHTTP/HTTPS; TCP-порт — нет данныхВерификация selected-revision выданных виртуальных ключей (Gateway probe); жизненный цикл Agent secret
44Control Plane APIНет данныхGuardrails RuntimeНет данныхHTTP/HTTPS; TCP-порт — нет данныхДоставка неизменяемого набора политик (bundle, bundleDigest), привязка политики к модели; content-profile agentgateway-1.5.0-text-webhook-v1
45LLM Gateway (Agentgateway)Нет данныхGuardrails RuntimeНет данныхHTTP/HTTPS; TCP-порт — нет данныхПроверка запроса модели POST /request (webhook promptGuard, failureMode: FailClosed); заголовки x-ap-gr-*, сервисный токен
46Guardrails RuntimeНет данныхLLM Gateway (Agentgateway)Нет данныхHTTP/HTTPS; TCP-порт — нет данныхПроверка ответа модели POST /response; вердикт pass/deny/mask, маска применяется к тексту целиком
47RAG/Memory-адаптерНет данныхGuardrails RuntimeНет данныхHTTP/HTTPS; TCP-порт — нет данныхПрямая проверка текста перед индексацией/записью (request) и выдачей (response); решение применяет вызывающий сервис
48Guardrails RuntimeНет данныхОдобренный провайдер/классификаторНет данныхHTTPS; TCP-порт — нет данныхВызов внешнего детектора (detector/v1) и LLM-классификатора; проверка TLS, без редиректов, согласованный прямой адрес

5.2. Инфраструктурные сервисы

№СервисНазначениеПодтверждённый профиль
1KubernetesРазвёртывание Runtime, наблюдение Service/EndpointSlice, маршруты HTTPRoute и выбор ведущего Registry ReconcilerПромышленная базовая версия v1.36.2; поддерживаемый диапазон Registry >=1.27; один кластер, до 100 пространств имён
2PostgreSQLКанонический каталог Registry, наблюдения, аудит, outbox, фазы и задания18.4.0; промышленный внешний управляемый PostgreSQL >=18; резервные копии/PITR 35 дней
3OpenSearchГибридный поиск и пересоздаваемая векторная проекция3.7.0; BGE-M3, 1024 измерения, HNSW/cosine
4RAG Service (Platform RAG)Реестр коллекций, приём документов (ingest), гибридный поиск с ACL-фильтрацией, статус заданий; HTTP API порт 8090, внешние зависимости: PostgreSQL, RabbitMQ, OpenSearch, S3/MinIO, AI Gateway, SpiceDBplatform-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 канонических документов
5Memory Service (Platform Memory)Единый управляемый слой памяти платформы; async add через RabbitMQ, гибридный поиск памяти в OpenSearch, event store и история в PostgreSQL; HTTP API порт 8091, внешние зависимости: PostgreSQL, RabbitMQ, OpenSearch, AI Gatewayplatform-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
6SpiceDBРешения авторизации и отношенияv1.54.0, fully_consistent для защищённых проверок
6Redpanda CommunityНадёжный поток изменений каталогаBroker v26.1.13, chart 26.1.9; 3 раздела, replication factor 3, min.insync.replicas=2, хранение 14 дней
7AI GatewayЭмбеддинги Registry и вызовы PlatformLLMДля поиска принят псевдоним agent-platform.agent-registry.embedding.bge-m3-v1
8Object StorageНеизменяемые flow и манифесты по хешуШифрование при хранении, запрет перезаписи, S3- и дополнительный OCI-профиль
9VaultСекреты Runtime и привязка идентичности рабочей нагрузкиСекреты не включаются во flow/журналы
10OTel-коллектор / платформа наблюдаемостиМетрики и распределённая трассировкаW3C Trace Context, OpenTelemetry/OTLP
11TemporalПорядок Workflow, таймеры, retry/cancellation, история выполнения; восстановление после сбоя без потери операций; одна конечная Workflow = одна асинхронная OperationВерсия не зафиксирована — нет данных; namespace control-plane
12Guardrails RuntimeStateless-процесс проверки входных/выходных текстов: POST /request, POST /response, GET /readyz, GET /metrics; загружает неизменяемый набор политик при старте, выдаёт pass/deny/mask; fail-closed; внешние вызовы — одобренный детектор/классификаторagent-platform.guardrail-runtime.bundle/v1; API проверки 0.1.0; Python; один входящий сервисный токен; без внутренней очереди (queueSize: 0), при превышении maxConcurrency — 503 overloaded; без hot-reload и встроенного журнала решений

5.3. Аппаратная часть

5.3.1. Серверы и параметры

Примечание: раздел не применяется — все компоненты решения развертываются в кластере Kubernetes. Отдельные серверы и ВМ не требуются.

5.3.2. Платформа контейнеризации

№КонтурПлатформаЯдра CPUОЗУ (Гб)
1QAKubernetes 1.36.x (shared ai-dev)2–44–8
2RCKubernetes 1.36.x (shared ai-dev)2–44–8
3UATKubernetes 1.36.xв зависимости от ожидаемой нагрузкив зависимости от ожидаемой нагрузки
4PreProdKubernetes 1.36.xв зависимости от ожидаемой нагрузкив зависимости от ожидаемой нагрузки
5ProdKubernetes 1.36.xв зависимости от ожидаемой нагрузкив зависимости от ожидаемой нагрузки

5.4. Системное и прикладное программное обеспечение

№ПОВерсияКомментарий
1Python~=3.14.0Язык исполнения low-code Runtime
2lfx1.11.1Ядро исполнения потоков; pinned by digest (форк LangFlow — источник исходного кода)
3OpenTelemetry / OTLPlatest pinnedТрассировка и наблюдаемость
4OIDC Core1.0 + errataАутентификация
5agentgateway1.3.1Платформенный шлюз агентов
6Gateway API1.5.0Kubernetes Gateway API
7BGE-M3—Модель эмбеддингов (1024 dim)
8cpctlнет данныхТонкий CLI-клиент Control Plane API (Go, static binary); не обращается к БД, Kubernetes и worker-очерям напрямую
9Temporalнет данныхОркестрация durable-операций Control Plane; namespace control-plane

5.5. Лицензирование ПО

5.5.1. Python-зависимости (Agent Registry, Control Plane)

КомпонентЛицензионная политикаПримечание
aiokafkaApache-2.0Клиент Kafka (asynchronous)
alembicMITМиграции БД
asyncpgApache-2.0Асинхронный драйвер PostgreSQL
cryptographyApache-2.0 / BSD-3-ClauseКриптография (двойная лицензия)
fastapiMITHTTP-фреймворк
httpxBSD-3-ClauseHTTP-клиент
jsonschemaMITПроверка схем
kubernetes-asyncioApache-2.0Клиент Kubernetes (asynchronous)
opentelemetry-exporter-otlp-proto-grpcApache-2.0Экспорт телеметрии OTLP
opentelemetry-instrumentation-fastapiApache-2.0Инструментация FastAPI
opentelemetry-instrumentation-httpxApache-2.0Инструментация httpx
opentelemetry-sdkApache-2.0SDK OpenTelemetry
pydantic-settingsMITНастройки
pyjwtMITJWT-токены
prometheus-clientApache-2.0Метрики Prometheus
sqlmodelMITORM поверх SQLAlchemy
uvicornBSD-3-ClauseASGI-сервер
temporalioMITSDK Temporal

5.5.2. Python-зависимости (Low-code Runtime)

КомпонентЛицензионная политикаПримечание
a2a-sdkApache-2.0A2A-протокол (server-side)
lfxMITИсполнитель потока Low-code Конструктора; код происходит из исходников Langflow, используется как библиотека
mcpMITMCP SDK (Streamable HTTP)
langchain-openaiMITOpenAI-интеграция LangChain
python-docxMITЧтение .docx
jqMITЯзык запросов JQ
starletteBSD-3-ClauseASGI-фреймворк
uvicorn[standard]BSD-3-ClauseASGI-сервер
pydantic-settingsMITНастройки
python-dotenvBSD-3-ClauseЗагрузка .env
httpxBSD-3-ClauseHTTP-клиент

5.5.3. Frontend (Control Plane UI)

КомпонентЛицензионная политикаПримечание
@radix-ui/* (react-avatar, react-dialog, react-dropdown-menu, react-label, react-select, react-separator, react-slot, react-switch, react-tooltip)MITUI-примитивы
@tanstack/react-queryMITКэширование запросов
class-variance-authorityMITВарианты классов
clsxMITКонкатенация классов
lucide-reactISCИконки
oidc-client-tsMITOIDC-клиент
react, react-domMITReact
react-hook-formMITФормы
react-router-domMITМаршрутизация
sonnerMITУведомления
tailwind-mergeMITСлияние Tailwind-классов
zodMITСхема валидации
@tailwindcss/vite, tailwindcssMITCSS-фреймворк (dev)
@vitejs/plugin-react, viteMITСборщик (dev)
typescript, @types/node, @types/react, @types/react-domApache-2.0 / MITТипизация (dev)

5.5.4. Документация (team-docs, внутренний сайт)

КомпонентЛицензионная политикаПримечание
fumadocs-core, fumadocs-mdx, fumadocs-uiMITФреймворк документации
@tanstack/react-router, @tanstack/react-startMITМаршрутизация (React Start)
@drawio/mcpApache-2.0Экспорт draw.io-диаграмм
@fontsource/ibm-plex-sansOFL-1.1 (Open Font License)Шрифт IBM Plex Sans
@orama/tokenizersApache-2.0Токенизация для поиска
@orama/oramaОсновная библиотека поиска; тип лицензии не определён
beautiful-mermaidMITРендеринг Mermaid-диаграмм
lucide-reactISCИконки
react, react-dom, viteMITБазовый стек
@biomejs/biomeApache-2.0Линтер/форматтер (dev)
@tailwindcss/vite, tailwindcssMITCSS (dev)
pdfjs-distApache-2.0Рендеринг PDF (dev)
puppeteer-coreApache-2.0Экспорт PDF (dev)
typescript, @types/*Apache-2.0 / MITТипизация (dev)

5.5.5. Образы (Dockerfile, базовые)

КомпонентЛицензионная политикаПримечание
python:3.14-slimPSF-2.0 + отдельные условия (Debian)Базовый образ Python
node:22-alpineMIT (Node.js) + Apache-2.0 (Alpine)Сборка фронтенда
nginxinc/nginx-unprivileged:1.29-alpineBSD-2-Clause (nginx) + Apache-2.0 (Alpine)Раздача статического фронта
ghcr.io/astral-sh/uvMITИнструмент сборки Python-окружения

5.5.6. Внешние сервисы и платформы (развертывание, Helm-чарт)

Эти компоненты подключаются как внешние зависимости или развертываются вместе с платформой. Лицензии приведены по версии, зафиксированной в charts/agent-platform/values.yaml.

КомпонентЛицензионная политикаПримечание
agentgateway (v1.4.1)Apache-2.0LLM/MCP/A2A-шлюз (Linux Foundation)
envoyproxy/ratelimit (b8d893f3)Apache-2.0Ограничение скорости (RLS)
redpandadata/redpanda (v26.1.13)BSL-1.1Брокер потоков; Community Edition под Business Source License
Valkey (ключи/счётчики RLS)BSD-3-ClauseХранилище счётчиков, режим Sentinel
KeycloakApache-2.0OIDC-провайдер (внешний)
SpiceDBApache-2.0Система авторизации (внешний)
PostgreSQLPostgreSQL LicenseОсновной БД (внешний, провижинируется средой)
OpenSearchApache-2.0Поиск по каталогу (внешний)

5.5.7. Go-зависимости (cpctl)

КомпонентЛицензионная политикаПримечание
go (1.24.0)BSD-3-ClauseЯзык сборки CLI; внешних Go-библиотек в go.mod нет

5.6. Мониторинг

Наблюдаемость платформы реализована через OpenTelemetry SDK без sidecar.

КомпонентПокрытие трассировкиПримечание
Registry APIAPI-запросы, get/list/searchServer/application spans
Kubernetes ReconcilerReconciliation loopLifecycle phases
Platform Agent GatewayOIDC validation, extAuth→SpiceDB, routingTransport/application spans
Invocation authz adapterLive SpiceDB agent#invokeDownstream spans
Outbox RelayClaim/retry/publishApplication spans
Search IndexerEmbedding, OpenSearch upsertApplication spans
Low-code Agent PodTransport → use case → lfx graph → platform nodesServer/application/downstream spans
Control Plane APIManagement-запросы (Tier/Provider/Model/ApiKey/agents)Покрытие spans — нет данных в спецификации Control Plane
Control Plane workersModel/Key reconciler, Publisher worker, Recovery/operator workerПокрытие spans — нет данных в спецификации Control Plane

Промпт, вывод, извлечённый текст, память, JWT, содержимое файлов и presigned URL по умолчанию не записываются в telemetry.

5.7. Средства журналирования

№ОбъектСобытиеФормат протоколаСредство храненияДоступ к журналуГлубина хранения
1Agent RegistryРегистрация, дерегистрация, деградация, удаление, синхронизация правAuditRecord (actor, action, resource, decision, trace_id, timestamp)Append-only в PostgreSQLЧерез agent#diagnose (требуется permission)По AR-D-18 retention policy
2Platform Agent GatewayАутентификация, авторизация, маршрутизацияOTel spans + structured logOpenSearch / centralized loggingЧерез Trace IDПо AR-D-18 retention policy
3Low-code Agent PodСтарт, readiness, invocation, ошибка нодыOTel spans + structured logOpenSearch / centralized loggingЧерез Trace IDПо AR-D-18 retention policy
4Kubernetes ReconcilerDiscovery, validation, phase transitionRegistry audit + metricsPostgreSQL audit + Prometheus metricsЧерез Registry APIПо AR-D-18 retention policy
5Control PlaneИзменение Tier/Provider/Model/ApiKey, публикация/откат/скрытие агентов, операцииAuditRecord (actor, action, decision, trace); без секретного payloadAppend-only в PostgreSQL, схема control_plane.auditЧерез control_plane#observe (требуется permission)Retention policy — нет данных

6. Решения по информационной безопасности

6.1. Перечень объектов защиты системы

№ОбъектОписание
1Карточки агентов и метаданныеВнутренняя информация: имя, версия, capabilities, endpoint, владелец
2Отношения авторизации (SpiceDB)Конфиденциальная информация: связи principal/service/team ↔ agent
3Флоу-артефактыВнутренняя информация: JSON-поток агента, структура нод
4Пользовательские запросыОграниченные временные данные: не сохраняются
5Bearer-токены (original user JWT)Ограниченные временные данные: не передаются upstream, не сохраняются
6Секреты и учётные данныеОграниченные временные данные: только через Vault/workload identity
7Приватные endpoint workloadОграниченные временные данные: не публикуются, не сохраняются
8Аудит-записиКонфиденциальная информация: actor, action, resource, decision
9Связь кластер–пространство имёнКонфиденциальная информация: deployment configuration
10Учётные данные LLM-провайдеров (Control Plane)Конфиденциальная информация: AES-256-GCM в PostgreSQL, доставка через immutable Kubernetes Secret; сырые креды не покидают зашифрованное хранилище
11Виртуальные ключи LLM (Control Plane)Конфиденциальная информация: в БД только fingerprint (SHA-256); сырой ключ возвращается один раз (oneTimeSecret) и не сохраняется
12Ключ шифрования установки (Control Plane)Конфиденциальная информация: отдельный защищённый Kubernetes Secret; монтируется только в воркерах с правом на учётные данные

6.2. Перечень и политика хранения журналов аудита

6.2.1. События

№СобытиеРешениеКод события в логе
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_failedResult SpiceDB relationship write
6Прямой вызов через Gatewaygateway.invocationAllow / deny / unavailable (typed 401/403/503)
7Проверка авторизации поискаsearch.authz_checkBulkCheckPermission result per candidate
8Управление моделями/ключами (Control Plane)нет данных в спецификацииСоздание/обновление/удаление Tier, Provider, Model, ApiKey; ротация и отзыв ключей; без секретного payload
9Публикация агента (Control Plane)нет данных в спецификацииПубликация/откат/скрытие/повторная валидация; статусы Publication и PublishJob, результат гейтов, trace

6.2.2. Структура лога

№ПоляView logПравила
1actor/callerЧерез Registry API / Trace IDSafe IDs; JWT и credentials запрещены
2actionЧерез Registry API / Trace IDcreate, reject, degrade, remove, sync, invoke
3resourceЧерез Registry API / Trace IDНепрозрачный UUID, тип ресурса (resource kind)
4decisionЧерез Registry API / Trace IDallow, deny, unavailable
5trace_idЧерез OTel / Trace IDW3C Trace Context
6timestampЧерез Registry APIUTC, ISO 8601
7safe metadataЧерез Registry APIEnvironment, time; unbounded external текст запрещён

7. Ролевая модель и права доступа пользователей

7.1. Пользовательская ролевая структура

Модель основана на отношениях SpiceDB, а не на единственном поле роли в JWT. Субъектами могут быть principal, service и team#member. Роли рабочего пространства и конкретного агента назначаются независимо. Право видеть каталог не даёт права вызывать агента, а владение агентом не даёт права вызова или полного управления. Приведённые разрешения относятся к принятой схеме Agent Registry и к модели «ресурс — право» Control Plane; отдельная ролевая модель Low-code IDE не определена.

7.2. Роли

№РольОписание доступных действий и полномочий
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)Наследует только те отношения рабочего пространства или агента, в которых команда явно указана субъектом
9Администратор Control Plane (control_plane#administer)Администрирование политик, профилей обслуживания (Tier), провайдеров, моделей и ключей (ресурс control_plane:control-plane); прямое функциональное отношение, не наследуется из workspace
10Издатель агентов (control_plane#publish)Публикация low-code агентов и управление их версиями (ресурс control_plane:control-plane)
11Наблюдатель Control Plane (control_plane#observe)Наблюдение за статусом операций и публикаций (ресурс control_plane:control-plane)
12Просмотр/управление/диагностика агента (CP: agent#view / agent#manage / agent#diagnose)Доступы к конкретному агенту (agent:{agentId}) в контексте Control Plane; не совпадают с разрешениями вызова в Agent Registry

Соответствие продуктовых персон — Low-code разработчик, платформенный администратор, DevOps и сотрудник службы ИБ — перечисленным отношениям не определено.

7.3. Описание модели служебных ролей

№РольОписаниеПрава
1Служебный субъект SpiceDB (service)Сервис или агент как субъект авторизацииМожет быть участником команды/рабочего пространства и получить viewer/invoker/administrator только через явное отношение
2ServiceAccount Kubernetes ReconcilerНаблюдение Registry в одном кластереget/list/watch для Service и EndpointSlice только через RoleBinding в целевых пространствах имён; без Secret, Pod, logs, exec и write
3Роль координатора ReconcilerВыбор ведущей репликиget/create/update/patch только для именованного Lease в платформенном пространстве имён
4Search IndexerПоддержание поисковой проекцииЧтение своей группы потребителей и PostgreSQL, вызов AI Gateway, запись в OpenSearch;
5Search ReindexПостроение нового поколения индексаЧтение снимка PostgreSQL и собственных позиций Redpanda, вызов AI Gateway, запись и переключение псевдонима OpenSearch;
6Agent Publisher / оператор RuntimeСоздание Kubernetes-ресурсов и размещение артефактаТочные служебные учётные записи и права не определены;
7Publisher ServiceAccount (CP)Создание allowlisted workload, Service, HTTPRoute, AgentgatewayPolicyDedicated ServiceAccount Publisher worker; права Kubernetes API — least-privilege, точный набор RBAC в спецификации не детализирован
8Model/Key reconciler ServiceAccount (CP)Render/apply Tier/Provider/Model и шардов политик ключей; derived immutable SecretsDedicated ServiceAccount, least-privilege RBAC; точный набор прав в спецификации не детализирован

8. Библиотека API

№Метод / интерфейсНаименованиеОписание
1GET /api/v1/agents/{agentId}Получение агентаR1 Registry API; требует view, а поле интерфейса вызова дополнительно требует invoke
2GET /api/v1/agentsСписок агентовR1 Registry API; фильтры workspace, protocol, implementationType, status, owner; серверная фильтрация view, без числа скрытых объектов
3POST /api/v1/agents/searchГибридный поискR1 Registry API; фильтрация кандидатов по invoke; пустой результат — 200 и matches=[]
4GET /health/liveПроверка процесса Registry/RuntimeПроверка работоспособности процесса (liveness); не проверяет ресурсоёмкие зависимости
5GET /health/readyПроверка готовности Registry/RuntimeRegistry проверяет конфигурацию и критические зависимости; Runtime — артефакт, политику, точку входа, Agent Card и клиентов
6GET /api/v1/driftОтчёт о расхожденияхR2, принят только смысл; конечная точка отсутствует в R1 OpenAPI и Runtime
7GET /.well-known/agent-card.jsonAgent Card RuntimeПроверенное описание A2A-интерфейса и фактических возможностей
8POST /message:sendСинхронный A2A-вызовПоддерживается Low-code Runtime; вызывает выбранный граф lfx и возвращает итоговое Message
9POST /message:streamПотоковый A2A-вызовSSE при streaming=true: Task, упорядоченные статусы/артефакты и закрытие после итогового статуса
10A2A task get/listСнимки задачТолько память процесса одной реплики; после перезапуска задача может отсутствовать
11A2A SubscribeToTaskПодписка на текущую задачуСначала текущее Task, затем обновления; для завершённой задачи — UnsupportedOperationError
12MCP initialize + notifications/initializedУстановление MCP-сессииВерсия 2025-11-25
13MCP tools/listПолучение инструментовRuntime возвращает один неизменяемый flow tool; Registry импортирует ограниченный неизменяемый снимок
14MCP tools/callВызов инструментаПоддерживается Runtime; Registry никогда не вызывает его при обнаружении
15POST /control-plane/api/v1/tiersСоздать профиль обслуживания (Tier)Control Plane; право control_plane#administer; мутации асинхронные — 202 Accepted + Operation, применение — через verifiedState
16GET /control-plane/api/v1/modelsСписок моделейControl Plane; право control_plane#administer; модель привязана к провайдеру, gatewayName неизменяем
17POST /control-plane/api/v1/keysВыдать ключ LLM (администратор)Control Plane; право control_plane#administer; один владелец, один Tier, до 256 моделей; oneTimeSecret возвращается один раз
18POST /control-plane/api/v1/keys/{keyId}:revokeОтзыв ключа LLMControl Plane; верификация через Gateway; при тайм-ауте — 504 VerificationTimeout
19PATCH /control-plane/api/v1/key-issuance-policyОбновить политику выдачи ключейControl Plane; singleton; при enabled=true требуются ≥1 Tier и ≥1 Model
20POST /control-plane/api/v1/agentsСоздать агента с начальной версиейControl Plane (Agent Publication); право control_plane#publish; 202 Accepted → Operation
21POST /control-plane/api/v1/agents/{agentId}/versionsСоздать версию агентаControl Plane; 202 Accepted → Operation; llmRequired/modelIds/tierId выводятся сервером
22POST /control-plane/api/v1/agents/{agentId}:rollback / :unpublish / :revalidateОткат / скрытие / повторная валидацияControl Plane; асинхронные; предыдущие наблюдения не наследуются
23GET /control-plane/api/v1/agents/{agentId}/statusСтатус публикацииControl Plane; состояние, ревизия, гейты, наблюдения Registry; без сырых ключей и учётных данных
24GET /control-plane/api/v1/operations/{operationId}Статус операцииControl Plane; статус durable-операции (succeeded/failed/cancelled и фазы)
25GET /control-plane/api/v1/guardrail-policiesСписок политик GuardrailsControl Plane; право control_plane#administer; курсорная пагинация limit 1–50, cursor
26POST /control-plane/api/v1/guardrail-policiesСоздать политику GuardrailsControl Plane; право control_plane#administer; Idempotency-Key; создаёт первую версию; 202 Accepted → Operation
27GET /control-plane/api/v1/guardrail-policies/{id}Чтение последней версииControl Plane; право control_plane#administer; определение + ETag, definitionDigest, ruleCount
28PUT /control-plane/api/v1/guardrail-policies/{id}Заменить (новая ревизия)Control Plane; право control_plane#administer; полный текст, If-Match, Idempotency-Key; status: draft/archived; 202 Accepted → Operation
29GET /control-plane/api/v1/guardrail-policies/{id}/revisions[/{rev}]История ревизийControl Plane; право control_plane#administer; неизменяемые версии; limit 1–50, beforeRevision
30GET /control-plane/api/v1/guardrail-providersКаталог одобренных провайдеровControl Plane; право control_plane#administer; конфигурации внешних проверок в текущей среде
31GET/PUT /control-plane/api/v1/models/{id}/guardrail-bindingПривязка политики к моделиControl Plane; право control_plane#administer; If-Match к модели; состояние pending/applied/failed/disabled/unbound; 202 Accepted → Operation
32POST /request / POST /responseПроверка входа / выходаGuardrails Runtime; сервисный токен + заголовки x-ap-gr-*; вердикт pass/deny/mask возвращается с HTTP 200; техническая ошибка — плоский {code, message, traceId}
33GET /readyz / GET /metricsГотовность / метрикиGuardrails Runtime; readyz — загрузка набора (без аутентификации); metrics — Prometheus-счётчики (сервисный токен); без журнала решений

На этой странице

1. Глоссарий2. Описание архитектуры2.1. Функциональная архитектура2.1.1. Бизнес-данные2.1.2. Категории данных2.1.3. Функциональная диаграмма3. Принятые ключевые архитектурные решения3.1. Компонентная диаграмма3.1.1. Перечень компонентов3.1.2. Пояснение компонентов3.1.3. Таблица связей4. Информационная архитектура4.1. Диаграмма информационных потоков4.2. Таблица информационных потоков4.3. Классификация потоков5. Техническая архитектура5.1. Сетевое взаимодействие5.2. Инфраструктурные сервисы5.3. Аппаратная часть5.3.1. Серверы и параметры5.3.2. Платформа контейнеризации5.4. Системное и прикладное программное обеспечение5.5. Лицензирование ПО5.5.1. Python-зависимости (Agent Registry, Control Plane)5.5.2. Python-зависимости (Low-code Runtime)5.5.3. Frontend (Control Plane UI)5.5.4. Документация (team-docs, внутренний сайт)5.5.5. Образы (Dockerfile, базовые)5.5.6. Внешние сервисы и платформы (развертывание, Helm-чарт)5.5.7. Go-зависимости (cpctl)5.6. Мониторинг5.7. Средства журналирования6. Решения по информационной безопасности6.1. Перечень объектов защиты системы6.2. Перечень и политика хранения журналов аудита6.2.1. События6.2.2. Структура лога7. Ролевая модель и права доступа пользователей7.1. Пользовательская ролевая структура7.2. Роли7.3. Описание модели служебных ролей8. Библиотека API