Конвейер: выход → вход

Pipeline — это цепочка: агенты выстроены в линию, и результат каждого передаётся следующему как вход. Никакого центра, никакого «решения на ходу» — порядок известен заранее и зашит в структуру. Каждый агент делает свой узкий этап и отдаёт эстафету дальше.

Метафора — заводская сборочная линия: деталь движется от станка к станку, каждый выполняет одну операцию. Или Unix-пайп cat file | grep x | sort | uniq: вывод одной команды — ввод следующей. Pipeline переносит эту проверенную идею на агентов.

100%
колёсико — масштаб  ·  зажать и тянуть — перемещение
вход loader загрузил analyst разобрал writer оформил итог выход→вход выход→вход цепочка: порядок фиксирован · нет центра · каждый этап — один шаг обработки

Pipeline против Supervisor

Оба организуют команду, но принципиально по-разному — это ключевое различие двух паттернов.

Критерий Pipeline Supervisor
Топология цепочка (линия) звезда (центр)
Кто решает порядок структура (фиксирован) координатор в рантайме
Гибкость маршрута нет — всегда одна линия есть — ветвление
Стоимость / предсказуемость дешевле, предсказуемее дороже (центр), гибче
Когда порядок известен заранее порядок зависит от результата
ℹ️ Нет «дирижёра» — это плюс

Главное отличие: в Pipeline нет управляющего агента. Координация «зашита» в структуру цепочки, а не принимается LLM на каждом шаге. Это убирает целый источник стоимости, недетерминизма и точек отказа (супервайзер). Когда порядок и так известен, дирижёр — лишняя сущность.

Один паттерн — разные реализации

Pipeline ты уже собирал, просто не называл паттерном. Вот он в знакомых инструментах:

Pipeline в трёх видах
python
# --- CrewAI: sequential process ---
Crew(agents=[loader, analyst, writer],
     tasks=[load, analyze, write],          # выполнятся по порядку
     process=Process.sequential)            # выход → вход через context

# --- LangGraph: линейный граф ---
builder.add_edge(START, "loader")
builder.add_edge("loader", "analyst")       # цепочка рёбер
builder.add_edge("analyst", "writer")
builder.add_edge("writer", END)

# --- Голый Python: просто вызовы по очереди ---
data = loader(input)
analysis = analyst(data)                    # выход одного = вход следующего
result = writer(analysis)

# ВО ВСЕХ ТРЁХ: фиксированная цепочка, выход N → вход N+1, без координатора

Обрати внимание на третий вариант: Pipeline настолько прост, что для него не нужен фреймворк вовсе — хватит последовательных вызовов. Это лишний аргумент в его пользу: самая простая координация, какая бывает.

Плюсы, минусы и подводные камни

✅ Плюсы
  • предельно просто и предсказуемо
  • дёшево — нет лишних вызовов координатора
  • легко отлаживать: линейный лог
  • каждый этап тестируется отдельно
❌ Минусы
  • нет гибкости: маршрут всегда один
  • ошибка раннего этапа «течёт» дальше
  • надёжности перемножаются по цепочке
  • не выразить ветвления и условия
⚠️ Ошибки в конвейере накапливаются

Главный риск Pipeline — распространение ошибок: если loader выдал мусор, analyst разберёт мусор, а writer красиво оформит мусор. И чем длиннее цепочка, тем ниже общая надёжность (надёжности этапов перемножаются — мы считали это в уроке про накладные расходы). Лечится контрактами выхода (чёткий expected_output) и проверками между этапами — например, вставкой агента-валидатора.

Контракты между этапами

Pipeline держится на чётких интерфейсах между агентами: выход этапа N должен точно соответствовать тому, что ожидает этап N+1. Это прямое применение «контрактов» из урока про разделение ответственности: расплывчатый выход одного звена ломает следующее.

Поэтому в Pipeline особенно важны явные expected_output (CrewAI), структурированные данные между шагами и, для длинных цепочек, проверки на стыках. Хороший приём — добавить в конвейер этап-валидатор: loader → validate → analyst, который не пускает мусор дальше. Это уже намёк на гибридные схемы.

