人工智能学习

基于LangGraph的多代理应用开发利器

本文主要是介绍基于LangGraph的多代理应用开发利器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

你知道什么是LangGraph吗?

LangGraph使我们能够尽可能简单地创建具有状态的多角色应用程序,利用大型语言模型(LLMs)来构建应用程序。它扩展了LangChain的功能,引入了创建和管理循环图的能力。

当深入了解代理系统时,langGraph 的作用范围才被完全发挥。代理系统是利用大语言模型来管理应用程序控制流的系统。其主要功能在于决策指导、工具选择和输出评估。这种代理系统基于代理循环机制工作,该机制包含持续的决策过程,使代理能解决复杂任务。快速回顾一下代理循环,大致如下。

可以为客户服务代理的培训或提升创建一个实际的例子。

背景: 一个由LLM驱动的客服机器人。

用户问道,他们的订单情况怎么样?

LLM决定: 看是直接给出状态还是需要从数据库拿数据。

采取的行动是: 如果需要获取数据,代理人会查询数据库中的订单状态,然后用最新的订单状态信息来更新用户,。

LLM代理的优势有

  • 代理具有灵活性,可以确定最佳行动方案以适应不同任务
  • 大型语言模型代理配备了专门的工具来执行特定任务
  • 大型语言模型代理可以实现多代理协同,并能处理复杂的任务

代理系统的关键组成部分:

所有上述关键组件就像是一个工作流或模式,我们在其中将这些组件建模成一个图。因此,由代理构建的工作流通常是以图的结构呈现的。

因此,LangGraph 是为了构建遵循一些核心原则的代理应用而设计的,例如等等。

  • 提供低级别的控制,提高代理系统中的可靠性。
  • 内置持久化层,增强人机互动模式。
  • 支持事件和令牌的流式处理,为用户提供实时的反馈。

LangGraph的基本组成部分有:

  • 节点: 实现代理的逻辑功能的Python函数,输入当前状态并输出更新后的状态。
  • 边/条件边: 实现固定的或条件性的转移,根据当前状态决定执行哪个下一个节点。

在LangGraph中,图表是由以下因素驱动的:

  • 状态:共享数据结构随着时间的推移而演变,随着节点的执行并通过边传递消息。
  • 消息传递机制:节点通过发送消息来激活其他节点,从而促进工作流程在离散的迭代或“超级步骤”中执行。

现在我们来应用一下这部分代码。

  1. 导入语句部分:
从langgraph.graph导入StateGraph, MessagesState, START, END  
从pydantic导入BaseModel  
从langchain_openai导入ChatOpenAI  
从langgraph.prebuilt导入ToolNode  
从langchain_community.tools导入TavilySearchResults  
从IPython.display导入Image  
从dotenv导入load_dotenv

导入构建基于图的智能代理所需的必要库和模块。利用LangGraph和LangChain。

  • StateGraph、MessageState、START 和 END 是来自 LangGraph 的类和常量,用于定义对话的状态和流程。
  • ChatOpenAI 是用于生成回复的大型语言模型(LLM)。
  • ToolNode 是一个预定义的 LangGraph 节点,可以用来调用外部工具。
  • TavilySearchResults 是一个用于执行搜索并获取结果的工具。
  • Ipython.display 使用 Image 和 Markdown 类帮助显示图形。
  • 从 .env 文件加载环境变量。

2. 创建语言模型的实例:

    llm = ChatOpenAI(model='gpt-4o-mini', 温度=0)

3. 为图定义条件逻辑:

定义一个名为 should_continue 的函数,它接收一个 MessagesState 类型的参数,并返回一个布尔值。该函数获取消息列表中的最后一条消息,如果最后一条消息包含工具调用,则返回 'tools';否则,返回 END。

查看最后一个消息是否包含工具调用,以确认智能体是否继续到下一个节点

  • 如果调用了某个工具,图形界面就会切换到工具节点。
  • 否则,图形界面会直接跳到结束节点,表示这次交互已经结束了。

4. 呼叫LLM:

def 定义调用模型(state: MessagesState):  
    messages = 状态['messages']  
    响应 = llm.invoke(消息)  

    返回 {'messages': 消息 + [响应]}

让LLM根据消息内容给出回复。

  • 获取当前状态的消息,调用大模型,然后返回包含生成响应的更新状态。

5. 构建状态图:

    graph = StateGraph(消息状态实例)

// StateGraph 是一个用于处理状态图的类,而 MessagesState 是一个具体的状态对象实例。

  • 初始化一个使用MessageState来跟踪用户和代理之间消息交换的状态图。
  • 说明:StateGraph依据预设的规则管理节点和状态转换。

6. 向图中添加节点:

graph.add_node('agent', call_model)  

search_tool = TavilySearchResults(max_results=5)  
tools = [search_tool]  
tool_node = ToolNode(tools)  

graph.add_node('tools', tool_node)
  • 添加一个代理节点到图中,该节点用来调用大模型生成响应。

  • 定义一个搜索工具,用于从搜索引擎检索最多5个结果。

  • 将该工具包装成一个ToolNode,并作为工具节点添加到图中。

7. 定义图的边和条件转移如下:

    graph.add_edge(START, "agent")
    graph.add_conditional_edges('agent', should_continue)
    graph.add_edge('tools', 'agent')

定义对话在图中的流程。

  • START ➔ agent : 对话通常是从代理节点开始的。
  • agent ➔ should_continue : 在代理节点之后,通过 should_continue 判断是否过渡到工具或 END。
  • tools ➔ agent : 如果工具节点被激活,在完成工具操作后,图会返回到代理节点。

8. 编译和绘制图表:

graph_compiled = graph.compile()  # 编译图
Image(graph_compiled.get_graph().draw_mermaid_png())  # 获取图形的图形并绘制mermaid PNG图像 (gēngqǔ túxíng de túxíng bìng zhuànhù mermaid PNG túxiàng)
  • 使用 mermaid.js 编译图表并生成可视化表示。Image 函数显示生成的图表。
  • 说明:有助于直观理解节点间对话的流程。

用初始输入运行图

    output = graph_compiled.invoke({'messages': [  
        ('user', '写一份关于在医疗保健行业中使用生成人工智能的简单报告。')  
    ]})
  • 根据用户的初始请求调用图,该请求要求生成关于医疗保健领域生成AI的报告。

  • 解释:图从这个请求开始处理,并根据设定的节点和逻辑生成完整的回复。

10. 步骤10:显示最终结果

from IPython.display import Markdown  # 显示最后一个消息的内容
Markdown(output['messages'][-1].content)
结论:

这段代码构建了一个用于管理用户和聊天机器人之间对话流程的状态图。它使用LangGraph定义图结构,并通过LangChain集成大语言模型和外部工具。核心逻辑在于根据是否调用工具在节点(代理节点和工具)之间进行转换,从而形成一个多步骤对话AI应用的强大框架。整个流程可视化,并通过一个测试查询最终执行,展示了响应生成的过程。

如果有帮助,请点赞或留言评论❤️🙏

这篇关于基于LangGraph的多代理应用开发利器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!