Перебирал на прошлой неделе фреймворки для RAG-пайплайна и поймал себя на том, что опять завис между LangChain и LlamaIndex. И ладно бы просто завис — так я ещё и нагуглил двадцать статей, где авторы честно признаются, что сами не до конца разобрались. Ну раз так, разберёмся вместе.
Зачем вообще нужны эти фреймворки
Большая языковая модель хороша, но она знает только то, на чём обучалась. Если вам нужны ответы про ваши документы, базу знаний или кодовую базу — чистый LLM будет выдумывать. Это называется галлюцинацией, и от неё никуда не деться.
Обе библиотеки решают одну и ту же задачу: подсунуть модели релевантный контекст из ваших данных перед тем, как она сгенерирует ответ. Разница в том, как именно они это делают и что умеют сверх этого.
LangChain — это конструктор для всего
LangChain задуман как универсальный фреймворк. «Цепочки» (chains) — это его ключевая идея: вы берёте языковую модель и связываете её с источниками данных, инструментами, памятью, другими моделями — в единый рабочий процесс.
С LangChain можно:
- строить диалоговых агентов, которые вызывают внешние API
- реализовывать multi-step reasoning, где модель сама решает, какой инструмент использовать дальше
- подключать самые разные LLM: OpenAI, Claude, локальные модели, DeepSeek
- работать с памятью диалога — short-term и long-term
- создавать инструменты, которых у модели отродясь не было: поиск в интернете, выполнение кода, запросы к базе данных
Это значит, что LangChain — это не про RAG. RAG на нём тоже делается, но фреймворк заточен шире. Если вам нужен чат-бот с памятью, который ходит в вашу CRM и умеет запускать скрипты, — LangChain подходит лучше.
Из минусов: кривая обучения круче. Документация долгое время была хаотичной, часть API менялась между версиями. Сейчас стало получше, но всё равно часть туториалов в интернете уже устарела.
LlamaIndex — это про поиск
Раньше он назывался GPT Index. Сменил имя — и философию. LlamaIndex заточен вокруг одной задачи: загрузить документы, разбить на куски, построить индекс и эффективно из него доставать релевантные фрагменты для запроса.
С LlamaIndex удобно:
- быстро поднять RAG над своей базой знаний
- гибко настраивать стратегии индексации и поиска — BM25, векторный поиск, гибридный подход
- использовать разные chunking-стратегии под разные типы документов
- подключать практически любой векторный движок: Chroma, FAISS, Pinecone, Weaviate
Если вам нужен именно поисковик по документам — LlamaIndex сделает это с меньшим количеством кода и с лучшим контролем над качеством retrieval.
Обратная сторона: всё остальное — агенты, tool calling, память, цепочки действий — в LlamaIndex есть, но это не его основной фокус. Приходится либо дописывать руками, либо подключать LangChain в качестве надстройки.
Когда что брать
Вот моя шпаргалка, которую составил после пары недель возни с обоими:
Бери LangChain, если:
- строишь сложного агента, а не просто поиск по документам
- нужен multi-step workflow: модель читает документ → принимает решение → вызывает внешний сервис → возвращает результат
- хочешь единый фреймворк для разных сценариев
- работаешь с memory — чат-бот, который помнит контекст нескольких сессий
Бери LlamaIndex, если:
- тебе нужен качественный RAG и всё
- важно контролировать индексацию и retrieval — разные стратегии для разных документов
- хочешь минимум обвязки и быстрый старт
- у тебя специфический источник данных, который проще подключить через LlamaIndex-коннекторы
А что если задача не укладывается в одну категорию? Тогда третий вариант — использовать их вместе. LlamaIndex берёт на себя индексацию и retrieval, LangChain — цепочку и агентскую логику. Многие так и делают, это нормальная практика.
Что в итоге
Прямого ответа «тот лучше» нет. Это разные инструменты для разных задач, и сравнивать их как конкурентов — всё равно что спрашивать, что лучше, отвёртка или молоток.
Мой субъективный порядок действий: сначала пойми задачу. Если нужен просто поиск по документам — попробуй LlamaIndex, будет быстрее. Если нужен умный агент, который действует, а не только отвечает, — начинай с LangChain. Ну а если задача сложная и непонятная — ставь обе библиотеки и экспериментируй, других способов разобраться всё равно нет.
