1. 项目概述:为什么你的AI智能体需要“持久记忆”

最近在折腾AI智能体(Agent)的朋友,可能都遇到过同一个头疼的问题:你精心调教的智能体,在一次对话里表现得像个专家,能记住上下文,逻辑清晰。但当你关闭会话,第二天再打开时,它仿佛得了“健忘症”,完全不记得之前的对话历史、你的偏好设置,甚至是你教给它的特定知识。这种“对话失忆”现象,极大地限制了智能体在复杂、长期任务中的应用价值,比如个人学习助手、项目管理伙伴或者客户服务专员。

这个问题的核心,在于大多数开箱即用的AI智能体框架,其“记忆”是短暂且会话绑定的。它们依赖的是大语言模型(LLM)本身的上下文窗口,一旦会话结束,这些“记忆”就烟消云散。而“持久化记忆”(Persistent Memory)正是解决这一痛点的关键技术。它指的是将智能体在运行过程中产生的重要信息——如用户偏好、任务上下文、决策依据、学到的知识片段——以结构化的方式存储到外部数据库或文件中,并在后续的交互中能够精准、高效地检索和调用。

想象一下,你有一个负责帮你整理技术文档的智能体。第一次你告诉它:“我习惯将API文档放在 docs/api/ 目录下,内部模块说明放在 docs/internal/ 。” 有了持久记忆,一周后你让它“把新写的用户认证模块文档归档”,它就能自动将文件放入 docs/internal/ ,而不是反复询问你存放规则。这不仅仅是方便,更是智能体从“一次性工具”进化为“长期伙伴”的质变。

为智能体添加持久记忆,并非简单地将所有对话记录塞进数据库。它涉及记忆的 筛选 (什么值得记?)、 编码 (以什么格式记?)、 存储 (存在哪里?)和 检索 (用时怎么找?)四个核心环节。接下来,我将以一个基于流行框架(如LangChain、LlamaIndex)的智能体项目为例,手把手带你完成从零到一的持久记忆系统搭建。我们会聚焦于最实用、最通用的方案,避开过于前沿或不稳定的技术,确保每一步都可落地、可复现。

2. 核心架构设计:构建记忆系统的四大支柱

为智能体设计持久记忆系统,就像为一座图书馆制定管理规则。你不能把进来的每一张纸片都塞进书架,而是需要分类员(筛选)、编目员(编码)、仓库(存储)和检索员(检索)。一个健壮的架构必须同时考虑这四方面。

2.1 记忆筛选策略:决定什么值得被记住

不是所有对话内容都值得永久保存。无意义的寒暄、重复的提问、错误的中间输出,如果全部存储,只会污染记忆库,降低检索效率。常见的筛选策略包括:

  1. 基于意图/实体提取 :利用LLM或更轻量的NLP模型,从对话中提取关键意图(如“用户设定了偏好”、“用户传授了知识”、“任务完成了某一步”)和命名实体(如人名、项目名、日期、特定参数值)。只有包含这些关键元素的对话片段才进入记忆流程。
  2. 显式记忆指令 :在智能体的系统提示词(System Prompt)中设计特殊指令。例如,当用户说“请记住:我喝咖啡不加糖”或“以下是我的项目规范,请保存”,智能体识别到“记住”、“保存”等关键词,则触发记忆存储函数。
  3. 摘要式记忆 :对于较长的任务对话,不存储原始对话,而是定期(如每10轮对话或任务阶段完成后)用LLM生成一个摘要,存储这个摘要。例如,一段关于调试代码的50轮对话,最终摘要为:“用户于2023年10月27日调试 login 函数,定位到问题源于 validateToken 函数对过期时间处理有误,已修复并验证。”

实操心得 :在项目初期,建议采用“显式指令为主,摘要为辅”的策略。这能让智能体的记忆行为对用户更透明、可控。你可以设计像 /remember [内容] 这样的命令,让用户主动告知智能体需要记忆什么,避免智能体自作主张记下无用信息。

2.2 记忆编码与向量化:让记忆可被理解与搜索

