Langgraph 实现类似Langchain记忆上下文过长裁剪

python 复制代码
from typing import TypedDict, Any
from langchain_openai import ChatOpenAI
from langchain_core.messages import AnyMessage
from langgraph.graph import StateGraph, START, END, MessagesState
from langgraph.prebuilt import ToolNode
from langgraph.checkpoint.memory import InMemorySaver
from langmem.short_term import SummarizationNode, RunningSummary

# 1. 定义状态:MessagesState 基础上增加 context 存放运行中的摘要
class State(MessagesState):
    context: dict[str, RunningSummary]  # 存放摘要状态,避免重复总结旧消息

class LLMInputState(TypedDict):
    summarized_messages: list[AnyMessage]

# 2. 初始化模型
model = ChatOpenAI(model="gpt-4o")
summarization_model = model.bind(max_tokens=128)  # 专门用来生成摘要的模型,限制输出长度

# 3. 创建摘要节点
summarization_node = SummarizationNode(
    token_counter=model.get_num_tokens_from_messages,  # 精确计算 token
    model=summarization_model,
    max_tokens=256,                    # 压缩后允许的 token 总量
    max_tokens_before_summary=1024,    # 超过这个阈值才触发摘要
    max_summary_tokens=128,            # 摘要本身的最大 token
)

# 4. 调用 LLM 的节点(注意:输入用 summarized_messages,不是 messages)
def call_model(state: LLMInputState):
    response = model.bind_tools(tools).invoke(state["summarized_messages"])
    return {"messages": [response]}

# 5. 构建图
builder = StateGraph(State)
builder.add_node("summarize", summarization_node)
builder.add_node("call_model", call_model)
builder.add_node("tools", ToolNode(tools))

builder.set_entry_point("summarize")
builder.add_edge("summarize", "call_model")
# ... 后续 router 和 tools 的边按需添加

graph = builder.compile(checkpointer=InMemorySaver())
相关推荐
不老刘5 小时前
Antigravity 的 New Worktree 模式:给 AI 代理一个安全的“平行工位”
人工智能·git·ai编程·antigravity
m0_719640875 小时前
高校人工智能实验室搭建,2026年具身智能科研设备适配建议
人工智能·经验分享
樱木花道長5 小时前
AMD Ross 深度系列 8:FAQ 七问七答(文末附网盘链接)
人工智能·fpga开发
吴名氏.5 小时前
Java转AI Agent教程(第一周)让模型先跑起来
人工智能·python·ai·ai agent
YDS8295 小时前
Small Spring IOC篇:作用域和FactoryBean
java·后端·spring
zhangfeng11335 小时前
中关村国际前沿科技大赛(创新药赛道)详细介绍 ai药物比赛
人工智能·科技
xiaoyunxuexibiji5 小时前
供应商质量协同如何实现闭环管理?从到货检验到整改与质量索赔
人工智能
xn71335 小时前
本地 AI 知识库跨设备同步:SQLite FTS5、Embedding、Tombstone 和引用校验
人工智能·sqlite·ai编程
Hp不想说话5 小时前
飞书 + Dify 个人知识管理系统实战:3 秒回调 ACK、四道防线与增量索引
人工智能