Структура фреймворка LangChain
Прежде чем мы приступим к практике и начнём делать какие-то практические примеры с фреймворком LangChain, важно немножко разобраться, каким образом этот фреймворк устроен, из каких пакетов он состоит. Нам придётся использовать разные пакеты в своей работе для решения тех или иных задач.
Для решения этих задач мы должны понимать, какой модуль что обозначает. Здесь важно понимать, с какой версией LangChain мы работаем. Есть старая версия, где LangChain используется как монолитное приложение. И есть новая версия LangChain, где этот фреймворк разбит на отдельные модули.
Ранее все компоненты LangChain находились в одном большом пакете. Эта архитектура была простой, но со временем стала громоздкой. Нам приходилось скачивать огромный пакет для того, чтобы работать с этим инструментом.
С развитием искусственного интеллекта появляется всё больше инструментов, которые нужно поддерживать. Если не перейти к модульной структуре, то этот пакет будет просто огромным. Поэтому разработчики LangChain приняли решение и разбили всё на отдельные модули, которые мы можем по отдельности импортировать, каждый из которых весит намного меньше.
Основные модули LangChain
Как это всё устроено? У нас есть базовый модуль LangChain Core, с которым будут взаимодействовать все остальные модули, которые вы будете устанавливать в систему. Это модули для взаимодействия с конкретным провайдером, модуль LangChain Community и другие. Вот такая новая экосистема LangChain получается.
LangChain Core — это базовые функции фреймворка. С ними могут взаимодействовать все остальные модули, которые мы можем импортировать в нашу систему. Это фундаментальный пакет, обязательный для любой работы с LangChain, и содержит только самое необходимое. Главная его характеристика — минимум зависимостей, что обеспечивает легковесность и стабильность ваших приложений.
Что входит в состав LangChain Core? Это три основные группы компонентов:
- абстракции — базовые интерфейсы, на которых строится вся логика: Chat, Embeddings, Vector Store, Retriever и так далее
- LangChain Expression Language — декларативный способ построения композиции цепочек
- базовые схемы и типы
Следующий важный модуль, который мы тоже должны импортировать — это LangChain Community. Это пакет, который содержит много готовых коннекторов к сторонним сервисам, поддерживаемых сообществом. Используйте его, когда вам нужен доступ к широкому спектру инструментов или когда вы находитесь на этапе проектирования и экспериментов.
Что находится в LangChain Community? Это провайдеры для больших языковых моделей LLM: OpenAI, Anthropic, Llama. Каждый из этих провайдеров вынесен в отдельный модуль. Когда мы Community установили, у нас появляется возможность взаимодействовать со сторонними провайдерами без изучения всей их документации — просто прописываем, какой провайдер нам нужен.
Также LangChain Community отвечает за взаимодействие с векторными хранилищами, загрузчиками документов, инструментами для поиска, вызова API и так далее. Для многих популярных LLM-моделей созданы отдельные интеграции: OpenAI, Anthropic, Google Vertex и так далее. Со временем эти интеграции добавляются, и мы можем их использовать в своей работе.
Комбинирование пакетов
Набор пакетов будет зависеть от цели, которую преследует ваш проект:
- если нужна только базовая логика без внешних интеграций — установите только LangChain Core
- если работаете с конкретным провайдером, например, только с OpenAI — установите LangChain Core и LangChain OpenAI
- если экспериментируете с разными LLM-моделями, векторными базами данных и инструментами — потребуется LangChain Core, LangChain Community и модуль конкретного провайдера
Конечно, устанавливать отдельный пакет провайдера не обязательно. Вы можете писать код для взаимодействия с OpenAI самостоятельно и установить какой-то другой пакет. Но это стандартизация для разработчиков — мы пишем код в едином формате, используем одну и ту же библиотеку, и нам не нужно искать дополнительных решений.
Структура получается простой: LangChain Core, LangChain Community, LangChain Provider. Ничего особо сложного нет — вот эти три базовых модуля у нас с вами есть.