当前位置:   article > 正文

零基础手把手大模型应用开发之LangGraph教程(一):什么是LangGraph?与LangChain的区别?【附详细代码】_langchain langgraph

langchain langgraph

随着人工智能和自然语言处理技术的不断发展,构建更复杂和动态的计算模型变得越来越重要。LangGraph应运而生,通过扩展LangChain的功能,为大型语言模型(LLM)应用添加了循环计算能力。即大模型不再只是端到端的推理,而是能根据业务逻辑以及上一次推理的反馈,决策下一次推理。

本节教程代码仓库:https://github.com/tangyipeng100/LangGraph_tutorial/blob/master/LangGraph_Tutorial_lesson_1.ipynb
完整教程代码:https://github.com/tangyipeng100/LangGraph_tutorial/tree/master

1.什么是LangGraph?

首先一句话概括LangGraph:可以实现基于LLM智能助手(LLM Agent)的神仙框架!

LangGraph是在LLM和LangChain的基础之上发展而来,LangGraph库本身基于LangChain库,如下图所示。如果仅使用LLM,一般用于实现无外部工具、无反馈的问答任务;基于LangChain,则可实现依赖外部工具或外部数据库的问答任务;基于LangGraph,则可以实现可实现依赖外部工具或外部数据库且有反馈的问答任务。如下图的例子,用户希望撰写一个文案,如果只用LLM,则给出LLM一个指令,让其反馈写好的文案;如果基于LangChain,则可在调用搜索引擎获得检索知识的基础上,撰写文案;如果基于LangGraph,则可以实现在LangChain的基础上,对检索的知识和撰写的文案内容进行筛选、判别、修正,最后输出需要的文案。理论上,用户可以通过程序设计,在已有LLM的基础上实现类似LangGraph提供的功能,但这样每个功能都需要重新设计一套架构。LangGraph则将这样的功能做了模块化和集成,可加速基于LLM项目的落地。

在这里插入图片描述

2.没有算力,不懂LLM,不懂LangChain,可不可以学LangGraph?

完全可以。使用LangGraph开发的LLM项目,无需对LLM进行训练、微调等,可以完全将LLM看作一个黑盒,开发过程中一般只是调用LLM进行文本输入输出,大多数通过API实现对本地算力基本无任何要求(能跑通一个python for循环的电脑即可,也可使用云代码编辑器实现,后面的课程会逐步提供)。

至于LangChain,实际就是LangGraph的一部分,因此在学习LangGraph的过程中会逐步学习LangChain的使用。并且LangGraph是比LangChain更强大的工具,是完全可以向下兼容的!

3.核心概念

3.1. 状态图

LangGraph的核心是状态图。图中的每个节点代表计算的一个步骤,整个图维护一个状态,随着计算的进行不断传递和更新。这样的状态图使得计算模型更具动态性和灵活性。

3.2. 节点

节点是LangGraph的基本构建块,每个节点代表一个特定的功能或计算步骤,如处理输入、做出决策或与外部API交互。通过定义不同任务的节点,可以创建模块化和可重用的图。

3.3. 边

边连接图中的节点,定义计算的流程。LangGraph支持条件边,允许根据图的当前状态动态决定下一个执行的节点。这种条件边为构建复杂应用提供了必要的灵活性和适应性。

4.LangGraph与LangChain的区别

本小节从框架架构的角度进一步介绍LangGraph与LangChain的区别。

4.1. 循环计算

LangChain适用于创建线性无环图,适合简单应用。而LangGraph引入了循环计算,允许节点根据图的状态被多次访问,这对需要迭代处理、反馈循环和复杂决策的应用至关重要。

4.2. 状态执行

LangChain的计算流程通常是无状态的,各步骤相互独立。LangGraph的状态执行模型则不断更新和传递状态,使计算更加上下文感知和适应性强,特别适合需要持续上下文的任务,如对话管理和多轮交互。

4.3. 条件逻辑

LangChain支持线性链,而LangGraph通过条件边增强了这一功能。条件边允许图根据当前状态改变执行路径,实现复杂的分支逻辑和动态决策,这对于实时响应不同输入和状态的应用尤为重要。

