深入浅出 LangGraph —— 第10章:记忆系统:短期与长期记忆

LangGraph 实战指南:长期记忆管理 本文介绍了LangGraph为智能对话系统设计的记忆机制,包含短期记忆(会话级)和长期记忆(跨会话)。长期记忆通过命名空间和键值对存储用户信息,支持读写操作和语义搜索。文章通过三个Python示例演示了:(1)保存用户信息到内存存储;(2)读取已存储的用户数据;(3)基于内容相似性搜索记忆项。这些功能通过InMemoryStore实现,并可与大语言模型(如通义千问)结合构建智能对话系统,展示了LangGraph在维护对话上下文和个性化服务方面的应用潜力。 阅读详情

📖 本章学习目标

  • ✅ 理解短期记忆与长期记忆的本质区别与应用场景
  • ✅ 掌握基于 Checkpointer 的短期会话记忆管理
  • ✅ 学会使用 BaseStore 实现跨会话的长期记忆存储
  • ✅ 实现记忆的智能提取、摘要和注入流程
  • ✅ 掌握消息历史的压缩策略,解决 Token 超限问题
  • ✅ 避免常见的记忆管理陷阱和性能问题

一、两种记忆的本质区别

1、基本区别

  • 短期记忆(工作记忆):当前对话内容,关闭对话窗口后消失
  • 长期记忆:跨对话的用户偏好、历史习惯、重要事实

长期记忆 (Long-term)

短期记忆 (Short-term)

对话结束时
提取关键信息

摘要压缩

新会话开始时
注入上下文

会话1
消息历史

会话2
消息历史

用户偏好
姓名、习惯

历史摘要
上次讨论了什么

重要事件
里程碑记录

2、LangGraph 记忆架构对比

维度短期记忆长期记忆
实现方式Checkpointer + messagesBaseStore / 外部数据库
作用范围单个 thread_id 内跨 thread_id
生命周期会话期间持久化
容量限制Token 窗口限制理论无限
典型数据对话历史消息用户档案、偏好设置
访问速度快(内存/本地DB)慢(需查询)
更新频率每条消息按需提取

两种记忆的协作关系:

长期记忆 (Store) LLM 短期记忆 (Checkpointer) 用户 长期记忆 (Store) LLM 短期记忆 (Checkpointer) 用户 第一轮对话 第二轮对话(新会话) 发送消息 提供消息历史 回复 提取关键信息并保存 发送新消息 查询相关记忆 返回用户偏好 消息历史+长期记忆 个性化回复

二、短期记忆管理

1、自动短期记忆(Checkpointer)

第7章已介绍,Checkpointer 自动维护 thread_id 内的消息历史:

import * as dotenv from 'dotenv';
dotenv.config();

import { MemorySaver, MessagesAnnotation, StateGraph } from '@langchain/langgraph';
import { ChatOpenAI } from '@langchain/openai';
import { HumanMessage, AIMessage, RemoveMessage } from '@langchain/core/messages';

const model = new ChatOpenAI({ model: 'gpt-4o-mini' });
const checkpointer = new MemorySaver();

const graph = new StateGraph(MessagesAnnotation)
  .addNode('chat', async (state) => {
    const response = await model.invoke(state.messages);
    return { messages: [response] };
  })
  .addEdge('__start__', 'chat')
  .addEdge('chat', '__end__')
  .compile({ checkpointer });

// 同一thread_id的多次调用共享消息历史
const config = { configurable: { thread_id: 'user-123-session-1' } };

await graph.invoke(
  { messages: [new HumanMessage('我叫Alice')] },
  config
);

const result = await graph.invoke(
  { messages: [new HumanMessage('我叫什么名字?')] },
  config
);
// AI会回答:"你叫Alice"

代码解读:

  • Checkpointer自动保存每次invoke后的messages状态
  • 相同thread_id的调用会自动加载历史消息
  • 这是短期记忆的基础机制

局限性:

  1. 消息数量增长会导致Token超限
  2. 不同thread_id之间无法共享记忆
  3. 需要手动清理过期消息

2、消息历史压缩:解决 Token 超限

随着对话进行,消息越来越多会超出模型的上下文窗口。三种策略:

策略1:截断——只保留最近 N 条
async function chatWithTrimming(state: typeof MessagesAnnotation.State) {
  // 只保留最近 10 条消息
  const trimmedMessages = state.messages.slice(-10);
  const response = await model.invoke(trimmedMessages);
  return { messages: [response] };
}

优势:

  1. 实现简单
  2. 性能最好
  3. 保证最新消息完整

劣势:
5. 可能丢失早期重要信息
6. 对话连贯性受影响

策略2:过滤——只保留特定类型的消息
import { trim_messages } from '@langchain/core/messages';

async function chatWithFiltering(state: typeof MessagesAnnotation.State) {
  // 使用 LangChain 内置的 trim_messages 工具
  const trimmed = await trim_messages(state.messages, {
    maxTokens: 2000,
    strategy: 'last',          // 从后往前保留
    tokenCounter: model,        // 用模型计算 token 数
    includeSystem: true,        // 保留 SystemMessage
    allowPartial: false,
    startOn: 'human',          // 第一条保留 HumanMessage
  });
  
  const response = await model.invoke(trimmed);
  return { messages: [response] };
}

优势:

  1. 智能控制Token数量
  2. 保留系统消息等重要内容
  3. 保证消息完整性(不会截断单条消息)

适用场景:

  • 长对话但Token有限的情况
  • 需要精确保留关键信息的场景
策略3:摘要——用 LLM 压缩历史
import { Annotation, messagesStateReducer } from '@langchain/langgraph';
import { BaseMessage, SystemMessage } from '@langchain/core/messages';

const SummaryState = Annotation.Root({
  messages: Annotation<BaseMessage[]>({
    reducer: messagesStateReducer,
    default: () => [],
  }),
  summary: Annotation<string>({ default: () => '' }),
});

async function summarizeIfNeeded(state: typeof SummaryState.State) {
  if (state.messages.length <= 6) return {}; // 消息少时无需摘要
  
  const summaryPrompt = state.summary
    ? `已有摘要:${state.summary}\n\n请结合以下新对话更新摘要:`
    : '请将以下对话总结为简洁的摘要:';
  
  const response = await model.invoke([
    new HumanMessage(summaryPrompt + 
      state.messages.map(m => `${m._getType()}: ${m.content}`).join('\n')
    ),
  ]);
  
  // 删除旧消息,只保留最近2条,并保存摘要
  const toDelete = state.messages.slice(0, -2)
    .map(m => new RemoveMessage({ id: m.id! }));
  
  return { summary: response.content as string, messages: toDelete };
}

工作流程:

  1. 检测消息数量是否超过阈值
  2. 调用LLM生成摘要
  3. 删除旧消息,保留最近几条
  4. 保存摘要到State
  5. 下次对话时将摘要作为SystemMessage传入

优势:

  1. 保留关键信息的同时大幅减少Token
  2. 对话连贯性好
  3. 适合超长对话场景

劣势:

  1. 需要额外调用LLM,增加成本
  2. 摘要可能丢失细节

三种策略对比:

策略实现难度Token节省信息保留适用场景
截断⭐ 简单⭐⭐ 中等⭐ 差短对话、独立问题
过滤⭐⭐ 中等⭐⭐⭐ 好⭐⭐⭐ 好通用场景
摘要⭐⭐⭐ 复杂⭐⭐⭐⭐⭐ 优秀⭐⭐⭐⭐ 很好长对话、重要会议

三、长期记忆:BaseStore

1、InMemoryStore 入门

步骤1:创建Store
import { InMemoryStore } from '@langchain/langgraph';

// 创建内存存储
const store = new InMemoryStore();

InMemoryStore是内存存储,重启后消失,适合开发测试。生产环境应使用PostgreSQL、Redis等持久化存储。

步骤2:存储记忆

Store是键值存储,支持命名空间组织:

// 存储记忆
await store.put(
  ['users', 'alice'],    // 命名空间:按层级组织数据
  'preferences',          // 记忆的键
  {                       // 记忆的值
    name: 'Alice',
    language: 'zh-CN',
    coding_style: 'functional',
    timezone: 'Asia/Shanghai',
  }
);

