Генеративный AI
AI Agents: архитектура и провалы
Devin (Cognition, 2024) - первый 'автономный software engineer'. Репортаж: Devin решает реальные GitHub issues. Позже независимые тесты: success rate 13.86% на SWE-Bench. 86% задач не решены. Это не провал - это leading 2024. Агенты мощнее любого отдельного инструмента. И опаснее при неправильной архитектуре.
- GitHub Copilot Workspace - агент для code review и рефакторинга: tool calling + ReAct + multi-step planning поверх Claude и GPT-4. USD 10/мес, 1M+ пользователей
- Perplexity.ai - search agent: RAG + real-time web search + synthesis. Не просто retrieval - агент решает достаточно ли информации или нужен ещё один search
- Cursor Agent Mode - автономное редактирование кодовой базы: file system tools + test runner + terminal = полноценный ReAct loop над реальным кодом
Предварительные знания
ReAct и год агентского хайпа
В 2022 году Shunyu Yao и коллеги из Принстона и Google представили ReAct - паттерн, чередующий рассуждение (reasoning) и действие (acting). До этого модель либо размышляла без действий (chain-of-thought), либо действовала вслепую. ReAct связал их в цикл Thought-Action-Observation и стал фундаментом современных агентов. Весной 2023 года вышел AutoGPT (Toran Bruce Richards, март 2023), следом BabyAGI - оба за дни набрали десятки тысяч звёзд на GitHub. Начался агентский хайп: обещали автономные системы, решающие любую задачу. Реальность 2023 года оказалась жёстче - бесконечные циклы, потерянный контекст, сжигание токенов на недостижимых целях. Именно эти провалы научили индустрию ставить hard limits и human-in-the-loop.
Tool Use: LLM как оркестратор
Schick et al. 2023 - Toolformer: первая LLM обученная вызывать инструменты самостоятельно. До этого - prompt engineering. После - специальная обучающая процедура. GPT-4 function calling (2023): OpenAI обучила модель выводить структурированные вызовы инструментов как первоклассный capability.
Tool use паттерн: LLM получает список инструментов с описаниями (JSON schema), генерирует JSON вызов, код выполняет вызов, результат возвращается обратно в LLM как tool result message. Цикл продолжается до получения final answer. Модель не выполняет код - только принимает решения о вызовах.
Failure modes tool use: hallucinated tool calls (вызывает несуществующие параметры), infinite loops (модель не может завершить задачу), token overflow (история растёт без ограничений), side effects (необратимые действия без confirmation). Cursor, Claude Code, Devin - все сталкивались с этими проблемами в production.
Кто выполняет код инструментов при tool use?
ReAct: рассуждение + действие
Yao et al. 2022 - ReAct (Reasoning + Acting). До ReAct: либо chain-of-thought (думаем, не действуем), либо tool use (действуем, не думаем). ReAct: чередование Thought -> Action -> Observation. Модель объясняет что собирается делать, делает, видит результат, объясняет что это означает.
Plan-and-Execute (AutoGPT style): сначала LLM строит полный план, затем выполняет. Плюс: предсказуемо, можно прервать между шагами. Минус: план устаревает при unexpected results. ReAct адаптивен - план меняется на ходу. Tree-of-Thought: параллельное исследование нескольких ветвей плана, выбор лучшей.
Max iterations - обязательная защита от infinite loop. Если агент за 20 шагов не пришёл к ответу - остановить. Temporal.io Workflow для дурейшей защиты: workflow timeout + step timeout + max_attempts per activity. Без этих ограничений - первый же нестандартный input может запустить бесконечный loop с затратами USD 50/час на API.
Чем ReAct отличается от chain-of-thought prompting?
Memory: что помнит агент
Агент без памяти - amnesia каждый запрос. Четыре типа памяти: in-context (текущее окно, исчезает по завершении), episodic (история сессий в БД), semantic (факты и знания в vector DB), procedural (как делать задачи - через fine-tuning или system prompt).
In-context memory ограничена window size: GPT-4o - 128K токенов, Claude - 200K, Gemini 1.5 Pro - 1M. При длинных сессиях нужен compression: summarize older messages, keep recent verbatim. LangChain ConversationSummaryBufferMemory: автоматически суммирует старые сообщения когда buffer переполнен.
Character.ai обрабатывает 20B+ сообщений в день. Их memory система: episodic memory (последние N сообщений), summary of older sessions, entity memory (что агент знает о пользователе). Проблема: memory отравление - пользователи намеренно вводят ложные факты в память агента. Нужна validation и source trust scoring.
Почему нужен ConversationSummaryBuffer при длинных сессиях?
Reflection и Self-Critique: агент проверяет себя
Shinn et al. 2023 - Reflexion: LLM оценивает свои предыдущие попытки и улучшает на основе critique. Не просто 'попробуй снова', а 'проанализируй почему не получилось и как исправить'. На HumanEval benchmark (code generation): GPT-4 + Reflexion 91.0% vs GPT-4 alone 67.0%.
Critic Loop паттерн: агент генерирует ответ, отдельный LLM вызов оценивает ('critique'), оригинальный агент улучшает. Можно использовать одну и ту же модель в разных ролях. Constitutional AI (Anthropic) использует похожий принцип: модель критикует свои ответы относительно набора принципов.
Multi-agent: разные агенты специализируются на разных задачах. Orchestrator агент делегирует. Эксперт-агент выполняет. Critic-агент проверяет. CrewAI, AutoGen, LangGraph - фреймворки для multi-agent систем. Главная проблема: error propagation - ошибка одного агента заражает весь pipeline. Checkpoint и human-in-the-loop для критичных шагов.
Агент с достаточно умной моделью выполнит любую задачу без ограничений итераций
Любой агент без hard limits может уйти в бесконечный loop или израсходовать весь token budget. Ограничения - не костыль, а архитектурный принцип
GPT-4, Claude, Gemini - все могут залупиться при неоднозначных задачах или недостижимых целях. AutoGPT 2023 стал мемом именно из-за бесконечных loops. Temporal Workflow с step limits, max_tokens per session, human checkpoint на необратимых действиях - необходимая инфраструктура для production агентов
Почему Reflexion значительно улучшает code generation benchmark?
Связанные темы
Агенты строятся поверх function calling, RAG и structured output:
- Function Calling — Tool use основан на structured function calling
- RAG — RAG как основной knowledge tool для агентов
- Structured Output — Надёжный JSON для tool calls
Ключевые идеи
- Tool use: LLM оркестрирует, человеческий код выполняет. Failure modes: hallucinated calls, loops
- ReAct: Thought -> Action -> Observation цикл. Max iterations обязательны против infinite loops
- Memory: in-context (window), episodic (DB), semantic (vector DB), procedural (prompt/fine-tune)
- Reflection: critique + retry итеративно. Reflexion +23% на HumanEval без изменения модели
Вопросы для размышления
- Как решить проблему необратимых действий (удаление файлов, отправка email) в автономном агенте?
- При каком уровне сложности задачи multi-agent система эффективнее single agent с reflection?
- Как не допустить отравления памяти агента пользователем, инжектирующим ложные факты?
Связанные уроки
- gai-14 — Function calling - основа tool use для агентов
- gai-16 — RAG - ключевой инструмент для агентской памяти
- gai-13 — Structured output для надёжного tool calling
- dl-08 — Трансформеры - архитектура под капотом агента
- ml-01-intro