Agent Architecture

Архитектура агента — это сборка надёжного агентного цикла «своими руками», слой за слоем, а не вызов фреймворка. Тезис лекции: агент на ~90% — классическая инженерия вокруг ~10% «магии» LLM. Понимание низкоуровневой логики (Python + SQLite) важнее, чем фреймворк, прежде чем переходить к LangGraph.

Суть

Если 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