记忆不能以原始文本形式杂乱堆放。我们需要将其转换为一种既能保留语义,又能被高效检索的格式。目前最主流且有效的方法是 向量化

  1. 文本嵌入 :使用文本嵌入模型(如OpenAI的 text-embedding-ada-002 ,或开源的 BGE Sentence-Transformers 模型),将一段需要记忆的文本转换为一个高维向量(例如1536维)。这个向量就像是这段文本的“数学指纹”,语义相近的文本,其向量在空间中的距离也更近。
  2. 结构化存储 :除了向量,我们还需要存储一些原始信息,以便检索后还原。通常,一条记忆记录包含以下几个字段:
    • id : 唯一标识符。
    • content : 记忆的原始文本内容。
    • embedding : 内容对应的向量。
    • metadata : 元数据,JSON格式,记录来源(如会话ID)、时间戳、记忆类型(如“用户偏好”、“事实知识”、“任务上下文”)、关联实体等。
    • summary : (可选)如果原始内容很长,可以额外存储一个摘要。
# 一个记忆条目的数据结构示例(Python字典)
memory_record = {
    "id": "mem_001",
    "content": "用户偏好:所有生成的代码文件头部需要添加Apache 2.0许可证声明。",
    "embedding": [0.012, -0.045, ..., 0.198], # 1536维的向量
    "metadata": {
        "session_id": "sess_abc123",
        "timestamp": "2023-10-27T14:30:00Z",
        "type": "user_preference",
        "entity": ["code_style", "license"]
    }
}

2.3 存储后端选型:记忆放在哪里?

存储后端负责安全、可靠地保存这些向量和关联数据。选择取决于数据量、性能需求、运维复杂度和成本。

后端类型 代表工具 优点 缺点 适用场景
向量数据库 Pinecone, Weaviate, Qdrant, Milvus 专为向量检索优化,性能极高,支持复杂的相似度搜索和过滤。 通常为独立服务,需要额外部署和维护;云服务可能产生费用。 生产环境,记忆量大,对检索速度和精度要求高。
扩展型数据库 PostgreSQL (pgvector扩展), Redis (RedisVL) 利用现有数据库生态,无需引入新组件;事务支持好。 向量检索性能通常低于专用向量数据库;需要安装扩展。 已有PG/Redis栈,记忆量中等,希望技术栈统一。
轻量级文件存储 ChromaDB, FAISS (本地索引文件) 部署简单,无需外部服务;适合本地开发和原型验证。 分布式支持弱,持久化和多会话共享需要自行处理文件同步。 本地开发、测试、小型个人项目。

注意事项 :对于个人项目或初期原型,我强烈推荐从 ChromaDB 开始。它纯Python实现,API极其简单,数据可以持久化到磁盘,完全能满足中小规模记忆存储的需求,让你快速验证想法,避免在基础设施上过早纠结。

2.4 检索机制设计:如何从记忆中快速找到所需?

当智能体需要回忆时,它面对的是一个可能包含成千上万条记忆的库。高效的检索是记忆系统可用性的关键。

  1. 相似性搜索 :这是最核心的方法。将当前用户的查询(或对话上下文)同样进行向量化,然后在记忆库中计算其与所有记忆向量的余弦相似度或点积,返回最相似的K条记忆。
  2. 元数据过滤 :在相似性搜索前或后,结合元数据进行过滤。例如,只检索“记忆类型”为 user_preference 的记录,或者只找某个特定 session_id 下的记忆。这能大幅提升检索的精准度。
  3. 混合检索 :结合关键词搜索(BM25)和向量搜索,取长补短。关键词搜索对精确术语匹配更有效,向量搜索对语义相似性更有效。两者结果可以按分数融合(Hybrid Search)。
  4. 记忆刷新与优先级 :为记忆设计“强度”或“访问频率”字段。最近频繁被访问的记忆,在检索时可以获得权重加成。同时,可以设计淘汰机制,将长期未被访问且不重要的记忆归档或删除,防止记忆库无限膨胀。

3. 分步实现指南:从零搭建智能体记忆模块

我们将使用 LangChain 框架和 ChromaDB 向量数据库来实现一个轻量级、可持久化的记忆模块。LangChain提供了丰富的记忆相关抽象,能让我们更关注逻辑而非底层细节。

3.1 环境准备与依赖安装

首先,创建一个新的项目目录并初始化Python环境。建议使用Python 3.9以上版本。