// 读取记忆
const memory = await store.get(['users', 'alice'], 'preferences');
console.log(memory?.value); // { name: 'Alice', ... }

put(namespace, key, value)用于存储记忆:

  • namespace:字符串数组,类似目录结构,用于组织数据
  • key:记忆条目的唯一标识
  • value:任意可序列化的对象

get(namespace, key)用于读取单条记忆,返回值为{ value: ..., metadata: ... } 或undefined

命名空间设计原则:

  • 按实体类型分层:[‘users’, userId]
  • 按功能分类:[‘preferences’, ‘facts’, ‘sessions’]
  • 避免过深嵌套:最多3层

2、在图中使用 Store

步骤1:编译时注入Store
import { LangGraphRunnableConfig } from '@langchain/langgraph';

// Store 需要在编译时注入,通过 config 在节点中访问
const graphWithStore = new StateGraph(MessagesAnnotation)
  .addNode('remember', async (state, config: LangGraphRunnableConfig) => {
    const userId = config.configurable?.user_id as string;
    const store = config.store!;
    
    // 读取用户的长期记忆
    const userMemory = await store.get(['users', userId], 'profile');
    
    const systemContext = userMemory
      ? `用户信息:${JSON.stringify(userMemory.value)}`
      : '这是新用户,还没有记忆档案';
    
    const response = await model.invoke([
      new SystemMessage(systemContext),
      ...state.messages,
    ]);
    
    return { messages: [response] };
  })
  .addEdge('__start__', 'remember')
  .addEdge('remember', '__end__')
  .compile({ checkpointer: new MemorySaver(), store });

使用compile({ store })将 Store 注入到图中,在节点内通过 config 访问 Store。从config.configurable?.user_id中获取用户 ID(user_id 是跨会话的,不同于 thread_id)。

步骤2:使用Store
const config = {
  configurable: {
    thread_id: 'session-001',
    user_id: 'alice',
  },
};

await graphWithStore.invoke(
  { messages: [new HumanMessage('你好')] },
  config
);
// AI会根据用户档案个性化回复

3、自动提取并保存记忆

import { z } from 'zod';

async function extractAndSaveMemory(
  state: typeof MessagesAnnotation.State,
  config: LangGraphRunnableConfig
) {
  const userId = config.configurable?.user_id as string;
  const store = config.store!;
  
  // 用 LLM 从对话中提取关键信息
  const extractionResult = await model.withStructuredOutput(
    z.object({
      hasNewInfo: z.boolean(),
      facts: z.array(z.string()).describe('从对话中提取的用户偏好和事实'),
    })
  ).invoke([
    new SystemMessage('从以下对话中提取用户的个人信息、偏好和重要事实'),
    ...state.messages.slice(-4), // 只分析最近4条
  ]);
  
  if (extractionResult.hasNewInfo && extractionResult.facts.length > 0) {
    // 保存提取的记忆
    const existing = await store.get(['users', userId], 'facts');
    const allFacts = [...(existing?.value?.facts ?? []), ...extractionResult.facts];
    
    await store.put(['users', userId], 'facts', { facts: allFacts });
    console.log(`💾 为用户 ${userId} 保存了 ${extractionResult.facts.length} 条新记忆`);
  }
  
  return {};
}

代码解读:

  • withStructuredOutput:强制 LLM 返回结构化 JSON
  • 只分析最近4条消息,避免重复提取历史消息
  • 合并新旧记忆,去重可以根据业务需要进一步优化
  • 这个节点通常在对话节点之后异步执行,不影响响应速度

提取时机:

  1. 每轮对话后自动提取
  2. 检测到关键词时触发(如"我喜欢"、“我讨厌”)
  3. 对话结束时批量提取

注意事项:

  1. 提取要异步执行,避免影响响应速度
  2. 定期清理过时或错误的记忆
  3. 给用户查看和删除记忆的权限

记忆提取流程图:

是

否

用户对话

对话节点

记忆提取节点

有新信息?

保存到Store

结束

合并去重

更新Store


四、记忆检索:语义搜索

1、基于向量的记忆检索

当记忆条目很多时,需要语义搜索找到最相关的记忆:

