Суть
Если Agent Anatomy отвечает на вопрос «из чего агент состоит» (4 компонента), то архитектура отвечает «как собрать цикл, который выживает и не разоряет». Лекция строит Frontier-агент из ~10 слоёв на чистом Python без «чёрных ящиков».
Зачем это нужно
Демо-агент падает в проде: теряет прогресс при рестарте, зацикливается, верит сам себе, жжёт бюджет. Надёжность даёт не «умная модель», а инженерная обвязка: персистентность, самоисцеление, внешняя верификация, экономика.
Как работает (ключевые слои)
- Master Loop (OODA) — «скучная оркестрация» (Anthropic boring orchestration):
while Trueопрашивает граф задач → берёт готовую → вызывает LLM → обновляет стейт. Управляющий слой намеренно глуп и предсказуем, «магия» — внутри. - Task DAG + персистентность — задачи как направленный ациклический граф; статус мгновенно пишется в SQLite (
agent_state.db). При рестарте (упал Colab/сервер на шаге 49 из 50) агент продолжает с чекпоинта, а не заново. Зависимости в полеdepends(JSON);get_ready_nodes()разблокирует следующий шаг. - Self-Healing — при первой же ошибке API/кода цикл делает retry, ведёт лог
attemptsв SQLite (по нему видно, какие задачи чаще всего валятся). - Thinking Channel — разделение
<thinking>и<answer>(см. Chain of Thought); снижает логические ошибки. - Tool Grounding — агент не «считает в уме», а пишет Python/SQL и выполняет в песочнице (REPL), сверяя мысли с реальностью (см. Tool Calling).
- Architect/Editor split — «умная» дорогая модель проектирует короткий JSON-план, «дешёвая быстрая» печатает сотни строк кода: экономия 50–80% бюджета (см. Agent CostControl).
- Best-of-N + внешний верификатор, Trust Gate (тесты, неизменяемые агентом) — вынесено в Generator Evaluator.
- Prompt caching — «статика вверх, динамика вниз» (см. Prompt Caching).
- Bi-temporal memory — аудит смены убеждений агента (см. Agent Memory).
- MCP Tool Registry — интероперабельность инструментов (см. MCP).
Пример
Master loop (OODA) — намеренно «глупый» управляющий цикл: опрашивает Task DAG, исполняет готовый узел, фиксирует статус в SQLite, на сбое — retry до лимита (self-healing).
def robust_master_loop(dag, max_retries=3):
while True:
ready = dag.get_ready_nodes() # узлы без незавершённых зависимостей
if not ready:
break # всё done либо есть failed/блокировка
node_id, title = ready[0]
if execute_task(node_id, title):
dag.set_status(node_id, "done") # персист в SQLite сразу
elif dag.increment_attempt(node_id) >= max_retries:
dag.set_status(node_id, "failed") # self-healing сдаётся после N попыток
Связано с
- Agent Anatomy — «из чего» (4 компонента) дополняется «как собрать» (слои)
- ReAct — master loop = реализация reasoning-цикла в коде
- Generator Evaluator — слой верификации (Best-of-N, Trust Gate)
- Agent CostControl — Architect/Editor и бюджеты как часть архитектуры
- Plan and Execute — оркестрация/планировщик в этой сборке
Открытые вопросы
- когда «своя» сборка оправдана против LangGraph/CrewAI на проде
- как тестировать self-healing на редких отказах API