# 创建项目目录
mkdir ai-agent-with-memory && cd ai-agent-with-memory
# 创建虚拟环境(可选但推荐)
python -m venv venv
source venv/bin/activate  # Linux/macOS
# venv\Scripts\activate  # Windows
# 安装核心依赖
pip install langchain langchain-community langchain-openai chromadb
# 安装文本嵌入模型依赖,这里使用开源的SentenceTransformers
pip install sentence-transformers
# 安装OpenAI库(如果你打算使用OpenAI的嵌入模型)
# pip install openai

这里我们选择 sentence-transformers all-MiniLM-L6-v2 模型。它体积小、速度快、效果不错,且完全本地运行,无需API密钥和网络请求,非常适合开发和测试。

3.2 初始化记忆存储后端

我们在本地目录下创建一个持久的ChromaDB集合(Collection)来存储记忆。

# memory_store.py
import os
from langchain.vectorstores import Chroma
from langchain.embeddings import SentenceTransformerEmbeddings

# 1. 定义持久化目录
PERSIST_DIRECTORY = "./chroma_db"

# 2. 初始化嵌入模型
embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
# 如果你使用OpenAI,可以这样初始化:
# from langchain_openai import OpenAIEmbeddings
# embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")

# 3. 初始化或加载Chroma向量数据库
# 如果目录存在,则加载已有的数据库;否则创建新的。
vectorstore = Chroma(
    collection_name="agent_memory",
    embedding_function=embeddings,
    persist_directory=PERSIST_DIRECTORY,
)

print(f"记忆存储已初始化。数据将持久化在: {os.path.abspath(PERSIST_DIRECTORY)}")

运行这段代码后,会在项目目录下生成一个 chroma_db 文件夹,里面就是你的记忆库。

3.3 构建核心记忆管理类

这个类将封装记忆的添加、检索和简单管理功能。

# memory_manager.py
from datetime import datetime
from typing import List, Dict, Any, Optional
from uuid import uuid4
from langchain.schema import Document
from .memory_store import vectorstore  # 导入上一步初始化的vectorstore

class PersistentMemoryManager:
    def __init__(self, namespace: str = "default"):
        """
        初始化记忆管理器。
        Args:
            namespace: 命名空间,用于隔离不同智能体或用户的记忆。
        """
        self.namespace = namespace
        self.vectorstore = vectorstore

    def _create_document(self, content: str, metadata: Dict[str, Any]) -> Document:
        """创建LangChain Document对象,用于存储。"""
        # 为记忆生成唯一ID,并补充必要元数据
        metadata.update({
            "namespace": self.namespace,
            "id": str(uuid4()),
            "timestamp": datetime.utcnow().isoformat()
        })
        return Document(page_content=content, metadata=metadata)

    def add_memory(self, content: str, memory_type: str = "observation", **extra_metadata):
        """
        添加一条记忆。
        Args:
            content: 需要记忆的文本内容。
            memory_type: 记忆类型,如 'user_preference', 'fact', 'task_context', 'observation'。
            extra_metadata: 额外的元数据键值对。
        """
        metadata = {"type": memory_type, **extra_metadata}
        doc = self._create_document(content, metadata)
        # 添加到向量库
        self.vectorstore.add_documents([doc])
        print(f"[记忆已添加] 类型: {memory_type} | 内容: {content[:50]}...")

    def search_memories(self, query: str, filter_types: Optional[List[str]] = None, k: int = 3) -> List[Document]:
        """
        搜索相关记忆。
        Args:
            query: 搜索查询文本。
            filter_types: 只检索指定类型的记忆列表,为None则检索所有。
            k: 返回最相关的k条记忆。
        Returns:
            相关的Document列表。
        """
        # 构建过滤条件
        filter_dict = {"namespace": self.namespace}
        if filter_types:
            filter_dict["type"] = {"$in": filter_types}

        # 执行相似性搜索,并应用元数据过滤
        docs = self.vectorstore.similarity_search(
            query=query,
            k=k,
            filter=filter_dict if filter_dict else None
        )
        return docs

    def get_relevant_context(self, current_query: str, context_window: int = 2000) -> str:
        """
        获取与当前查询最相关的记忆,并格式化为上下文字符串。
        这是供LLM直接使用的函数。
        """
        relevant_memories = self.search_memories(current_query, k=5)
        if not relevant_memories:
            return ""

        # 将记忆内容拼接起来,并限制总长度
        context_parts = []
        total_len = 0
        for mem in relevant_memories:
            mem_text = f"[{mem.metadata.get('type', 'memory')}] {mem.page_content}"
            if total_len + len(mem_text) > context_window:
                break
            context_parts.append(mem_text)
            total_len += len(mem_text)

        return "\n".join(context_parts)

