智能体的记忆(Memory)系统

智能体的记忆系统是其实现持续学习和情境理解的核心组件。下面我将全面介绍智能体记忆的主要类型、技术原理和实现方式。

一、记忆系统的基本分类

1. 按存储时长分类

类型

持续时间

容量

典型用途

短期记忆

秒~小时

有限

当前对话上下文

长期记忆

天~永久

较大

用户偏好、历史经验

工作记忆

分钟级

很小

临时计算中间结果

2. 按内容类型分类

  • ​情景记忆​​:具体事件和经历

  • ​语义记忆​​:事实和知识

  • ​程序记忆​​:技能和操作流程

二、主流记忆类型详解

1. 对话记忆 (Conversation Memory)

from langchain.memory import ConversationBufferMemory

# 基本对话记忆实现
memory = ConversationBufferMemory()
memory.save_context({"input": "你好"}, {"output": "你好!我是AI助手"})
memory.save_context({"input": "今天天气如何"}, {"output": "请告诉我您所在的城市"})

print(memory.load_memory_variables({}))
# 输出: {'history': 'Human: 你好\nAI: 你好!我是AI助手\nHuman: 今天天气如何\nAI: 请告诉我您所在的城市'}

​变体类型​​:

  • ConversationBufferWindowMemory:仅保留最近N轮对话
  • ConversationSummaryMemory:存储对话摘要而非全文
  • ConversationKGMemory:基于知识图谱存储对话实体关系

2. 向量记忆 (Vector Memory)

from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings

# 创建向量记忆存储
embeddings = OpenAIEmbeddings()
texts = ["苹果是水果", "华为是手机品牌", "Python是编程语言"]
vector_memory = FAISS.from_texts(texts, embeddings)

# 相似性检索
result = vector_memory.similarity_search("科技公司", k=1)
print(result[0].page_content)  # 输出: 华为是手机品牌

​适用场景​​:

  • 大规模知识检索

  • 模糊记忆查询

  • 跨模态记忆

3. 外部记忆 (External Memory)

from langchain.memory import RedisChatMessageHistory

# 连接Redis数据库存储记忆
message_history = RedisChatMessageHistory(
    session_id="user123",
    url="redis://localhost:6379/0"
)

message_history.add_user_message("我喜欢科幻电影")
message_history.add_ai_message("已记录您的偏好")

# 后续会话可以读取
print(message_history.messages)

​常用外部存储​​:

  • SQL数据库(PostgreSQL/MySQL)

  • 文档数据库(MongoDB)

  • 键值存储(Redis)

  • 文件系统

4. 情景记忆 (Episodic Memory)

from datetime import datetime
from pydantic import BaseModel

class MemoryItem(BaseModel):
    content: str
    timestamp: datetime
    importance: float

class EpisodicMemory:
    def __init__(self):
        self.memories = []
    
    def add(self, content: str, importance: float = 0.5):
        self.memories.append(
            MemoryItem(
                content=content,
                timestamp=datetime.now(),
                importance=importance
            )
        )
    
    def recall_recent(self, n: int = 3):
        return sorted(self.memories, 
                    key=lambda x: x.timestamp,
                    reverse=True)[:n]

# 使用示例
ep_memory = EpisodicMemory()
ep_memory.add("用户喜欢蓝色", importance=0.7)
ep_memory.add("用户是程序员", importance=0.9)
print([m.content for m in ep_memory.recall_recent()])

5. 程序记忆 (Procedural Memory)

class SkillLibrary:
    def __init__(self):
        self.skills = {
            "math": {
                "description": "数学计算能力",
                "function": self._math_processor
            },
            "translation": {
                "description": "中英翻译能力",
                "function": self._translate
            }
        }
    
    def _math_processor(self, expression: str) -> float:
        try:
            return eval(expression)
        except:
            return None
    
    def _translate(self, text: str) -> str:
        # 实际实现会调用翻译API
        return f"Translated: {text}"
    
    def execute(self, skill_name: str, input_data: str):
        if skill_name in self.skills:
            return self.skills[skill_name]["function"](input_data)
        return None

# 使用示例
skill_memory = SkillLibrary()
print(skill_memory.execute("math", "3*(4+5)"))  # 输出: 27

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