// 搜索相关记忆(InMemoryStore 支持简单的文本搜索)
async function searchMemories(store: InMemoryStore, userId: string, query: string) {
  const results = await store.search(
    ['users', userId],  // 在指定命名空间内搜索
    { query, limit: 3 } // 返回最相关的3条
  );
  
  return results.map(item => item.value);
}

// 在节点中注入相关记忆
async function chatWithRelevantMemories(
  state: typeof MessagesAnnotation.State,
  config: LangGraphRunnableConfig
) {
  const userId = config.configurable?.user_id as string;
  const store = config.store!;
  const lastMsg = state.messages[state.messages.length - 1].content as string;
  
  // 搜索与当前消息最相关的记忆
  const relevantMemories = await searchMemories(store as InMemoryStore, userId, lastMsg);
  
  const memoryContext = relevantMemories.length > 0
    ? `相关记忆:\n${relevantMemories.map(m => JSON.stringify(m)).join('\n')}`
    : '';
  
  const response = await model.invoke([
    new SystemMessage(`你是一个有记忆的助手。${memoryContext}`),
    ...state.messages,
  ]);
  
  return { messages: [response] };
}

使用store.search()在命名空间内搜索与query相关的记忆,返回指定数量的结果(建议3-5条),并将搜索结果注入到SystemMessage,让LLM感知。

更高级的方案是使用向量数据库(Pinecone、Weaviate)和 嵌入模型计算相似度,使用RAG模式检索最相关记忆。

实际应用场景:

  • 客服系统:搜索用户历史问题
  • 学习助手:回忆之前学过的知识点
  • 个人助理:记住用户的喜好和习惯

五、最佳实践和踩坑指南

💡 实践 1:记忆的分层设计

// 按重要性分层组织记忆命名空间
const namespaces = {
  core: ['users', userId, 'core'],      // 核心档案:姓名、语言偏好
  facts: ['users', userId, 'facts'],    // 事实记忆:知识点、习惯
  sessions: ['users', userId, 'sessions'], // 会话摘要
};

// 示例:存储不同类型的记忆
await store.put(namespaces.core, 'profile', {
  name: 'Alice',
  language: 'zh-CN',
});

await store.put(namespaces.facts, 'tech_stack', {
  languages: ['TypeScript', 'Python'],
  frameworks: ['React', 'LangGraph'],
});

await store.put(namespaces.sessions, 'last_topic', {
  topic: 'LangGraph记忆系统',
  date: '2026-04-19',
});

原因:分层设计便于管理和检索,不同类型记忆有不同更新策略。

💡 实践 2:记忆更新要幂等

// ✅ 使用 upsert 语义(put 天然幂等),避免重复
await store.put(['users', userId], 'preferences', newPrefs);

// ❌ 避免无限追加相同的事实
const existing = await store.get(['users', userId], 'facts');
// 追加前先去重
const uniqueFacts = [...new Set([...(existing?.value?.facts ?? []), ...newFacts])];
await store.put(['users', userId], 'facts', { facts: uniqueFacts });

原因:防止记忆膨胀,保持数据整洁。

💡 实践 3:记忆注入位置

// ✅ 正确:将记忆放在SystemMessage中
const response = await model.invoke([
  new SystemMessage(`用户偏好:${JSON.stringify(userPrefs)}`),
  ...state.messages,
]);

// ❌ 错误:将记忆放在HumanMessage中
const response = await model.invoke([
  ...state.messages,
  new HumanMessage(`用户偏好:${JSON.stringify(userPrefs)}`), // 混淆身份
]);

原因:SystemMessage是系统级别的上下文,不会影响对话角色的清晰度。

⚠️ 常见问题

问题现象解决方案
记忆注入位置错误LLM 忽视长期记忆将记忆放在 SystemMessage 中,而非 HumanMessage
注入过多记忆Token 超限使用语义搜索只注入最相关的3-5条记忆
记忆提取在关键路径响应变慢将记忆提取/保存改为异步后台任务
user_id 和 thread_id 混淆跨会话记忆失效user_id 在 configurable 中单独传,与 thread_id 无关
记忆永不清理Store无限增长定期清理过期或无用记忆
提取过于频繁成本高、噪音多设置提取触发条件,如置信度阈值

📝 本章小结

