> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-ru/sravneniya/rag-frameworks-comparison.md).

# Сравнение RAG-фреймворков

Выберите подходящий фреймворк Retrieval-Augmented Generation (RAG) для вашего проекта на GPU-серверах Clore.ai.

{% hint style="info" %}
**RAG (Retrieval-Augmented Generation)** позволяет LLM отвечать на вопросы, используя ваши собственные документы. В этом руководстве сравниваются четыре ведущих фреймворка: LangChain, LlamaIndex, Haystack и RAGFlow — с обзором возможностей, производительности и случаев применения каждого.
{% endhint %}

***

## Быстрая матрица выбора

|                          | LangChain            | LlamaIndex                     | Haystack            | RAGFlow                         |
| ------------------------ | -------------------- | ------------------------------ | ------------------- | ------------------------------- |
| **Лучше всего для**      | Общие LLM-приложения | Вопросы и ответы по документам | Корпоративный поиск | RAG с самостоятельным хостингом |
| **Кривая обучения**      | Средне               | Низкая-средняя                 | Средне-высокая      | Низкая                          |
| **Гибкость**             | Очень высокая        | Высокий                        | Высокий             | Средне                          |
| **Встроенный интерфейс** | Нет                  | Нет                            | Нет                 | Да                              |
| **Звёзды на GitHub**     | 90K+                 | 35K+                           | 15 тыс.+            | 12 тыс.+                        |
| **Язык**                 | Python               | Python                         | Python              | Python                          |
| **Лицензия**             | MIT                  | MIT                            | Apache 2.0          | Apache 2.0                      |

***

## Обзор

### LangChain

LangChain — самый популярный фреймворк оркестрации LLM. Он предоставляет единый интерфейс для цепочек, агентов, памяти и RAG-конвейеров.

**Философия**: Всё — это цепочка из компонуемых компонентов.

```python
from langchain.chains import RetrievalQA
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI

# Соберите RAG-конвейер в 5 строк
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(docs, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
chain = RetrievalQA.from_chain_type(llm=OpenAI(), retriever=retriever)
result = chain.run("Какова столица Франции?")
```

### LlamaIndex

LlamaIndex (ранее GPT Index) специально создан для индексации и извлечения документов. Он отлично подходит для подключения LLM к разнообразным источникам данных.

**Философия**: Сначала индексируйте, затем интеллектуально выполняйте запросы.

```python
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

# Загрузите и проиндексируйте документы
documents = SimpleDirectoryReader("data/").load_data()
index = VectorStoreIndex.from_documents(documents)

# Запрос
query_engine = index.as_query_engine()
response = query_engine.query("Суммируйте основные выводы")
print(response)
```

### Haystack

Haystack (от deepset) — это фреймворк NLP корпоративного уровня, ориентированный на конвейеры поиска и вопросов-ответов. Он имеет компонентную архитектуру и визуальный конструктор конвейеров.

**Философия**: Модульные конвейеры с корпоративной надёжностью.

```python
from haystack.nodes import DensePassageRetriever, FARMReader
from haystack.pipelines import ExtractiveQAPipeline

retriever = DensePassageRetriever(document_store=document_store)
reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2")
pipeline = ExtractiveQAPipeline(reader, retriever)
result = pipeline.run(query="Что такое машинное обучение?", params={"Retriever": {"top_k": 10}})
```

### RAGFlow

RAGFlow — это движок RAG с открытым исходным кодом, со встроенным веб-интерфейсом, парсингом документов и управлением базой знаний. Он предназначен для развёртывания как целостное решение.

**Философия**: Готовая RAG-система, код не требуется.

```yaml
# RAGFlow разворачивается через Docker Compose
# Настройка через веб-интерфейс на localhost:80
version: "3"
services:
  ragflow:
    image: infiniflow/ragflow:latest
    ports:
      - "80:80"
    volumes:
      - ./ragflow-data:/ragflow/data
```

***

## Сравнение функций

### Ключевые возможности RAG

