【AI Agent系列】【LangGraph】0. 快速上手:协同LangChain,LangGraph帮你用图结构轻松构建多智能体应用

07-14 1849阅读

  • 大家好,我是同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习,持续干货输出。
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

    本站文章一览:

    【AI Agent系列】【LangGraph】0. 快速上手:协同LangChain,LangGraph帮你用图结构轻松构建多智能体应用


    目前为止,我已经系统学习过AutoGPT和MetaGPT两款智能体框架了。今天来看下另一个多智能体框架:LangGraph。

    文章目录

    • 0. 简介
    • 1. 快速上手
      • 1.1 安装 LangGraph
      • 1.2 体验一把 - 上手Demo
      • 1.3 Demo代码详解
        • 1.3.1 LangGraph 使用步骤解析
        • 1.3.2 从运行结果看 LangGraph 的状态是什么
        • 1.4 node的形式
          • 1.4.1 node 能不能是一个 Chain ?
          • 2. 参考

            0. 简介

            LangGraph 是在 LangChain 的基础上实现的一个多智能体的运行框架。它扩展了LangChain表达式语言,能够以循环的方式在多个计算步骤中协调多个链(或参与者)。

            再详细一点就是:LangChain以及它的表达式语言(LCEL)为开发者构建自定义的链提供了技术支持。从图的角度来看,这种链是有向无环图(DAG)。而在实际的应用场景中,用户会期望构建有环图(cyclic graph)。这就是 LangGraph 存在的意义:帮助用户更好更方便地构建有环图。

            LangGraph的核心概念之一是状态。每次图的执行都会创建一个状态,该状态在图中的节点之间传递,每个节点在执行后都会更新此状态。所以,LangGraph呈现的是类似状态机(state machine)的机制。

            1. 快速上手

            1.1 安装 LangGraph

            pip install langgraph
            

            1.2 体验一把 - 上手Demo

            from langchain_openai import ChatOpenAI
            from langchain_core.messages import HumanMessage
            from langgraph.graph import END, MessageGraph
            model = ChatOpenAI(temperature=0)
            graph = MessageGraph()
            graph.add_node("oracle", model)
            graph.add_edge("oracle", END)
            graph.set_entry_point("oracle")
            runnable = graph.compile()
            response = runnable.invoke(HumanMessage("1 + 1 等于几?"))
            print(response)
            

            输出结果:

            【AI Agent系列】【LangGraph】0. 快速上手:协同LangChain,LangGraph帮你用图结构轻松构建多智能体应用

            1.3 Demo代码详解

            1.3.1 LangGraph 使用步骤解析

            小小体验了一把之后,下面我们来看看其基本的用法。

            (1)首先创建一个图:graph = MessageGraph()

            (2)然后,往图中添加节点:graph.add_node("oracle", model),这个节点的名字叫"oracle",节点的内容是 model,也就是OpenAI大模型的接口封装。

            (3)再然后,添加边:graph.add_edge("oracle", END),添加了一条从 “oracle” 到 END 的边。END 是内置的节点,结束的意思。

            (4)再然后,添加进入节点:graph.set_entry_point("oracle")

            (5)编译图:runnable = graph.compile(),complile函数,将图固化下来,就不能再改了。

            (6)运行:我们熟悉的 invoke 函数

            总结一下步骤:创建图 —> 添加节点 —> 添加边 —> 设置从哪个节点开始运行 —> 编译图 —> 运行。

            步骤很清晰,图的生成过程也很简单,就是图的基本元素的创建:节点和边。

            1.3.2 从运行结果看 LangGraph 的状态是什么

            再看下运行结果(上图),它包含了 HumanMessage 和 AIMessage。这就是所谓的状态传递。输入是HumanMessage,写到状态里传递给 oracle node,然后执行,oracle node返回结果,这个结果更新到状态里,传递给END,END输出最终的状态。

            所以,LangGraph 的状态(State)就是一系列 Message 的列表。

            1.4 node的形式

            上面的node,我们添加的是一个model:graph.add_node("oracle", model)

            它其实也可以是一个函数:

            def call_oracle(messages: list):
                return model.invoke(message)
            graph.add_node("oracle", call_oracle)
            

            1.4.1 node 能不能是一个 Chain ?

            思考一个问题:能否用一个Chain作为一个node添加进LangGraph中呢?比如我有下面一个Chain:

            from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
            prompt = ChatPromptTemplate.from_messages([
                ("system", "You are a helpful assistant named {name} who always speaks in pirate dialect"),
                MessagesPlaceholder(variable_name="messages"),
            ])
            chain = prompt | model
            

            我能否把这个chain通过 add_node 添加到图中?就像这样:graph.add_node("oracle", chain)

            我的理解:node不能添加一个Chain,因为Chain接收的输入是一个Dict字典类型,而node之间传递的是State,State是一个List,不是Dict。

            2. 参考

            • https://python.langchain.com/docs/langgraph
            • https://mp.weixin.qq.com/s/R4tvoOY3AFNHypvVoOKMsQ

              如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~


              • 大家好,我是 同学小张,日常分享AI知识和实战案例
              • 欢迎 点赞 + 关注 👏,持续学习,持续干货输出。
              • +v: jasper_8017 一起交流💬,一起进步💪。
              • 微信公众号也可搜【同学小张】 🙏

                本站文章一览:

                【AI Agent系列】【LangGraph】0. 快速上手:协同LangChain,LangGraph帮你用图结构轻松构建多智能体应用

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]