Как отдельные кирпичики становятся работающим приложением
Пайплайн (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": "Кто живёт в Париже?"},
})
Что здесь происходит по-человечески:
connect() — те самые провода между разъёмами. Здесь Haystack и проверяет совместимость.Порядок добавления компонентов не важен — важны соединения. Пайплайн — это граф: схема потоков данных, а не список шагов.
Пайплайн можно сохранить в файл YAML (текстовый формат настроек) и загрузить обратно. Это значит: конфигурацию конвейера можно хранить в git, пересылать коллеге, менять без правки кода. Для бизнеса это прозрачность: вся логика ИИ-продукта — один читаемый файл.