5.代码示例

为了初步上手 LangGraph,此处创建一个简单的基于LangGraph的应用。这个并逐步分析每一行代码。

配置环境(python环境建议大于3.8)

pip install dashscope langchain langgraph
pip install langchain-community langchain-core
pip install httpx
  • 1
  • 2
  • 3

初始化模型和 MessageGraph

from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage
from langgraph.graph import END, MessageGraph
import os
os.environ["DASHSCOPE_API_KEY"] = 'sk-2c6b041cb04c44f9a0787015c7a472e8'#为了便于调试,这儿提供了通义千问模型的API key,大家可以替换成自己的key

model = Tongyi()
graph = MessageGraph()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

首先,我们导入必要的库和模块,并设置 API 密钥。为方便调试,此处调用阿里dashscope提供的qwen-plus模型,获取qwen-plus api-key可访问此(支付宝扫码获得上述代码格式key即可)。然后,初始化了 Tongyi 模型和一个 MessageGraph 实例。MessageGraph 是我们将要构建的计算图。

添加节点

graph.add_node("oracle", model)
  • 1

接下来,我们向图中添加一个名为 "oracle" 的节点,这个节点会调用模型处理给定的输入。add_node 方法的第一个参数是节点的名称,第二个参数是该节点执行的具体操作,这里是调用 Tongyi 模型。

添加边

graph.add_edge("oracle", END)
  • 1

我们添加了一条从 "oracle" 节点到特殊字符串 END ("__end__") 的边。这意味着在 "oracle" 节点执行完毕后,计算将结束。

设置入口点

graph.set_entry_point("oracle")
  • 1

我们将 "oracle" 节点设置为图的入口点,这意味着计算将从这个节点开始。

编译图并输出

runnable = graph.compile()
print(runnable.invoke(HumanMessage("What is 1 + 1?")))#输出:[HumanMessage(content='What is 1 + 1?', id='3adc686d-dac0-43cb-9022-4c8644e61866'), HumanMessage(content='1 + 1 is equal to 2.', id='1d2affcc-b157-48f7-a621-eabd3bf97270')]
  • 1
  • 2

当我们执行LangGraph程序时:

  1. LangGraph 将输入消息添加到内部状态,然后将状态传递给入口节点 "oracle"
  2. "oracle" 节点执行,调用聊天模型。
  3. 聊天模型返回一个 AIMessage。LangGraph 将其添加到状态中。
  4. 执行进展到特殊的 END 值并输出最终状态。

以下是完整的代码:

from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage
from langgraph.graph import END, MessageGraph
import os
os.environ["DASHSCOPE_API_KEY"] = 'sk-2c6b041cb04c44f9a0787015c7a472e8'

model = Tongyi()

graph = MessageGraph()

graph.add_node("oracle", model)
graph.add_edge("oracle", END)

graph.set_entry_point("oracle")

runnable = graph.compile()
print(runnable.invoke(HumanMessage("What is 1 + 1?")))
#输出:[HumanMessage(content='What is 1 + 1?', id='3adc686d-dac0-43cb-9022-4c8644e61866'), HumanMessage(content='1 + 1 is equal to 2.', id='1d2affcc-b157-48f7-a621-eabd3bf97270')]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

执行上述代码后,我们将获得两个聊天消息的输出列表。这个LangGraph应用看起来实现的功能和一个简单的LLM没什么区别,但不要着急,本节只是让大家先把LangGraph跑起来,想体验它的强大功能,在后续的章节我们会提供更多LangGraph项目例子,一起体验LangGraph的强大吧!

6.结论

LangGraph通过扩展LangChain的功能,引入循环计算和状态执行,显著提升了LLM应用的能力。无论是开发交互式代理、复杂决策系统还是迭代处理模型,LangGraph都提供了所需的工具和灵活性,使您能够创造更智能和响应更迅速的应用。LangGraph以其循环计算、状态执行和条件逻辑,成为开发者探索LLM应用新可能的关键工具。
最后,欢迎各位转发、订阅、点赞。代码中有任何问题欢迎评论交流

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/768517
推荐阅读
相关标签
  

闽ICP备14008679号