长期记忆系统架构

1. 核心存储架构:ES 的"混合双打"模式

我们放弃了独立的向量数据库,转而利用 Elasticsearch (ES) 作为统一的存储和检索引擎。ES 在这里扮演了双重角色:

  • 向量检索(语义大脑) :利用 ES 的 dense_vector 字段和 KNN 算法,负责处理"意思相近"的查询(如:搜"水果"能联想到"苹果")。
  • 关键词检索(精准索引):利用 ES 传统的倒排索引,负责处理精确匹配(如:搜"订单号 123"必须精准命中)。
  • 元数据过滤(记忆管家) :利用 ES 的 keyword 字段存储 session_id、user_id、timestamp 等标签,确保在检索时能快速隔离不同用户或会话的数据。
2. 数据流转与生命周期

记忆数据在系统中经历了一个完整的生命周期,确保了"热数据"实时响应,"冷数据"低成本存储:

  • 热数据(短期记忆)
    • 位置:内存或高速缓存。
    • 内容:当前会话的最近几轮对话。
    • 作用:保证对话的流畅性和即时上下文。
  • 固化与写入(记忆沉降)
    • 触发:当对话轮数达到阈值或会话结束时,后台异步任务启动。
    • 处理:将热数据进行总结、压缩,并调用 Embedding 模型将其转化为向量。
    • 存储 :将向量 (用于检索)、原始文本 (用于阅读)、元数据(用于过滤)打包存入 ES。
  • 冷数据(长期记忆)
    • 位置:ES 主存储。
    • 内容:历史对话精华、用户偏好、关键事实。
    • 归档:对于极久远的记忆,可进一步沉降到低成本的对象存储(如 S3/文件存储)中,实现成本与性能的平衡。
3. 检索逻辑:语义与隔离的完美配合

在读取记忆时,系统执行了一套严密的逻辑,解决了"混淆"和"精准度"问题:

  • 向量化查询(制作钥匙) :将用户当前的提问通过 Embedding 模型转化为向量。这个向量仅作为检索钥匙,不会被存入数据库。
  • 带过滤的相似度搜索(精准开门) :ES 接收查询请求,执行两步操作:
    1. 过滤 :根据 session_id 或 user_id 锁定当前用户的记忆范围(防止记忆错乱)。
    2. 匹配:在锁定范围内,计算向量相似度,找出 Top-K 条最相关的记忆。
  • 原文重组(交付货物) :系统从 ES 中提取匹配到的原始文本(而非向量),将其组装成上下文(Context),投喂给大模型。
4. 模型依赖与工程落地

针对 Embedding 模型的依赖问题,我们确立了"把复杂度留给开发者,把简单留给用户"的工程原则:

  • 核心认知 :ES 只是容器和计算器,Embedding 模型是不可或缺的"翻译官"。无论使用何种数据库,将文本转化为向量的步骤无法省略。
  • 落地策略 :
    • 内置轻量模型 :软件默认内置一个极小的开源 Embedding 模型(如 all-MiniLM-L6 或 nomic-embed-text),实现"开箱即用",无需用户配置。
    • 异步处理:Embedding 的转换过程在后台异步队列中完成,不阻塞用户的主线程,消除延迟感。
    • 灵活配置 :允许高级用户在开启长期记忆地方设置中替换为自定义的 Embedding 服务(如 OpenAI 或本地 Ollama 大模型),以满足更高精度的需求。
5. 最终架构图谱

整个系统形成了一个闭环:

用户提问 → Embedding模型(转向量) → ES(带Session过滤的语义搜索) → 提取原始文本 → 组装上下文 → 大模型(LLM)生成回答

相关推荐
一切皆是因缘际会21 小时前
掌控信息论:同源星际通信基础理论 上
人工智能·ai·系统架构·分布式系统·信息论·星际通信·物理计算机
RockHopper20251 天前
AI时代模型生命周期与软件资产重构:概要版
人工智能·系统架构·软件工程·ai编程·世界模型
zmsup1 天前
从运维需求到产品能力:OpsArk Agent 的运维智能平台架构设计思路
运维·系统架构·agent·智能体·运维智能平台
408高手2 天前
用例建模之详解用例和用例规约
系统架构
要努力wow2 天前
系统架构师 —— 系统架构设计
系统架构
HRTOS3 天前
HRTOS:一个名字背后的目标——不断逼近硬实时
经验分享·单片机·系统架构·51单片机
沫璃染墨3 天前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
树下困觉眯3 天前
View绘制流程学习--获取WindowManager的三种方式
android·系统架构·view design
沫璃染墨4 天前
《从零入门Linux系统篇(五十六):线程篇·九——生产者消费者模型:从条件变量到BlockingQueue实现》
linux·服务器·c++·驱动开发·设计模式·架构·系统架构
艺杯羹4 天前
Anthropic突袭发布Claude Code Mods!用TypeScript编写智能体中间件:告别AI误删与失控
人工智能·typescript·系统架构