摘要

AI 记忆系统正在改变大模型应用形态:从一次性问答,演进为可持续理解用户上下文的智能助手。本文结合 ChatGPT、Claude、Gemini、Copilot 等记忆机制,拆解显式记忆、隐式推断、记忆摘要与隐私风险,并给出可落地的 Python 记忆层实战方案。


背景介绍:大模型为什么开始“记住你”

过去的大模型应用大多是无状态的:用户发起一次请求,模型基于当前 Prompt 和上下文窗口生成回答,请求结束后上下文即被丢弃。这种模式适合通用问答,但在长期任务、个人助理、企业知识协作场景中存在明显短板。

例如:

  • 你希望 AI 长期记住你的代码风格偏好;
  • 你希望 AI 了解你的项目背景、技术栈和交付周期;
  • 你希望 AI 在多次对话中持续跟踪需求变化;
  • 企业用户希望 AI 理解组织文档、会议纪要和成员角色。

因此,AI 系统开始从 Stateless Tool(无状态工具) 走向 Stateful Assistant(有状态助手)。视频中提到的 ChatGPT、Claude、Gemini、Microsoft Copilot 等产品,实际上都在围绕同一个方向演进:构建可控、可更新、可审计的长期记忆系统。

需要注意的是,所谓“记忆”并不是模型参数被实时修改。大多数 AI 记忆系统的本质,是在模型推理前,将用户画像、历史事实、偏好信息、任务状态等内容动态注入上下文,或者通过检索增强生成技术将相关记忆召回。


核心原理:AI 记忆系统的四层架构

1. 显式记忆:用户主动声明的事实

显式记忆是最容易理解的一类信息。用户明确告诉 AI:

请记住,我使用 Python 和 FastAPI 开发后端服务。
请记住,我偏好使用 Markdown 表格总结信息。
请记住,我的项目截止日期是 6 月 10 日。

这类信息通常会进入长期存储,被标记为稳定事实,在后续会话中作为用户上下文的一部分参与 Prompt 构造。

工程上,显式记忆通常包含:

  • user_id:用户标识;
  • memory_type:记忆类型,如偏好、项目、身份、约束;
  • content:记忆内容;
  • created_at / updated_at:时间戳;
  • confidence:可信度;
  • status:启用、隐藏、删除等状态。

2. 隐式记忆:从历史对话中自动推断

视频中重点提到 ChatGPT 新的“梦境架构”或“隐式记忆层”。其核心能力是:模型不只保存用户主动要求记住的信息,还会从历史聊天、上传文件、连接应用中自动归纳上下文。

例如:

  • 用户多次询问摄影器材问题,系统推断其对摄影感兴趣;
  • 用户经常要求“简洁、正式、分点输出”,系统推断其表达偏好;
  • 用户持续讨论某个 SaaS 项目,系统推断其当前工作背景。

这种隐式记忆对体验提升很大,但也带来风险:模型可能错误推断用户身份、兴趣或意图,并在未来持续放大这种错误。

3. 记忆摘要:长期上下文的压缩与治理

记忆摘要是当前 AI 记忆系统中非常关键的组件。因为历史对话可能非常长,不可能全部塞入模型上下文窗口。因此系统需要把大量交互压缩成结构化摘要。

一个合理的记忆摘要可能长这样:

{
  "preferences": {
    "language": "Chinese",
    "output_style": "technical, structured, concise",
    "code_language": "Python"
  },
  "projects": [
    {
      "name": "AI Agent 工程化平台",
      "stack": ["FastAPI", "PostgreSQL", "Redis", "LLM API"],
      "status": "active"
    }
  ],
  "constraints": [
    "避免过度口语化",
    "代码示例需要真实可运行"
  ]
}

记忆摘要的价值在于:

  • 降低上下文 Token 成本;
  • 提高长期对话连续性;
  • 支持用户审计和修改;
  • 避免旧信息与新信息简单堆叠。

视频中提到的“马拉松训练”和“脚踝受伤”例子,本质上就是记忆冲突解决:系统不能机械地保存两条事实,而要理解状态变化,更新用户画像。

4. 记忆召回:在合适的时候使用合适的信息

不是所有记忆都应该进入每次请求。一个优秀的记忆系统需要判断:

  • 当前问题是否需要用户偏好?
  • 当前任务是否与某个项目相关?
  • 某条记忆是否过期?
  • 是否存在隐私敏感信息?
  • 是否存在与新信息冲突的旧事实?

在工程实现中,常见做法包括:

  • 基于关键词和 embedding 的相似度检索;
  • 基于时间衰减的权重计算;
  • 基于记忆类型的规则过滤;
  • 使用 LLM 对候选记忆进行二次重排;
  • 敏感信息脱敏或完全排除。

工具选型:多模型接入与记忆实验环境

在实际开发 AI 记忆系统时,单一模型往往不够灵活。不同模型在长上下文、推理能力、工具调用、中文理解、代码生成方面存在差异。我的日常 AI 开发环境中会使用薛定猫 AI(xuedingmao.com)作为统一模型接入层。

