LangChain vs. LangGraph: официальные лица рассказывают, что выбрать

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

LangChain vs. 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 способ вызова инструмента зависит от того, выполняется ли ряд шагов последовательно в цепочке, или используются только возможности агента (не определенные явно в цепочке).

  • Инструменты включаются в цепочку как предопределенные этапы, что означает, что они не обязательно вызываются агентом динамически, а скорее решают, какие инструменты будут вызваны в момент разработки цепочки.
  • Когда агент не определен в цепочке, он обладает большей автономией и может сам решать, какой инструмент вызывать и когда, основываясь на списке инструментов, к которым у него есть доступ.

Пример процесса для цепного подхода:

LangChain vs. LangGraph:官方告诉你该如何选择

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

LangChain vs. LangGraph:官方告诉你该如何选择

LangGraph

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

Содержит пример потока диаграмм для Агента:

LangChain vs. LangGraph:官方告诉你该如何选择

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

LangChain vs. LangGraph:官方告诉你该如何选择

Диалог об истории и памяти

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, можно рассмотреть возможность использования обоих вариантов.

В сочетании эти два решения могут в полной мере использовать свои преимущества для создания более гибких и мощных рабочих процессов с использованием искусственного интеллекта.

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...