| Функция                        | LangChain | LlamaIndex | Haystack | RAGFlow    |
| ------------------------------ | --------- | ---------- | -------- | ---------- |
| Поддержка векторного хранилища | 50+       | 30+        | 20+      | Встроенный |
| Загрузчики документов          | 100+      | 50+        | 30+      | Встроенный |
| Гибридный поиск                | ✅         | ✅          | ✅        | ✅          |
| Переранжирование               | ✅         | ✅          | ✅        | ✅          |
| Мультимодальный                | ✅         | ✅          | Частично | ✅          |
| Потоковая передача             | ✅         | ✅          | ✅        | ✅          |
| Поддержка асинхронности        | ✅         | ✅          | ✅        | ✅          |
| Агенты                         | ✅         | ✅          | ✅        | ❌          |

### Экосистема интеграций

| Тип интеграции     | LangChain                                     | LlamaIndex                            | Haystack                           | RAGFlow                    |
| ------------------ | --------------------------------------------- | ------------------------------------- | ---------------------------------- | -------------------------- |
| Провайдеры LLM     | 50+                                           | 30+                                   | 20+                                | 10+                        |
| Векторные БД       | Chroma, Pinecone, Weaviate, Qdrant, и ещё 40+ | Chroma, Pinecone, Weaviate, и ещё 25+ | Weaviate, Elasticsearch, и ещё 15+ | Встроенный InfiniFlow      |
| Типы документов    | PDF, Web, CSV, JSON, и ещё 80+                | PDF, Web, CSV, DB, и ещё 40+          | PDF, TXT, HTML, и ещё 20+          | PDF, Word, Excel, PPT, Web |
| Облачное хранилище | S3, GCS, Azure                                | S3, GCS, Azure                        | S3, GCS                            | S3                         |

### Расширенные возможности RAG

| Функция                                     | LangChain | LlamaIndex        | Haystack | RAGFlow |
| ------------------------------------------- | --------- | ----------------- | -------- | ------- |
| Декомпозиция запросов                       | ✅         | ✅                 | ✅        | ✅       |
| HyDE (гипотетические эмбеддинги документов) | ✅         | ✅                 | ❌        | ❌       |
| Многошаговое извлечение                     | ✅         | ✅                 | Частично | ✅       |
| Контекстное сжатие                          | ✅         | ✅                 | ✅        | ✅       |
| Self-RAG                                    | ✅         | ✅                 | ❌        | ❌       |
| GraphRAG                                    | ✅         | ✅ (PropertyGraph) | ❌        | ✅       |
| Отслеживание цитирования                    | Частично  | ✅                 | Частично | ✅       |

***

## Тесты производительности

### Точность извлечения (RAG-Bench, 2024)

{% hint style="info" %}
Результаты тестов значительно зависят от набора данных и конфигурации. Это приблизительные значения из бенчмарков сообщества.
{% endhint %}

| Фреймворк         | HotpotQA (F1) | Natural Questions (EM) | TriviaQA (Acc) |
| ----------------- | ------------- | ---------------------- | -------------- |
| LangChain (RAG)   | \~68%         | \~42%                  | \~72%          |
| LlamaIndex (RAG)  | \~71%         | \~45%                  | \~74%          |
| Haystack (RAG)    | \~69%         | \~43%                  | \~71%          |
| RAGFlow (default) | \~65%         | \~40%                  | \~68%          |

*Результаты сильно зависят от выбранной LLM, модели эмбеддингов и размера чанка*

### Скорость индексации (10K документов, примерно по 1 КБ каждый)

| Фреймворк  | Только CPU | GPU-эмбеддинги |
| ---------- | ---------- | -------------- |
| LangChain  | \~120 sec  | \~18 sec       |
| LlamaIndex | \~110 sec  | \~15 sec       |
| Haystack   | \~130 sec  | \~20 sec       |
| RAGFlow    | \~150 sec  | \~25 сек       |

*При эквиваленте text-embedding-ada-002 (1536 размерностей)*

### Задержка запроса (P50/P99, с предварительно построенным индексом)

| Фреймворк  | P50    | P99   | Примечания                            |
| ---------- | ------ | ----- | ------------------------------------- |
| LangChain  | 450ms  | 1,2 с | Без переранжирования                  |
| LlamaIndex | 400ms  | 1.0с  | Без переранжирования                  |
| Haystack   | 500ms  | 1.5с  | С учётом накладных расходов конвейера |
| RAGFlow    | 600 мс | 2,0 с | Включает накладные расходы UI/API     |

***

## LangChain: Подробный разбор

### Сильные стороны

✅ **Крупнейшая экосистема** — 50+ интеграций, огромное сообщество\
✅ **Агенты и инструменты** — создавайте автономных ИИ-агентов\
✅ **LangSmith** — отличная наблюдаемость и отладка\
✅ **LCEL** — LangChain Expression Language для построения цепочек\
✅ **Системы памяти** — история разговоров, память о сущностях

### Недостатки

❌ **Сложность** — может быть чрезмерно усложнён для простых задач\
❌ **Частые несовместимые изменения** — миграции v0.1 vs v0.2 vs v0.3\
❌ **Тяжёлая зависимость** — большой размер установки\
❌ **Утечка абстракций** — иногда сложнее отлаживать

### Лучшие варианты использования

* Многошаговые LLM-конвейеры со сложной логикой
* ИИ-агенты, использующие инструменты (веб-поиск, выполнение кода, API)
* Приложения, которым нужна память о диалоге
* Проекты, которым требуется максимальная гибкость

### Пример: расширенный RAG с источниками

```python
from langchain.chains import RetrievalQAWithSourcesChain
from langchain_community.vectorstores import Chroma
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter

# Настройка
llm = ChatOpenAI(model="gpt-4", temperature=0)
embeddings = OpenAIEmbeddings()

# Проиндексируйте документы с метаданными
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = splitter.split_documents(documents)

vectorstore = Chroma.from_documents(
    chunks, 
    embeddings,
    persist_directory="./chroma_db"
)

# Постройте цепочку с указанием источников
chain = RetrievalQAWithSourcesChain.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(search_kwargs={"k": 5}),
    return_source_documents=True
)

result = chain({"question": "Каковы основные риски?"})
print(result["answer"])
print("Источники:", result["sources"])
```

***

## LlamaIndex: Подробный разбор

### Сильные стороны

✅ **Документо-ориентированный подход** — лучше всего подходит для сложной индексации документов\
✅ **Типы индексов** — векторные, графы знаний, SQL, ключевые слова\
✅ **Движок подзапросов** — автоматически разбивает сложные запросы\
✅ **Структурированные выходные данные** — интеграция с Pydantic\
✅ **Маршрутизирующий движок запросов** — интеллектуально направляет к нужному индексу

### Недостатки

❌ **Меньше ориентирован на агентов** чем LangChain\
❌ **Меньшая экосистема** чем LangChain\
❌ **Документация** может быть непоследовательной

### Лучшие варианты использования

* Системы вопросов-ответов по документам (PDF, отчёты, вики)
* Сложное рассуждение по нескольким документам
* Построение графов знаний
* Мосты от данных к LLM (базы данных, API)

### Пример: движок запросов по нескольким документам

```python
from llama_index.core import (
    VectorStoreIndex, 
    SimpleDirectoryReader,
    StorageContext,
    Settings
)
from llama_index.core.query_engine import RouterQueryEngine
from llama_index.core.tools import QueryEngineTool
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding

# Глобальная настройка
Settings.llm = OpenAI(model="gpt-4")
Settings.embed_model = OpenAIEmbedding()

# Создайте отдельные индексы для разных наборов документов
annual_reports = SimpleDirectoryReader("./annual_reports").load_data()
tech_docs = SimpleDirectoryReader("./tech_docs").load_data()

index_reports = VectorStoreIndex.from_documents(annual_reports)
index_tech = VectorStoreIndex.from_documents(tech_docs)

# Постройте маршрутизатор, который выбирает нужный индекс
tools = [
    QueryEngineTool.from_defaults(
        query_engine=index_reports.as_query_engine(),
        description="Годовые финансовые отчёты и бизнес-метрики"
    ),
    QueryEngineTool.from_defaults(
        query_engine=index_tech.as_query_engine(),
        description="Техническая документация и справочные материалы по API"
    )
]

router = RouterQueryEngine.from_defaults(query_engine_tools=tools)
response = router.query("Каков был рост выручки в прошлом году?")
```

***

## Haystack: Подробный разбор

### Сильные стороны

✅ **Корпоративного уровня** — надёжность в продакшене\
✅ **Визуальный конструктор конвейеров** — Haystack Studio\
✅ **Инструмент для разметки** — встроенный интерфейс для разметки\
✅ **Сильные NLP-возможности** — извлечение ответов на вопросы, суммаризация\
✅ **deepset Cloud** — вариант управляемого развёртывания

### Недостатки

❌ **Более крутая кривая обучения** чем у конкурентов\
❌ **Меньшее сообщество** чем у LangChain/LlamaIndex\
❌ **Менее гибкий** для новых архитектур

### Лучшие варианты использования

* Корпоративный поиск по документам и вопросы-ответы
* Проекты, которым нужны журналы аудита и наблюдаемость
* Команды, которым нужен визуальный дизайн конвейеров
* Продакшн-развёртывания с требованиями SLA

### Пример: конвейер гибридного поиска

```python
from haystack import Pipeline
from haystack.components.retrievers import InMemoryBM25Retriever, InMemoryEmbeddingRetriever
from haystack.components.joiners import DocumentJoiner
from haystack.components.rankers import MetaFieldRanker
from haystack.components.generators import OpenAIGenerator
from haystack.components.builders import RAGPromptBuilder

# Постройте конвейер гибридного поиска
pipeline = Pipeline()
pipeline.add_component("bm25_retriever", InMemoryBM25Retriever(document_store=store, top_k=10))
pipeline.add_component("embedding_retriever", InMemoryEmbeddingRetriever(document_store=store, top_k=10))
pipeline.add_component("joiner", DocumentJoiner(join_mode="reciprocal_rank_fusion"))
pipeline.add_component("ranker", MetaFieldRanker(meta_field="score"))
pipeline.add_component("prompt_builder", RAGPromptBuilder())
pipeline.add_component("llm", OpenAIGenerator(model="gpt-4"))

# Соедините компоненты
pipeline.connect("bm25_retriever", "joiner.documents")
pipeline.connect("embedding_retriever", "joiner.documents")
pipeline.connect("joiner", "ranker")
pipeline.connect("ranker", "prompt_builder.documents")
pipeline.connect("prompt_builder", "llm")

result = pipeline.run({"bm25_retriever": {"query": "deep learning"}, 
                       "embedding_retriever": {"query": "deep learning"}})
```

***

## RAGFlow: Подробный разбор

### Сильные стороны

✅ **Развёртывание без кода** — полный интерфейс включён\
✅ **Продвинутый парсинг документов** — таблицы, изображения, диаграммы\
✅ **Управление базой знаний** — визуальный интерфейс\
✅ **API включён** — REST API из коробки\
✅ **Агентный RAG** — встроенные агенты

### Недостатки

❌ **Менее настраиваемый** чем фреймворки, ориентированные на код\
❌ **Высокие требования к ресурсам** (Elasticsearch + Infinity DB)\
❌ **Ограниченная поддержка LLM** по сравнению с LangChain\
❌ **Более новый проект** — меньшее сообщество

### Лучшие варианты использования

* Непрограммисты, которым нужен RAG без программирования
* Команды, которым нужен полноценный продукт базы знаний
* Внутренние корпоративные вики и поиск по документации
* Быстрое прототипирование RAG-приложений

### Развертывание на Clore.ai

```yaml
# docker-compose.yml для RAGFlow
version: "3"
services:
  ragflow:
    image: infiniflow/ragflow:v0.12.0
    container_name: ragflow
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./ragflow-logs:/ragflow/logs
      - ./ragflow-data:/ragflow/data
    depends_on:
      - elasticsearch
      - infinity

  elasticsearch:
    image: elasticsearch:8.11.3
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
      - xpack.security.enabled=false
    volumes:
      - es_data:/usr/share/elasticsearch/data

  infinity:
    image: infiniflow/infinity:v0.3.0
    volumes:
      - infinity_data:/var/infinity

volumes:
  es_data:
  infinity_data:
```

