LangGraph入门(一)为什么要用LangGraph

阅读langgraph文档后编写,原文链接
https://langchain-ai.github.io/langgraph/concepts/high_level/

agent介绍

大语音模型LLMs是非常强大的,特别是LLMs与外部API或者检索数据库结合时,将使得的大模型如虎添翼。所以,在调用LLM之前或之后我们通常会插入一些控制流程。例如,经典的RAG结构,我们会先检索出与问题相关的资料,将资料作为输入prompt的一部分,传递给LLM来生成。又比如将输出的内容格式化,变成程序可以执行的参数,调用程序执行后续逻辑。通常,在这些流程控制被称链(chain),chain是LLM应用开发中常见的编程范式。每次chain的调用都会运行相同的控制流。

然而,我们经常希望得到能自己选择流程控制的大模型应用。这种应用就可以被称为智能体(Agent)。agent的定义就是“使用LLM来决定应用程序控制流的系统”。与chain不同的是,agent应用赋予了LLM对给定的一系列流程控制的选择权。比如:两条潜在路径之间进行路由、决定调用多个工具中的哪一个、决定生成的答案是否足够,还是需要更多的工作等等。

chain与agent概念举例:????

  • case 1:
    父母(程序员)给孩子(LLM app)从上幼儿园到大学选专业,结婚选对象,全部安排好。这就是chain的模式,稳定可控,但是需要较多心神。

  • case 2:
    父母告诉孩子要上幼儿园了,但是给孩子几个选项,上大学时,孩子可以从几个热门专业中选几个。这个孩子就属于一个agent应用。

  • case 3:
    不需要父母告诉孩子太多,自己选择要不要上学,要不要结婚,不给设下人生的条条框框。这也属于一个agent应用,属于更高程度的自主化(high agentic),但是会有更高的风险。

目前agent已经发展出许多架构????,这些不同的架构对有应用着不同级别的自控能力。(拓展一下我另一篇文章:什么是agent什么又是agentic)
image.png
最弱的情况只是一个路由功能,从两条路线中选一条执行。而另一个极端则是,完全自主的选择所需的所有步骤和执行次数,甚至是自己编写步骤。

多数agent架构都会包含以下概念:

  • 工具调用:这通常是LLMs做出决策的方式
  • 操作行为:通常情况下,LLMs 的输出结果会被用作下一个操作的输入
  • 记忆:可靠的系统需要了解已经发生的事情
  • 规划:规划步骤(显式或隐式)对于确保LLM在做出决策时以最高保真度的方式做出决策是有用的。

面临的挑战

在实际应用中,我们通常需要权衡agent的自控能力和可靠性。随着我们赋予agent更多的自主权,程序往往变得不太可靠。
image.png

LangGraph的理念

LangGraph的出发点是帮助控制曲线,在赋予代理更多对应用的控制权的同时保持更高的可靠性。

image.png

以下是几个支持langGraph实现目标的几个核心支柱能力。

可控性

LangGraph 通过将应用程序的流程表示为一组节点Node和边Edge,为开发人员提供了高度的控制权。所有节点都可以访问和修改公共状态State(Memory)。可以使用连接节点的边来设置应用程序的控制流,这些边可以是确定性的,也可以是通过条件逻辑(ConditionEdge)设置的。

下图是其中一种agent的结构示意图。
image.png

持久化

可以通过短期(内存、缓存)或者长期(数据库等),来持久化State。
image.png

流式输出

我们对每个Node的处理过程是可见的,甚至node中间过程也是可以见的。
image.png

人工介入

可以进行人机交互模式;例如,可以暂停代理、检查其状态、编辑其状态并批准后续步骤。

image.png

Debugging

构建完图后,通常需要对其进行测试和调试。LangGraph Studio 是用于可视化和调试 LangGraph 应用程序的专用 IDE。(它有点重,我实际上并不喜欢用)

image.png

上一篇:服务器开放ftp端口可能会被攻击吗?


下一篇:linux下使用mpi求自然数和