Установка, пакеты и первый запуск
Разбираемся в модульной структуре пакетов LangChain и делаем первый вызов.
langchain-core — пакет с базовыми абстракциями (Runnable, промпты, сообщения); конкретные провайдеры живут в отдельных пакетах-интеграциях.
Почему пакетов несколько
Раньше весь LangChain был одним большим пакетом, и обновление ломало проекты. Теперь он разбит на части. Это намеренное архитектурное решение: ядро меняется редко и стабильно, а интеграции с провайдерами обновляются часто и независимо.
| Пакет | Что внутри |
langchain-core | базовые абстракции: Runnable, сообщения, промпты, парсеры |
langchain-openai | интеграция с моделями OpenAI |
langchain-community | множество сторонних интеграций (загрузчики, хранилища) |
langchain | высокоуровневые цепочки и агенты, собранные из ядра |
Установка и ключи
Ставим только то, что нужно для конкретного провайдера:
pip install langchain langchain-openaiКлюч API не зашивают в код — его кладут в переменную окружения, чтобы случайно не закоммитить секрет в репозиторий:
export OPENAI_API_KEY="sk-..."Первый вызов
Минимальная программа: создаём chat-модель и отправляем сообщение.
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini", temperature=0)
response = model.invoke("Назови три преимущества модульной архитектуры")
print(response.content)Как работает под капотом
Метод invoke() внутри: сериализует ваш ввод в формат сообщений, читает ключ из переменной окружения, отправляет HTTP-запрос к API провайдера, дожидается ответа и оборачивает его в объект AIMessage. Параметр temperature=0 делает ответы максимально детерминированными — это удобно, когда вы отлаживаете цепочку и хотите воспроизводимости. Идея единого invoke() в том, что код приложения не зависит от того, какой именно провайдер за ним стоит: поменяли класс модели — остальная цепочка не изменилась.
Частые ошибки
- Старый импорт.
from langchain.llms import OpenAI— устаревший путь. Сейчас провайдер импортируется из своего пакета:from langchain_openai import ChatOpenAI. - Ключ в коде. Хардкод
api_key="sk-..."приводит к утечке секрета через git. Используйте переменные окружения или менеджер секретов. - Лишние зависимости. Не нужно ставить интеграции всех провайдеров сразу — это раздувает окружение и тянет конфликты версий.
Итог
- LangChain модульный: ядро + интеграции + высокоуровневый пакет.
- Устанавливайте только нужные интеграции, ключи держите в переменных окружения.
- Первый вызов — это
model.invoke("текст"), ответ приходит какAIMessage. temperature=0даёт воспроизводимость при отладке.