langchain短期 + 长期记忆架构

langchain短期 + 长期记忆架构

整体架构

复制代码
  用户输入
      │
      ├── 短期记忆(WindowMemory)── 内存,最近 K 条消息
      │
      ├── 长期记忆(ChromaDB) ──── 语义检索,历史重点
      │
      ├── 知识库(ChromaDB) ────── 文档检索
      │
      └── 拼接 Prompt → LLM → 输出
                              │
                              ├── 写入短期窗口(内存)
                              ├── 写入 MySQL(完整备份)
                              └── 后台提取长期记忆点 → 写入 ChromaDB

三层存储

层级 存储 数据源 用途 容量
短期 内存 OrderedDict 当前会话实时写入 最近 K 轮对话连贯性 k × 2 条消息
长期 ChromaDB longMemory 集合 每次回复后 AI 自动提取 跨 session 的语义记忆 无限制
备份 MySQL chat_messages 每次对话实时写入 前端历史展示、审计 无限制

短期记忆(WindowMemory)

实现

python 复制代码
# memory_manager.py
class MemoryManager:
    def __init__(self, window_k=2):
        self.window_k = window_k
        self._windows = OrderedDict()

    def get_context(self, session_id):
        """返回窗口内的最近消息"""
        memory = self.get_window(session_id)
        return memory.load_memory_variables({})["history"]

机制

  • 每个 session 独立一个 ConversationBufferWindowMemory(k=2)
  • k=2 表示保留最近 2 轮对话(= 4 条消息:2 条 user + 2 条 assistant)
  • 新消息通过 save_context 写入,超出 K 轮自动丢弃最早的消息
  • 纯内存操作,不查数据库

写入时机

python 复制代码
# streamInvoke 中
self.memoryger.get_window(session_id).chat_memory.add_user_message(question)
...
self.memoryger.get_window(session_id).chat_memory.add_ai_message(answer)

长期记忆(ChromaDB)

提取

每次对话完成后,后台线程调用 LLM 从对话中提取关键信息:

python 复制代码
# langchain_chat.py generateSummary()
prompt = """
总结以下对话的核心语义。
保留:任务目标、问题描述、解决方案、重要约束
忽略:礼貌用语、重复内容、确认性回复
如果没有任何实质性内容,返回:NONE

用户:...  AI:...

总结:"""

提取结果存入 ChromaDB 的 longMemory 集合:

python 复制代码
chromadb.write_long_memory(
    texts=["提取的摘要"],
    metadata_list=[{"session_id": "xxx"}]
)

检索

用户提问时,从 longMemory 集合中按 session 检索相关内容:

python 复制代码
longMemoryter = chromadb.get_long_memory_retrieve(
    k=10,
    filter={"session_id": input_data.session_id}
)
longMemorys = longMemoryter.invoke(input_data.question)

Prompt 组装

最终发给 LLM 的 prompt 结构:

复制代码
历史对话摘要(ChromaDB 长期记忆):
{longMemorys}

最近通话记录(WindowMemory 短期窗口):
{recentHistory}

资料(知识库 RAG 检索):
{docs}

用户问题:
{input}

各模块职责

模块 文件 职责
MemoryManager memory_manager.py 管理短期窗口,按 session 隔离
Chromadb langchain_chromadb.py 知识库 + 长期记忆的向量存储
LangchainChat langchain_chat.py 主流程编排,流式对话
FinishReasonHandler langchain_chat.py 检测 LLM 输出是否被截断

数据流完整链路

复制代码
用户发送消息
    │
    ▼
1. 从 MemoryManager 取短期窗口消息 ── 内存,不查 DB
2. 从 ChromaDB 检索长期记忆 ──────── 按 session_id 语义检索
3. 从 ChromaDB 检索知识库 ────────── RAG 检索
4. 拼接 Prompt → LLM 流式生成
    │
    ▼
流式输出到前端
    │
    ▼
完成后:
    ├── 写入短期窗口(MemoryManager)
    ├── 写入 MySQL(create_chat_message)
    └── 后台线程 → LLM 提取摘要 → 写入 ChromaDB longMemory

版本历史

版本 变更
v1 MySQL 全量加载 + ContextBudget 手动截断
v2 ConversationSummaryBufferMemory 压缩摘要
v3 短期窗口 + ChromaDB 长期记忆(当前)
相关推荐
jiayong2315 小时前
harness 与 hermes-agent 源码阅读路线和维护建议
人工智能·ai·智能体·harness·hermes-agent
千寻girling15 小时前
机器学习 | 监督学习算法(了解) | 尚硅谷学习
开发语言·人工智能·后端·python·学习·算法·机器学习
SZLSDH15 小时前
行业洞察 | 场景、孪生与智能体:数字孪生平台协同演进的底层逻辑
ai·数字孪生·数据可视化·智能体
ONE_SIX_MIX15 小时前
lightweight-charts-onesixth 发布 v2.4.0 ,修复更多bug,添加跨进程窗口功能
python·pyside6·k线图表
才兄说15 小时前
机器人二次开发机器狗巡检?自主回充避障
python
土星云SaturnCloud15 小时前
边缘计算微服务器自然散热技术详解
服务器·人工智能·ai·边缘计算
py小王子15 小时前
期刊复现 | Python实现回归拟合散点图与误差分析图
python·期刊复现图片
麻雀飞吧15 小时前
2026年表格或图形化策略与脚本策略衔接:主流产品迁移路径
python
至此流年莫相忘15 小时前
在 WSL 中部署 Claude Code 并开启 Agent Team 模式
ai