Інтеграція Haystack для NLP-пайплайнів

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Інтеграція Haystack для NLP-пайплайнів
Середній
від 1 тижня до 3 місяців
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Інтеграція Haystack для NLP-pipeline

Haystack (deepset)—production-ready фреймворк для побудови NLP-pipeline з нативною підтримкою RAG, question answering та обробки документів. На відміну від LangChain із його імперативним стилем, Haystack використовує декларативну модель pipeline—компоненти з'єднуються у граф, дані течуть між ними типізовано. Це спрощує тестування, версіонування та заміну компонентів.

Коли Haystack—правильний вибір

Haystack перемагає конкурентів у кількох сценаріях:

  • Завдання, зосереджені на документах—коли робота пов'язана з пошуком та обробкою корпусу документів
  • Production-grade RAG—потрібна надійна, тестована система, а не прототип
  • Команда переважає явну конфігурацію—YAML-pipeline легше аудувати, ніж Python-код LangChain
  • Multi-hop question answering—Haystack має вбудовані компоненти для складного пошуку

LangChain / LlamaIndex краще підходять для швидкого прототипування та агентних сценаріїв із багатьма інструментами.

Ключові абстракції Haystack 2.x

Haystack 2.x (поточна версія) змінив архітектуру порівняно з 1.x:

  • Component—базовий блок, має типізовані @component.input та @component.output
  • Pipeline—граф компонентів, з'єднаних за типами даних
  • Document—уніфікований об'єкт із content, meta, embedding, id
  • DocumentStore—абстракція сховища (InMemory, Elasticsearch, OpenSearch, pgvector, Weaviate, Qdrant, Milvus)
from haystack import Pipeline, Document
from haystack.components.retrievers import InMemoryBM25Retriever
from haystack.components.generators import OpenAIGenerator
from haystack.components.builders import RAGPromptBuilder

# Побудова RAG-pipeline
pipeline = Pipeline()
pipeline.add_component("retriever", InMemoryBM25Retriever(document_store=store))
pipeline.add_component("prompt_builder", RAGPromptBuilder())
pipeline.add_component("generator", OpenAIGenerator(model="gpt-4o-mini"))

pipeline.connect("retriever.documents", "prompt_builder.documents")
pipeline.connect("prompt_builder.prompt", "generator.prompt")

Підключення DocumentStore

Вибір DocumentStore залежить від масштабу та вимог:

DocumentStore Коли використовувати
InMemoryDocumentStore Розробка, тести, < 10K документів
ElasticsearchDocumentStore Вже є ES, потрібен BM25 + semantic
QdrantDocumentStore Висока продуктивність, > 1M векторів
PgvectorDocumentStore Інтеграція з PostgreSQL-інфраструктурою
WeaviateDocumentStore Managed cloud, вбудований hybrid search

Настройка Qdrant:

from haystack_integrations.document_stores.qdrant import QdrantDocumentStore

document_store = QdrantDocumentStore(
    url="http://localhost:6333",
    index="documents",
    embedding_dim=1536,
    recreate_index=False,
)

Індексування документів

Pipeline індексування—окремий від pipeline пошуку:

from haystack.components.converters import PyPDFToDocument
from haystack.components.preprocessors import DocumentCleaner, DocumentSplitter
from haystack.components.embedders import OpenAIDocumentEmbedder
from haystack.components.writers import DocumentWriter

indexing = Pipeline()
indexing.add_component("converter", PyPDFToDocument())
indexing.add_component("cleaner", DocumentCleaner())
indexing.add_component("splitter", DocumentSplitter(
    split_by="sentence", split_length=5, split_overlap=2
))
indexing.add_component("embedder", OpenAIDocumentEmbedder(
    model="text-embedding-3-small"
))
indexing.add_component("writer", DocumentWriter(document_store=document_store))

indexing.connect("converter.documents", "cleaner.documents")
indexing.connect("cleaner.documents", "splitter.documents")
indexing.connect("splitter.documents", "embedder.documents")
indexing.connect("embedder.documents", "writer.documents")

Гібридний пошук

Haystack підтримує гібридний пошук (BM25 + semantic) через DocumentJoiner:

from haystack.components.retrievers import InMemoryBM25Retriever, InMemoryEmbeddingRetriever
from haystack.components.joiners import DocumentJoiner
from haystack.components.rankers import MetaFieldRanker

pipeline.add_component("bm25", InMemoryBM25Retriever(document_store=store, top_k=10))
pipeline.add_component("semantic", InMemoryEmbeddingRetriever(document_store=store, top_k=10))
pipeline.add_component("joiner", DocumentJoiner(join_mode="reciprocal_rank_fusion"))

pipeline.connect("bm25.documents", "joiner.documents")
pipeline.connect("semantic.documents", "joiner.documents")

RRF (Reciprocal Rank Fusion) об'єднує результати обох ретриверів без нормалізації балів.

Кастомні компоненти

Haystack легко розширюється власними компонентами:

from haystack import component
from haystack.dataclasses import Document
from typing import List

@component
class CustomReranker:
    @component.output_types(documents=List[Document])
    def run(self, documents: List[Document], query: str) -> dict:
        # Ваша логіка переранжування
        scored = [(doc, self.score(doc, query)) for doc in documents]
        ranked = sorted(scored, key=lambda x: x[1], reverse=True)
        return {"documents": [doc for doc, _ in ranked[:5]]}

Серіалізація та деплой pipeline

Pipeline серіалізуються в YAML—ключова перевага для DevOps:

# Експорт
pipeline.to_yaml("rag_pipeline.yaml")

# Імпорт
pipeline = Pipeline.from_yaml("rag_pipeline.yaml")

YAML-файл pipeline можна зберігати в Git, робити code review конфігурації, деплоїти через CI/CD. Haystack Hayhooks надає REST API для сервінгу pipeline:

pip install hayhooks
hayhooks run --pipelines-dir ./pipelines

Після запуску pipeline доступен за /pipeline/rag/run.

Оцінка якості RAG

Haystack має вбудовані інструменти для evaluation:

from haystack.evaluation import EvaluationResult
from haystack.components.evaluators import (
    FaithfulnessEvaluator,
    ContextRelevanceEvaluator,
    SASEvaluator
)

Метрики: Faithfulness (відповідь відповідає контексту), Context Relevance (контекст релевантен питанню), SAS (семантична подібність відповіді до еталону).

Продуктивність та масштабування

  • Async-режим через pipeline.run_async() для конкурентної обробки запитів
  • Batching для embedder-компонентів (до 10x прискорення при індексуванні)
  • Caching через CachingChecker + Redis—кеш результатів пошуку для ідентичних запитів
  • Prometheus-метрики через Hayhooks middleware

Типова продуктивність RAG-pipeline: 1–3 секунди на запит при використанні gpt-4o-mini та Qdrant.

Часова шкала інтеграції

  • Базовий RAG-pipeline (1 DocumentStore, 1 LLM): 1–2 тижні
  • Гібридний пошук + custom reranker: 3–4 тижні
  • Production deployment + моніторинг + evaluation: 6–8 тижнів