Архитектуры агентов: ReAct, использование инструментов, планирование
Перейти к разделу
Почему важна архитектура
У вас может быть самая умная модель в мире, но если обернуть её в плохую архитектуру, получится плохой агент. Архитектура определяет, как агент думает, принимает решения и действует. В этом уроке мы рассмотрим три фундаментальных подхода.
ReAct: рассуждение + действие
ReAct (Reasoning and Acting) — наиболее широко используемая архитектура агентов. Принцип прост: модель чередует мышление и действие. Мысль (мне нужно выяснить...) -> Действие (вызов инструмента) -> Наблюдение (просмотр результата) -> Мысль (на основе результата, что дальше) -> Действие...
Task: Find out what framework the project uses and what dependencies it has
Thought: I need to check the project structure. I'll start by reading package.json.
Action: read_file("package.json")
Observation: { "dependencies": { "next": "16.x", "react": "19.x" ... } }
Thought: It's Next.js 16 with React 19. Let me check tsconfig for more info.
Action: read_file("tsconfig.json")
Observation: { "compilerOptions": { "target": "ES2022" ... } }
Thought: I have enough info. The project uses Next.js 16, React 19, TypeScript.
Answer: The project uses Next.js 16 with React 19 and TypeScript...ReAct — это основа Claude Code, Cursor и большинства современных агентов для программирования. Когда вы видите, как Claude Code читает файлы, думает и пишет код, вы наблюдаете ReAct в действии.
Преимущества ReAct: прозрачное рассуждение (вы видите, почему агент делает то, что делает), подходит для задач, где план меняется на основе результатов, прост в реализации. Недостатки: может зацикливаться (мысль -> действие -> мысль об одном и том же), каждый шаг стоит токенов/денег, медленнее прямых подходов.
Plan and Execute (план и выполнение)
Альтернативный подход: агент сначала создаёт план всех шагов, затем выполняет их. В отличие от ReAct, где агент думает после каждого шага, здесь он думает в начале и выполняет последовательно.
Task: Add authentication to the application
Plan:
1. Analyze existing app structure
2. Install auth library (next-auth)
3. Create auth API route
4. Add login/logout components
5. Protect existing pages
6. Add tests
7. Run build and verify
Execution:
Step 1: read_file("src/app/layout.tsx") -> OK, got the structure
Step 2: run_command("npm install next-auth") -> OK
Step 3: write_file("src/app/api/auth/[...nextauth]/route.ts") -> OK
...Преимущества: более эффективен для задач с чёткой процедурой, меньше шагов мышления = меньше затрат, пользователям легче отслеживать прогресс. Недостатки: план может оказаться неверным при выполнении, менее гибкий, чем ReAct, требует достаточного начального контекста.
Tool Use (использование инструментов, Function Calling)
Использование инструментов — не самостоятельная архитектура, а фундаментальный строительный блок всех архитектур агентов. Модель получает описания доступных инструментов и решает, какой использовать. Ключевой момент: модель НЕ выполняет инструмент — она возвращает структурированный запрос (имя инструмента + параметры), а ваш код его выполняет.
# Tool definition for Claude API
tools = [{
"name": "read_file",
"description": "Reads the contents of a file at the given path",
"input_schema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Path to the file"
}
},
"required": ["path"]
}
}]
# Model decides to use a tool
# and returns: {"name": "read_file", "input": {"path": "src/app/page.tsx"}}
# Your code reads the file and sends the result back to the modelПо состоянию на март 2026 года все три крупных провайдера (Anthropic, OpenAI, Google) предлагают нативное использование инструментов/function calling. API немного отличается, но принцип один: опишите свои инструменты, модель выбирает, какой использовать, а вы его выполняете.
Продвинутые паттерны
Рефлексия
Агент оценивает собственную работу после выполнения задачи и исправляет ошибки. Например: пишет код -> запускает тесты -> тесты падают -> анализирует ошибку -> исправляет код -> запускает тесты снова. Это распространено в агентах для программирования, таких как Claude Code.
Поиск инструментов
Когда у агента есть доступ к сотням инструментов, не все они передаются в контексте. Вместо этого агент сначала ищет релевантные инструменты. Anthropic предлагает Tool Search Tool, который экономит до 85% контекста по сравнению с традиционными подходами.
Параллельные вызовы инструментов
Агент может вызывать несколько инструментов одновременно — например, читать 5 файлов параллельно. Это значительно ускоряет выполнение, особенно для I/O-операций.
Как выбрать архитектуру
- ReAct: когда вы не знаете всех шагов заранее, задача требует исследования или план меняется на основе результатов
- Plan and Execute: когда задача чётко определена, шаги предсказуемы и вы хотите минимизировать затраты
- Гибридный: план в начале, но с возможностью перепланирования после каждого шага — наиболее распространённый подход на практике
При выборе между ReAct и Plan-and-Execute спросите: «Знаю ли я все шаги заранее?» Если да, Plan-and-Execute эффективнее. Если задача требует исследования (например, отладка, изучение кода), ReAct лучше справляется с неизвестным.
У вас есть задача: «Пройдись по всей кодовой базе, найди все TODO-комментарии и создай из них GitHub Issues с назначенным приоритетом и метками.» 1. Какой подход вы выберете — ReAct, Plan and Execute или гибридный? Обоснуйте выбор. 2. Какие инструменты понадобятся агенту? 3. Нарисуйте блок-схему агентного цикла для этой задачи. 4. Где агент может ошибиться и как это обработать?
Подсказка
Эта задача имеет чётко определённые шаги (сканирование -> парсинг -> создание issues), поэтому Plan and Execute — естественный выбор. Но что если встретится TODO без достаточного контекста для определения приоритета? Вот тут и нужна гибкость ReAct.
Возьмите трассировку ReAct из примера урока и расширьте её реалистичным сценарием отказа. Выпишите полную трассировку ReAct (Мысль -> Действие -> Наблюдение) для задачи: «Найдите конфигурацию базы данных в этом проекте и проверьте, настроен ли пул соединений.» Ваша трассировка должна включать: 1. Не менее 5 циклов Мысль-Действие-Наблюдение 2. Хотя бы один тупик (файл не найден, неверное предположение) 3. Восстановление агента из тупика с попыткой другого подхода 4. Финальный ответ с конкретными выводами Запишите полную трассировку в формате из урока.
Подсказка
Реалистичная трассировка начинается с проверки общих файлов конфигурации (settings.py, .env, config/database.yml), затем может потребоваться grep по ключевым словам 'pool', 'connection', 'database'. Включите момент, когда агент сначала смотрит не там.
Возьмите задачу: «Рефакторинг всех API-эндпойнтов в проекте для использования единого формата ответа об ошибке.» Разработайте подход агента с использованием ОБЕИХ архитектур: 1. Версия Plan and Execute: - Напишите полный план (пронумерованные шаги) - Определите, где план может сломаться - Оцените количество вызовов инструментов 2. Версия ReAct: - Напишите первые 3 цикла Мысль-Действие-Наблюдение - Покажите, как агент адаптируется при обнаружении неожиданных паттернов - Оцените количество вызовов инструментов Сравните: какая завершится быстрее? Какая даст лучшие результаты? Какая будет стоить меньше в вызовах API?
Подсказка
Plan-and-Execute будет эффективнее, ЕСЛИ все эндпойнты следуют одному паттерну. Но в реальных кодовых базах эндпойнты часто непоследовательны — одни используют исключения, другие возвращают dict, третьи используют пользовательские классы. ReAct лучше справляется с такой вариативностью.
- ReAct = чередование рассуждений и действий — наиболее гибкий, основа большинства агентов
- Plan and Execute = план заранее, затем выполнение — эффективнее для чётких задач
- Tool use = модель выбирает инструменты, ваш код их выполняет — строительный блок всех архитектур
- Гибридные подходы наиболее распространены на практике — план + возможность перепланирования
- Архитектура определяет качество агента больше, чем интеллект модели
В следующем уроке мы погружаемся в создание агента с Claude API — технику, которая даёт вам явное преимущество. Откройте полный курс и продолжайте прямо сейчас.
2/7 завершено — продолжайте!