当前位置: 首页 > news >正文

AI Agent短期记忆完全指南:4种处理长对话问题的方法+代码详解

文章详细介绍了AI Agent的短期记忆机制,分析了长对话引发的上下文丢失、响应变慢等问题,提供了4种解决方案:修剪消息、删除消息、总结消息和自定义策略。通过代码示例展示了如何实现Agent短期记忆,包括基础用法、自定义状态、消息处理方法,以及工具如何读写短期记忆。这些技术帮助AI Agent记住对话历史,提升交互质量和效率。


短期记忆是线程隔离的,让应用程序能够记住单个线程或对话中的先前交互。对于 AI agents 而言,记忆至关重要,因为它能让他们记住之前的交互、从反馈中学习并适应用户偏好。

会话历史记录 (Conversation history)是短期记忆最常见的形式。

/长对话引发的问题/

完整的历史记录太长,超出了 LLM 的token(上下文窗口) 数,导致上下文丢失或错误。

即使模型支持完整的上下文长度,它们会被陈旧跑题的内容“分心”,同时还会导致响应时间变慢成本更高

针对以上两个问题,常见的处理方式有 4 种

修剪消息 (Trim messages) :在调用 LLM 之前,移除最初或最后的 N 条消息

删除消息 (Delete messages) :从状态中永久删除消息

总结消息 (Summarize messages):总结历史记录中较早的消息,并用摘要替换它们。(推荐)

自定义策略 (Custom strategies):自定义策略(例如:消息过滤等)。

/用法/

Agent 添加短期记忆,需要在创建 Agent 时指定一个checkpointer。Agent 会维护一个 state 状态,默认为 AgentState,状态使用 checkpointer 持久化到数据库(或内存)中,以便线程可以随时恢复。当 Agent 被调用或一个步骤(如工具调用)完成时,短期记忆会更新,并在每个步骤开始时读取状态。

👀

基础用法

from langchain.agents import create_agent from langgraph.checkpoint.memory import InMemorySaver agent = create_agent( "openai:gpt-5", [get_user_info], checkpointer=InMemorySaver(), ) agent.invoke( {"messages": [{"role": "user", "content": "Hi! My name is Bob."}]}, config={"configurable": {"thread_id": "1"}}, )

创建 Agent 时一定要指定 checkpointer,在生产环境中,请使用由数据库支持的 checkpointer;Agent 执行时一定要传递 config={“configurable”: {“thread_id”: “1”}}

👀

自定义 Agent state

自定义 state,需要继承 AgentState,并在创建 Agent 时指定 state_schema。

from langchain.agents import create_agent, AgentState from langgraph.checkpoint.memory import InMemorySaver class CustomAgentState(AgentState): user_id: str preferences: dict agent = create_agent( "openai:gpt-5", [get_user_info], state_schema=CustomAgentState, checkpointer=InMemorySaver(), ) result = agent.invoke( { "messages": [{"role": "user", "content": "Hello"}], "user_id": "user_123", "preferences": {"theme": "dark"} }, config={"configurable": {"thread_id": "1"}})

👀

修剪消息

@before_model def bm_trim_messages(state: AgentState, runtime: Runtime) -> dict[str, Any] | None: """Trim messages to fit within the model's token limit.""" messages = state["messages"] return { "messages": trim_messages( messages, max_tokens=64, strategy="last", token_counter=count_tokens_approximately, start_on="human", include_system=True, allow_partial=False, ) } agent = create_agent( 你的模型, tools=[], middleware=[bm_trim_messages], checkpointer=InMemorySaver() )

👀

删除消息

@after_model def delete_old_messages(state: AgentState, runtime: Runtime) -> dict | None: """Remove old messages to keep conversation manageable.""" messages = state["messages"] if len(messages) > 2: # remove the earliest two messages return {"messages": [RemoveMessage(id=m.id) for m in messages[:2]]} return None agent = create_agent( 你的模型, tools=[], system_prompt="Please be concise and to the point.", middleware=[delete_old_messages], checkpointer=InMemorySaver(), )

👀

总结消息

agent = create_agent( model="gpt-4o", tools=[], middleware=[ SummarizationMiddleware( model="gpt-4o-mini", trigger=("tokens", 4000), keep=("messages", 20), summary_prompt="总结的系统提示词", ) ], checkpointer=InMemorySaver(), )

👀

工具读取短期记忆

使用 runtime:ToolRuntime 参数

class CustomState(AgentState): user_id: str @tool def get_user_info( runtime: ToolRuntime ) -> str: """Look up user info.""" user_id = runtime.state["user_id"] # 这里的state是自定义的,增加了user_id属性 return "User is John Smith" if user_id == "user_123" else "Unknown user"

👀

从工具写入短期记忆

如果需要更新自定义状态类的自定义属性,需要使用 Command;如果只更新 messages,直接返回数据即可。