它的技术价值主要体现在:

  • 聚合 500+ 主流大模型,例如 GPT-5.4、Claude 4.6、Gemini 3.1 Pro 等;
  • 新模型实时首发,便于开发者第一时间验证前沿 API 能力;
  • 采用 OpenAI 兼容模式,通过统一的 Base URL、API Key 和模型名完成接入;
  • 降低多模型切换、多供应商鉴权和接口适配的复杂度。

本文代码示例默认使用 claude-opus-4-6。该模型在复杂推理、长文本理解、代码生成和技术写作方面表现很强,适合作为记忆系统中的摘要生成器、冲突分析器和上下文重排器。


实战演示:使用 Python 构建一个轻量级 AI 记忆层

下面实现一个简化版记忆系统,包含:

  1. 保存用户显式记忆;
  2. 从对话中抽取隐式记忆;
  3. 生成结构化记忆摘要;
  4. 在下一轮请求中注入相关记忆。

安装依赖

pip install openai python-dotenv

环境变量配置

创建 .env 文件:

XUEDINGMAO_API_KEY=你的API_KEY

完整 Python 示例

import os
import json
import sqlite3
from datetime import datetime
from typing import List, Dict, Any

from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()


class MemoryStore:
    """
    一个轻量级本地记忆存储。
    生产环境可替换为 PostgreSQL、MongoDB 或向量数据库。
    """

    def __init__(self, db_path: str = "ai_memory.db"):
        self.conn = sqlite3.connect(db_path)
        self.conn.row_factory = sqlite3.Row
        self._init_table()

    def _init_table(self):
        self.conn.execute("""
        CREATE TABLE IF NOT EXISTS memories (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            user_id TEXT NOT NULL,
            memory_type TEXT NOT NULL,
            content TEXT NOT NULL,
            confidence REAL DEFAULT 0.8,
            status TEXT DEFAULT 'active',
            created_at TEXT NOT NULL,
            updated_at TEXT NOT NULL
        )
        """)
        self.conn.commit()

    def add_memory(
        self,
        user_id: str,
        memory_type: str,
        content: str,
        confidence: float = 0.8
    ):
        now = datetime.utcnow().isoformat()
        self.conn.execute("""
        INSERT INTO memories
        (user_id, memory_type, content, confidence, status, created_at, updated_at)
        VALUES (?, ?, ?, ?, 'active', ?, ?)
        """, (user_id, memory_type, content, confidence, now, now))
        self.conn.commit()

    def list_active_memories(self, user_id: str) -> List[Dict[str, Any]]:
        rows = self.conn.execute("""
        SELECT id, memory_type, content, confidence, created_at, updated_at
        FROM memories
        WHERE user_id = ? AND status = 'active'
        ORDER BY updated_at DESC
        """, (user_id,)).fetchall()

        return [dict(row) for row in rows]

    def delete_memory(self, memory_id: int):
        self.conn.execute("""
        UPDATE memories
        SET status = 'deleted', updated_at = ?
        WHERE id = ?
        """, (datetime.utcnow().isoformat(), memory_id))
        self.conn.commit()


class LLMClient:
    """
    使用薛定猫 AI 的 OpenAI 兼容接口。
    Base URL 使用 https://xuedingmao.com。
    默认模型 claude-opus-4-6,适合复杂摘要、推理和代码任务。
    """

    def __init__(self):
        api_key = os.getenv("XUEDINGMAO_API_KEY")
        if not api_key:
            raise RuntimeError("请先在 .env 中配置 XUEDINGMAO_API_KEY")

        self.client = OpenAI(
            api_key=api_key,
            base_url="https://xuedingmao.com/v1"
        )
        self.model = "claude-opus-4-6"

    def chat(self, messages: List[Dict[str, str]], temperature: float = 0.2) -> str:
        response = self.client.chat.completions.create(
            model=self.model,
            messages=messages,
            temperature=temperature
        )
        return response.choices[0].message.content