核心知识点回顾

知识点关键要点应用场景
短期记忆Checkpointer 自动维护 messages单会话对话历史
消息压缩截断/过滤/摘要三种策略防止 Token 超限
BaseStoreput/get/search 跨会话存储用户档案、偏好记忆
记忆注入通过 SystemMessage 注入长期记忆个性化 Agent 响应
记忆提取LLM结构化输出提取关键信息自动构建用户档案
语义搜索store.search 检索相关记忆精准注入上下文

🎯 动手练习

练习 1:消息摘要压缩

  • 目标:超过8条消息后自动触发摘要,并清理旧消息
  • 要求:
    1. 实现summarizeIfNeeded节点
    2. 摘要要保留关键信息
    3. 下次对话能感知历史
  • 验收标准:
    • 20轮对话后 State 中的消息数量不超过4条
    • 摘要准确反映之前的对话内容
    • LLM能基于摘要继续对话

练习 2:用户偏好记忆

  • 目标:Agent 记住用户的语言偏好和回答风格要求
  • 要求:
    1. 第一次告诉 Agent “用简洁的语言回答”
    2. 第二个会话中无需重申
    3. 使用Store跨会话保存
  • 验收标准:
    • 新会话中 Agent 自动以简洁风格回答
    • 用户可以查询自己的偏好设置
    • 偏好可以修改和删除

练习 3:记忆搜索注入

  • 目标:对话时自动搜索并注入最相关的3条长期记忆
  • 要求:
    1. 使用 store.search 语义搜索
    2. 根据当前消息内容搜索
    3. 注入到SystemMessage
  • 验收标准:
    • 询问相关问题时,Agent 主动提及之前记录的信息
    • 搜索结果相关度高
    • 不影响响应速度

练习 4:记忆管理系统

  • 目标:实现完整的记忆CRUD功能
  • 要求:
    1. 查看:列出所有记忆
    2. 编辑:修改某条记忆
    3. 删除:移除错误记忆
    4. 导出:导出为JSON
  • 验收标准:
    • 所有CRUD操作正常工作
    • 用户界面友好
    • 数据一致性保证

📚 延伸阅读


下一章:第11章 —— 子图:构建模块化 Agent

深入浅出LangGraph AI Agent智能体开发教程(九)—LangGraph长短期记忆管理 本期内容分享了LangGraph中的长短期记忆管理机制,短期记忆演示通过InMemorySaver和PostgresSaver实现会话级对话跟踪,支持线程隔离的数据持久化;长期记忆则演示通过InMemoryStore和PostgresStore构建跨会话的稳定知识体系,支持语义检索等高级功能。同时指出大家可通过继承BaseCheckpointSaver和BaseStore抽象类实现自定义存储扩展。 阅读详情

相关推荐

智能体长短期记忆最佳实践

通过的组合,LangGraph 让我们能够编排复杂、可恢复、可解释、可协作的 Agent 工作流。实现上下文工程的写入上下文。

酌沧 1429

大模型开发手记(六):LangChain Agent 记忆系统:短期记忆和长期记忆

这一篇博客主要总结agent的短期记忆这块内容,什么是记忆,我们可以狭义的理解为human、ai、tool等agent的对话上下文的存储、管理和获取。大模型本身是无状态的,每一次调用都是独立的,无法记住上一轮对话的内容,此时就需要记忆系统,把我们与大模型之前的聊天记录存储起来,等下轮对话的时候再通过记忆系统给他,这就是记忆系统的作用。

勇往直前的博客 1261

Agent记忆系统实战:Langchain+Langgraph+DeepAgents实现短期与长期记忆

大语言模型(LLM)驱动的智能体(Agent)在复杂任务中表现越来越强,但多轮对话和跨会话场景下的上下文连续性问题仍是工程实践中的核心挑战。记忆系统作为Agent架构的关键组件,通过短期记忆与长期记忆的分层设计,使智能体能够保留当前会话状态并沉淀用户长期偏好。Langchain提供丰富的组件生态,Langgraph则通过图状态编排与Checkpoint机制实现高效的状态持久化,两者结合可搭建企业级记忆管理方案。DeepAgents进一步强化任务规划与记忆复用,适用于长周期、多步骤的业务场景。本文以电商客服为

