最新实践LangGraph的记忆体

LangChain组件

LangChain的组件可能旧了, 目前官方的最新实践应该是使用LangGraph, 去做记忆组件

为什么推荐用 LangGraph 做记忆?

  • 灵活的记忆管理:可以在图的任意节点读写、更新记忆(如用户历史、上下文、外部知识等)。
  • 流程可视化:对话流程以图结构展现,逻辑清晰,易于维护和扩展。
  • 多模型协作:支持在不同节点调用不同的 LLM、工具或 API,适合复杂任务分解。
  • 高可扩展性:适合从简单对话到复杂多轮推理、任务分解等多种场景。

基本原理

  • 节点(Node) :每个节点可以是一个 LLM 调用、工具调用、记忆操作等。
  • 边(Edge) :定义节点之间的流转条件(如根据用户输入内容分流)。
  • 记忆(Memory) :可以在节点间传递和更新,支持短期和长期记忆。

基本用法示例(Python)

python 复制代码
from langgraph.graph import StateGraph, END 
from langchain.memory import ConversationBufferMemory 
from langchain.llms import OpenAI 

# 1. 定义记忆 
memory = ConversationBufferMemory() 

# 2. 定义节点 
def greet_node(state): 
    return "你好,有什么可以帮您?" 
    
def answer_node(state): 
    # 这里可以调用 LLM,结合记忆 
    user_input = state["input"] 
    history = memory.load_memory_variables({}) 
    # 伪代码:调用 LLM 
    response = f"你刚才说:{user_input},历史对话:{history}" 
    memory.save_context({"input": user_input}, {"output": response}) 
    return response 
    
# 3. 构建图 
graph = StateGraph() 
graph.add_node("greet", greet_node) 
graph.add_node("answer", answer_node) 
graph.add_edge("greet", "answer") 
graph.add_edge("answer", END) 
graph.set_entry_point("greet") 

# 4. 运行 
result = graph.run({"input": "请帮我查下天气"}) 
print(result)

Runnable

LangGraph 的 StateGraph 和 LangChain 的 Runnable 结合使用, 是目前构建复杂对话系统和多步骤推理流程的主流方式之一

StateGraph(LangGraph)

  • 用"节点-边"方式描述对话/推理流程。
  • 每个节点可以是一个函数、一个 LLM 调用、一个工具调用,甚至是一个复杂的子流程。
  • 节点之间通过"边"连接,数据(state)在节点间流转。

Runnable(LangChain)

  • Runnable 是 LangChain 2.0 之后的核心抽象,代表"可运行的单元"。
  • 可以是 LLM、链、工具、函数、管道等。
  • 支持 .invoke(input)、.stream(input)、.batch(inputs) 等统一接口。
  • 可以组合(如 RunnableSequence、RunnableParallel)形成复杂流程

代码

python 复制代码
from langchain.schema.runnable import RunnableSequence 

def add_prefix(state): 
    return {"input": "前缀:" + state["input"]} 

def add_suffix(state): 
    return {"output": state["input"] + ":后缀"} 

node = RunnableSequence([ RunnableLambda(add_prefix), RunnableLambda(add_suffix) ]) 
graph = StateGraph() 
graph.add_node("combo", node) 
graph.add_edge("combo", END) 
graph.set_entry_point("combo") 
result = graph.run({"input": "内容"}) 
print(result)

数据流转机制

  • state:每个节点的输入和输出都是 state(通常是 dict),LangGraph 自动把上一个节点的输出作为下一个节点的输入。
  • runnable:每个 Runnable 的 .invoke(input) 接收 state,返回新的 state。
  • 记忆:可以在 state 里传递 memory 对象,或者在节点里直接操作全局 memory。

总结

  • StateGraph 负责"流程编排",Runnable 负责"具体执行"。
  • 节点可以直接用 Runnable,也可以在节点函数里用 Runnable。
  • 数据(state)在节点间自动流转,节点只需关心输入和输出。
相关推荐
努力的小雨2 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
excel4 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
AI入职记4 小时前
AI 代码审查召回率实测:20 个骗过单元测试的变异体,抓到 13 个
后端
浮链序4 小时前
别让 AI 客服把用户当猴耍:百来行 Python 把「转人工」做成一条高可用链路
后端
属于自己的天空4 小时前
Claude Code 插件完全指南:官方市场怎么用,怎么自己写(v2.1.269+)
后端
Tokenfree4 小时前
给大模型调用加一个熔断器:60 行代码,三个阈值
后端
Jason_chen4 小时前
Linux 进程调度器深入解析与实时性优化指南(基于 Linux 5.10+)
后端
136096757234 小时前
三个 Agent 干同一个活,职责边界到底该怎么划
后端
房西杭4 小时前
GM 指令:修改玩家属性
后端
胡写代码5 小时前
删掉的数据还占着唯一键:逻辑删除 + 唯一索引的四次取舍
spring boot·后端