Agents & Processes
Agent в OPORA — это не ИИ-модель сама по себе, это контейнер workflow’а + metadata + лимиты. Одна и та же LLM может обслуживать десять разных агентов, которые друг о друге не знают.
Anatomy агента
Section titled “Anatomy агента”| Поле | Что значит |
|---|---|
name | Human-readable имя (показывается в списке) |
goal | Описание цели одной строкой; используется LLM-нодами если они «понимают контекст» |
role | operations / sales / support / analytics / custom — влияет на default’ы template’ов |
processId | Один процесс per агент (1:1, enforce’ится на уровне схемы) |
templateId | Если агент создан из template’а — ссылка сохраняется для upgrade’ов |
workingHours | Cron + timezone + enforcement (hard = блокировать runs вне часов; soft = только warning) |
costCap | Опциональный месячный лимит в рублях/токенах |
kpiGranularity | none / per_agent / per_channel — уровень детализации KPI’ек |
ownerUserId | Кто создал. owner + admin’ы space’а могут править |
Process = DAG
Section titled “Process = DAG”Process — это directed acyclic graph нод:
trigger (ровно один на процесс) ↓processing nodes (0..N — можно fan-out'ить) ↓terminal nodes (output — отдача во внешний мир)Рёбра могут быть условными (condition на expression-DSL’е OPORA):
ai.classify ├─ output == "hot" → telegram.message.send (to: manager) └─ output == "cold" → email.send (template: drip campaign)Fan-out через control.foreach порождает паралельные run-branches,
которые потом join’ятся.
Revisions = git для workflow’ов
Section titled “Revisions = git для workflow’ов”Каждое изменение в editor’е — это revision. Revisions:
- immutable (revision не меняется после сохранения)
- numbered sequentially (1, 2, 3…)
- хранят полный snapshot графа (не diff)
- подписаны
createdBy+ timestamp’ом
Deployment — это связка revision + environment (sandbox /
production). Production-deployment — это то, что runs’ы фактически
используют.
Пример lifecycle’а
Section titled “Пример lifecycle’а”- Revision 1: вы создали workflow
webhook → amocrm.lead.create. Published. Production uses revision 1. - Вы поправили workflow, добавили
ai.classifyмежду ними. Сохранили — revision 2 создалась, но не активна. - Потестировали revision 2 в sandbox-environment’е — окей.
- Publish revision 2 → production deployment переключается. Новые webhook’и идут через revision 2, старые running runs продолжают на revision 1 (как создались).
- Что-то сломалось? Rollback → revision 1 снова production. Новые runs идут через revision 1. Ничего в rerun’е не нужно.
Template resolver
Section titled “Template resolver”Ноды ссылаются на предыдущие через template-syntax:
{{trigger.<field>}} — payload trigger-ноды{{<nodeKey>.<path>}} — output ноды с данным ключом{{secrets.<secretName>}} — plain-text значение secret'а (runtime-only){{agent.name}} — metadata агента{{run.id}} — id текущего run'аПример:
yookassa.payment.create description = "Заказ #{{trigger.order_id}} от {{trigger.customer_name}}" metadata = {order_id: "{{trigger.order_id}}"}Resolver работает на runtime’е, не на publish’е — если
trigger.order_id отсутствует, нода упадёт с понятной ошибкой
UNRESOLVED_TEMPLATE, а не тихо пройдёт с пустой строкой.
Полная спецификация resolver’а — в AGENTS.md § 8.11.
Template catalog
Section titled “Template catalog”Template — это готовый процесс без конкретных secrets / connection’ов. При instantiate’е:
- Template выбирается из catalog’а (
GET /templates) - Wizard просит заполнить
configSchema(для lead-qualifier’а — amoCRM-connection, для weekly-digest’а — Telegram-chat_id и cron) - OPORA создаёт agent + process + revision с уже подставленными configSchema-значениями
- Agent готов к publish’у
Template KPI-цели наследуются с дефолтами; operator уточняет позже.
Blank-agent path
Section titled “Blank-agent path”Если template не подходит — Start from blank:
- Имя + goal
- OPORA создаёт агента с пустым процессом (один
webhook.triggerпо умолчанию) - Переходите в editor и собираете workflow с нуля
Template нельзя «добавить позже» — если нужно переключиться, проще создать второго агента из template’а и удалить первого.
Лимиты
Section titled “Лимиты”- 1 agent per user-role-level в free tier; unlimited в pro
- 1 process per agent (ну вот серьёзно 1, не 0 и не 2)
- Revisions — unlimited, но storage-quota space’а суммарная
- costCap опционален; при срабатывании агент приостанавливается до следующего billing-cycle’а или увеличения cap’а
- workingHours — hard-enforcement блокирует starts вне часов (running run’ы доезжают до конца даже если вышли за границу)
Связанное
Section titled “Связанное”- Runs & Traces — что происходит когда process исполняется
- KPIs — как агент считает собственные метрики
CreateAgentWizardв коде — если хотите посмотреть изнутри