Паттерны комбинируются

Pipeline и Supervisor — не взаимоисключающие. Часто прямые участки делают конвейером, а точки, где нужен выбор маршрута, отдают супервайзеру. Или внутри одного этапа Pipeline запускают целую Supervisor-команду (как Flow запускает Crew). Реальные системы — это композиция паттернов, а не один на всё.

Когда брать Pipeline

  • Порядок этапов известен и фиксирован: загрузка → обработка → вывод, без вариантов.
  • Каждый этап зависит от предыдущего: линейная цепочка зависимостей (A→B→C).
  • Важны простота, цена и предсказуемость: нет нужды платить за координатора.
  • Контент- и data-пайплайны: ETL, генерация отчётов, обработка документов — классика Pipeline.

А не бери Pipeline, если маршрут зависит от результата (нужно ветвление → Supervisor или Flow) или если этапы независимы и могут идти параллельно (→ параллелизм/fan-out). Pipeline — про строгую линейную последовательность.

Типичные ошибки

Ошибка 1: Pipeline там, где нужно ветвление

Если следующий этап зависит от результата (одобрено/нет), линейная цепочка не подойдёт. Это территория Supervisor или Flow с условиями.

Ошибка 2: нет контрактов между этапами

Расплывчатый выход одного агента ломает следующий. Задавай явный формат/состав выхода каждого этапа (expected_output, структурированные данные).

Ошибка 3: длинная цепочка без проверок

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

Ошибка 4: фреймворк там, где хватит вызовов

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

Шпаргалка

Pipeline — всё в одном месте
text
ПАТТЕРН: цепочка агентов, выход N → вход N+1, порядок ФИКСИРОВАН
  топология «линия» · НЕТ координатора · координация зашита в структуру

PIPELINE vs SUPERVISOR:
  Pipeline   — линия, порядок известен, дёшево, предсказуемо, БЕЗ центра
  Supervisor — звезда, порядок в рантайме, гибко, дороже, С центром

РЕАЛИЗАЦИИ:
  CrewAI    — process=Process.sequential (+ context)
  LangGraph — линейный граф (цепочка add_edge)
  Python    — просто вызовы по очереди (фреймворк не нужен!)

✅ просто · дёшево · предсказуемо · легко тестировать поэтапно
❌ нет ветвлений · ошибки ТЕКУТ по цепочке · надёжности перемножаются

КЛЮЧ — КОНТРАКТЫ: выход N == ожидаемый вход N+1
  длинная цепочка → проверки на стыках (этап-валидатор)

КОГДА: порядок известен/фиксирован · линейные зависимости · ETL/контент
НЕ НАДО: маршрут зависит от результата → Supervisor/Flow;
         этапы независимы → параллелизм

ПАТТЕРНЫ КОМБИНИРУЮТСЯ: прямые участки — Pipeline, развилки — Supervisor

Практическое задание

Собери и испытай конвейер:

Задание: контент-пайплайн

  1. Построй цепочку из 3 агентов (например, loader → analyst → writer) на любом инструменте: CrewAI sequential, линейный граф LangGraph или просто три вызова в Python.
  2. Для каждого этапа задай чёткий контракт выхода. Проверь, что выход одного действительно подходит как вход следующего.
  3. Намеренно «испорти» выход первого этапа и проследи, как ошибка дойдёт до финала — это иллюстрация распространения ошибок.
  4. Добавь между этапами агента-валидатора, который ловит мусор и не пускает дальше. Сравни надёжность с цепочкой без проверок.
  5. Прикинь надёжность: если каждый этап верен в 90%, какова надёжность всей цепочки из 4 звеньев? Что это говорит о длине Pipeline?
  6. Со звёздочкой: придумай точку, где маршрут зависит от результата, и покажи, что чистый Pipeline её не выражает — нужен Supervisor/Flow. Сделай гибрид: Pipeline с одной развилкой через супервайзера.

Что дальше

Pipeline и Supervisor — это централизованная координация: либо структура, либо дирижёр задают порядок. Но есть и децентрализованный подход, где агенты сами передают управление друг другу по контексту. Это паттерн Swarm — следующий урок.