Как устроены агенты и их хостинг, нужны ли MCP-серверы, транспорт между агентами, Python vs Golang, векторные vs графовые БД и декомпозиция на сервисы.
| Принцип | Техническое следствие |
|---|---|
| Граница процесса = граница доверия | Каждый агент — отдельный процесс в отдельном namespace. Никакого in-process шаринга между задачами разных заказчиков. |
| Stateless compute, stateful storage | Воркеры не хранят состояние локально. Всё — в Postgres/Redis/MinIO/Qdrant. Воркер можно убить и пересоздать в любой момент. |
| Язык под нагрузку, не под моду | Python — LLM-экосистема и скорость разработки. Go — конкурентность, латентность, демоны. Rust — точечно для hot-path. |
| Один протокол наружу, много внутри | Наружу — gRPC + REST + MCP (для IDE). Внутри — NATS/gRPC. Не плодим зоопарк. |
| Событие — источник истины | Жизненный цикл задачи — лог событий (event sourcing для критичного пути). Состояние — проекция. |
| Деградация, а не отказ | Нет Qdrant → работаем без reuse; нет fine-tuned модели → fallback на base. Любой сервис умеет degraded-режим. |
Каждый домен владеет своими данными (database-per-context). Кросс-доменное чтение — только через API/события, не через чужую БД.
Discovery, SDD-builder, pattern-retriever
Планирование, DAG-движок, dispatcher
Воркеры, sandbox, tool-broker
vLLM, model-router, embeddings, registry
Корпус, reuse-engine, fine-tune
Provisioner, scheduler, autoscaler
Mockarty, evals, review, security
CI/CD, deploy, domain, SSL, CRM
Auth, billing, metrics, audit, tenant
| Домен | Набор сервисов | Сервисы (процессы) | Язык |
|---|---|---|---|
| D1 Intent | intent-suite | discovery-api · sdd-builder · pattern-retriever | Python |
| D2 Orchestration | orchestrator | task-planner · dag-engine · session-manager · dispatcher | Go |
| D3 Agent Exec | agent-runtime | supervisor · worker · tool-broker · sandbox-controller | Go+Py |
| D4 Inference | inference-plane | model-router · vllm-server · embedding-server · kv-cache | Go+vLLM |
| D5 Knowledge | knowledge-suite | corpus-api · embedding-pipeline · reuse-engine · finetune | Go+Py |
| D6 Fleet | fleet-control | provisioner · scheduler · health-monitor · cost-optimizer | Go |
| D7 Quality | quality-suite | Mockarty · eval-runner · review-agent · security-gate | Go+Py |
| D8 Delivery | delivery-suite | ci-orchestrator · deployer · domain-ssl-mgr · crm-connector | Go+Py |
| D9 Platform | platform-core | api-gateway · billing · metrics · audit · tenant · auth | Go |
Мы не держим 1000 живых агентов. Мы держим пул warm-слотов на GPU и запускаем в них агентов под задачи.
Получает SDD-фрагмент + контекст от оркестратора
Стартует в изолированном sandbox на GPU-ноде
Петля LLM + tool-вызовы до завершения подзадачи
Отдаёт артефакт + Evidence, пишет в стор
Либо warm-reuse в пуле для следующей задачи
Долгоживущий демон, один на ноду. Высокая конкурентность (десятки воркеров), низкий overhead, отличный supervision-паттерн.
Эфемерный, под одну подзадачу. Reasoning I/O-bound (ждёт LLM) — GIL не мешает. Вся LLM-экосистема на Python.
| Слой | Технология | Что изолирует |
|---|---|---|
| Процесс | Отдельный PID/namespace | Память, FD между воркерами |
| Syscall | gVisor (runsc) | Нет прямого доступа к ядру ноды |
| FS | OverlayFS + ephemeral layer | Чистый workspace, уничтожается после задачи |
| Сеть | Net namespace + egress-firewall | Только tool-broker и vllm; наружу — по allowlist (R-уровень) |
| Ресурсы | cgroups v2 | CPU/RAM/PID limits per worker |
| Tenant | K8s namespace + sandbox | Задачи разных заказчиков физически не пересекаются |
| Роль агента | Модель | Где живёт |
|---|---|---|
| Orchestrator-планировщик | Qwen 3.6 35B MoE | Отдельная нода 2×A100, не делит с воркерами |
| Coder + Tester (одна задача) | Qwen 3.6 27B | Одна нода — общий warm KV-cache по проекту |
| Reviewer | Qwen 3 Coder 480B | Изолированная нода 4×A100 (независимая валидация) |
| Security | Qwen 3 Coder 480B | Изолирован от Coder (нет доступа к его workspace) |
| Docs / лёгкие | Qwen 3.5 9B | Дешёвые ноды A10, высокая плотность воркеров |
Coder и Tester одной задачи делят префикс контекста — экономия инференса.
Reviewer и Security физически отделены от Coder — независимая оценка без доступа к его окружению.
| Класс | Паттерн | Технология |
|---|---|---|
| Команды/запросы (нужен ответ) | request-response | gRPC |
| События/факты (fan-out) | pub-sub | NATS JetStream |
| Тяжёлые задачи (durable, retry) | work queue | NATS JetStream / RabbitMQ |
| Поток high-volume (логи, метрики) | stream | Kafka |
Control-plane: распределение задач, события жизненного цикла, heartbeat. Лёгкий, низколатентный, request-reply + work-queue + pub-sub в одном.
Data-plane high-throughput: лог reasoning-петель, per-task метрики, датасеты для Корпуса и fine-tune. Долгий retention, реплей.
| Сервис | Почему Python |
|---|---|
| agent-worker | LLM-экосистема, structured output, парсеры tool-calls, скорость итерации reasoning |
| embedding-pipeline | sentence-transformers, чанкинг, нормализация — Python-нативно |
| finetune-orchestrator | LLaMA-Factory / axolotl / PEFT — только Python |
| eval-runner | Eval-фреймворки, property-based генерация, анализ |
| review / security-agent | LLM-логика + AST-анализаторы |
| discovery / sdd-builder | LLM-heavy, быстрая эволюция промптов и шаблонов |
| crm-connector | Интеграции, SDK CRM-систем, не latency-критично |
| Сервис | Почему Go |
|---|---|
| orchestrator | Тысячи параллельных DAG, goroutines |
| agent-supervisor | Долгоживущий демон, supervision десятков воркеров, низкий overhead |
| tool-broker | Hot-path (каждый tool-call), латентность + строгие контракты |
| model-router | Высокий RPS, маршрутизация по моделям, latency-критично |
| fleet-control | Конкурентное управление сотнями нод |
| platform-core | Gateway, billing, metrics, audit — предсказуемая латентность |
| corpus-api / reuse-engine | Hot-path семантического поиска (обёртка над Qdrant) |
| delivery-suite | Docker/K8s SDK — first-class в Go |
| Кандидат | Когда переходить |
|---|---|
| kv-cache-mgr / proxy перед vLLM | Если профайлинг покажет Go-прокси как bottleneck на пиках |
| egress-firewall / sandbox hot-path | Если нужен ультра-низкий overhead на перехват syscall |
| tokenizer-service | Высокочастотная токенизация (HF tokenizers имеют Rust-ядро) |
| Тип | Технология | Что хранит |
|---|---|---|
| Реляционная | PostgreSQL 17 + Patroni | Задачи, биллинг, DAG-состояние, tenant, audit, метаданные. Источник истины. |
| Векторная | Qdrant | Эмбеддинги Корпуса Знаний → семантический reuse |
| Графовая | Apache AGE → Neo4j (H2+) | Граф зависимостей, задача→артефакт→модель→outcome |
| KV / cache | Redis / Valkey | Сессии, кэш инференса, rate-limit, warm-pool registry |
| Object | MinIO / Ceph | Evidence, артефакты, бэкапы, fine-tune датасеты, веса |
| Time-series | Prometheus + VictoriaMetrics | GPU/per-task/бизнес-метрики на лету |
| Event log | Kafka | Лог reasoning-петель → fine-tune и аудит |
Закрывает 80% reuse-кейсов сразу и дёшево:
Когда reuse выходит на структурный уровень:
| Вопрос | Решение | Обоснование |
|---|---|---|
| Движок | vLLM | PagedAttention, continuous batching |
| Расположение | Локально на GPU-ноде | Локальный сокет vs сеть — минимум latency |
| Структурный вывод | grammar-constrained (Outlines) | Валидный JSON для tool-calls без re-prompt |
| KV-cache | Префиксный + warm-pool по проекту | Coder+Tester делят префикс — экономия |
| Fine-tuned | Через Model Registry, A/B на 10% | Контролируемый canary-rollout |
| Состояние | Где | Почему |
|---|---|---|
| Состояние DAG задачи | Postgres | Транзакционность, источник истины |
| Лог событий задачи | Kafka + проекция в Postgres | Event sourcing для L4 multi-day, реплей |
| Сессионный контекст агента | Redis + чекпоинт в MinIO | Быстрый доступ + durable снапшот |
| Warm-pool / slot registry | Redis | Атомарный захват слота |
| Очередь готовых узлов | NATS JetStream | Work-queue с ack, at-least-once |
| Кэш инференса | Redis (хэш→результат, TTL) | Снижение стоимости |
| Метрики | Prometheus + Grafana + VictoriaMetrics |
| Логи | Loki (+ PII-маскирование) |
| Трейсы | Tempo + OpenTelemetry |
| Бизнес | Metrics-engine → Grafana |
| GPU | DCGM exporter → Prometheus |
| control-plane | orchestrator, platform, NATS, PG, Redis |
| gpu-inference | vllm + supervisor + warm-pool |
| gpu-finetune | тренировочные джобы (ночь) |
| data | Qdrant, MinIO, Kafka, VM |
| edge | gateway, Mockarty, browser-pool |
| Агенты | Эфемерные процессы-воркеры (Python) в gVisor; supervisor (Go) на каждой ноде; warm-pool |
| Хостинг | K8s для демонов; кастомный gVisor-spawner для воркеров; vLLM локально на ноде |
| MCP | Да — внешняя граница (IDE, tools заказчика). Нет — внутри (свой gRPC tool-broker) |
| Транспорт | A2A нет → DAG. Control-plane NATS + gRPC, data-plane Kafka |
| Распределение | planner → DAG → dispatcher → fleet-scheduler (bin-pack + affinity + warm-cache) |
| Python | worker, embedding, finetune, eval, review/security, discovery/SDD |
| Golang | orchestrator, supervisor, tool-broker, router, fleet, platform, corpus, delivery |
| Rust | Точечно после H2: kv-cache proxy, tokenizer, sandbox hot-path |
| Графовые БД | H1 — нет. H2 — Apache AGE (в Postgres). H3 — Neo4j при необходимости |
| Векторные БД | Qdrant с H1 — семантический reuse (80% кейсов) |
Каждый выбор — под нагрузку, а не под моду. Граница процесса = граница доверия. Stateless compute, stateful storage.
Дополняет «Архитектуру стартапа v2.1». ESC — оглавление