3.4 将记忆模块集成到智能体

现在,我们将这个记忆管理器与一个简单的基于LLM的对话智能体结合起来。我们使用LangChain的LCEL(LangChain Expression Language)来构建链。

# agent_with_memory.py
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
from .memory_manager import PersistentMemoryManager
import os

# 设置OpenAI API Key (请替换成你的,或使用其他LLM)
os.environ["OPENAI_API_KEY"] = "your-api-key-here"

class AIPersona:
    def __init__(self, persona_name: str = "助手"):
        self.llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
        self.memory_manager = PersistentMemoryManager(namespace=persona_name)
        self._setup_chain()

    def _setup_chain(self):
        """构建包含记忆检索的对话链"""
        # 系统提示词,定义了智能体的角色和如何使用记忆
        system_prompt = """你是一个名为{persona_name}的AI助手。你拥有持久的记忆能力,可以记住和用户对话中的重要信息。
        以下是从你过往记忆中检索到的、可能与当前对话相关的信息:
        {relevant_memories}

        请基于这些记忆(如果有的话)和当前对话,友好、专业地回答用户的问题。
        如果用户要求你记住某些事情,请确认并存储它。
        你的回答应当简洁、准确。"""
        
        prompt_template = ChatPromptTemplate.from_messages([
            ("system", system_prompt),
            MessagesPlaceholder(variable_name="chat_history"), # 存放本次会话的临时历史
            ("human", "{input}")
        ])

        # 构建处理流程
        self.chain = (
            {
                "persona_name": lambda x: self.memory_manager.namespace,
                "relevant_memories": lambda x: self.memory_manager.get_relevant_context(x["input"]),
                "input": lambda x: x["input"],
                "chat_history": lambda x: x.get("chat_history", []),
            }
            | prompt_template
            | self.llm
            | StrOutputParser()
        )

    def process_command(self, user_input: str, chat_history: list = None) -> str:
        """
        处理用户输入。
        Args:
            user_input: 用户说的话。
            chat_history: 本次会话的临时历史记录,格式为LangChain的BaseMessage列表。
        Returns:
            智能体的回复。
        """
        if chat_history is None:
            chat_history = []

        # 1. 首先,检查用户输入是否是显式的记忆指令
        if user_input.lower().startswith("记住:"):
            memory_content = user_input[3:].strip() # 去掉“记住:”
            self.memory_manager.add_memory(memory_content, memory_type="user_instruction")
            return f"好的,我已经将“{memory_content}”记下来了。"

        # 2. 运行对话链,获取回复
        response = self.chain.invoke({
            "input": user_input,
            "chat_history": chat_history
        })

        # 3. (可选)自动判断是否需要将本轮对话的重要信息存入长期记忆
        # 这里可以加入更复杂的逻辑,例如用另一个LLM判断对话是否包含值得记忆的信息。
        # self._maybe_save_to_memory(user_input, response)

        return response

# 使用示例
if __name__ == "__main__":
    agent = AIPersona(persona_name="CodeHelper")
    
    # 模拟对话
    history = []
    print("智能体已启动。输入‘退出’结束对话。")
    
    while True:
        user_msg = input("\n你: ")
        if user_msg == "退出":
            break
            
        reply = agent.process_command(user_msg, history)
        # 更新本次会话的历史(这里简单用字符串模拟,实际应用可用BaseMessage)
        history.append(f"Human: {user_msg}")
        history.append(f"Assistant: {reply}")
        print(f"助手: {reply}")

这个智能体现在已经具备了基础能力:当你用“记住:”开头说话时,它会将内容存入持久记忆;在回答其他问题时,它会自动从记忆库中搜索相关背景信息,并融入生成答案的上下文中。

4. 高级优化与实战技巧

基础系统搭建完成后,我们可以从以下几个维度进行优化,使其更智能、更高效。

4.1 实现自动记忆与摘要

让智能体自动判断何时该记住什么,是提升体验的关键。我们可以设计一个“记忆评判员”链。

# auto_memory.py
from langchain.prompts import PromptTemplate
from langchain.schema import BaseOutputParser
import json

