LangGraph: структура для создания и выполнения агентов ИИ на основе топологии направленных ациклических графов
Искусственный интеллект (ИИ) - это быстро развивающаяся область. Развиваются языковые модели, позволяющие агентам ИИ выполнять сложные задачи и принимать сложные решения. Однако по мере роста навыков этих агентов инфраструктура для их поддержки не успевает за ними.
LangGraph - революционная библиотека, призванная перевернуть представление об агентах искусственного интеллекта. Сборка и выполнение Реализация.
LangGraph представляет нового агентаСборка и выполнениеКонструктивная парадигма, которая рассматривает рабочие процессы агентов как структуры, основанные на топологии циклического графа.
Что такое LangGraph?
Важным преимуществом LangChain является возможность легко создавать пользовательские цепочки. Однако в LangChain отсутствует простой способ введения циклов в эти цепочки. Фактически, эти цепочки представляют собой направленные ациклические графы (DAG) - Как и большинство фреймворков для оркестровки данных.
При создании сложных LLM-приложений часто встречаются циклы во время выполнения. Эти циклы часто используют LLM для обоснования следующего действия в цикле. По сути, это эквивалентно запуску LLM в цикле for. Такие системы часто называют агентами.
Простейшая форма - цикл с двумя шагами:
- Вызовите LLM, чтобы определить, какое действие предпринять или какой ответ дать пользователю
- Выполните заданную операцию и вернитесь к шагу 1.
Эти шаги повторяются до тех пор, пока не будет сгенерирован окончательный ответ. Это цикл, который управляет агентом-исполнителем в сердце LangChain. Это очень простой цикл, но он также наиболее важен, потому что он передает почти все полномочия по принятию решений и рассуждениям в руки LLM.
Важно отметить, что этот процесс обычно требует большего контроля. Например, заставить агента сначала вызвать определенный инструмент, больше контроля над тем, как вызывается инструмент, различные подсказки в зависимости от состояния агента и т. д.
Это управляемые процессы, которые LangChain называет "машинами состояний".
Эти машины состояний способны зацикливаться, однако для создания такого цикла требуется вмешательство человека.
LangGraph создает эти машины состояний, задавая их в виде графов.
LangGraph построен поверх LangChain и полностью совместим с экосистемой LangChain.операционная совместимость. Он добавляет новую ценность, главным образом, благодаря простому способу создания диаграмм циклов. Это очень полезно при создании режимов выполнения агентов.
Такой подход позволяет Агентам демонстрировать более вариативное и нюансированное поведение, чем линейные модели исполнения их предшественников. Используя теорию графов, LangGraph предлагает новые способы разработки сложных сетевых систем Агентов.
Рисунок: LangGraph для генерации кода
Пример: динамическая система вопросов и ответов
взять : Пользователь может предоставлять информацию модели шаг за шагом, а не отправлять всю информацию сразу.
Рецепт : Используйте циклическую диаграмму:
- Позвольте LLM сгенерировать первые ответы.
- Если ответ неполный или требуется дополнительная информация, создайте новый вопрос и продолжите спрашивать пользователя.
- пока пользователь не подтвердит, что проблема решена.
Структура диаграммы цикла
- УзлыКаждый узел представляет собой определенную задачу или операцию, например, генерацию текста, ответ на вопрос, обработку данных и т.д.
- Края: Связи между узлами указывают на порядок выполнения задачи, возможно, с условными суждениями.
- Петляющий путь: Циклы образуются, когда выход узла нужно вернуть предыдущему узлу или когда его нужно выполнить многократно.
- Состояние остановки: Циклические диаграммы подчиняются какому-либо условию завершения, например, когда качество результата соответствует требованиям, когда достигается заданное количество раз или когда срабатывает внешний сигнал остановки.
Почему стоит использовать 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, становятся все более важными по мере развития ИИ.
По мере того как разработчики будут знакомиться с возможностями LangGraph, мы можем ожидать появления более продвинутых ИИ-агентов, способных выполнять более сложные задачи.
В целом, LangGraph - это значительное достижение в области разработки агентов ИИ. Он позволяет разработчикам расширить границы возможного при использовании агентов ИИ, устраняя недостатки предыдущих систем и предоставляя гибкую, основанную на графах структуру для создания и выполнения агентов. LangGraph имеет потенциал значительно повлиять на направление развития ИИ в будущем.
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...