langchain中实现多Agent的利器-基于图论的️ LangGraph

LangGraph的出现

LangChain中的智能体从数据结构的角度来讲等同于一个有向无环图,也就是说,chain在推理过程中无法被循环调用.而尽管AgentExecutor(代理执行器)支持’循环’.但是缺乏精确控制能力,时常发生失控陷入死循环的情况.

使用代理执行器实现循环调用LLM的能力,其调用过程主要有两步:

  • 通过大模型来决定采取什么行动,使用什么工具,对用户采取输出响应
  • 执行步骤1中的行动,并且把结果继续交给大模型来决定

AgentExecutor存在的问题是决策过程隐藏在AgentExcutor背后,过于黑盒,缺乏更精细的控制能力,在构建复杂的Agent的时候受限

  • 工具的使用顺序
  • 在执行过程中添加人机交互
  • 灵活的更换Prompt或者背后的LLM

在LangChain中简单的链不具备循环能力,而AgentExcutor调用Agent又过于黑盒,因此需要一个具备更精细控制能力的框架来支持复杂场景的LLM应用.LangGraph的出现宣布LangChain进入到多智能体框架领域,langGraph是基于图论运作的,他提供了一种状态机的技术,可与驱动循环代理调用,实现有向有环图. 因此,LangGraph有三个关键元素:

  • StateGraph:状态图

是LangChain的一个类,表示图的数据结构并且反应其状态,节点会更新图的状态

  • Node:节点

图中关键元素之一,每个langGraph节点都有一个名称的值,可以是LangChain表达式中的函数或者可运行项,每个节点接收一个字典类型的数据.节点返回具有相同结构的更新状态.有一个名为"END"的特殊节点,用于识别状态机的结束状态

  • Edge:边缘

边维系节点之间的关系,三种类型的边:开始边(没有上游节点),普通边和条件边

  • 普通边定义上游节点应始终调用的下游节点

  • 条件边,通过函数(路由器)来确定下游节点,条件边需要三个元素

    • 上游节点:边的起点,表示转换的起点
    • 路由函数:此函数根据返回值有条件的来确定应进行转换的下游节点
    • 状态映射:根据路由函数的返回值,来指定下游节点.它将路由函数有可能的返回值与相应的下游节点相关联

构建LangGraph实例

LangGraph的状态

类似于状态机(State Machine),由一组状态(State)和状态之间的转换(Transition)组成,用于表示系统在不同状态之间的转换和响应事件的行为。

python
复制代码
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages

class State(TypedDict):
# Messages have the type "list". The `add_messages` function
# in the annotation defines how this state key should be updated
# (in this case, it appends messages to the list, rather than overwriting them)
messages: Annotated[list, add_messages]

graph_builder = StateGraph(State)

这个状态定义了随时间更新的核心状态对象,它接收一些操作以及属性定义以及会被节点更新;会在每一个Node之间传递不同的状态信息。然后每一个节点会根据自己定义的逻辑去更新这个状态信息

节点信息

Node可以是一个langchain的runnable或者是一个可执行的函数,也可以是一个Graph,构建完成的Graph也是一个langchain的runnable,这也正是LangGraph作为langchain的扩展可以与langchain完美衔接的关键.

添加节点直接使用Graph实例中的add_node方法添加即可,当然这个节点应当有一个名字

arduino
复制代码
graph_builder.add_node("node",node)

node就是langchain的runnable对象或者可执行函数,具体在开发中定义

绘制图的边

边(Edge)描述的是节点与节点之间的关系,可以是普通的或者是有条件的.他们都有方向,Edge描述的上游节点与下游节点的关系(开始边除外).

Edge的实现由Graph实例中的add_edge方法添加,同样这个边也有一个名字,这个名字就是节点的名字,代表的是上游节点.

arduino
复制代码
graph_builder.add_edge("node",next_node)

next_node就是node节点的下游节点.

条件边的实现由Graph实例中的add_conditional_edge进行添加

sql
复制代码
graph.add_conditional_edge(
    "node",
    should_continue,
    {
        "end": END,
        "continue": "next_node"
    }
)

should_continue就是条件边三个组成元素的路由函数了.确定下一个的可调用对象一个或多个节点.

编译图

到现在就完成一个图所需要的基本条件了,这也是一个最简单的LangGraph列子

编译图也是由Graph实例对象的方法实现

ini
复制代码
graph = graph_builder.compile()

编译之后的graph是一个langchain的runnable对象,同样具有.invoke.stram方法,也具备成为一个节点的能力.

由LangGraph构建的简单聊天机器人

python
复制代码
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
OPENAI_API_BASE=os.environ['OPENAI_API_BASE'] 
OPENAI_API_KEY=os.environ['OPENAI_API_KEY'] 

from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages

class State(TypedDict):
    messages: Annotated[list, add_messages]

graph_builder = StateGraph(State)

from langchain_openai import ChatOpenAI
llm = ChatOpenAI()

def chatbot(state: State):
    return {"messages": [llm.invoke(state["messages"])]}

graph_builder.add_node("chatbot", chatbot)

graph_builder.set_entry_point("chatbot")

graph_builder.set_finish_point("chatbot")

graph = graph_builder.compile()

while True:
    user_input = input("User: ")
    if user_input.lower() in ["quit", "exit", "q"]:
        print("Goodbye!")
        break
    for event in graph.stream({"messages": ("user", user_input)}):
        for value in event.values():
            print("Assistant:", value["messages"][-1].content)

LangGraph的应用

想要让单个Agent干很多活儿,就必须的有极强的推理能力以及定义好工具之间的关系,和精确到控制能力.而单个Agent的执行过程过于黑盒等问题导致单个Agent很难集多种本领于一身,同时langchain却没有一个能实现多Agent的方法或者技巧.LangGraph作为langchain的扩展就可以实现多Agent(Multi-agent).当然,单个Agent有单个的好处,分开也有分开的优势

单Agent的构建较为简单,不仅编码简单,逻辑也比较清晰,LangGraph与之相比就太过于复杂了,不仅要有清晰的逻辑关系,还要有一个图的数据流向,构建一个简单的图人脑还是能应对,一旦节点,边多起来了,就需要借助工具进行设计了,在复杂的逻辑链路中抽丝剥茧.

LangGraph构建多Agent在编码的过程中或许会比较难受,但是实现效果不是单个Agent能够相比的.

AotuGen中的多Agent是基于会话实现的,有三个Agent角色,构建过程要比LangGraph简单,与LangGraph不同,LangGraph具有更清晰的逻辑条理.

当前的LangGraph还处在一个初期发展的阶段,在langchain的0.2.x版本迭代中,Agent应该会占据一个重要地位.相信在未来的LangGraph构建会更容易

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

在这里插入图片描述

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

在这里插入图片描述

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值