Месяца три назад я затеял небольшой проект — чат-бот, который отвечает на вопросы по внутренней документации. Задача классическая, решений море. Полез в интернет и сразу наткнулся на один и тот же спор в каждом треде: LangChain или LlamaIndex? Причём каждый второй отвечал уверенно — и с противоположным мнением.
Я потратил примерно неделю, чтобы разобраться не теоретически, а руками. Вот что у меня вышло.
Откуда вообще взялась путаница
Оба инструмента появились почти одновременно — в конце 2022-го, на волне хайпа вокруг ChatGPT. И оба отвечают на один вопрос: как прикрутить LLM к реальным данным. Поэтому на первый взгляд — да, похоже на одно и то же.
Но нет. Каждый из них пришёл к этой задаче с разной стороны.
LangChain изначально строился как фреймворк для цепочек. Берёшь модель, добавляешь инструменты, память, внешние вызовы, соединяешь в пайплайн. Идея в том, что сложное поведение агента можно собрать из кубиков. Это удобно, когда тебе нужно: сначала поищи в интернете, потом проверь в базе, потом сформулируй ответ и брось в Slack. Много шагов, много компонентов.
LlamaIndex пошёл другим путём. Он с самого начала заточен на одну вещь — качественно загрузить данные, проиндексировать их и достать нужное. Всё остальное вокруг этого. Авторы явно думали о том, как сделать retrieval по-настоящему хорошим, а не просто рабочим.
Где LangChain выигрывает
Я попробовал LangChain первым. Документация большая, примеров много, сообщество огромное — ответ на любой вопрос находился за пять минут. Когда разбираешься в новой теме, это реально приятно.
Но главное — LangChain хорош именно для агентов. Когда задача не сводится к «найди и ответь», а выглядит как сценарий с ветвлениями, инструментами, состоянием. Я экспериментировал с агентом, который сам решает: искать ли в документации, дёргать ли внешний API или просто ответить по памяти. Вот там LangChain чувствовался органично — компоненты действительно складываются в логичную схему.
Ещё одна сильная сторона — интеграции. LangChain подключается примерно ко всему на свете: десятки векторных баз, модели от разных провайдеров, инструменты вроде поиска или браузера. Нужна экосистема — она тут есть.
Минус, который я почувствовал быстро: абстракции иногда мешают. Что-то пошло не так в цепочке — и ты отлаживаешь уже не логику, а разбираешься, в каком именно слое потерялся контекст. Я провёл пару часов, пытаясь понять, почему память агента ведёт себя не так, как ожидалось. Оказалось — особенность конкретного класса памяти, нигде внятно не задокументированная.
Где LlamaIndex выигрывает
Когда я переключился на LlamaIndex, первое ощущение — меньше магии, больше контроля над тем, что происходит с данными.
Для RAG-задач — когда хочешь, чтобы модель отвечала на основе твоих документов — LlamaIndex даёт заметно больше инструментов именно на этапе индексирования и поиска. Разные стратегии разбивки текста на чанки, несколько режимов поиска, иерархические индексы. Я попробовал поднять качество поиска через hybrid retrieval: с LlamaIndex это заняло полчаса. В LangChain я бы возился дольше.
На практике мне ещё понравилась работа с форматами. Загрузить PDF, Notion, базу данных, набор Markdown-файлов — у LlamaIndex есть готовые загрузчики, и они работают предсказуемо.
Агентские возможности у LlamaIndex тоже есть, но попроще. Для несложных сценариев хватает, но если нужен агент с реально сложной логикой — я бы смотрел в сторону LangChain или вовсе на LangGraph.
Как я в итоге принял решение
После недели экспериментов у меня сложилось простое правило.
Если центр задачи — данные: нужно хорошо искать по документам, правильно разбить тексты, чтобы ответы опирались на конкретные источники — беру LlamaIndex. Для моего бота по документации он подошёл лучше. Retrieval получился качественнее, и я понимал, что происходит на каждом шаге.
Если центр задачи — оркестрация: нужен агент с памятью, с инструментами, с разветвлёнными сценариями, нужно соединить несколько сервисов в одну логику — беру LangChain. Экосистема богаче, и для сложных пайплайнов она реально даёт фору.
Есть и третий вариант, который я сейчас проверяю — использовать их вместе. LlamaIndex как слой работы с данными, LangChain как оркестратор. Теоретически они неплохо дружат. Практически — пока смешанные впечатления, но это отдельная история.
Что в итоге
Честно говоря, я немного потратился на это сравнение — неделя экспериментов, несколько перезапусков, один раз пришлось выбросить половину кода и начать заново. Зато теперь я выбираю инструмент за десять минут, а не гадаю по обзорам на Medium.
Оба фреймворка живые, оба активно развиваются. Вопрос не «какой лучше», а «что мне нужно сделать». Retrieval — LlamaIndex. Агент — LangChain. И то, и другое — добро пожаловать в клуб людей, которые тоже пока разбираются.
