Узнайте, когда один AI-агент справляется лучше, а когда нужно разделять задачи. Практические паттерны с кодом на Python для масштабирования.
Вы уже знаете, что AI-агент — это система, которая самостоятельно выполняет задачу за вас. Но как заставить одного агента работать в цикле? И когда разумно разбить работу на несколько агентов? В этой статье на примерах кода на Python вы разберётесь с run-циклом, узнаете, когда хватает одного агента, а когда нужно внедрять менеджера или децентрализованные передачи.
Каждому агенту нужно понятие «запуска». Обычно это цикл: модель выполняется, возможно вызывает инструмент, смотрит результат и запускается снова, пока не достигнуто условие выхода. Типичные условия выхода: финальный структурированный вывод, ошибка или превышение максимального числа итераций.
Этот while-цикл — сердце любого агента. Он верен и для одного агента, и для сети агентов. Единственное, что меняется в больших системах — кто получает управление на каждом шаге.
# Пример run-цикла на псевдокоде
while not exit_condition:
action = model.think(context)
if action.tool_call:
result = execute_tool(action.tool_name, action.params)
context.append(result)
else:
exit_condition = True
final_response = action.responseВот совет, который избавляет от большинства проблем: выжмите максимум из одного агента, прежде чем плодить много. Один агент справляется больше, чем вы ожидаете. Нужна новая возможность? Добавьте инструмент. Каждый инструмент расширяет возможности агента без необходимости координировать несколько моделей, управлять передачами или отлаживать «кто что сделал».
Один агент, один цикл, растущий набор инструментов. Это упрощает оценку и сопровождение — а это важнее, чем кажется, когда вы отлаживаете в 11 вечера.
Хитрый приём для управления сложностью без разделения: используйте шаблон промпта с переменными вместо кучи отдельных промптов.
# Шаблон промпта с переменными
prompt_template = """
Вы — агент колл-центра компании {{company}}. Вы общаетесь с
{{user_name}}, клиентом со стажем {{tenure}}. Поприветствуйте его,
поблагодарите за лояльность и помогите с его вопросом.
"""
# Использование
prompt = prompt_template.format(company="Ромашка", user_name="Иван", tenure="3 года")Новый сценарий? Обновите переменные, а не весь воркфлоу.
Разделяйте, когда один агент начинает «прогибаться». Два симптома:
Когда вы решите разделить, есть два основных паттерна.
Один центральный агент (менеджер) координирует специалистов, вызывая их как инструменты. Специалисты делают свою работу и возвращают результаты. Менеджер остаётся у руля и собирает всё в единый ответ. Это подходит, когда нужен единый голос в общении с пользователем.
from agents import Agent
# Специализированные агенты
spanish_agent = Agent(name="spanish_agent", instructions="Переводи на испанский.")
french_agent = Agent(name="french_agent", instructions="Переводи на французский.")
italian_agent = Agent(name="italian_agent", instructions="Переводи на итальянский.")
# Агент-менеджер
manager_agent = Agent(
name="manager_agent",
instructions="Ты — переводчик. Используй предоставленные инструменты для перевода. Если запрошено несколько переводов, вызывай соответствующие инструменты.",
tools=[
spanish_agent.as_tool(tool_name="translate_to_spanish", tool_description="Перевести на испанский"),
french_agent.as_tool(tool_name="translate_to_french", tool_description="Перевести на французский"),
italian_agent.as_tool(tool_name="translate_to_italian", tool_description="Перевести на итальянский"),
],
)Здесь нет начальника. Агенты — равноправные участники, и один может передать весь разговор другому. Передача — однонаправленная: новый агент принимает управление и текущее состояние, а исходный выходит из игры. Это идеально для триажа: первый агент выясняет, что нужно пользователю, и передаёт его нужному специалисту.
# Агенты-специалисты
technical_support_agent = Agent(name="tech_support", instructions="Помогай с техническими проблемами.")
sales_assistant_agent = Agent(name="sales_assistant", instructions="Консультируй по продажам.")
order_management_agent = Agent(name="order_management", instructions="Управляй заказами.")
# Триажный агент
triage_agent = Agent(
name="Triage Agent",
instructions="Ты — первая точка контакта. Оцени запрос клиента и направь его нужному специалисту.",
handoffs=[
technical_support_agent,
sales_assistant_agent,
order_management_agent,
],
)Что бы вы ни выбрали, правило остаётся: компоненты должны быть гибкими, составляемыми и управляться чёткими промптами.
Сейчас вы можете запустить одного агента в цикле и знаете два способа масштабирования до многих, когда одного недостаточно. Вот что делать прямо сейчас:
В следующей части мы рассмотрим защитные барьеры: защиту от инъекций промптов, PII и когда нужно привлекать человека. Оставайтесь с нами!
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →