Image

Почему архитектура менеджер-исполнитель в CrewAI терпит неудачу и как это исправить

Реальный анализ того, почему иерархическая организация CrewAI дает сбои, и практическое решение, которое вы можете реализовать уже сегодня.

Делиться

cca79b276422abeccab0274096eeb0b2

Многоагентная оркестровка — одно из самых перспективных приложений LLM, и CrewAI быстро стал популярной платформой для создания команд агентов. Однако одна из её важнейших функций — иерархический процесс «менеджер-исполнитель» — не работает так, как описано в документации. В реальных рабочих процессах менеджер неэффективно координирует действия агентов; вместо этого CrewAI выполняет задачи последовательно, что приводит к некорректным выводам, ненужным вызовам инструментов и чрезвычайно высокой задержке. Эта проблема обсуждалась на нескольких онлайн-форумах, но пока не нашла однозначного решения.

В этой статье я демонстрирую, почему иерархический процесс CrewAI дает сбои, привожу доказательства из реальных трассировок Langfuse и предлагаю воспроизводимый путь, позволяющий обеспечить надежную работу шаблона «менеджер-работник» с использованием пользовательских подсказок.

Многоагентная оркестровка

Прежде чем углубляться в детали, давайте разберёмся, что означает оркестровка в агентском контексте. Проще говоря, оркестровка — это управление и координация множества взаимозависимых задач в рабочем процессе. Но разве инструменты управления рабочими процессами (например, RPA) не были доступны всегда именно для этого? Так что же изменилось с появлением программ магистратуры по управлению правами (LLM)?

Ответ кроется в способности LLM понимать смысл и намерения инструкций на естественном языке, подобно тому, как это делают люди в команде. Хотя ранние инструменты управления рабочими процессами были основаны на правилах и были жёсткими, а LLM выступали в роли агентов, ожидается, что они смогут понимать намерение запроса пользователя, использовать рассуждения для создания многошагового плана, определять необходимые инструменты, получать входные данные в правильных форматах и синтезировать все различные промежуточные результаты в точном ответе на запрос пользователя. А фреймворки оркестровки призваны направлять LLM, предоставляя соответствующие подсказки для планирования, вызова инструментов, генерации ответа и т. д.

Среди фреймворков оркестровки CrewAI с его определением задач, агентов и команд на основе естественного языка больше всего зависит от способности LLM понимать язык и управлять рабочими процессами. Хотя он не столь детерминирован, как LangGraph (поскольку выходные данные LLM не могут быть полностью детерминированными), он абстрагирует большую часть сложности маршрутизации, обработки ошибок и т.д., превращая её в простые, удобные конструкции с параметрами, которые пользователь может настроить для достижения нужного поведения. Поэтому он является хорошим фреймворком для создания прототипов продуктовыми командами и даже не разработчиками.

За исключением того, что модель «менеджер-работник» не работает так, как задумано…

Для иллюстрации давайте рассмотрим пример использования. А также оценим ответ по следующим критериям:

  1. Качество оркестровки
  2. Качество окончательного ответа
  3. Объяснимость
  4. Задержка и стоимость использования

Вариант использования

Рассмотрим случай, когда команда специалистов службы поддержки клиентов решает технические или платёжные вопросы. При поступлении обращения специалист по сортировке присваивает ему категорию и направляет его специалисту технической или платёжной поддержки для решения. Менеджер службы поддержки клиентов координирует работу команды, делегирует задачи и проверяет качество ответов.

Вместе они будут решать такие вопросы, как:

  1. Почему мой ноутбук перегревается?
  2. Почему в прошлом месяце с меня дважды списали средства?
  3. Мой ноутбук перегревается, и, кроме того, мне приходилось заряжать его дважды в прошлом месяце.
  4. Сумма в моем счете неверна из-за сбоя системы?

Первый запрос является чисто техническим, поэтому менеджер должен вызвать только агента технической поддержки, второй — только для выставления счетов, а третий и четвертый требуют ответов как от технических, так и от агентов по выставлению счетов.

Давайте создадим команду агентов CrewAI и посмотрим, насколько хорошо она работает.

0b9671909e283ad681496d4135ec30c0

Иерархический процесс

Согласно документации CrewAI, «применение иерархического подхода обеспечивает чёткую иерархию в управлении задачами, где агент-менеджер координирует рабочий процесс, делегирует задачи и проверяет результаты для оптимизации и эффективности их выполнения». Кроме того, агент-менеджер может быть создан двумя способами: автоматически CrewAI или явно задан пользователем. В последнем случае вы получаете больше контроля над инструкциями, передаваемыми агенту-менеджеру. Мы попробуем оба способа в нашем случае.

Код CrewAI

Ниже представлен код для данного варианта использования. Я использовал gpt-4o в качестве LLM и Langfuse для обеспечения наблюдаемости. from crewai import Agent, Crew, Process, Task, LLM from dotenv import load_dotenv import os from observa import * # Langfuse trace load_dotenv() verbose = False max_iter = 4 API_VERSION = os.getenv(API_VERSION') # Создайте свой LLM llm_a = LLM( model=»gpt-4o», api_version=API_VERSION, temperature = 0.2, max_tokens = 8000, ) # Определите менеджера agent manager = Agent( role=»Менеджер по поддержке клиентов», goal=»Руководите службой поддержки, чтобы обеспечить своевременное и эффективное решение запросов клиентов. Сначала используйте инструмент для категоризации запроса пользователя, а затем определите дальнейшие шаги. При необходимости обобщайте ответы разных агентов, чтобы предоставить клиенту исчерпывающий ответ.», backstory=( «»» Вы не пытаетесь самостоятельно найти ответ на тикет пользователя {ticket}. Вы делегируете задачи коллег, исходя из следующей логики: сначала определите категорию тикета, используя агента сортировки. Если тикет относится к категории «Оба», всегда сначала назначайте его специалисту технической поддержки, затем специалисту по выставлению счетов, а затем выведите итоговый объединенный ответ. Убедитесь, что итоговый ответ отвечает как на технические, так и на вопросы по выставлению счетов, поднятые в тикете, основываясь на ответах как специалистов технической поддержки, так и специалистов по выставлению счетов. ИНАЧЕ Если тикет относится к категории «Технический», назначьте его специалисту технической поддержки, иначе пропустите этот шаг. Прежде чем продолжить, проанализируйте категорию тикета. Если это «Технический», выведите итоговый ответ. Завершите дальнейшие действия. ИНАЧЕ Если тикет относится к категории «Выставление счетов», назначьте его специалисту по выставлению счетов. Наконец, составьте и предоставьте клиенту итоговый ответ на основе результатов, полученных от назначенных агентов. «»» ), llm = llm_a, allow_delegation=True, verbose=verbose, ) # Определите агента сортировки triage_agent = Agent( role=»Специалист по сортировке запросов», goal=»Разделите запрос пользователя на технические и связанные с выставлением счетов. Если запрос требует ответа на оба вопроса, ответьте «Оба».», backstory=( «Вы опытный эксперт в анализе намерений запросов пользователей. Вы отвечаете одним словом: «Технический», «Выставление счетов» или «Оба».») llm = llm_a, allow_delegation=False, verbose=verbose, ) # Определите агента технической поддержки technical_support_agent = Agent( role=»Специалист технической поддержки», goal=»Быстро и эффективно решать технические проблемы, о которых сообщают клиенты», backstory=( «Вы высококвалифицированный специалист технической поддержки с большим опытом устранения неполадок программного и аппаратного обеспечения. » «Ваша основная обязанность — помогать клиентам решать технические проблемы, обеспечивая их удовлетворенность и бесперебойную работу их продуктов.» ), llm = llm_a, allow_delegation=False, verbose=verbose, ) # Определите агента поддержки по выставлению счетов billing_support_agent = Agent( role=»Специалист по поддержке по выставлению счетов», goal=»Отвечает на запросы клиентов, связанные с выставлением счетов, платежами и управлением счетами», backstory=( «Вы опытный специалист по поддержке по выставлению счетов с опытом обработки запросов клиентов на выставление счетов. » «Ваша главная цель — предоставлять четкую и точную информацию о процессах выставления счетов, решать проблемы с оплатой и помогать в управлении счетами для обеспечения удовлетворенности клиентов.» ), llm = llm_a, allow_delegation=False, verbose=verbose, ) # Определите задачи categorize_tickets = Task( description=»Определите категорию входящего тикета поддержки клиентов: '{ticket} на основе его содержания, чтобы определить, является ли он техническим или связанным с выставлением счетов. Если запрос требует обоих аспектов, ответьте 'Оба'.», expected_output=»Категоризированный тикет с меткой 'Технический' или 'Счета' или 'Оба'. Не будьте многословны, просто ответьте одним словом.», agent=triage_agent, ) resolve_technical_issues = Task( description=»Решить технические проблемы, описанные в тикете: '{ticket}'», expected_output=»Подробные решения для каждой технической проблемы.», agent=technical_support_agent, ) resolve_billing_issues = Task( description=»Решить проблемы с оплатой, описанные в тикете: '{ticket}'», expected_output=»Подробные ответы на каждый запрос, связанный с оплатой.», agent=billing_support_agent, ) # Создайте свою команду с помощью настраиваемого менеджера и иерархического процесса crew_q = Crew( agents=[triage_agent, technical_support_agent, billing_support_agent], tasks=[categorize_tickets, resolve_technical_issues, resolve_billing_issues], # manager_llm = llm_a, # Раскомментируйте для автоматически созданный менеджер manager_agent=manager, # Комментарий для автоматически созданного менеджера process=Process.hierarchical, verbose=verbose, )

Как видно, программа отражает работу команды агентов-людей. В ней есть не только менеджер, агент по сортировке заявок, агент технической поддержки и агент по выставлению счетов, но и объекты CrewAI, такие как «Агент», «Задача» и «Экипаж», самоочевидны по своему значению и легко визуализируются. Ещё одно замечание: в ней очень мало кода на Python, а большая часть рассуждений, планирования и поведения основана на естественном языке, что зависит от способности магистра права извлекать смысл и намерения из языка, а затем рассуждать и планировать достижение цели.

Таким образом, код CrewAI высоко оценивается с точки зрения простоты разработки. Это способ быстрого создания потока с минимальным написанием кода, при этом большая часть тяжёлой работы выполняется фреймворком оркестровки, а не разработчиком.

Насколько хорошо это работает?

Поскольку мы тестируем иерархический процесс, параметр процесса в определении Crew установлен на Process.hierarchical. Мы попробуем различные функции CrewAI, как указано ниже, и оценим производительность:

  1. Агент-менеджер, автоматически созданный CrewAI
  2. Используя нашего персонального менеджера-агента

1. Автоматически созданный менеджер-агент

Входящий запрос: Почему мой ноутбук перегревается?

Вот трассировка Лангфьюза:

ce28b5f4405eaabb8b33ca76e11a7302

Основные наблюдения таковы:

  1. Сначала выводится: «Судя по предоставленному контексту, по-видимому, существует несоответствие между характером проблемы (перегрев ноутбука) и её категоризацией как проблемы с выставлением счёта. Для прояснения связи важно определить, запрашивает ли клиент возврат средств за ноутбук из-за проблемы с перегревом, оспаривает ли он счёт, связанный с покупкой или ремонтом ноутбука, или требует компенсации расходов на ремонт, понесённых в связи с перегревом…» Для запроса, который явно касался технической проблемы, это неподходящий ответ.
  2. Почему это происходит? На левой панели показано, что сначала решение было передано специалисту по сортировке заявок, затем технической поддержке, а затем, как ни странно, и специалисту по биллингу. Это также отражено на следующем графике:
d818a33d20c47c278793fc59973fd339

Присмотревшись внимательнее, мы обнаружили, что специалист по сортировке правильно определил тикет как «Технический», а агент технической поддержки дал отличный ответ следующего содержания:

471858c3fc4abe19f7b418a9f93e0504

Но затем, вместо того, чтобы остановиться и ответить вышеуказанным ответом, менеджер по работе с клиентами обратился к специалисту по поддержке выставления счетов и попытался найти несуществующую проблему с выставлением счетов в чисто техническом запросе пользователя.

3d56afd3695aef9c16e2d2d10798dbcf

В результате ответ агента по выставлению счетов перезаписывал ответ технического агента, а менеджер по работе с персоналом не смог выполнить оптимальную работу по проверке качества окончательного ответа на основе запроса пользователя.

Почему это произошло?

Поскольку в определении задачи Crew я указал задачи как categorize_tickets, resolve_technical_issues, resolve_billing_issues, и хотя процесс должен быть иерархическим, Crew Manager не выполняет никакой оркестровки, а просто последовательно выполняет все задачи.

crew_q = Crew( агенты = [агент_триажа, агент_технической_поддержки, агент_поддержки_выставления_счетов], задачи = [категоризовать_билеты, решать_технические_проблемы, решать_проблемы_выставления_счетов], manager_llm = llm_a, процесс = иерархический процесс, verbose = подробный, )

Если теперь задать запрос, связанный с выставлением счетов, будет казаться, что вы получили правильный ответ просто потому, что resolve_billing_issues — последняя задача в последовательности.

А как насчёт запроса, требующего как технической, так и биллинговой поддержки, например: «Мой ноутбук перегревается, и с меня дважды списали деньги в прошлом месяце?» В этом случае агент по сортировке также правильно классифицирует тип тикета как «Оба», а технический и биллинговый агенты дают правильные ответы на свои запросы, но менеджер не может объединить все ответы в связный ответ на запрос пользователя. Вместо этого в окончательном ответе учитывается только ответ по биллингу, поскольку это последняя задача, вызываемая в последовательности.

f691a7a8100ad0173a516c2393e97e38

Задержка и использование : Как видно на изображении выше, выполнение команды Crew заняло почти 38 секунд и потребовало 15759 токенов. Итоговый результат составил всего около 200 токенов. Остальные токены были потрачены на обдумывание, вызов агента, генерацию промежуточных ответов и т.д. – всё это привело к неудовлетворительному результату в конечном итоге. Результат можно оценить как « плохой ».

Оценка этого подхода

  • Качество оркестровки: Плохое
  • Качество конечного продукта: Низкое
  • Объясняемость: Плохая
  • Задержка и использование: плохое

Но, возможно, вышеприведённый результат обусловлен тем, что мы полагались на встроенный менеджер CrewAI, в котором не было наших специальных инструкций. Поэтому в следующем подходе мы заменим автоматизированный менеджер CrewAI нашим специальным агентом-менеджером, который предоставит подробные инструкции о том, что делать в случае технических, счетовых или обоих тикетов.

2. Использование пользовательского менеджера агента

Наш менеджер поддержки клиентов определён следующими весьма конкретными инструкциями. Обратите внимание, что для этого потребуется провести эксперименты, и стандартный запрос менеджера, подобный упомянутому в документации CrewAI, даст те же ошибочные результаты, что и встроенный менеджер, описанный выше.

role=»Менеджер поддержки клиентов», goal=»Руководство службой поддержки для обеспечения своевременного и эффективного решения запросов клиентов. Используйте инструмент для категоризации запроса пользователя, а затем определите дальнейшие действия. При необходимости обобщайте ответы разных специалистов для предоставления клиенту исчерпывающего ответа.», backstory=( «»» Вы не пытаетесь самостоятельно найти ответ на тикет пользователя {тикет}. Вы делегируете задачи коллегам, основываясь на следующей логике: сначала определите категорию тикета, используя агента сортировки. Если тикет относится к категории «Оба», всегда сначала назначайте его специалисту технической поддержки, затем специалисту по выставлению счетов, а затем выводите окончательный объединенный ответ. Убедитесь, что окончательный ответ отвечает как на технические, так и на вопросы по выставлению счетов, поднятые в тикете, основываясь на ответах как специалистов технической поддержки, так и специалистов по выставлению счетов. ИНАЧЕ Если тикет относится к категории «Технический», назначьте его специалисту технической поддержки, в противном случае пропустите этот шаг. Прежде чем продолжить, проанализируйте категорию тикета. Если она «Технический», вывести окончательный ответ. Прекратить дальнейшие действия. ИНАЧЕ, если тикет относится к категории «Выставление счетов», назначить его специалисту по поддержке выставления счетов. Затем составить и представить клиенту окончательный ответ на основе результатов работы назначенных агентов.

А в определении Crew мы используем пользовательский менеджер вместо встроенного:

crew_q = Crew( агенты = [агент_триажа, агент_технической_поддержки, агент_поддержки_выставления_счетов], задачи = [категоризовать_билеты, решать_технические_проблемы, решать_проблемы_выставления_счетов], # manager_llm = llm_a, manager_agent = менеджер, process = процесс.hierarchical, verbose = подробный, )

Давайте повторим тестовые случаи

Входящий запрос: Почему мой ноутбук перегревается?

След следующий:

a7422a4677d422fb991ef62bb012bbcb
3cf4a9db95d146694f27cefe4df4687d

Самое важное наблюдение заключается в том, что в данном случае технический запрос не был передан специалисту службы поддержки по выставлению счетов. Менеджер правильно выполнил инструкции, классифицировал запрос как технический и прекратил выполнение после того, как специалист службы технической поддержки сгенерировал ответ. Предварительный просмотр ответа показывает, что это хороший ответ на запрос пользователя. Кроме того, задержка составляет 24 секунды, а использование токенов — 10 000.

Вводной запрос: Почему в прошлом месяце с меня дважды списали средства?

Трассировка выглядит следующим образом:

c7e8baec5b035005caf1201b72d068a6
81f3ebff8a0ccb564134b1486c661e86

Как видно, менеджер правильно пропустил вызов специалиста технической поддержки, хотя в определении команды он был до вызова агента по выставлению счетов. Вместо этого был получен качественный ответ только от специалиста по выставлению счетов. Задержка составляет 16 секунд, а использование токенов — всего 7700.

Вводной запрос: Мой ноутбук перегревается, и мне приходилось заряжать его дважды в прошлом месяце?

Трассировка показывает, что менеджер выполнил обе задачи: техническую и биллинговую поддержку и предоставил комбинированный ответ.

46c30143f92f5560eb71fb5b47423035

Предварительный просмотр ответа на рисунке выше не показывает полный ответ, который выглядит следующим образом и объединяет ответы обоих агентов поддержки. Задержка составляет 38 секунд, а использование токенов — 20 000, что соизмеримо с оркестровкой нескольких агентов и сгенерированным подробным ответом. Уважаемый клиент, Благодарим вас за обращение к нам по поводу возникших у вас проблем. Мы искренне приносим извинения за любые причиненные неудобства. Ниже приведены подробные решения для решения ваших проблем: **1. Проблема перегрева ноутбука:** — **Проверьте наличие надлежащей вентиляции**: Убедитесь, что ваш ноутбук находится на твердой ровной поверхности, чтобы обеспечить надлежащую циркуляцию воздуха. Избегайте использования его на мягких поверхностях, таких как кровати или диваны, которые могут заблокировать вентиляционные отверстия. Рассмотрите возможность использования охлаждающей подставки для ноутбука или подставки со встроенными вентиляторами для улучшения циркуляции воздуха. — **Очистите вентиляционные отверстия и вентиляторы ноутбука**: В вентиляционных отверстиях и вентиляторах может скапливаться пыль и мусор, что ограничивает циркуляцию воздуха. Выключите ноутбук, отсоедините его от сети и аккуратно продуйте пыль из вентиляционных отверстий баллоном со сжатым воздухом. Если вам комфортно, можете более тщательно очистить внутренние вентиляторы и компоненты или отнести ноутбук к профессиональному специалисту для внутренней чистки. — **Мониторинг запущенных приложений и процессов**: Откройте диспетчер задач (Windows: Ctrl + Shift + Esc, macOS: «Мониторинг системы») и проверьте наличие процессов, потребляющих много ресурсов процессора или видеокарты. Закройте ненужные приложения и процессы, чтобы снизить нагрузку на систему. — **Обновление драйверов и программного обеспечения**: Обновите операционную систему, драйверы (особенно графические драйверы) и любое другое критически важное программное обеспечение до последних версий. — **Проверка на наличие вредоносных программ и вирусов**: Запустите полное сканирование системы с помощью надежного антивируса, чтобы обнаружить и удалить все вредоносные программы. — **Настройка параметров питания**: Установите режим «Сбалансированный» или «Энергосбережение» (Windows: «Панель управления» > «Параметры электропитания», macOS: «Системные настройки» > «Экономия энергии»). — **Осмотрите оборудование ноутбука**: Если ноутбук по-прежнему перегревается, возможно, проблема связана с оборудованием, например, с неисправным вентилятором или термопастой, требующей замены. Обратитесь к профессиональному специалисту для осмотра и замены термопасты или неисправных компонентов оборудования при необходимости. — **Факторы окружающей среды**: Эксплуатируйте ноутбук в прохладном, хорошо проветриваемом помещении. Избегайте использования ноутбука под прямыми солнечными лучами или вблизи источников тепла. — **Рассмотрите возможность модернизации компонентов**: Если ноутбук старый, рассмотрите возможность модернизации компонентов, таких как оперативная память, или перехода на твердотельный накопитель, чтобы снизить нагрузку на систему и улучшить управление теплом. — **Мониторинг уровней температуры**: Установите инструмент для мониторинга температуры (например, HWMonitor, Core Temp или Macs Fan Control), чтобы отслеживать температуру процессора и видеокарты. Это может помочь определить, постоянно ли ноутбук работает при высоких температурах, и дать представление о том, когда происходит перегрев. Если проблема сохраняется после попытки всех вышеперечисленных решений, обратитесь в службу поддержки производителя ноутбука или к сертифицированному специалисту по ремонту для получения дополнительной помощи. **2. Проблема с дублированием счетов:** — **Проверка данных учетной записи**: Я проверил информацию о вашей учетной записи, чтобы убедиться в ее точности, и подтвердил, что учетная запись активна и соответствует сообщенной проблеме. — **Проверка платежных записей**: При проверке платежных записей за прошлый месяц я обнаружил два одинаковых платежа, обработанных в один и тот же день. Это подтверждает проблему с дублированием счетов. — **Сведения о способе оплаты**: Я проверил способ оплаты, используемый для транзакций, и подтвердил, что оба платежа были обработаны с использованием одного и того же способа оплаты. — **Решение**: — Поскольку дублирование платежа было подтверждено, я инициировал возврат средств за вторую транзакцию. Возврат будет обработан обратно на исходный способ оплаты в течение 5-7 рабочих дней. — Кроме того, я зачислил кредит на ваш счет в качестве жеста доброй воли за причиненные неудобства. — **Связь с клиентами**: Мы сообщим вам по электронной почте или по телефону о решении проблемы, включая сроки возврата средств и размер зачисленного кредита. Приносим искренние извинения за доставленные неудобства. Пожалуйста, свяжитесь с нами, если вам потребуется дополнительная помощь или у вас возникнут вопросы. Мы всегда готовы помочь.

И наш последний, более детальный запрос выглядит следующим образом:

Входящий запрос: Сумма в моем счете неверна из-за системного сбоя?

Трассировка показывает, что запрос был правильно отнесён к категории «Оба», требуя ответа от технических специалистов и специалистов по выставлению счётов, и был предоставлен объединённый ответ. Задержка составила 24 секунды, а использовано токенов — 12 000.

63a3bd126772941bc0a81692ada04f03

Полный ответ приведен здесь: Спасибо, что довели эту проблему до нашего сведения. На основе технического расследования, вот шаги, которые мы предпринимаем для устранения системного сбоя, который привел к неправильной сумме счета: 1. Мы проверили детали неправильной суммы счета и выявили проблему в системе. 2. Наша техническая команда проанализировала системные журналы и пересмотрела логику расчета счета, чтобы определить основную причину ошибки. 3. Для устранения сбоя были внедрены необходимые исправления, и система была тщательно протестирована, чтобы убедиться в устранении проблемы. 4. Был создан исправленный счет, и мы проверили его точность. Кроме того, вот полное решение проблемы выставления счетов, связанной с неправильной суммой счета, вызванной системным сбоем: 1. **Проверка исправленного счета**: Техническая команда устранила системный сбой и сгенерировала исправленный счет. Исправленный счет был лично проверен для обеспечения его точности, включая перекрестную проверку сумм, дат и любых применимых платежей или кредитов. 2. **Сообщение с клиентом**: Мы незамедлительно уведомим вас о решении проблемы. Это сообщение включает в себя: — извинения за неудобства, вызванные некорректным счетом. — подтверждение устранения системного сбоя. — подтверждение того, что исправленный счет был тщательно проверен на точность. — копию исправленного счета для ваших записей. 3. **Дополнительные меры**: чтобы предотвратить подобные проблемы в будущем, техническая команда внедрила меры для обеспечения стабильности системы и точности формирования счетов. 4. **Корректировка счета (если применимо)**: если некорректный счет привел к какой-либо переплате или недоплате, в ваш счет будут внесены необходимые корректировки. Это включает в себя возврат любой переплаты или предоставление четких инструкций по урегулированию любого непогашенного остатка. 5. **Последующее действие**: мы здесь, чтобы помочь вам с любыми дополнительными вопросами или проблемами, касающимися вашего счета или выставления счетов. Пожалуйста, не стесняйтесь обращаться к нам, и мы будем рады помочь. Для вашего удобства мы предоставили вам прямую контактную информацию для дальнейшего общения. Приносим искренние извинения за возможные неудобства и заверяем вас, что мы принимаем меры для предотвращения подобных проблем в будущем. Благодарим вас за понимание и терпение.

Оценка этого подхода

  • Качество оркестровки: Хорошее
  • Качество конечного продукта: Хорошее
  • Объясняемость: Хорошо (мы понимаем, почему произошло то, что произошло)
  • Задержка и использование: удовлетворительные (соразмерно сложности выходных данных)

Еда на вынос

Подводя итог, можно сказать, что иерархический шаблон «менеджер–исполнитель» в CrewAI не работает так, как описано в документации. Базовая логика оркестровки слаба: вместо того, чтобы позволить менеджеру выборочно делегировать задачи, CrewAI выполняет все задачи последовательно, что приводит к некорректному вызову агентов, перезаписи выходных данных и завышенной задержке/использованию токенов. Причина сбоя кроется во внутренней маршрутизации фреймворка: иерархический режим не обеспечивает условное ветвление или истинное делегирование, поэтому окончательный ответ фактически определяется последней выполненной задачей. Решение заключается во внедрении специального агента-менеджера с явными пошаговыми инструкциями: он использует результат сортировки, условно вызывает только необходимые агенты, синтезирует их выходные данные и завершает выполнение в нужной точке, восстанавливая корректную маршрутизацию, улучшая качество выходных данных и значительно оптимизируя стоимость токенов.

Заключение

CrewAI, стремясь сохранить LLM в центре оркестровки, полагается на него в большинстве сложных задач оркестровки, используя пользовательские подсказки в сочетании с подробными подсказками построения, встроенными в фреймворк. В отличие от LangGraph и AutoGen, этот подход жертвует детерминизмом ради удобства разработчика. И иногда приводит к неожиданному поведению критически важных функций, таких как шаблон «менеджер-исполнитель», критически важный для многих реальных сценариев использования. В этой статье предпринята попытка продемонстрировать способ достижения желаемой оркестровки для этого шаблона с помощью тщательного подсказывания. В будущих статьях я планирую рассмотреть больше функций CrewAI, LangGraph и других на предмет их применимости в практических сценариях.

Вы можете использовать CrewAI для разработки интерактивного голосового помощника для хранилища документов и сделать ответы по-настоящему мультимодальными. Подробнее об этом читайте в моих статьях о дизайне GraphRAG и мультимодальном RAG.

Свяжитесь со мной и поделитесь своими комментариями на www.linkedin.com/in/partha-sarkar-lets-talk-AI

Все изображения в этой статье нарисованы мной или сгенерированы с помощью Copilot или Langfuse. Код, которым я делюсь, написан мной.

Источник: towardsdatascience.com

✅ Найденные теги: новости, Почему

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых