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: ключевые различия
| Параметр | LangChain | LlamaIndex |
|---|---|---|
| Основной фокус | Оркестрация агентов и цепочек | Индексация и поиск по данным (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-систем
| Параметр | LangChain | LlamaIndex |
|---|---|---|
| Фокус | Оркестрация агентов и цепочек | Индексирование данных и запросы |
| 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 для оркестрации — они не конкуренты, а дополняют друг друга.