class MemoryAgent:
    """
    具备简化记忆能力的 AI Agent。
    """

    def __init__(self, memory_store: MemoryStore, llm: LLMClient):
        self.memory_store = memory_store
        self.llm = llm

    def extract_implicit_memories(self, user_id: str, conversation: str):
        """
        从用户输入中抽取可能有长期价值的隐式记忆。
        注意:真实生产环境中应加入敏感信息检测和用户确认机制。
        """

        prompt = f"""
你是一个 AI 记忆抽取器。请从以下用户对话中提取有长期价值的记忆。

要求:
1. 只提取稳定、可复用的信息;
2. 不要提取身份证、银行卡、健康隐私等敏感信息;
3. 输出 JSON 数组;
4. 每个元素包含 memory_type、content、confidence;
5. 如果没有可保存的信息,输出空数组 []。

可选 memory_type:
- preference:用户偏好
- project:项目背景
- skill:技能或技术栈
- constraint:长期约束
- interest:兴趣方向

用户对话:
{conversation}
"""

        result = self.llm.chat([
            {"role": "system", "content": "你擅长从对话中抽取结构化长期记忆。"},
            {"role": "user", "content": prompt}
        ])

        try:
            memories = json.loads(result)
        except json.JSONDecodeError:
            print("模型输出不是合法 JSON,跳过记忆写入:", result)
            return

        for item in memories:
            self.memory_store.add_memory(
                user_id=user_id,
                memory_type=item.get("memory_type", "preference"),
                content=item.get("content", ""),
                confidence=float(item.get("confidence", 0.7))
            )

    def build_memory_summary(self, user_id: str) -> str:
        """
        将当前用户的长期记忆压缩为摘要,用于注入系统提示词。
        """

        memories = self.memory_store.list_active_memories(user_id)

        if not memories:
            return "暂无长期记忆。"

        prompt = f"""
请将以下用户记忆整理为简洁、结构化的上下文摘要。
要求:
1. 保留对后续回答有帮助的信息;
2. 合并重复内容;
3. 如果存在冲突,指出需要用户确认;
4. 使用中文输出。

用户记忆:
{json.dumps(memories, ensure_ascii=False, indent=2)}
"""

        return self.llm.chat([
            {"role": "system", "content": "你是一个严谨的 AI 记忆摘要生成器。"},
            {"role": "user", "content": prompt}
        ])

    def answer_with_memory(self, user_id: str, user_question: str) -> str:
        """
        在回答用户问题前注入记忆摘要,实现个性化上下文增强。
        """

        memory_summary = self.build_memory_summary(user_id)

        messages = [
            {
                "role": "system",
                "content": f"""
你是一个专业 AI 技术助手。回答时需要结合用户长期上下文,但不能过度暴露个人信息。

用户长期记忆摘要:
{memory_summary}

使用要求:
- 仅在问题相关时使用记忆;
- 不要主动提及无关个人细节;
- 如果记忆可能过期或存在冲突,需要提示用户确认。
"""
            },
            {
                "role": "user",
                "content": user_question
            }
        ]

        return self.llm.chat(messages)


if __name__ == "__main__":
    user_id = "csdn_user_001"

    store = MemoryStore()
    llm = LLMClient()
    agent = MemoryAgent(store, llm)

    # 模拟一段用户对话,用于抽取隐式记忆
    conversation = """
我最近在做一个 AI Agent 平台,后端主要用 Python、FastAPI 和 PostgreSQL。
我希望回答尽量专业一些,不要太口语化,最好能给出完整代码。
后续我可能会接入多种大模型 API,所以接口兼容性很重要。
"""

    agent.extract_implicit_memories(user_id, conversation)

    question = "请帮我设计一个 AI Agent 的多模型接入层架构。"
    answer = agent.answer_with_memory(user_id, question)

    print("AI 回答:")
    print(answer)

注意事项:记忆系统不是越强越好

1. 隐私边界必须明确

视频中特别强调:普通聊天中的健康信息、财务信息、身份信息,都可能被系统写入记忆。如果开发者构建自己的 AI 应用,应当加入敏感信息识别逻辑,例如:

  • 手机号、邮箱、身份证号脱敏;
  • 医疗、财务、法律类内容默认不入库;
  • 高风险记忆必须经用户确认;
  • 支持用户查看、修改、隐藏和删除记忆。

2. 避免错误推断长期存在

隐式记忆的最大风险是错误推断。例如用户只是临时帮朋友查资料,系统却认为这是用户本人长期兴趣。解决方案包括:

  • 为记忆设置 confidence
  • 对低置信度记忆不直接注入 Prompt;
  • 为记忆增加过期时间;
  • 提供记忆审计页面;
  • 对冲突信息触发用户确认。

3. 防止幻觉被结构化固化

普通幻觉只影响一次回答,但如果幻觉被写入长期记忆,就会变成结构性错误。开发者应避免让模型无约束地写数据库。更安全的方式是:

  1. LLM 先生成候选记忆;
  2. 规则系统过滤敏感内容;
  3. 用户确认或系统二次校验;
  4. 最后再写入长期存储。

4. 个性化不应变成过度侵入

AI 记住用户偏好是有价值的,但每次回答都主动提及用户个人细节,会造成明显的不适感。一个成熟的记忆系统应该遵循“相关才使用”的原则,而不是把所有记忆机械注入上下文。


总结

AI 记忆系统正在成为大模型应用的核心基础设施。ChatGPT 的统一记忆池、Claude 的专业化上下文、Gemini 的生态集成、Copilot 的企业合规能力,本质上都在推动 AI 从“回答问题”走向“理解长期上下文”。

对于开发者而言,真正重要的不是简单模仿某个产品功能,而是理解记忆系统的工程本质:显式记忆、隐式抽取、摘要压缩、冲突解决、隐私治理和上下文召回。只有在可控、可审计、可删除的前提下,AI 记忆才会成为提升效率的基础能力,而不是新的风险来源。

#AI #大模型 #Python #机器学习 #技术实战

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