```bash
docker compose up -d
# Доступ к веб-интерфейсу по адресу http://<server-ip>:80
```

***

## Когда что использовать

### Выбирайте LangChain, если:

* Создаёте ИИ-агентов с инструментами (веб-поиск, выполнение кода, API)
* Нужна максимальная гибкость экосистемы
* Создаёте сложные многошаговые конвейеры
* Интегрируетесь со множеством разных LLM и источников данных
* Команда уверенно владеет Python

### Выбирайте LlamaIndex, если:

* Основной сценарий использования — вопросы-ответы по документам
* Работаете со сложными структурами документов (таблицы, вложенное содержимое)
* Нужны графы знаний или маршрутизация по нескольким индексам
* Хотите лучшую в своём классе загрузку документов
* Построение поверх структурированных данных (базы данных, API)

### Выбирайте Haystack, если:

* Корпоративная среда с требованиями к соответствию
* Нужны визуальные инструменты для построения пайплайнов
* Построение поверх Elasticsearch
* Нужен экстрактивный (а не только генеративный) QA
* Команде нужна наблюдаемость NLP-пайплайна

### Выбирайте RAGFlow, если:

* Непрограммистской команде нужен RAG с самообслуживанием
* Нужен готовый продукт, а не фреймворк
* Быстрое развертывание важнее настройки
* Создание внутренней базы знаний
* Не хотите писать код на Python

***

## Запуск на Clore.ai: требования к ресурсам

| Фреймворк  | Мин. RAM     | Мин. VRAM            | Рекомендуемый GPU |
| ---------- | ------------ | -------------------- | ----------------- |
| LangChain  | 8 ГБ         | 8 ГБ (локальная LLM) | RTX 3080          |
| LlamaIndex | 8 ГБ         | 8 ГБ (локальная LLM) | RTX 3080          |
| Haystack   | 16GB         | 8 ГБ (локальная LLM) | RTX 3090          |
| RAGFlow    | 32 ГБ (ОЗУ!) | 16GB                 | A6000 / A100      |

{% hint style="warning" %}
**RAGFlow требует больше ОЗУ**: Он запускает Elasticsearch + InfinityDB + само приложение. Планируйте как минимум 32 ГБ системной ОЗУ. Haystack с Elasticsearch также выигрывает от 16+ ГБ ОЗУ.
{% endhint %}

***

## Полезные ссылки

* [Документация LangChain](https://python.langchain.com)
* [Документация LlamaIndex](https://docs.llamaindex.ai)
* [Документация Haystack](https://docs.haystack.deepset.ai)
* [GitHub RAGFlow](https://github.com/infiniflow/ragflow)
* [Обзорная статья по RAG (arXiv)](https://arxiv.org/abs/2312.10997)

***

## Краткая рекомендация

```
Простой Q&A по документам          → LlamaIndex
Сложные ИИ-агенты            → LangChain
Корпоративный поиск            → Haystack
RAG-продукт без кода          → RAGFlow
Максимальная гибкость          → LangChain
Лучшая работа с пониманием документов  → LlamaIndex
```

Все четыре фреймворка — отличный выбор: правильный зависит от ваших конкретных требований, навыков команды и ограничений развертывания. Если сомневаетесь, начните с **LlamaIndex** для сценариев с большим количеством документов или **LangChain** если вам нужна максимально широкая экосистема.

***

## Рекомендации по GPU для Clore.ai

| Сценарий использования  | Рекомендуемый GPU | Оценочная стоимость на Clore.ai             |
| ----------------------- | ----------------- | ------------------------------------------- |
| Разработка/тестирование | RTX 3090 (24 ГБ)  | $0.07–0.21/гпу/ч                            |
| Продакшен               | RTX 4090 (24 ГБ)  | $0.14–0.42/гпу/ч                            |
| Масштабирование         | A100 80 ГБ        | [голое железо](https://clore.ai/bare-metal) |

> 💡 Все примеры в этом руководстве можно развернуть на [Clore.ai](https://clore.ai/marketplace) GPU-серверах. Просматривайте доступные GPU и арендуйте по часам — без обязательств, с полным root-доступом.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/sravneniya/rag-frameworks-comparison.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
