Урок 3 из 8

Пайплайны — конвейер из компонентов

Как отдельные кирпичики становятся работающим приложением

⏱ ≈ 10 минут · один пример кода с разбором

Идея

Пайплайн (pipeline, «конвейер») — это схема, по которой данные текут от компонента к компоненту. Вы объявляете: «выход поисковика соединить со входом сборщика промпта, выход сборщика — со входом модели». Haystack проверяет совместимость разъёмов и запускает поток.

Аналогия

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

Пайплайн — это не только прямая линия. Поддерживаются:

Как это выглядит в коде

Ниже — настоящий минимальный пайплайн «вопрос-ответ по документам» из документации (укорочен). Не вчитывайтесь в синтаксис — следите за смыслом строк.

# 1. Хранилище с тремя документами
document_store = InMemoryDocumentStore()
document_store.write_documents([
    Document(content="Меня зовут Жан, я живу в Париже."),
    Document(content="Меня зовут Марк, я живу в Берлине."),
    Document(content="Меня зовут Джорджио, я живу в Риме."),
])

# 2. Три компонента: поисковик, сборщик промпта, модель
retriever = InMemoryBM25Retriever(document_store=document_store)
prompt_builder = ChatPromptBuilder(template=prompt_template)
llm = OpenAIChatGenerator(model="gpt-4o-mini")

# 3. Собираем конвейер и соединяем разъёмы
rag_pipeline = Pipeline()
rag_pipeline.add_component("retriever", retriever)
rag_pipeline.add_component("prompt_builder", prompt_builder)
rag_pipeline.add_component("llm", llm)
rag_pipeline.connect("retriever", "prompt_builder.documents")
rag_pipeline.connect("prompt_builder", "llm")

# 4. Запускаем
results = rag_pipeline.run({
    "retriever": {"query": "Кто живёт в Париже?"},
    "prompt_builder": {"question": "Кто живёт в Париже?"},
})

Что здесь происходит по-человечески:

  1. Хранилище. Кладём документы в «библиотеку» (пока простейшую, в памяти — про серьёзные хранилища урок 5).
  2. Компоненты. Нанимаем трёх «сотрудников»: поисковика, редактора промпта и переговорщика с моделью.
  3. Соединения. connect() — те самые провода между разъёмами. Здесь Haystack и проверяет совместимость.
  4. Запуск. Задаём вопрос — он проходит по конвейеру, на выходе ответ модели, опирающийся на найденные документы.
Запомнить

Порядок добавления компонентов не важен — важны соединения. Пайплайн — это граф: схема потоков данных, а не список шагов.

Пайплайн как документ

Пайплайн можно сохранить в файл YAML (текстовый формат настроек) и загрузить обратно. Это значит: конфигурацию конвейера можно хранить в git, пересылать коллеге, менять без правки кода. Для бизнеса это прозрачность: вся логика ИИ-продукта — один читаемый файл.

Проверьте себя

1. Что делает метод connect() при сборке пайплайна?
2. Вам нужен сценарий «сгенерировать ответ → проверить качество → если плохо, сгенерировать заново». Пайплайн так умеет?
3. Зачем сохранять пайплайн в YAML-файл?
🎉 Урок пройден! Вы понимаете конструктор целиком: кирпичики + схема сборки. Дальше — главный сценарий: RAG.
💬 Что-то непонятно? Спросите Клода — например, «нарисуй схему пайплайна для бота моей школы».

Источники