LangChain vs. LangGraph: официальные лица рассказывают, что выбрать
В настоящее время область генеративного ИИ быстро развивается, появляются новые основы и технологии. Поэтому читатели должны понимать, что содержание, представленное в этой статье, может быть актуальным. В этой статье мы подробно рассмотрим два доминирующих фреймворка для создания LLM-приложений - LangChain и LangGraph - и проанализируем их сильные и слабые стороны, чтобы помочь вам выбрать наиболее подходящий инструмент.

Компоненты LangChain и LangGraph Foundation
Понимание основных элементов обоих фреймворков может помочь разработчикам глубже понять ключевые различия в том, как они работают с основной функциональностью. В следующих описаниях не перечислены все компоненты каждого фреймворка, но они призваны дать четкое представление об их общем дизайне.
LangChain
LangChain можно использовать двумя основными способами: как последовательную цепочку предопределенных команд (Chain) и как LangChain Agent, который отличается по инструментарию и организации. Цепочка использует предопределенный линейный рабочий процесс, в то время как агент выступает в роли координатора и может принимать более динамичные (нелинейные) решения.
- Цепь: Комбинация шагов, которая может включать вызовы LLM, агентов, инструментов, внешних источников данных и процедурного кода. Цепочки могут разделять один процесс на несколько путей, основанных на логическом условном ветвлении.
- Агент или магистр праваХотя LLM сам по себе способен генерировать ответы на естественном языке, агент сочетает LLM с дополнительными возможностями, которые позволяют ему рассуждать, вызывать инструмент и пытаться вызвать инструмент в случае неудачи.
- Инструмент: это функции кода, которые могут быть вызваны в цепочке или запущены Агентом для взаимодействия с внешней системой.
- Подсказка: Включает в себя подсказки системы (чтобы указать, как модель должна выполнить задачу и доступные инструменты), вводимую информацию из внешних источников данных (чтобы обеспечить больший контекст для модели) и задачи ввода данных пользователем.
LangGraph
LangGraph использует другой подход к построению рабочих процессов ИИ. Как следует из названия, он организует рабочие процессы в виде графа. Благодаря возможности гибкого взаимодействия между ИИ-агентами, процедурным кодом и другими инструментами, он лучше подходит для сложных сценариев работы приложений, где линейные цепочки, ветвящиеся цепочки или простые системы агентов недостаточны. LangGraph разработан для обработки более сложной условной логики и циклов обратной связи, и является более мощным, чем LangChain.
- ГрафикLangGraph также поддерживает циклические графы, которые создают циклы и механизмы обратной связи, позволяющие обращаться к определенным узлам несколько раз.
- Узел: Указывает на шаг в рабочем процессе, например, запрос LLM, вызов API или выполнение инструмента.
- Кромка и условная кромкаГрани используются для соединения узлов и определения потока информации, чтобы выход одного узла использовался в качестве входа для следующего. Условные ребра позволяют передавать информацию от одного узла к другому при выполнении определенных условий. Разработчик может настраивать эти условия.
- ГосударствоСостояние - это определяемый разработчиком переменный объект TypedDict, который содержит всю необходимую информацию, необходимую для текущего выполнения графа. Состояние - это определяемый разработчиком переменный объект TypedDict, который содержит всю необходимую информацию, необходимую для текущего выполнения графа. LangGraph автоматически обновляет состояние на каждом узле.
- Агент или магистр праваLLM в графе отвечает только за генерирование текстовых ответов на входные данные. Возможности агента, с другой стороны, позволяют графу содержать несколько узлов, представляющих различные компоненты агента (например, рассуждения, выбор инструмента и выполнение инструмента). Агент может решать, по каким путям двигаться в графе, обновлять состояние графа и выполнять более сложные задачи, чем просто генерация текста.
Короче говоря, LangChain лучше подходит для линейных и инструментальных вызовов, а LangGraph - для сложных, многопутевых и AI рабочих процессов с механизмами обратной связи.
Различия между LangChain и LangGraph в том, как обрабатывается основная функциональность
LangGraph и LangChain частично совпадают по своим возможностям, но подходят к проблеме по-разному: LangChain фокусируется на линейных рабочих процессах (с помощью цепочек) или различных шаблонах ИИ-агентов, а LangGraph - на создании более гибких, тонких, основанных на процессах рабочих процессов, в которые могут быть включены ИИ-агенты, вызовы инструментов, процедурный код и т. д.
В целом, LangChain имеет относительно низкую кривую обучения, поскольку обеспечивает большую инкапсуляцию абстракций и предопределенные конфигурации, что делает LangChain более простым в применении для простых сценариев использования. LangGraph, с другой стороны, позволяет более тонко настраивать дизайн рабочего процесса, что означает, что он менее абстрактен и разработчикам нужно больше учиться, чтобы использовать его эффективно.
Вызов инструмента
LangChain
В LangChain способ вызова инструмента зависит от того, выполняется ли ряд шагов последовательно в цепочке, или используются только возможности агента (не определенные явно в цепочке).
- Инструменты включаются в цепочку как предопределенные этапы, что означает, что они не обязательно вызываются агентом динамически, а скорее решают, какие инструменты будут вызваны в момент разработки цепочки.
- Когда агент не определен в цепочке, он обладает большей автономией и может сам решать, какой инструмент вызывать и когда, основываясь на списке инструментов, к которым у него есть доступ.
Пример процесса для цепного подхода:

Это пример работы метода Agent:

LangGraph
В LangGraph инструмент обычно представлен в виде узла на графе. Если граф содержит агента, то агент отвечает за принятие решения о том, какой инструмент вызвать, основываясь на своих способностях к рассуждениям. Когда агент выбирает инструмент, рабочий процесс переходит к соответствующему узлу инструмента для выполнения операции инструмента. Граница между агентом и узлом инструмента может содержать условную логику, которая добавляет дополнительную логику суждения, чтобы решить, выполнять инструмент или нет. Таким образом, разработчик может получить более тонкий контроль. Если в графе нет агента, инструмент вызывается аналогично цепочке LangChain, т. е. инструмент выполняется в рабочем процессе на основе предопределенной условной логики.
Содержит пример потока диаграмм для Агента:

Пример потока диаграммы без агента:

Диалог об истории и памяти
LangChain
LangChain предоставляет встроенный слой абстракции для работы с историей разговора и памятью. Он поддерживает управление памятью на разных уровнях детализации, таким образом контролируя объем жетон количество, в основном следующими способами:
- Полная история разговоров в сеансе (Полная история разговоров в сеансе)
- Обобщенная версия истории разговора
- Память, определяемая пользователем (CDM)
Кроме того, разработчики могут настроить систему долговременной памяти так, чтобы хранить историю диалогов во внешней базе данных и извлекать соответствующие воспоминания при необходимости.
LangGraph
В LangGraph состояние отвечает за управление памятью, которая хранит информацию о состоянии, записывая переменные, определенные в каждый момент времени. Состояние может включать в себя:
- Диалог с историей
- Этапы выполнения мандата
- Последний вывод языковой модели
- Другая важная информация
Состояние может передаваться между узлами, так что каждый узел имеет доступ к текущему состоянию системы. Однако LangGraph сам по себе не обеспечивает долговременной памяти на все сессии. Если разработчикам необходимо хранить память постоянно, они могут ввести специальные узлы для хранения памяти и переменных во внешней базе данных для последующего извлечения.
Готовые к использованию возможности RAG
LangChain
LangChain поддерживает сложные RAG рабочих процессов и предоставляет сложный набор инструментов, облегчающих разработчикам интеграцию RAG в их приложения. Например, он предоставляет:
- Загрузка документов
- Разбор текста
- Создание встраивания
- Векторное хранение
- Возможности извлечения (Возможности извлечения)
Разработчики могут напрямую использовать API, предоставляемые LangChain (такие как langchain.document_loaders
, иlangchain.embeddings
ответить пением langchain.vectorstores
) для реализации рабочих процессов RAG.
LangGraph
В LangGraph RAG должны быть разработаны разработчиком и реализованы как часть структуры графа. Например, разработчики могут создать отдельные узлы для каждого из них:
- Разбор документов
- Вычисления с вкраплениями (Вычисления с вкраплениями)
- Семантический поиск (извлечение)
Эти узлы могут быть соединены друг с другом нормальными или условными гранями, а состояние отдельных узлов может использоваться для передачи информации, чтобы обмениваться данными между различными этапами конвейера RAG.
Параллелизм
LangChain
LangChain позволяет параллельно выполнять несколько цепочек или Агентов, которые могут быть выполнены с помощью RunnableParallel
класс для реализации базовой параллельной обработки.
Однако если требуются более сложные параллельные вычисления или асинхронные вызовы инструментов, разработчикам придется воспользоваться такими библиотеками Python, как asyncio
) Самореализация.
LangGraph
LangGraph естественным образом поддерживает параллельное выполнение узлов при условии, что между ними нет зависимостей (например, выход одного LLM не может быть использован в качестве входа для следующего). Это означает, что несколько Агентов могут работать одновременно, если они не являются взаимозависимыми узлами.
Также поддерживается LangGraph:
- пользоваться
RunnableParallel
Запуск нескольких графиков - С помощью Python
asyncio
Инструмент параллельного вызова библиотек
Логика повторных попыток и обработка ошибок
LangChain
Обработка ошибок в LangChain должна быть явно определена разработчиком, что можно сделать с помощью:
- Внедрение логики повторных попыток в цепочку (Retry Logic)
- Обработка отказов вызова инструмента в агенте
LangGraph
LangGraph может встроить логику обработки ошибок непосредственно в рабочий процесс, сделав обработку ошибок отдельным узлом.
- Когда задача не выполняется, можно перейти к другому узлу обработки ошибок или повторить попытку на текущем узле.
- Сбойные узлы перепробуются по отдельности, а не весь рабочий процесс выполняется заново.
- Таким образом, диаграмма может продолжить выполнение с того места, где произошел сбой, без необходимости начинать все с нуля.
Если ваша задача включает в себя несколько этапов и вызовов инструментов, этот механизм обработки ошибок может быть очень важен.
Как выбрать между LangChain и LangGraph?
Разработчики могут:
- Используйте только LangChain
- Используйте только LangGraph
- Совместное использование LangChain и LangGraph
Также можно объединить возможности структурирования графов LangGraph с другими фреймворками Agent, такими как Microsoft's AutoGen, например, комбинируя AutoGen Агент как узел LangGraph.
LangChain и LangGraph имеют свои преимущества, и выбор подходящего инструмента может сбить с толку.
Когда выбирать LangChain?
Если разработчикам необходимо быстро создавать рабочие процессы ИИ, вот несколько сценариев, при которых стоит задуматься о выборе LangChain:
- линейная задача: Предопределенные рабочие процессы для поиска документов, создания текстов, обобщения и т. д.
- ИИ-агент требует динамичного принятия решенийно не требует тонкого управления сложными процессами.
Когда стоит выбрать LangGraph?
Если сценарий приложения требует нелинейного рабочего процесса, рассмотрите LangGraph для следующих ситуаций:
- Задача предполагает динамическое взаимодействие множества компонентов.
- Требуются условные суждения, сложная логика ветвления, обработка ошибок или параллельное выполнение.
- Разработчики готовы самостоятельно реализовать некоторые функции, не предусмотренные LangChain.
Когда следует использовать LangChain и LangGraph вместе?
Если вы хотите воспользоваться как легкодоступными возможностями абстракции LangChain (например, компонентами RAG, памятью диалогов и т. д.), так и возможностями нелинейной оркестровки LangGraph, можно рассмотреть возможность использования обоих вариантов.
В сочетании эти два решения могут в полной мере использовать свои преимущества для создания более гибких и мощных рабочих процессов с использованием искусственного интеллекта.
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...