Собрался я недавно делать RAG-пайплайн для внутренней базы знаний. Открыл документацию LangChain, полистал часа два — и понял, что у меня голова идёт кругом. Сначала пытался разобраться в цепочках (chains), потом упёрся в «агентов», дальше увидел «LCEL» и совсем загрустил. Переключился на LlamaIndex — и дело пошло. Но это не значит, что LlamaIndex лучше. Просто для моей задачи он подошёл иначе.
Разберусь, в чём реальная разница — не в маркетинговых слоганах, а на практике.
Что это вообще такое
LangChain — это фреймворк-конструктор. Он даёт инструменты, чтобы собирать из них цепочки обработки текста, подключать базы данных, вызывать модели, строить агентов, которые сами решают, что делать дальше. Идея простая: комбинируете компоненты как детали конструктора — и вперёд.
LlamaIndex — если упрощать, инструмент для работы с данными. Берёте документы, разбиваете на куски (chunks), загружаете в векторную базу, а потом ищете по ней релевантные фрагменты. Вся остальная обвязка вторична.
Звучит похоже. На практике — это разные инструменты для разных задач.
LangChain: когда берёшь, если хочешь гибкость
LangChain хорош, когда нужна сложная логика. Допустим, вы строите систему, где модель сама решает, какую базу данных запросить, потом результат отправляет в другую цепочку, там что-то проверяет, и только потом отдаёт ответ. Это то, для чего он придуман.
Модуль LCEL (LangChain Expression Language) позволяет описывать такие пайплайны относительно чисто:
retriever | prompt | model | output_parser
Выглядит понятно, пока не начнёте добавлять условия, ветвления, память диалога. Потом становится сложнее — но это честная сложность вашей задачи, а не фреймворка.
Где LangChain реально выигрывает:
- Сложные multi-step сценарии с ветвлением
- Агентные системы (agentic workflows)
- Проекты, где нужно подключать много разных источников данных в одном пайплайне
- Когда важна возможность быстро менять LLM-провайдера
Где он разочаровывает:
- Документация огромная, но разрозненная. Одно и то же можно сделать десятью способами — и непонятно, какой правильный.
- API меняется часто. Код из примеров полугодовой давности может не работать.
- Для простого RAG это оверкилл. Писать придётся больше, чем нужно.
LlamaIndex: когда берёшь, если работаешь с данными
LlamaIndex заточен под работу с документами. Это не значит, что он простой — но хотя бы не пытается быть всем сразу.
Query Engines берут ваш индекс и возвращают ответ. Router сам решает, какой движок использовать. Synthesizer собирает финальный ответ из найденных фрагментов.
Для RAG это удобно. Загрузили документы, создали индекс — и поиск по релевантности уже работает. Дальше наворачиваете поверх ретривал, ранжирование, гибридный поиск — что нужно.
Где LlamaIndex реально выигрывает:
- Быстро запустить RAG на своей базе знаний
- Чистая работа с индексами и ретривалом
- Меньше решений «какой подход выбрать» — фреймворк подталкивает к одному хорошему пути
- Structured data extraction — извлечение структурированных данных из неструктурированных документов
Где он подводит:
- Агентные сценарии реализованы хуже, чем в LangChain
- Если нужно что-то сильно выходящее за рамки «загрузил — нашёл — ответил», упрётесь в ограничения
- Экосистема меньше, чем у LangChain
Если совсем коротко
LangChain — конструктор с открытым набором деталей. Можно собрать что угодно, но нужно понимать, что собираешь.
LlamaIndex — отвёртка. Делает одно хорошо, но не для всего подходит.
Что я выбираю и почему
Для своих проектов я пришёл к простой схеме. Если задача — «возьми документы и отвечай на вопросы» — беру LlamaIndex. Если задача сложнее, с ветвлением и автоматическими решениями — смотрю в сторону LangChain.
Есть нюанс. За последний год граница размылась. В LlamaIndex появились агенты, в LangChain улучшили работу с данными. Можно использовать оба вместе — LlamaIndex как движок ретривала, LangChain как оркестратор. Не идеально (два слоя абстракции), но на практике работает.
Ещё один момент: если вы начинающий и хотите просто попробовать — начните с LlamaIndex. Порог входа ниже, результат получите быстрее, меньше шансов заблудиться в документации.
Если у вас за плечами несколько проектов с LLM и вы точно знаете, что хотите сделать, — откройте LangChain и не пугайтесь. Да, там много сущностей. Но если нужна именно гибкость, оно того стоит.
Вместо вывода
Правильного ответа «что лучше» не существует. Есть правильный ответ для конкретной задачи.
Возьмите LlamaIndex, если данные и вопросы — основная задача. Быстро, понятно, минимум решений.
Возьмите LangChain, если нужен сложный пайплайн с ветвлением, агентами, памятью, интеграцией с кучей внешних систем.
А если не уверены — попробуйте оба на кошках, то есть на учебном проекте. Разница в ощущениях станет понятна за вечер.
