Почему один агент всегда проигрывает команде
Представьте, что вы просите одного человека спланировать сложное путешествие: выбрать отели, забронировать билеты, найти рестораны, составить маршрут. Даже самый опытный турагент начнет путаться в деталях. То же самое происходит с single-agent системами на базе LLM.
К февралю 2026 года большинство команд столкнулись с проблемой: чем сложнее задача, тем хуже работает один большой промпт. Контекст перегружается, качество ответов падает, токены горят как бензин.
Я видел десятки проектов, где пытались запихнуть все в один запрос к Claude или GPT-4. Результат? Полурабочие системы, которые требуют постоянной доработки. Пока не нашел лучшего решения, чем мультиагентная архитектура.
Nova 2 Lite и Nova Act: почему эта пара работает
Amazon в 2025 году выпустил Nova 2 Lite - оптимизированную модель для быстрых ответов. А Nova Act заточен под выполнение конкретных действий. Вместе они создают идеальный тандем.
| Модель | Сильные стороны | Когда использовать |
|---|---|---|
| Nova 2 Lite (последняя версия на 09.02.2026) | Быстрая обработка, низкая стоимость, хорошее понимание контекста | Анализ запроса, распределение задач, координация |
| Nova Act (актуальная версия на 09.02.2026) | Выполнение конкретных действий, работа с инструментами | Бронирование, поиск, расчеты, взаимодействие с API |
Зачем разделять? Nova 2 Lite дешевле и быстрее для анализа. Nova Act точнее для действий. Вместо того чтобы платить за мощную модель для простых задач, вы используете каждую по назначению.
Архитектура: как заставить агентов работать вместе
Вот схема, которая работает в продакшене:
# Псевдокод архитектуры
class MultiAgentTravelSystem:
def __init__(self):
self.orchestrator = Nova2LiteAgent() # Дирижер
self.specialists = {
'hotel': NovaActAgent(skills=['booking', 'search']),
'flight': NovaActAgent(skills=['api_integration', 'pricing']),
'itinerary': NovaActAgent(skills=['planning', 'optimization']),
'dining': NovaActAgent(skills=['recommendation', 'reservation'])
}
def process_request(self, user_query):
# 1. Orchestrator анализирует запрос
task_breakdown = self.orchestrator.analyze(user_query)
# 2. Распределение задач между специалистами
results = {}
for task_type, task_details in task_breakdown.items():
if task_type in self.specialists:
results[task_type] = self.specialists[task_type].execute(task_details)
# 3. Сборка финального ответа
return self.orchestrator.synthesize(results)
1 Настройка Bedrock и создание агентов
Сначала подготовьте окружение. Убедитесь, что у вас есть доступ к Nova 2 Lite и Nova Act в Bedrock. Эти модели стали доступны по умолчанию с конца 2025 года.
# Установка последней версии boto3 (актуально на 09.02.2026)
pip install boto3>=1.34.0
# Проверка доступности моделей в вашем регионе
aws bedrock list-foundation-models \
--query "models[?contains(modelId, 'nova')].{id:modelId, status:modelLifecycle.status}" \
--output table
Создайте базовый класс агента. Не повторяйте ошибку многих - не делайте монолитный класс. Каждый агент должен быть независимым модулем.
import boto3
import json
from typing import Dict, Any
class BaseAgent:
def __init__(self, model_id: str):
self.client = boto3.client('bedrock-runtime', region_name='us-east-1')
self.model_id = model_id
def invoke(self, prompt: str, **kwargs) -> Dict[str, Any]:
"""Базовый метод вызова модели"""
body = json.dumps({
"prompt": prompt,
"max_tokens": kwargs.get('max_tokens', 1000),
"temperature": kwargs.get('temperature', 0.7)
})
response = self.client.invoke_model(
modelId=self.model_id,
body=body,
contentType='application/json'
)
return json.loads(response['body'].read())
2 Создание оркестратора на Nova 2 Lite
Оркестратор - самый важный компонент. Он не выполняет работу, а только распределяет. Используйте Nova 2 Lite, потому что она быстрая и дешевая для этой задачи.
class OrchestratorAgent(BaseAgent):
def __init__(self):
# Используем последнюю версию Nova 2 Lite
super().__init__('amazon.nova-2-lite-v1:0')
def analyze_query(self, user_query: str) -> Dict:
"""Анализирует запрос и разбивает на подзадачи"""
prompt = f"""
Ты - дирижер мультиагентной системы. Проанализируй запрос пользователя и определи,
какие типы задач нужно выполнить.
Запрос: {user_query}
Доступные специалисты:
1. hotel_agent - поиск и бронирование отелей
2. flight_agent - поиск и бронирование авиабилетов
3. itinerary_agent - составление маршрута
4. dining_agent - рекомендации по ресторанам
Верни JSON в формате:
{{
"tasks": [
{{"type": "hotel", "description": "..."}},
{{"type": "flight", "description": "..."}}
]
}}
"""
response = self.invoke(prompt, max_tokens=500)
return json.loads(response['generated_text'])
Не делайте промпт слишком сложным для оркестратора. Его задача - только классификация и распределение. Если дать ему слишком много логики, он начнет ошибаться. Держите промпт простым и конкретным.
3 Создание специалистов на Nova Act
Каждый специалист - это Nova Act с конкретными инструментами. Вот пример агента для работы с отелями:
class HotelAgent(BaseAgent):
def __init__(self):
# Используем Nova Act для выполнения действий
super().__init__('amazon.nova-act-v1:0')
self.tools = {
'search_hotels': self._search_hotels,
'check_availability': self._check_availability,
'make_booking': self._make_booking
}
def execute(self, task_description: str) -> Dict:
"""Выполняет задачу по работе с отелями"""
prompt = f"""
Ты - специалист по бронированию отелей. Выполни задачу:
{task_description}
Доступные инструменты:
1. search_hotels - поиск отелей по критериям
2. check_availability - проверка доступности
3. make_booking - создание бронирования
Определи, какие инструменты нужны, и используй их.
"""
# Nova Act умеет работать с инструментами через специальный синтаксис
response = self.invoke(prompt, max_tokens=800)
# Обработка ответа и вызов реальных инструментов
return self._process_tool_calls(response)
def _search_hotels(self, criteria: Dict) -> str:
# Интеграция с реальным API поиска отелей
# Например, через Amazon Location Service
return "Найдено 5 отелей, соответствующих критериям"
def _process_tool_calls(self, response: Dict) -> Dict:
# Парсинг ответа Nova Act и вызов инструментов
# Nova Act возвращает структурированные вызовы инструментов
pass
Обратите внимание: Nova Act специально обучен для работы с инструментами. Он понимает, когда нужно вызвать API, когда выполнить расчет. Это его ключевое преимущество перед обычными моделями.
4 Реализация коммуникации между агентами
Самая сложная часть - заставить агентов общаться без потери контекста. Не используйте сложные протоколы. Простой JSON работает лучше всего.
class CommunicationBus:
"""Шина обмена сообщениями между агентами"""
def __init__(self):
self.messages = []
def send(self, from_agent: str, to_agent: str, message: Dict):
"""Отправка структурированного сообщения"""
self.messages.append({
'timestamp': time.time(),
'from': from_agent,
'to': to_agent,
'content': message,
'type': message.get('type', 'task')
})
def get_messages_for(self, agent_name: str) -> List[Dict]:
"""Получение сообщений для конкретного агента"""
return [
msg for msg in self.messages
if msg['to'] == agent_name
]
# Пример сообщения между агентами
message_template = {
'type': 'data_request', # или 'result', 'error', 'coordination'
'task_id': 'unique_id',
'data_needed': {'dates': '2026-03-15', 'location': 'Paris'},
'priority': 'high',
'deadline': 3600 # секунд
}
Почему JSON, а не какой-нибудь fancy протокол? Потому что все модели понимают JSON. Потому что его легко дебажить. Потому что не нужно подключать дополнительные библиотеки.
Распространенные ошибки и как их избежать
За 2 года работы с мультиагентными системами я собрал коллекцию типичных ошибок:
- Слишком много агентов - 3-5 специалистов достаточно для большинства задач. Если нужно больше, вероятно, архитектура неверна
- Отсутствие таймаутов - агент может "задуматься" на минуту. Ставьте жесткие лимиты: 30 секунд на анализ, 60 секунд на выполнение
- Циклические зависимости - агент A ждет ответ от B, B ждет ответ от A. Добавляйте максимальное количество итераций
- Игнорирование стоимости - Nova 2 Lite в 3 раза дешевле Nova Act. Используйте это: легкие задачи - дешевой модели, тяжелые - дорогой
Совет из реального проекта: добавьте агента-аудитора. Его задача - проверять результаты других агентов. В нашем случае это снизило ошибки на 40%. Подробнее о верификации в статье про MAVEN.
Производительность и стоимость: цифры
Давайте посчитаем на примере системы планирования путешествий:
| Архитектура | Время ответа | Стоимость запроса | Точность |
|---|---|---|---|
| Single agent (Claude 3.5) | 8-12 секунд | $0.015 | 68% |
| Multi-agent (Nova 2 Lite + Nova Act) | 4-6 секунд | $0.008 | 89% |
Почему быстрее? Потому что задачи выполняются параллельно. Пока один агент ищет отели, другой уже ищет билеты. В single-agent системе все делается последовательно.
Когда эта архитектура не подойдет
Мультиагентные системы - не серебряная пуля. Не используйте их, если:
- Задача простая (ответ на вопрос, перевод текста)
- Нет бюджета на разработку (архитектура сложнее в поддержке)
- Требуется минимальная задержка (каждый агент добавляет overhead)
- Нет доступа к разным моделям (нужны хотя бы 2 разные модели)
Для простых задач используйте Coreness или стандартные Bedrock Agents. Не усложняйте без необходимости.
Что дальше? Эволюция мультиагентных систем
К февралю 2026 года я вижу три тренда:
- Специализированные модели - появятся агенты для конкретных доменов (медицина, юриспруденция, финансы)
- Автоматическая оркестрация - системы будут сами определять, сколько агентов нужно и как их распределить
- Гибридные архитектуры - комбинация Nova, Claude и открытых моделей в одной системе
Уже сейчас Amazon тестирует Nova 3 (инсайдерская информация). Она должна лучше работать в мультиагентных сценариях. Следите за обновлениями.
Главный урок: один умный промпт никогда не заменит команду специалистов. Особенно когда каждый специалист использует подходящий инструмент. Nova 2 Lite и Nova Act - это как скальпель и хирургические ножницы. Каждый для своей задачи.
Попробуйте. Сравните результаты. И напишите мне, сколько времени и денег удалось сэкономить.