weixin_29081163的博客 251

深入解析LangGraph记忆管理:短期与长期记忆的协同机制

摘要: LangGraph框架通过分层记忆管理(短期记忆与长期记忆协同)优化大语言模型智能代理的任务执行能力。短期记忆绑定任务状态,实时存储关键交互信息(任务目标、进度、工具输出等),随状态对象自动流转,确保任务连贯性;长期记忆持久化用户偏好、任务模板等跨周期经验,支持多种存储方案(数据库、向量库),按需召回并与短期记忆融合。该设计解决了传统LLM应用的上下文窗口限制与信息冗余问题,实现高效任务执行与经验复用的平衡。开发者只需定义状态结构,无需手动管理记忆,显著提升代理开发效率。

没事学AI的博客 1213

LangGraph实战-在agent中使用短期记忆(Short-Term memory)

通过使用MemorySaver,我们可以在会话线程中存储对话的状态。在后台,LangGraph 每一步都会保存检查点(checkpoints)--对话状态的快照。这些检查点与模拟会话的线程 ID 相连。只要线程 ID(thread ID) 保持不变,Agent就能记住过去的交互。

zg_hover的专栏 1818

LangGraph生产级记忆落地:用PostgreSQL实现短期与长期持久化

在构建LLM Agent应用时,会话状态与用户偏好能否跨进程、跨会话持久化,直接决定了生产环境的可用性。LangGraph通过checkpointer机制将图节点执行后的状态序列化为快照,短期记忆依赖checkpoint按thread隔离,而长期记忆则需要独立存储以支持跨会话语义召回。PostgreSQL凭借事务、jsonb与pgvector扩展,天然适合同时承载这两种记忆:不仅提供PostgresSaver实现checkpoint自动落库与恢复,还可建立业务表配合向量索引完成长期记忆的相似度检索。从本地M

weixin_30983353的博客 350

LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习

本文介绍基于LangGraph构建AI代理的双层记忆架构:短期记忆管理会话内上下文,长期记忆跨会话存储用户偏好与决策。通过InMemoryStore实现记忆持久化,结合提示工程与人机协作(HITL),代理可从用户反馈中动态更新行为规则,实现持续学习与个性化响应。

deephub 2081

LangGraph记忆管理:短期与长期记忆的AI智能体实现

记忆管理是AI Agent开发中的核心技术,通过模拟人类认知机制实现智能对话。LangGraph作为LangChain生态的重要组件,采用短期记忆(ConversationBufferMemory)和长期记忆(ConversationSummaryMemory)的双层架构。短期记忆基于FIFO队列临时存储会话上下文,适合处理当前对话轮次;长期记忆则通过LLM生成摘要并存入向量数据库(如FAISS),实现语义检索和持久化存储。这种设计在电商客服和技术支持等场景中显著提升解决率和用户满意度。结合向量数据库和LL

weixin_33724570的博客 333

AI Agent记忆系统实现:从短期记忆到长期记忆的完整指南!

本文详细介绍了AI Agent记忆系统的重要性与实现方法,区分了上下文窗口与记忆的本质差异,解析了短期记忆与长期记忆(程序性、情节性、语义性)的架构与应用。通过代码示例展示了如何使用LangGraph实现记忆功能,并提供了生产环境部署方案,最终通过电子邮件智能体案例展示了记忆系统如何提升AI的个性化和适应能力。

qingkahui24689的博客 1227

CAN-do-paser:Java开发的CAN总线数据帧解析库

CAN总线数据帧使用DBC文件信息解析为物理量,基于Java开发的数据解析工具。

佳瑞的博客 1133

AXI backpressure反压机制代码

本文将xilinx的axi读写代码进行修改,实现吞吐量达到50%

m0_64636251的博客 1765

AI Agent记忆系统构建全解析:短期与长期记忆技术详解及开源框架对比!

文章深入探讨AI Agent记忆系统构建,涵盖短期记忆(会话级)与长期记忆(跨会话)的定义、特点及技术实现。详细介绍了上下文窗口管理、向量缓存、键值缓存等短期记忆技术,以及向量数据库、分层存储、记忆压缩等长期记忆技术。同时对比了LangGraph、AgentScope等六个开源框架对记忆系统的支持情况,为开发者提供完整的技术方案参考。

