LangGraph的状态

1. 为什么我们需要 LangGraph?(逻辑推演)

在学习 LangGraph 之前,我们要先思考一个问题:LangChain 原本的 LCEL(链式表达式)哪里不够用?

  • 传统 Chain 的局限性: 传统的链状结构(如 LCEL)本质上是一个有向无环图(DAG)。数据像流水线一样,从A节点走到B节点,再走到C节点,最后输出。它是一锤子买卖。
  • Agent(智能体)的真实需求: 真正的智能体(特别是你要做的可以写代码、测试代码的智能体)是需要循环(Loop)和分支(Branch)的 。当测试节点(Tester)发现代码有 Bug 时,数据流不能直接结束,它必须带着报错信息回退到编写节点(Coder)重新生成。
  • LangGraph 的解法: 它引入了状态机(State Machine)的概念,允许我们构建包含**循环(Cycles)**的图。在这个图里,大模型不仅是数据处理单元,更是图中的"路由决策者"。

2. 核心概念拆解:全局状态(State)与 Reducer

在 LangGraph 中,最重要、也是最容易让人困惑的概念就是 State(状态)

在复杂的后端系统或微服务架构中,我们经常需要在不同的执行模块之间传递一个全局的上下文(Context)。LangGraph 的 State 就是扮演这个角色。它是一个贯穿整个图运行周期的"全局数据结构"

图中的每一个节点(Node,本质上就是一个 Python 函数)都遵循同一个严格的接口逻辑:

  1. 输入: 接收当前的全局 State。
  2. 执行: 运行你写的逻辑(比如调用 LLM、执行本地代码、查数据库等)。
  3. 输出: 返回一个字典(Dictionary),这个字典里包含了需要更新的状态字段。
💡 思考难点:状态是如何更新的?(Reducer 机制)

假设我们的 State 里有一个字段记录了生成的代码。当节点返回新的数据时,LangGraph 是直接覆盖旧数据,还是追加在旧数据后面?这就引入了 Reducer(归约器) 的概念。

  • 默认行为(覆盖): 如果你在定义 State 时不加任何修饰,当节点返回 {"code": "print('hello')"} 时,原来的 code 字段会被直接覆盖
  • 追加行为(Annotated): 对于聊天记录(Messages)或报错日志,我们通常希望是不断追加的。这时在 Python 中就需要引入 typing.Annotated****和 operator.add**(或自带的** add_messages)。这告诉框架:"当节点返回新的 message 时,请把它追加到列表末尾,而不是覆盖整个列表。"

3. 结合 Skills Creator:定义我们的 State

基于上述思考,如果要实现一个"技能创造者",我们需要在 State 中记录哪些关键信息来维持整个系统的运转?

我们可以初步构思这样一个状态字典:

  • user_requirement**(str):** 用户的初始需求(如:"写一个获取天气的脚本")。它一旦设定,通常不需要改变(默认覆盖逻辑)。
  • current_code**(str):** 当前 LLM 生成的 Python 代码。每次 Coder 节点重新生成时,都会覆盖它。
  • execution_logs**(list):** 代码测试节点(Tester)运行代码后的输出或报错日志。这个可能需要是追加逻辑(Reducer),或者如果每次只看最新一次的报错,也可以设计为覆盖逻辑。
  • messages**(list):** 智能体与环境(或内部节点之间)的交互历史记录。通常必须带有追加(Reducer)属性。
  • iteration_count**(int):** 循环次数。为了防止模型无限写出带 Bug 的代码死循环,我们需要一个计数器,每次循环加 1,达到阈值就强制退出。

相关推荐
Acnidouwo9 小时前
QT程序的dpi导致显示异常处理方法
开发语言·qt
初心未改HD9 小时前
Python零基础到精通教程,数据分析(数据处理,挖掘价值)
开发语言·python
tmacfrank10 小时前
Kotlin 协程十一 —— 协作、互斥锁与共享变量
java·开发语言·kotlin
lsx20240610 小时前
Perl 哈希
开发语言
尘埃落定wf10 小时前
LangChain Tools工具模块完全指南:@tool装饰器+StructuredTool+Pydantic校验+实战案例
python·ai·langchain
楼田莉子10 小时前
仿muduo的高并发服务器——前置知识讲解和时间轮模块
服务器·开发语言·c++·后端·学习
花间相见10 小时前
【MS-Swift实战】:LoRA原理+核心参数(r/alpha)调参指南(适配Qwen-1.8B医疗场景)
开发语言·r语言·swift
求知也求真佳10 小时前
S03|待办写入:让 AI 不再走一步忘一步,多步任务不再跑偏
开发语言·agent
Metaphor69210 小时前
使用 Python 提取 PDF 文件中的文本、表格、图片
开发语言·python·pdf
花千树-01010 小时前
两行注解把企业 RPC 接口变成 AI 工具
java·rpc·langchain·react·function call·ai agent·mcp