LangChain vs LlamaIndex: фреймворки для RAG

LangChain vs LlamaIndex: какой фреймворк выбрать для создания RAG-системы — сравнение архитектуры, возможностей и кода.

LangChain vs LlamaIndex: фреймворки для RAG

Создание RAG-приложений (Retrieval-Augmented Generation) — одна из самых востребованных задач в разработке с LLM. Два фреймворка доминируют: LangChain (85 000+ звёзд на GitHub) и LlamaIndex (35 000+ звёзд). Оба решают схожую задачу — подключение собственных данных к языковой модели — но подходят к ней по-разному.

Философия

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

LlamaIndex — фреймворк, специализированный на работе с данными. Фокус — индексация, поиск и извлечение информации. RAG — основной сценарий, и всё проектируется вокруг него. Подход — декларативный: опишите структуру данных, и фреймворк сам оптимизирует пайплайн.

RAG за 5 минут: LangChain

from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA

# Загрузка и разбиение документа
loader = PyPDFLoader("manual.pdf")
pages = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(pages)

# Индексация
db = Chroma.from_documents(chunks, OpenAIEmbeddings())

# RAG-цепочка
qa = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4o-mini"),
    retriever=db.as_retriever(search_kwargs={"k": 3})
)

result = qa.invoke("Как настроить двухфакторную аутентификацию?")
print(result["result"])

RAG за 5 минут: LlamaIndex

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

# Загрузка документов из папки
documents = SimpleDirectoryReader("./docs").load_data()

# Индексация (автоматическое разбиение и эмбеддинги)
index = VectorStoreIndex.from_documents(documents)

# Поиск
query_engine = index.as_query_engine()
response = query_engine.query("Как настроить двухфакторную аутентификацию?")
print(response)

LlamaIndex требует меньше кода для базового RAG — три строки вместо семи. Но LangChain даёт больше контроля на каждом этапе.

Загрузка данных

LangChain поддерживает 160+ загрузчиков: PDF, Word, Excel, веб-страницы, Notion, Slack, GitHub, базы данных. Каждый загрузчик — отдельный класс, который нужно импортировать.

LlamaIndex предлагает LlamaHub — маркетплейс из 300+ загрузчиков, устанавливаемых через pip. Загрузчики покрывают те же источники плюс специализированные: Jira, Confluence, Google Drive, MongoDB.

По набору загрузчиков — паритет. LlamaHub удобнее организован.

Работа с индексами

Здесь LlamaIndex значительно впереди. Фреймворк предлагает несколько типов индексов: VectorStoreIndex (стандартный для семантического поиска), TreeIndex (иерархическая структура для длинных документов), KeywordTableIndex (для ключевого поиска), KnowledgeGraphIndex (граф знаний).

LangChain поддерживает в основном векторный поиск. Для сложных структур нужно комбинировать компоненты вручную.

Агенты и цепочки

Здесь лидирует LangChain. Фреймворк поддерживает ИИ-агентов с инструментами, многошаговые цепочки (LCEL — LangChain Expression Language), маршрутизацию запросов, параллельное выполнение. LangGraph — дополнение для сложных агентных workflow с графом состояний.

LlamaIndex тоже поддерживает агентов (через llama-index-agent-openai), но экосистема менее развита. Для чистого RAG это не проблема, но для комплексных приложений LangChain гибче.

Производительность

LlamaIndex оптимизирован для поиска и индексации — запросы к индексу работают быстрее за счёт встроенного кэширования и оптимизации графа запросов. LangChain более «тяжёлый» — каждый компонент цепочки добавляет накладные расходы.

Для пайплайнов с 10+ шагами LangChain медленнее на 15–30%. Для простого RAG (запрос → поиск → ответ) разница минимальна.

Документация и сообщество

LangChain: обширная документация, но иногда путаная — фреймворк быстро развивается, и документация не успевает за изменениями API. Огромное сообщество, много туториалов. Минус — частые breaking changes между версиями.

LlamaIndex: более стабильный API, документация структурированнее. Сообщество меньше, но быстро растёт. Меньше туториалов на русском.

Рекомендации

Выбирайте LlamaIndex, если ваша задача — чистый RAG: подключить документы, настроить поиск, получать ответы. Фреймворк проще, быстрее и оптимизирован именно для этого.

Выбирайте LangChain, если RAG — часть более сложного приложения: с агентами, многошаговой логикой, интеграцией с внешними API. Или если вам нужна гибкость в настройке каждого компонента.

Используйте оба — LlamaIndex для индексации и поиска, LangChain для оркестрации и агентов. Фреймворки совместимы: LlamaIndex-ретривер подключается к LangChain-цепочке через адаптер. Подробнее о работе с векторными базами данных — в отдельном материале.

LangChain vs LlamaIndex: ключевые различия

ПараметрLangChainLlamaIndex
Основной фокусОркестрация агентов и цепочекИндексация и поиск по данным (RAG)
Сложность настройкиВысокаяСредняя
RAG out-of-the-boxТребует настройкиВстроен нативно
Поддержка агентовОтличная (ReAct, OpenAI Functions)Базовая
Коннекторы данных100+160+ (LlamaHub)
МультимодальностьЧерез плагиныНативная поддержка
Производительность RAG★★★☆☆★★★★★
ЭкосистемаОчень большаяРастущая

Архитектура RAG: как работает каждый фреймворк

LlamaIndex строит иерархические индексы над документами. Типы индексов: векторный (VectorStoreIndex), граф знаний (KnowledgeGraphIndex), список (ListIndex), ключевые слова (KeywordTableIndex). При запросе фреймворк автоматически выбирает и комбинирует индексы. Advanced retrieval включает: HyDE (гипотетический документ для улучшения поиска), re-ranking, recursive retrieval.

LangChain предоставляет строительные блоки: Retriever, Document Loader, Text Splitter, Vector Store, Chain. Разработчик сам собирает pipeline. Это даёт гибкость, но требует больше кода. LCEL (LangChain Expression Language) упрощает компоновку цепочек через синтаксис пайпов.

Практические примеры

Когда LlamaIndex:

  • Чат-бот по корпоративной базе знаний (PDF, Confluence, Notion)
  • Семантический поиск по большому архиву документов
  • Мультидокументный анализ (сравнение договоров, исследований)

Когда LangChain:

  • Агент с доступом к множеству инструментов (поиск, код, API)
  • Multi-step workflows с ветвлением и циклами
  • Интеграция с существующими системами через готовые коннекторы

Тренд 2025: конвергенция фреймворков

Граница между LangChain и LlamaIndex размывается. LlamaIndex добавил agents и workflows, LangChain улучшил RAG через LCEL. Новые проекты всё чаще используют оба фреймворка совместно или переходят на более простые альтернативы: Haystack, DSPy, smolagents от HuggingFace. Для production-RAG с минимальной сложностью набирает популярность pgvector + прямые embeddings API без фреймворков.

Сравнение LangChain и LlamaIndex для RAG-систем

ПараметрLangChainLlamaIndex
ФокусОркестрация агентов и цепочекИндексирование данных и запросы
RAG из коробкиЕсть (через chains)Основная специализация
Кривая обученияSteep (много абстракций)Medium (более прямолинейный)
Коннекторы данных100+ загрузчиков160+ загрузчиков (LlamaHub)
Агентные возможности★★★★★ (LangGraph)★★★☆☆
Качество RAG★★★★☆★★★★★
Стриминг ответовДаДа
Production-readyДа (LangSmith для мониторинга)Да (LlamaCloud)
GitHub stars (2026)~95K~38K

Простой RAG с LlamaIndex

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.llms.anthropic import Anthropic

# Загружаем документы
documents = SimpleDirectoryReader('./docs').load_data()

# Создаём индекс
index = VectorStoreIndex.from_documents(documents)

# Запрос
query_engine = index.as_query_engine(
    llm=Anthropic(model='claude-3-7-sonnet-20250219')
)
response = query_engine.query('Что говорится о деплое?')
print(response)

Аналогичный RAG с LangChain

from langchain_community.document_loaders import DirectoryLoader
from langchain_anthropic import ChatAnthropic
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain.chains import RetrievalQA

loader = DirectoryLoader('./docs')
docs = loader.load()
vectorstore = FAISS.from_documents(docs, OpenAIEmbeddings())

qa = RetrievalQA.from_chain_type(
    llm=ChatAnthropic(model='claude-3-7-sonnet-20250219'),
    retriever=vectorstore.as_retriever()
)
print(qa.invoke('Что говорится о деплое?'))

Когда выбрать LlamaIndex

  • Основная задача — поиск по документам (PDF, Confluence, Notion, базы данных)
  • Нужны продвинутые стратегии чанкинга: sentence window, hierarchical, auto-merging
  • Важна простота кода — LlamaIndex требует меньше boilerplate для стандартного RAG

Когда выбрать LangChain

  • Строите сложные агентные системы с LangGraph (граф состояний, параллельные ветки)
  • Нужен мониторинг и трейсинг через LangSmith — критично для production
  • Проект требует интеграции с 10+ разными инструментами и API

На практике в 2026 году большинство production-систем используют LlamaIndex для слоя данных + LangGraph для оркестрации — они не конкуренты, а дополняют друг друга.