L3 · 专题文章

长期记忆

AI 记忆持久化存储知识检索上下文管理

本页只讲 4 条最关键判断,不写百科

4核心点
先记住记忆不是越多越好,而是越准越有用

盲目存储会导致检索噪声、上下文污染与成本飙升,必须配合过滤、摘要与衰减策略。

LIVE
CORE 长期记忆
01 WHAT

是什么

长期记忆是 AI 系统跨会话持久化存储、索引与检索关键信息的能力,使模型能记住用户偏好、历史交互与领域知识。

02 WHY

为什么

解决大模型上下文窗口有限、无法跨会话保留信息的问题,开发者与产品团队借此构建个性化、连续性的 AI 体验。

03 HOW

怎么做

通过向量数据库、图数据库或关系型存储,将关键信息编码为结构化/半结构化条目,按需检索并注入 Prompt。

04 WHEN

什么时候

需要跨会话一致性、个性化推荐或复杂知识沉淀时使用;单次问答、无状态任务或信息可实时获取时不应引入。

FOCUS

先记住这些

只留最重要的判断,细节见下方实践
01 存储策略

存什么比存多少更重要

只保留高价值、可复用、跨会话有效的信息(如偏好、关键事实、决策依据),避免原始日志堆砌。

02 检索机制

精准召回胜过暴力注入

基于语义相似度、时间衰减与业务规则过滤,按需注入上下文,防止无关记忆干扰模型判断。

03 生命周期管理

记忆会过期,必须主动维护

设置 TTL、冲突解决规则与摘要合并机制,定期清理低价值条目,保持记忆库轻量与准确。

04 边界与成本

不是所有场景都需要长期记忆

单次任务、实时可查信息或高延迟敏感场景应避免引入,优先用短期上下文或外部查询替代。

PROBLEM / POSITION / INTERFACE

先弄清它为什么存在,以及谁在使用

不从历史开始,从真实工作关系开始。
  1. 01 解决的问题

    AI 应用需要记住用户历史、偏好或业务规则,但模型上下文窗口有限且会话间不共享状态。

    每次对话从零开始,导致重复询问、体验割裂、无法积累领域知识。

    成功标准
    系统能自动存储关键信息,按需精准检索,并在后续交互中无缝调用,保持上下文连贯。
  2. 02 AI 生态位

    作为 AI 系统的持久化知识层,连接短期上下文与外部知识库,支撑个性化与连续性推理。

    上游
    依赖会话日志、用户输入、业务事件或外部数据源作为记忆写入来源。
    下游
    为对话引擎、推荐系统、决策代理提供检索上下文,支撑个性化响应与复杂推理。
  3. 03 人的生态位

    人类定义记忆策略、设定存储边界、审核检索结果,并决定哪些信息值得长期保留。

    适合使用
    需要跨会话一致性、用户画像积累、复杂知识沉淀或个性化服务时。
    不必使用
    单次交互、信息实时可查、无状态任务或引入记忆成本高于收益时。
  4. 04 独特价值

    突破上下文窗口限制,实现跨会话知识积累与个性化,是构建连续 AI 体验的基础。

    记忆冲突解决、信息衰减策略、检索精度与延迟平衡、隐私与合规边界。

    复杂度判断
    复杂度不是功能数量,而是控制与验证成本。

INTERFACE FLOW

谁在操作,信息怎样流动

  1. WHO OPERATES

    HUMAN定义记忆范围、设定保留策略、审核关键信息并决定何时覆盖或清除。

    SYSTEM自动执行信息编码、存储、索引构建与按需检索,管理生命周期与一致性。

  2. INPUT

    用户对话、业务事件、偏好设置、历史交互记录等需持久化的信息片段。

  3. CONTROL

    存储策略(全量/增量/摘要)、检索阈值、上下文注入规则、过期与清理机制。

  4. OUTPUT

    返回结构化记忆条目或检索结果,注入后续 Prompt,不直接触发外部动作。

FLOW

记忆写入与检索流程

01信息提取从对话或事件中提取关键事实、偏好或决策依据,过滤噪声。
02编码存储将信息向量化或结构化,写入存储层并附加元数据(时间、来源、权重)。
03按需检索根据当前查询生成检索条件,结合语义相似度与时间衰减召回 Top-K。
04上下文注入将检索结果格式化,控制长度后注入 Prompt,供模型生成响应。
CODE / PYTHON最小 Python 调用
import os
from openai import OpenAI
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct

# 1. 初始化向量库
client = QdrantClient(":memory:")
client.create_collection(collection_name="memories", vectors_config=VectorParams(size=1536, distance=Distance.COSINE))

# 2. 写入记忆
client.upsert(collection_name="memories", points=[
    PointStruct(id=1, vector=[0.1]*1536, payload={"text": "用户偏好简洁回答", "ts": 1700000000})
])

# 3. 检索记忆
results = client.search(collection_name="memories", query_vector=[0.12]*1536, limit=1)
print(results[0].payload["text"])

最短闭环:初始化向量库 → 写入记忆 → 检索并打印。真实场景需替换向量模型与持久化配置。

JSON / RESPONSE典型返回(示意)
{
  "id": 1,
  "score": 0.98,
  "payload": {
    "text": "用户偏好简洁回答",
    "ts": 1700000000,
    "source": "user_preference",
    "weight": 0.8
  }
}

PRACTICE

记忆系统上线前检查

{'check': '是否定义了明确的存储边界?', 'why': '防止原始日志堆砌导致检索噪声与成本飙升。'}
{'check': '是否配置了时间衰减与 TTL?', 'why': '过期信息会干扰判断,需自动清理或降权。'}
{'check': '检索结果是否经过过滤与长度控制?', 'why': '避免无关记忆污染上下文,影响模型输出质量。'}
{'check': '是否设计了冲突解决与摘要合并机制?', 'why': '同一主题多条记忆会引发矛盾,需去重或融合。'}

FAQ

常见问题

选型、用法与失败,不复述定义。
01它和短期上下文有什么区别?

短期上下文仅限当前会话,长期记忆跨会话持久化,需额外存储、检索与生命周期管理。

避免混淆两者导致架构设计失误或资源浪费。
02最小可用方式是什么?

用向量库存储关键偏好/事实,按需检索并注入 Prompt,配合简单 TTL 与长度控制。

帮助快速验证价值,避免过度工程化。
03什么时候不需要它?

单次交互、信息实时可查、无状态任务或引入记忆成本高于收益时。

控制系统复杂度与延迟,聚焦核心场景。
04记忆冲突怎么处理?

按时间戳覆盖、权重投票或人工审核,定期合并摘要,避免矛盾信息并存。

冲突记忆会直接导致模型输出混乱,必须主动管理。

NEXT

下一步

知识图谱