Android23333的博客 1790

AI全景之第八章第三节:时间序列分析与预测技术

摘要 时间序列分析与预测技术从传统统计模型发展到深度学习方法。传统方法包括ARIMA模型(处理趋势和季节性)、指数平滑(加权平均预测)和状态空间模型(概率框架分解)。机器学习方法通过特征工程和树模型提升非线性建模能力。深度学习方法中,RNN/LSTM处理序列依赖,TCN利用因果卷积,Transformer通过注意力机制捕获长程依赖。当前研究趋势结合神经符号方法和生成模型,以提高预测精度和可解释性。不同方法各具优势,需根据数据特性和预测需求选择。

技术引领业务创新 990

Agent记忆系统实战:基于LangChain与LangGraph构建短期与长期记忆

大模型应用开发中,Agent的“失忆”问题普遍存在:对话稍长便逻辑混乱,切换会话即忘记用户偏好。记忆系统并非简单堆砌历史记录,而是让模型学会“回忆”——在检索基础上进行理解、筛选与取舍。本文从记忆分类出发,阐述短期记忆的窗口管理与摘要压缩原理,以及长期记忆的向量存储与召回机制。通过LangChain组件封装模型与工具,LangGraph实现状态化编排与持久化,并引入DeepAgents行为层策略,构建可落地的企业级记忆架构。以电商导购Agent为例,完整演示跨会话记住用户偏好与订单信息的实现路径,涵盖记忆写

weixin_32296621的博客 328

【Python程序开发】湖南省职业院校技能大赛python程序开发赛项样题二

【Python程序开发】湖南省职业院校技能大赛python程序开发赛项样题二

况老师话竞赛&blog 2197

将Windbg附加到软件进程上排查异常闪退的问题

使用Windbg和Process Explorer排查因为内存泄漏导致的软件异常闪退问题。

dvlinker的技术专栏 1万+

LangGraph教程:深入解析Memory功能,短期记忆与长期记忆!

LangGraph的Memory功能通过Checkpointer和Store实现短期记忆和长期记忆。短期记忆在同一线程内保持上下文,通过thread_id隔离不同会话;长期记忆跨会话保存重要信息,通过命名空间组织数据。Persistence是底层机制,Memory是应用功能。文章详细介绍了两者的区别、实现方式和最佳实践,提供了代码示例,帮助开发者打造真正"有记忆"的AI智能体,提供连贯对话和个性化服务。

2401_84494441的博客 1461

172、摄像头振动与异响分析:VCM 共振、OIS 机械噪声的用户体验改善

摘要: 本文深入探讨了手机摄像头模组中VCM(音圈马达)与OIS(光学防抖)系统产生的振动异响问题及其解决方案。通过实际案例,分析了VCM弹簧片共振、OIS悬丝机械噪声以及系统级共振的成因,提出了硬件改进(如弹簧片厚度调整、阻尼材料应用)、驱动优化(PWM频率微调、软启动配置)和算法避让等综合解决策略。特别强调了量产阶段隐蔽性问题的排查技巧,包括扫频测试、机械阻尼处理和用户体验优化方法(如频率掩蔽)。作者建议工程师避免过度依赖仿真数据,重视实物测试,并与声学团队协作,以解决这类"玄学"问题,提升用户感知体验

sundong_81的博客 128

LangGraph 11. LangGraph 记忆管理:短期、中期、长期 与 OpenClaw Memory 模块介绍

摘要 本文探讨智能体记忆管理的实现方案,重点分析LangGraph框架中的三层记忆体系(短期、中期、长期)及其应用场景。短期记忆通过State和Checkpointer管理会话内状态,中期记忆采用每日日志文件实现会话间信息共享,长期记忆则通过Store或文件存储实现跨会话持久化。文章对比了LangGraph与OpenClaw Memory模块的实现差异,并提供了完整的代码示例,包括MemorySaver、InMemoryStore等核心组件的使用方式。 关键词:记忆管理、LangGraph、短期记忆、中期记

破浪会有时的博客 598

