Прямо сейчас у меня перед глазами — чат с разработчиком, который три недели назад начал пилить RAG-систему. «Зеро, — пишет он, — я сделал всё в LangChain, а потом узнал про LlamaIndex и теперь не знаю, переписывать или нет». Знакомая ситуация? Я бы солгал, если бы сказал, что не проходил через то же самое.
Пост не будет таблицей сравнения — в них теряются нюансы. Я разберу, чем реально отличаются эти фреймворки, где каждый спотыкается и как понять, что подходит твоему проекту.
Это вообще про одно и то же?
Короткий ответ — нет. LangChain и LlamaIndex решают разные задачи, даже если на первый взгляд кажутся взаимозаменяемыми.
LangChain — это фреймворк для построения цепочек и агентов вокруг LLM. Индексация и поиск здесь скорее побочный эффект. Главная фишка: логика описывается как последовательность шагов, каждый шаг принимает результат предыдущего, подмешивает память, вызывает внешние инструменты. Это orchestration — дирижирование.
LlamaIndex — инструмент, заточенный на работу с данными. Его задача: взять твои документы и сделать так, чтобы LLM могла по ним эффективно искать. Векторные индексы, гибридный поиск, метаданные, повторное индексирование — всё из коробки. Это retrieval — извлечение.
Оба умеют делать RAG, но делают это по-разному.
Что конкретно умеет LangChain
Когда я впервые открыл LangChain, возникла мысль: «О, тут можно собрать что угодно». LCEL — LangChain Expression Language — позволяет писать цепочки почти как pipeline в pandas: берёшь компонент, присоединяешь следующий, и так далее.
Модулей в LangChain практически на все случаи: чаты, память, инструменты, агенты, retrieval. Подключить можно почти любую LLM и любой векторный сторадж. Экосистема огромная — документация, интеграции, шаблоны, community.
Но огромная экосистема — это и минус. Модули бывают разного качества. То, что работает в примерах, может сломаться на реальных данных. Пару раз ловил себя на том, что трачу время не на задачу, а на обход багов в абстракциях LangChain.
Что конкретно умеет LlamaIndex
LlamaIndex при первом знакомстве выглядит скромнее. Меньше хайпа, меньше туториалов на YouTube. Зато то, что есть — работает плотнее.
Индексация здесь сделана грамотнее. Загружаешь документы, настраиваешь парсеры (медиумы, PDF, Notion, базы данных — чего только нет), выбираешь стратегию чанкирования и строишь индекс. Индексаторов больше десятка: VectorIndex, SummaryIndex, KeywordTableIndex, KnowledgeGraphIndex. Можно комбинировать — и это реально удобно.
Retriever-часть тоже гибче. Гибридный поиск по метаданным и векторам, приоритизация свежести, reranking — всё настраивается. Я собирал на LlamaIndex систему, которая ищет по 300 000 документам — и это не тормозило.
Query Engine в LlamaIndex — готовый интерфейс: отправил запрос — получил ответ с цитатами из источников. Минимум кода.
Где они пересекаются
Если задача — простой RAG (загрузил документы, задал вопрос), оба фреймворка справятся. Разница будет не в результате, а в количестве кода и в том, насколько он будет читаемым через месяц.
LangChain при простом RAG просит чуть больше бойлерплейта. LlamaIndex — чуть меньше. Но если задача усложняется, картина меняется.
Главное различие, которое я понял на практике
LangChain думает категориями «шаг A → шаг B → шаг C». LlamaIndex думает категориями «данные → индекс → запрос → ответ».
Если нужен сложный сценарий, где LLM вызывает внешние API, принимает решения о следующем действии, работает с памятью диалога и управляет инструментами — это территория LangChain. Агенты в LangChain мощнее.
Если нужен качественный поиск по большому массиву документов, возможность тонко настроить чанкирование и ретривал, фильтрацию по метаданным — это LlamaIndex.
Я однажды пытался запихнуть сложный retrieval в LangChain — писал кастомные ретриверы, костылил пайплайн. Потом переписал на LlamaIndex за полтора дня. Стало чище и быстрее. Другой раз пытался на LlamaIndex сделать multi-agent orchestrator — понял через несколько часов, что изобретаю LangChain заново.
Когда что выбирать
Выбирай LangChain, если:
- строишь чат-бота с памятью и инструментами
- нужен multi-agent workflow
- хочешь готовые интеграции с облачными сервисами
- команда уже знакома с LangChain и экосистема важна
Выбирай LlamaIndex, если:
- главное — поиск по большому количеству документов
- нужна гибкая настройка индексации
- хочешь качественный retrieval с минимумом кода
- важна производительность на больших корпусах
А если нужны оба — никто не запрещает. Многие используют LlamaIndex для retrieval, а LangChain — для orchestration. Это не ересь, это нормальная архитектура.
Чего я бы не делал
Не начинал бы с выбора фреймворка. Начни с архитектуры: какие данные есть, какие запросы будут приходить, какой нужен recall и latency. Потом смотри, какой фреймворк лучше закрывает твои требования.
И не стоит переписывать работающий проект из одного в другой только потому, что «говорят, другой лучше». Если уже есть рабочий RAG на LangChain и он решает задачу — LlamaIndex не сделает его магически умнее.
Вместо вывода
Прямо сейчас на столе прототип на LlamaIndex. Через неделю, возможно, он станет частью более крупной системы на LangChain. Это не противоречие — просто разные инструменты для разных слоёв задачи.
Если хочешь, чтобы я разобрал что-то конкретнее — пиши в комментариях. Могу погрузиться в детали чанкирования, поиска по метаданным или в архитектуру агентов. Что ближе — то и разберу подробнее.