class MemoryDecisionParser(BaseOutputParser):
    """解析LLM输出的记忆决策JSON。"""
    def parse(self, text: str):
        try:
            data = json.loads(text.strip())
            return {
                "should_save": data.get("should_save", False),
                "memory_content": data.get("memory_content", ""),
                "memory_type": data.get("memory_type", "observation"),
                "reason": data.get("reason", "")
            }
        except json.JSONDecodeError:
            return {"should_save": False, "memory_content": "", "memory_type": "", "reason": "解析失败"}

def setup_auto_memory_chain(llm):
    """创建一个自动判断是否生成记忆的链"""
    decision_prompt = PromptTemplate.from_template("""
    请分析以下对话回合,判断是否需要将其中的关键信息存入AI助手的长期记忆。
    需要存储的信息通常包括:用户明确指示、重要的个人偏好、达成共识的结论、关键的事实或数据、重要的任务状态更新。
    不需要存储的信息:日常寒暄、未确认的假设、中间讨论过程、无关紧要的细节。

    当前对话:
    用户: {user_input}
    助手: {assistant_response}

    请以JSON格式输出你的判断:
    {{
        "should_save": true/false,
        "memory_content": "需要存储的具体文本摘要或原话",
        "memory_type": "user_preference/fact/task_context/instruction",
        "reason": "简要说明为什么需要存储"
    }}
    """)
    
    return decision_prompt | llm | MemoryDecisionParser()

# 在AIPersona类的process_command方法中集成
# 在生成回复后,调用这个自动记忆链
# auto_chain = setup_auto_memory_chain(self.llm)
# decision = auto_chain.invoke({"user_input": user_input, "assistant_response": response})
# if decision["should_save"]:
#     self.memory_manager.add_memory(decision["memory_content"], memory_type=decision["memory_type"])
#     print(f"[自动记忆] {decision['reason']}")

4.2 处理记忆冲突与更新

同一条信息可能被多次记忆,或者旧记忆需要更新。我们需要一个冲突解决机制。

  1. 基于相似度的去重 :在 add_memory 前,先用 search_memories 查找高度相似(相似度超过阈值,如0.95)的旧记忆。如果找到,可以采取以下策略:
    • 替换 :删除旧记忆,添加新记忆。适用于“用户更新了手机号”这类场景。
    • 忽略 :如果内容几乎相同,则跳过添加。避免重复存储。
    • 合并 :如果新旧记忆互补,可以用LLM生成一个合并后的版本再存储。
  2. 为记忆添加时效性标签 :在元数据中加入 valid_until (有效期至)字段。对于“我本周在巴黎”这类临时信息,可以设置短期有效期。定期运行清理任务,移除过期的记忆。
  3. 版本控制 :对于关键事实(如项目配置),不直接覆盖旧记忆,而是将新记忆作为新版本插入,并在元数据中通过 supersedes_id 字段指向它替代的旧记忆ID。这样保留了修改历史。

4.3 记忆检索的优化策略

简单的相似性搜索在记忆量大时可能不够精准或效率低下。

  1. 分层检索
    • 第一层:元数据粗筛 。例如,先过滤出 namespace 为当前用户,且 type user_preference 的所有记忆。这能快速缩小范围。
    • 第二层:向量精搜 。在粗筛后的子集里进行向量相似度计算,找出最相关的几条。
  2. 查询重写 :用户的原始查询可能不够“记忆友好”。可以用一个轻量级的LLM调用,将用户查询重写为更适合检索记忆的形式。
    • 原始查询:“上次说的那个事怎么样了?”
    • 重写后:“项目‘阳光计划’的当前状态或最新进展。”
  3. 融合检索(RAG Fusion) :生成原始查询的多个相关变体,分别进行向量搜索,然后将所有结果去重、按分数重新排序。这能提高召回率,避免因查询表述不同而遗漏关键记忆。

5. 常见问题排查与性能调优

在实际部署和运行中,你可能会遇到以下问题。