class CustomState(AgentState): user_name: str class CustomContext(BaseModel): user_id: str @tool def update_user_info( runtime: ToolRuntime[CustomContext, CustomState], ) -> Command: """Look up and update user info.""" user_id = runtime.context.user_id name = "John Smith" if user_id == "user_123" else "Unknown user" return Command(update={ "user_name": name, # update the message history "messages": [ ToolMessage( "Successfully looked up user information", tool_call_id=runtime.tool_call_id ) ] }) @tool def greet( runtime: ToolRuntime[CustomContext, CustomState] ) -> str: """Use this to greet the user once you found their info.""" user_name = runtime.state["user_name"] return f"Hello {user_name}!" agent = create_agent( model="openai:gpt-5-nano", tools=[update_user_info, greet], state_schema=CustomState, context_schema=CustomContext, ) agent.invoke( {"messages": [{"role": "user", "content": "greet the user"}]}, context=CustomContext(user_id="user_123"), )

👀

动态提示获取短期记忆

class CustomContext(AgentState): user_name: str @dynamic_prompt def dynamic_system_prompt(request: ModelRequest) -> str: runtime = request.runtime state = runtime.state user_name = state["user_name"] system_prompt = f"You are a helpful assistant. Address the user as {user_name}." return system_prompt

如何系统的学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

01.大模型风口已至:月薪30K+的AI岗正在批量诞生

2025年大模型应用呈现爆发式增长,根据工信部最新数据:

国内大模型相关岗位缺口达47万

初级工程师平均薪资28K(数据来源:BOSS直聘报告)

70%企业存在"能用模型不会调优"的痛点

真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!

02.大模型 AI 学习和面试资料

1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工

📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)





第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

http://www.jsqmd.com/news/217654/

相关文章:

  • 解耦梯度学习解决多模态模型欠优化问题,性能提升超3%
  • 2026AI产品经理与大模型学习路线图:从小白到专家的进阶指南
  • 大模型+知识图谱构建制药业“第二大脑“:从零开始实现企业级知识管理
  • 深入了解移动开发领域 CI_CD 的工作原理
  • 打造AI时代智能知识库:Obsidian+Dify向量检索全攻略(附插件下载)
  • Claude Code完美平替OpenCode:小白也能轻松上手的AI编程神器
  • 可视化图解算法77:零钱兑换(兑换零钱)
  • 零代码搭建大模型知识库,5分钟搞定RAG应用,小白也能轻松上手
  • 【毕业设计】SpringBoot+Vue+MySQL ONLY在线商城系统平台源码+数据库+论文+部署文档
  • 前后端分离墙绘产品展示交易平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 从封闭到通用:RLVR到RLPR的LLM推理强化技术全解析
  • AI Coding时代,程序员的7项核心竞争力,不看可能会被淘汰(建议收藏)
  • 企业级网上租赁系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 从九尾狐AI企业培训案例解析智能矩阵获客的技术架构与实现路径
  • 大模型产业链四大层次解析:从算力芯片到行业应用的全面指南
  • 【教你用ArcPy批量输出图片并生成Mxd(零门槛小白版)】
  • xampp-linux-1.8.1.tar.gz 怎么安装?Linux下XAMPP离线安装完整步骤
  • 数智孪生,金流·物流全透视:构建某银行制造业贷后风控新范式—— 基于领码 SPARK 融合平台的技术解决方案
  • 四川西昌电器门店:30年本地老店,5大优势让你买电器不踩坑!
  • springboot事务触发滚动与不滚蛋
  • ​ ⛳️赠与读者[特殊字符]1 概述基于城市场景下无人机三维路径规划的导航变量的多目标粒子群优化算法(NMOPSO)研究摘要随着无人机应用场景的复杂化,城市场景下的三维路径规划需同时优化
  • Python 内置函数:那些你见过但未必真正了解的“老朋友“
  • 鸿蒙PC上Qt原生应用开发:从零搭建开发环境到部署实战,附HarmonyOS SDK配置与避坑指南(C++实现)
  • 鸿蒙PC Qt开发环境配置全攻略:从零搭建到第一个原生应用实战
  • 基于Java+SpringBoot+SSM合同信息管理系统(源码+LW+调试文档+讲解等)/合同管理信息系统/合同信息管理平台/合同管理系统/信息管理系统/合同管理软件/合同资料管理系统
  • 鸿蒙PC开发指南:从零配置Qt环境到实战部署完整流程
  • 鸿蒙PC版Electron开发指南:手把手教你搭建环境并打包跨端应用
  • 鸿蒙PC上Electron原生应用开发:从零到部署的实战避坑指南
  • 从零到一:基于Qt on HarmonyOS的鸿蒙PC原生应用开发实战与性能优化指南
  • 《实战指南:Electron框架鸿蒙PC化,跨端迁移的完整配置与核心代码解析》