Каждый делает одну вещь и имеет понятные «разъёмы»
Компонент — минимальная рабочая единица Haystack. У каждого одна задача: один умеет вызывать языковую модель, другой — искать документы, третий — превращать PDF в текст.
Компоненты — сотрудники компании с чёткими должностными инструкциями. «Поисковик» ищет и передаёт находки дальше. «Редактор» собирает промпт. «Переговорщик» общается с моделью. Каждого можно обучить, заменить или проверить отдельно — компания не встанет.
У каждого компонента объявлены типизированные входы и выходы (в документации их называют sockets — «сокеты», то есть разъёмы). Например, поисковый компонент принимает на вход текст запроса, а на выход отдаёт список документов.
Это главная фишка Haystack: перед запуском он проверяет, что выход одного компонента подходит ко входу следующего. Несовместимую конструкцию он не даст даже собрать — ошибка всплывёт сразу, а не в три часа ночи у пользователя.
Типизация разъёмов — как формы вилок и розеток: USB не воткнёшь в аудиовход. Ошибки сборки видны до запуска, а не в продакшне.
| Семейство | Что делает | Пример |
|---|---|---|
| Generators | Говорят с языковой моделью, получают ответ | OpenAIChatGenerator, есть для Anthropic, Ollama и др. |
| Embedders | Превращают текст в векторы — числа, кодирующие смысл | SentenceTransformersTextEmbedder |
| Retrievers | Ищут подходящие документы в хранилище | InMemoryBM25Retriever |
| Converters | Превращают файлы (PDF, DOCX, HTML) в текст | PyPDFToDocument |
| PreProcessors | Чистят и режут тексты на фрагменты | DocumentSplitter |
| Builders | Собирают промпт из шаблона и данных | ChatPromptBuilder |
| Rankers | Пересортировывают найденное по релевантности | TransformersSimilarityRanker |
| Routers | Направляют данные по разным веткам по условию | ConditionalRouter |
| Evaluators | Оценивают качество ответов | FaithfulnessEvaluator |
Полный список семейств с пояснениями — в шпаргалке по компонентам.
Если готового «станка» нет — свой пишется в несколько строк Python: обычный класс с пометкой @component и объявленными входами-выходами. Так к конвейеру подключают что угодно: ваш CRM, GetCourse, любой внутренний API.