LangGraph: структура для создания и выполнения агентов ИИ на основе топологии направленных ациклических графов

Искусственный интеллект (ИИ) - это быстро развивающаяся область. Развиваются языковые модели, позволяющие агентам ИИ выполнять сложные задачи и принимать сложные решения. Однако по мере роста навыков этих агентов инфраструктура для их поддержки не успевает за ними.

LangGraph - революционная библиотека, призванная перевернуть представление об агентах искусственного интеллекта. Сборка и выполнение Реализация.

LangGraph представляет нового агентаСборка и выполнениеКонструктивная парадигма, которая рассматривает рабочие процессы агентов как структуры, основанные на топологии циклического графа.

 

Что такое LangGraph?

Важным преимуществом LangChain является возможность легко создавать пользовательские цепочки. Однако в LangChain отсутствует простой способ введения циклов в эти цепочки. Фактически, эти цепочки представляют собой направленные ациклические графы (DAG) - Как и большинство фреймворков для оркестровки данных.

При создании сложных LLM-приложений часто встречаются циклы во время выполнения. Эти циклы часто используют LLM для обоснования следующего действия в цикле. По сути, это эквивалентно запуску LLM в цикле for. Такие системы часто называют агентами.

Простейшая форма - цикл с двумя шагами:

  1. Вызовите LLM, чтобы определить, какое действие предпринять или какой ответ дать пользователю
  2. Выполните заданную операцию и вернитесь к шагу 1.

Эти шаги повторяются до тех пор, пока не будет сгенерирован окончательный ответ. Это цикл, который управляет агентом-исполнителем в сердце LangChain. Это очень простой цикл, но он также наиболее важен, потому что он передает почти все полномочия по принятию решений и рассуждениям в руки LLM.

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

Это управляемые процессы, которые LangChain называет "машинами состояний".

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

LangGraph создает эти машины состояний, задавая их в виде графов.

LangGraph построен поверх LangChain и полностью совместим с экосистемой LangChain.операционная совместимость. Он добавляет новую ценность, главным образом, благодаря простому способу создания диаграмм циклов. Это очень полезно при создании режимов выполнения агентов.

Такой подход позволяет Агентам демонстрировать более вариативное и нюансированное поведение, чем линейные модели исполнения их предшественников. Используя теорию графов, LangGraph предлагает новые способы разработки сложных сетевых систем Агентов.

LangGraph:基于有向无环图拓扑的AI Agent构建与执行框架 Рисунок: LangGraph для генерации кода

Пример: динамическая система вопросов и ответов

взять : Пользователь может предоставлять информацию модели шаг за шагом, а не отправлять всю информацию сразу.

Рецепт : Используйте циклическую диаграмму:

  1. Позвольте LLM сгенерировать первые ответы.
  2. Если ответ неполный или требуется дополнительная информация, создайте новый вопрос и продолжите спрашивать пользователя.
  3. пока пользователь не подтвердит, что проблема решена.

Структура диаграммы цикла

  • УзлыКаждый узел представляет собой определенную задачу или операцию, например, генерацию текста, ответ на вопрос, обработку данных и т.д.
  • Края: Связи между узлами указывают на порядок выполнения задачи, возможно, с условными суждениями.
  • Петляющий путь: Циклы образуются, когда выход узла нужно вернуть предыдущему узлу или когда его нужно выполнить многократно.
  • Состояние остановки: Циклические диаграммы подчиняются какому-либо условию завершения, например, когда качество результата соответствует требованиям, когда достигается заданное количество раз или когда срабатывает внешний сигнал остановки.

 

Почему стоит использовать LangGraph?

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

 

Используйте код, чтобы увидеть, как работает LangGraph

Функциональность LangGraph основана на нескольких базовых элементах:

  • Узлы. Это инструменты для функций или агентов.
  • Края. Определите пути выполнения и потоки данных в системе агентов, соединяющие узлы.
  • StateGraph. LangGraph позволяет сохранять постоянные данные между циклами выполнения, управляя и обновляя объекты состояния, при этом данные перетекают между узлами.

Рисунок : Основной рабочий процесс LangGraph

StateGraph

StateGraph это класс, представляющий граф. Вы создаете граф, передавая в него state определение для инициализации этого класса. Определение состояния представляет собой центральный объект состояния, который обновляется с течением времени. Это состояние обновляется узлами графа, которые возвращают операции над атрибутами этого состояния в виде хранилищ ключей-значений.

import os  # 导入操作系统模块
os.environ['OpenAI_API_KEY'] = 'hk-iwtbi1e427'
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
class State(TypedDict):
    # messages 的类型为“list”。Annotated中的“add_messages” 定义了如何更新messages
    # 在本例中,messages是追加到list中的,而不是覆盖
    messages: Annotated[list, add_messages]
# 创建StateGraph的实例,传入State类
graph_builder = StateGraph(State)

Узлы

Создайте StateGraph После этого вы можете использовать graph.add_node(name, value) Синтаксис для добавления узлов. name Аргументом является строка, представляющая собой имя узла. value Аргумент - это функция или запускаемый LCEL, который будет вызван.

Эта функция /LCEL принимает функцию, которая аналогична State объект имеет словарь той же формы, что и входной, и выдает словарь, использующий State ключ объекта, чтобы обновить словарь.

from langchain_openai import ChatOpenAI  # 从langchain_openai模块导入ChatOpenAI
llm = ChatOpenAI(  # 创建ChatOpenAI的实例
    model="gpt-4o-mini",  # 指定模型
    temperature=0,  # 设置温度
    base_url="https://api.openai-hk.com/v1"# 设置基础URL
)
def chatbot(state: State):# 定义chatbot函数,接受State类型的参数
    """
    处理聊天机器人请求并返回消息。
    参数:
    state (State): 包含消息的状态。
    返回:
    dict: 机器人生成的消息的字典。
    """
    return {"messages": [llm.invoke(state["messages"])]}  # 返回包含消息的字典
# 第一个参数是节点name
# 第二个参数是被调用的函数或对象
graph_builder.add_node("chatbot", chatbot)  # 向图中添加节点,节点名称为"chatbot"

Края

Указывает, что один из узлов всегда вызывается после другого

# 添加从START到"chatbot"的边
graph_builder.add_edge(START, "chatbot")  
# 添加从"chatbot"到END的边
graph_builder.add_edge("chatbot", END)  

Компиляция Компиляция

Определив наш граф, мы можем скомпилировать его для выполнения! Предложите те же методы, что и в LangChain ( .invoke (математика) род .stream (математика) род .astream_log и т.д.), что позволяет вызывать его так же, как и цепочку.

graph = graph_builder.compile()  # 编译图

быть в движении

def stream_graph_updates(user_input: str):  # 定义stream_graph_updates函数,接受用户输入
    """
    使用user_input流式更新图的消息。
    参数:
    user_input (str): 用户输入的消息。
    返回:
    None
    """
    # 遍历图的流事件,传入用户消息以获取模型的响应
    for event in graph.stream({"messages": [("user", user_input)]}):  # 遍历图的流事件
        for value in event.values():  # 遍历事件的值
            print("Assistant:", value["messages"][-1].content)  # 打印助手的最后一条消息
whileTrue:
    try:
        user_input = input("User: ")  # 获取用户输入
        if user_input.lower() in ["quit", "exit", "q"]:  # 检查用户是否想退出
            print("Goodbye!")
            break# 退出循环
        # 调用stream_graph_updates函数处理用户输入
        stream_graph_updates(user_input)
    except:  # 捕获异常
        # fallback if input() is not available
        user_input = "What do you know about LangGraph?"# 设置默认用户输入
        print("User: " + user_input)  # 打印用户输入
        stream_graph_updates(user_input)  # 调用stream_graph_updates函数处理默认输入
        break# 退出循环

Визуализация "диаграммы" (необязательно)

Визуализация "диаграмм" в среде Jupyter Notebook

LangGraph:基于有向无环图拓扑的AI Agent构建与执行框架

операционный эффект

LangGraph:基于有向无环图拓扑的AI Agent构建与执行框架

Такие фреймворки, как LangGraph, становятся все более важными по мере развития ИИ.

По мере того как разработчики будут знакомиться с возможностями LangGraph, мы можем ожидать появления более продвинутых ИИ-агентов, способных выполнять более сложные задачи.

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

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

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

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

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