5.1 记忆检索不准确或无关

  • 症状 :智能体经常调出不相关的记忆,或者该调用的记忆没调用。
  • 排查与解决
    1. 检查嵌入模型 :不同的嵌入模型在不同领域和语言上效果差异很大。如果你处理的是中文对话, all-MiniLM-L6-v2 可能不是最优选,可以尝试 BGE 系列或 text-embedding-ada-002 。用一些典型查询测试不同模型的检索效果。
    2. 优化元数据 :确保你的 memory_type 等元数据设计合理,并且过滤条件使用正确。为记忆添加更多颗粒度的标签,如 topic project_name ,能极大提升过滤精度。
    3. 调整检索参数 k 值(返回数量)很重要。 k 太小可能漏掉相关记忆, k 太大会引入噪音。可以从3开始,根据效果调整。同时,观察检索到的记忆与查询的相似度分数,如果最高分都低于0.7(余弦相似度),说明记忆库中可能没有强相关信息。
    4. 审视记忆内容质量 :记忆存储的文本是否清晰、独立、无歧义?避免存储过于冗长或包含多个主题的段落。在存储前,可以尝试让LLM对原始内容进行精简和提炼。

5.2 记忆库膨胀导致性能下降

  • 症状 :随着记忆条数增加(例如超过1万条),检索速度明显变慢。
  • 排查与解决
    1. 启用索引 :如果使用ChromaDB,确保它在创建集合时使用了合适的索引(默认是 hnsw ,对于中小规模数据足够)。对于PGVector,可以创建 ivfflat 索引。
    2. 实施记忆归档 :并非所有记忆都需要被高频检索。可以定义规则,将老旧(如超过6个月未访问)且类型不重要(如 observation )的记忆移动到另一个“归档”集合。主集合只保留活跃记忆。
    3. 升级后端 :如果数据量真的很大(十万级以上),应考虑迁移到Pinecone、Weaviate等专业的云向量数据库,它们为大规模向量检索做了深度优化。
    4. 分库分表 :按用户、按项目、按时间将记忆存储在不同的集合或数据库中,检索时只搜索相关的子集。

5.3 智能体过度依赖或错误引用记忆

  • 症状 :智能体在回答时,强行引用一段并不完全相关的记忆,导致答案出现事实错误或逻辑混乱。
  • 排查与解决
    1. 在提示词中明确记忆的可靠性 :在系统提示词中加入指令,如“请注意,以下提供的记忆信息可能不完整或不完全准确,请结合你的通用知识和当前对话谨慎参考。如果记忆信息与当前问题明显不符,请优先基于你的知识进行回答。”
    2. 提供引用来源 :让智能体在回答中注明引用了哪条记忆(例如通过记忆ID或简短描述),这样用户也能判断其相关性。
    3. 实现置信度过滤 :在 get_relevant_context 函数中,不仅返回记忆内容,还返回其相似度分数。可以设置一个阈值(如0.8),只将分数高于此阈值的记忆提供给LLM。低于阈值的,可以选择不提供,或提供时加上“以下是一些可能相关的背景,但请谨慎参考”的说明。

5.4 部署与多会话问题

  • 症状 :在服务器部署时,多个用户或会话的記憶相互干扰;或者重启服务后记忆丢失。
  • 排查与解决
    1. 严格使用命名空间 PersistentMemoryManager 初始化时的 namespace 参数至关重要。必须为每个独立的用户或会话分配唯一的命名空间(如用户ID)。这是实现记忆隔离的最简单有效方法。
    2. 确保存储路径可写且持久 :检查 PERSIST_DIRECTORY 的路径是否对服务进程有写权限。在Docker等容器中部署时,需要将该目录挂载为Volume,否则容器重启后数据会丢失。
    3. 处理并发写入 :如果多个进程可能同时写入同一个ChromaDB集合,简单的文件存储可能会有风险。对于生产环境,考虑使用支持客户端-服务器模式的数据库(如启动ChromaDB的HTTP服务),或者使用PostgreSQL这类真正的多用户数据库。

为AI智能体赋予持久记忆,是一个从“玩具”到“工具”的关键步骤。这个过程没有一劳永逸的银弹,需要你根据智能体的具体职责、交互场景和用户群体,持续调整记忆的粒度、筛选策略和检索方式。我个人的经验是,从一个非常简单的、基于显式指令的记忆系统开始,快速让智能体用起来。然后在真实的使用中,观察用户最常希望它记住什么、又最容易忘记什么,再逐步引入自动记忆、摘要、冲突解决等高级功能。记住,最好的记忆系统是那个让用户感觉不到其存在,却又无处不在提供恰到好处支持的系统。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