YOLO26优化:特征融合 | 一种新颖的多尺度特征融合iAFF,适配小目标检测

在YOLO26中如何使用:iAFF加入Neck替代Concat;

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 270

详解【异质图卷积网络 RGCN】回顾:图神经网络问题的三大处理步骤 | 从起源说起,RGCN核心公式解释,两种降低模型参数量/优化的方式,附核心代码实现讲解

本篇,我们深入分析和学习RGCN的原理以及为何要这么做。首先让我们来回顾对于图神经网络问题的三大处理步骤,可以说,这是该深度学习模型的基本理解,后续都是在深化其中的细节处理。然后以容易理解的方式,引出异质图卷积网络RGCN的由来,主要讲解其核心公式和论文中作者所提出的两种降低模型参数量/优化的处理办法,并给出基础分解以及块对角分解的核心实现代码讲解。最后附上RGCN源代码及说明。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1279

LangGraph内存管理:短期工作记忆与长期持久存储的实现

在构建AI代理系统时,最核心的挑战之一是如何有效管理记忆。传统的聊天机器人往往缺乏真正的状态保持能力,每次对话都像是"失忆"的重启。LangGraph通过创新的内存管理系统解决了这一痛点,为开发者提供了构建真正状态化、长期运行的智能代理的能力。 读完本文,你将掌握: - ✅ LangGraph短期工作记忆的实现原理 - ✅ 长期持久存储的配置和使用方法 - ✅ 内存管理的实际应用场景和最佳实...

gitblog_00309的博客 1280

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LangGraph State记忆机制深度解析:短期与长期记忆的实现原理与实战

LangGraph State记忆机制深度解析:短期与长期记忆的实现原理与实战 文章摘要 本文深入解析LangGraph框架的双层记忆机制,揭示AI智能体如何通过短期记忆(Checkpointer)和长期记忆(Store)实现真正有状态的对话系统。短期记忆基于thread_id隔离会话状态,自动保存执行快照;长期记忆则通过显式API调用实现跨会话知识积累。文章详细对比两种记忆特性,提供代码实现示例,并分析不同存储后端的适用场景。通过命名空间组织、向量检索等机制,LangGraph为构建具备持续学习能力的智能

无论云泥意贯一 493

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

解决AI失忆问题:LangGraph+Mem0双记忆系统实战教程 | 值得收藏

文章介绍了LangGraph+Mem0框架如何通过短期记忆和长期记忆两套系统解决AI智能体的"健忘症"问题。短期记忆管理单次对话上下文,长期记忆实现跨会话的用户信息存储。文章讲解了技术原理、提供了搭建记忆智能体的实战案例,并展望了AI记忆管理技术的未来发展趋势,让AI真正具备"学习"和"成长"的能力。

datian1234的博客 1059

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

从零开始构建Agent记忆系统:LangGraph长短期记忆实战指南

本文深入探讨Agent Memory的核心概念,详解LangGraph框架下短期会话与长期记忆的实现机制,包括存储管理、语义检索等技术。通过MCP协议实战案例,手把手构建融合长记忆机制的Multi-Agent系统,展示中断处理、记忆协作等高级功能。文章提供完整代码示例,帮助开发者掌握记忆管理策略,打造具有上下文感知能力的智能体系统。

大模型工程师老蓝的博客 1313

langgraph中的记忆

文章摘要: 本文系统介绍了LangGraph中的记忆,记忆分为短期记忆和长期记忆两类。短期记忆作用于单个线程,保存对话状态等数据,可通过截断、删除、摘要和检查点四种方法管理;长期记忆作用于整个应用,支持跨线程共享。文章详细阐述了两种记忆的实现方式,包括使用Postgres数据库进行持久化存储的代码示例,展示了如何在对话系统中有效利用记忆机制来提升交互体验。关键技术点包括:短期记忆的自动继承、历史对话管理策略、长期记忆的命名空间隔离以及在工具中直接操作记忆的方法。

zhangbaolin的专栏 1690
上一篇: 深入浅出 LangGraph —— 第9章:流式输出:实时响应用户
下一篇: 深入浅出 LangGraph —— 第11章:子图:构建模块化Agent
FrontAI
博客等级 码龄1年 61粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值