Что такое LangChain и какую проблему он решает
Урок объясняет, зачем поверх обычного API LLM понадобился целый фреймворк.
LangChain — фреймворк для построения приложений на основе больших языковых моделей: он стандартизирует работу с моделями, промптами, памятью, источниками данных и инструментами.
От одного вызова к приложению
Сделать один запрос к LLM просто: отправил текст — получил ответ. Но реальное приложение почти никогда не сводится к одному вызову. Нужно подставить пользовательский ввод в шаблон промпта, прогнать ответ через парсер, подмешать результаты поиска по базе знаний, запомнить предыдущие реплики диалога, иногда дать модели инструменты и позволить ей самой решать, что вызвать. Каждый из этих кусочков можно написать руками, но тогда вы быстро получаете спагетти из строк, словарей и обработчиков ошибок.
LangChain предлагает набор переиспользуемых абстракций для этих кусочков и единый способ соединять их в конвейер. Вы перестаёте думать про «склей строку и отправь POST-запрос» и начинаете думать про «шаблон → модель → парсер».
Из чего состоит фреймворк
Базовый набор строительных блоков LangChain:
- Models — обёртки над LLM и chat-моделями (OpenAI, Anthropic, локальные и др.) с единым интерфейсом.
- Prompts — шаблоны промптов с подстановкой переменных и few-shot-примерами.
- Chains / LCEL — способ соединять компоненты в конвейер через оператор
|. - Output parsers — превращают текст ответа в структуры данных.
- Memory — хранение истории диалога между запросами.
- Retrieval — загрузчики документов, эмбеддинги, векторные хранилища и retrievers для RAG.
- Agents & Tools — модель сама выбирает, какой инструмент вызвать.
Как работает под капотом
В основе современного LangChain лежит интерфейс Runnable: почти каждый компонент (модель, промпт, парсер) умеет метод invoke(). Когда вы соединяете их оператором |, получается новый Runnable, который прогоняет данные через все звенья по очереди. Это и есть LCEL — LangChain Expression Language. Благодаря единому интерфейсу любая цепочка автоматически поддерживает синхронный и асинхронный вызовы, пакетную обработку (batch) и стриминг.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template("Объясни {topic} простыми словами")
model = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | model # LCEL: шаблон → модель
print(chain.invoke({"topic": "рекурсия"}).content)Частые ошибки
- Тащить LangChain туда, где он не нужен. Для единичного простого запроса хватит прямого SDK. Фреймворк окупается, когда есть конвейер, RAG, память или агенты.
- Путать пакеты. Современный LangChain разбит на
langchain-core, интеграции (langchain-openaiи т.п.) иlangchain. Старые туториалы сfrom langchain.llms import OpenAIчасто устарели. - Ждать «магии». LangChain не делает модель умнее — он лишь организует код вокруг неё.
Итог
- LangChain — это оркестрация LLM-приложений, а не сама модель.
- Ключевые блоки: модели, промпты, цепочки (LCEL), парсеры, память, retrieval, агенты.
- В основе всего — единый интерфейс
Runnableс методомinvoke(). - Фреймворк окупается на конвейерах, RAG, диалогах и агентах, а не на одиночном запросе.