Гайд · TNWS AI

Как передать результат одной задачи CrewAI в другую через context

4 мин—

Две последовательные задачи CrewAI с context: извлечение кода, формирование ответа, конкретный эталон и проверка отсутствия посторонних данных.

Задача и применимость

Актуальный поисковый запрос: «как передать результат Task в следующую задачу CrewAI context». Передать второй задаче результат первой явно, а не надеяться на неявную общую память. В официальной документации Task.context принимает список других задач: зависимая задача ждёт их завершения и получает результаты. В последовательном Crew порядок остаётся видимым. Контекст может содержать ошибку первой задачи, поэтому второй этап не должен считаться независимой проверкой истины. Материал сверён 26 сентября 2026 года с официальной документацией CrewAI 1.15.22. Примеры предназначены для Python 3.10+; закрепите версию пакета, потому что сигнатуры и поведение развиваются. Все коды, статусы и даты в примерах вымышлены.

Пошаговая настройка

  1. Создайте извлекающую задачу с узким expected_output — только код записи.
  2. Создайте вторую задачу и укажите context=[extract_task].
  3. Соберите Crew с Process.sequential в том же порядке.
  4. Проверьте отдельно результат первой задачи и финальный текст второй.

Перед запуском установите CrewAI по официальной инструкции. Для примеров с агентом задайте CREWAI_MODEL и учётные данные провайдера через переменные среды; доступность модели зависит от вашего аккаунта. Flow-примеры не требуют LLM и должны сначала проходить как детерминированные тесты. Не включайте действующие ключи и реальные клиентские данные в исходник или prompt.

Готовый шаблон

import os
from crewai import Agent, Crew, Process, Task

agent = Agent(role="Оператор", goal="Работать только с переданными фактами",
              backstory="Вы не заменяете и не достраиваете идентификаторы.",
              llm=os.environ["CREWAI_MODEL"], max_iter=3)
extract_task = Task(description="Извлеки только код из текста: Заявка R-7 готова.",
                    expected_output="Ровно один код вида R-число", agent=agent)
reply_task = Task(description="Составь фразу 'Статус <код> проверен'.",
                  expected_output="Одно предложение с кодом из контекста",
                  agent=agent, context=[extract_task])
crew = Crew(agents=[agent], tasks=[extract_task, reply_task], process=Process.sequential)
print(crew.kickoff())

Конкретный вход и ожидаемый результат

Исходный вход — «Заявка R-7 готова». Первый выход должен содержать только R-7. Второй ожидаемый выход — фраза со смыслом «Статус R-7 проверен». Если первый этап ошибочно вернул R-70, второй, вероятно, распространит ошибку; поэтому сохраняйте и оценивайте промежуточный TaskOutput, а не только окончательную прозу.

Как фактически проверить

Подготовьте таблицу из кодов R-7, A-204 и строки без кода. Для первых двух фиксируйте буквальный эталон; для третьей требуйте явное отсутствие. Проверяйте, что второй этап не получает исходные персональные сведения, если ему нужен только код. Такое минимальное прокидывание контекста снижает риск лишней передачи данных и облегчает диагностику.

Проверяйте не только итоговую строку, но и путь исполнения: входные данные, вызванный метод или Task, промежуточный результат и финальное преобразование. Успешный Python-процесс не доказывает правильность фактов LLM. Для агентных сценариев сделайте не менее трёх прогонов фиксированной модели и укажите долю прохождения критериев, а не выбирайте лучший ответ вручную.

Критерии приёмки

  1. Python-код проходит синтаксическую проверку, а зависимости и версия зафиксированы.
  2. Положительный пример даёт заранее описанный результат без новых фактов.
  3. Отрицательный пример завершается явным отказом либо контролируемой веткой.
  4. Ни один шаг не получает больше данных или полномочий, чем требуется задаче.
  5. После обновления CrewAI или модели тот же набор выполняется повторно.

Протокол воспроизводимости

Сохраните дату, версию CrewAI, версию Python, идентификатор модели для agent-примеров и обезличенный вход. Для Flow зафиксируйте порядок событий и финальный state; для Task — TaskOutput, число попыток и результат guardrail. Не записывайте секреты, системные prompts и персональные данные без необходимости. Если ошибка плавающая, классифицируйте её как неверный маршрут, неверный аргумент, исключение Python или неподтверждённую генерацию — эти случаи исправляются по-разному.

Регрессионный набор

Не ограничивайтесь одним удачным примером. Добавьте стандартный вход, отсутствующее обязательное поле, похожий идентификатор, пустую строку и слишком длинное значение. Для каждого заранее укажите ожидаемое событие, состояние и финальный результат. В агентных задачах отдельно оценивайте правильность фактов и соблюдение формата; красивый текст не компенсирует неверный код. В Flow проверяйте, какой метод действительно вызван и сколько раз: одинаковая финальная строка может скрыть ошибочный маршрут. При изменении модели не переносите прежние показатели автоматически. При изменении схемы state предусмотрите миграцию сохранённых записей. Ошибка одного теста должна блокировать автоматическое внешнее действие, но не обязана останавливать независимые процессы системы. После исправления обязательно повторите весь набор, а не только упавший случай. Такой набор превращает статью в повторяемую инструкцию, а не в демонстрацию единственного счастливого пути.

Типичные ошибки и чего не делать

  • Не используйте context как замену валидации первого результата.
  • Не передавайте второй задаче весь документ, когда нужен один идентификатор.
  • Не меняйте порядок задач, не обновив зависимости.

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

FAQ

Что принимает context?

Список задач, чьи результаты нужны текущей задаче.

Ждёт ли зависимая задача результат?

Да, официальный пример указывает, что она ждёт контекстные задачи.

Проверяет ли context истинность данных?

Нет, он передаёт результат, включая возможную ошибку.

Официальные источники

Частые вопросы

Что принимает context?

Список задач, чьи результаты нужны текущей задаче.

Ждёт ли зависимая задача результат?

Да, официальный пример указывает, что она ждёт контекстные задачи.

Проверяет ли context истинность данных?

Нет, он передаёт результат, включая возможную ошибку.

Читайте также

Комментарии

Пока тихо. Скажите первое слово