Agent 长期记忆功能概述

最近更新时间:2026-06-01 16:58:31

我的收藏

背景

在多 Agent 协作场景中,Agent 需要跨会话保持上下文记忆,避免重复提问、遗忘关键信息。传统方案需要自建 Mem0 + Redis + Neo4j 等多套中间件,运维复杂且数据分散。
云数据库 PostgreSQL 提供原生的 Agent 长期记忆能力,基于向量 + 图 + 关系三位一体架构,在一个 PostgreSQL 实例内解决 AI Agent 的全部记忆需求。

架构设计

三位一体记忆模型

┌─────────────────────────────────────────────────────┐
│ Agent 长期记忆层 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌───────────┐ │
│ │ 语义记忆 │ │ 关系记忆 │ │ 事实记忆 │ │
│ │ (pgvector) │ │ (Apache AGE) │ │ (关系表) │ │
│ │ │ │ │ │ │ │
│ │ 模糊回忆 │ │ 实体关系 │ │ 精确查询 │ │
│ │ 相似度检索 │ │ 因果推理 │ │ 元数据 │ │
│ │ RAG 增强 │ │ 知识图谱 │ │ 审计日志 │ │
│ └─────────────┘ └──────────────┘ └───────────┘ │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ RLS 行级安全 → 多租户 / 多 Agent 数据隔离 │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘

数据模型

-- 核心表结构
CREATE SCHEMA memory;

-- 记忆记录表(append-only,不可变)
CREATE TABLE memory.records (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL, -- 租户隔离
agent_id UUID NOT NULL, -- 所属 Agent
project_id UUID, -- 所属项目(可选)
content TEXT NOT NULL, -- 记忆内容
embedding vector(1024), -- 向量嵌入
memory_type TEXT DEFAULT 'episodic', -- 记忆类型
importance FLOAT DEFAULT 0.5, -- 重要性权重
metadata JSONB DEFAULT '{}', -- 扩展元数据
created_at TIMESTAMPTZ DEFAULT NOW(),
expires_at TIMESTAMPTZ -- 过期时间(可选)
);

-- 向量索引
CREATE INDEX idx_memory_embedding ON memory.records
USING hnsw (embedding vector_cosine_ops);

-- RLS 策略
ALTER TABLE memory.records ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON memory.records
USING (tenant_id = current_setting('app.tenant_id')::uuid);

记忆类型

类型
说明
典型用途
episodic
情景记忆
对话历史、操作记录
semantic
语义记忆
知识片段、概念定义
procedural
程序记忆
工作流程、操作步骤
preference
偏好记忆
用户偏好、习惯模式

核心功能

说明:
以下示例中的 <your-llm-model>bge-m3 等模型名称仅为示意;请根据实际开通的 tencentdb_ai 模型列表替换。

记忆写入

-- 写入一条记忆
INSERT INTO memory.records (tenant_id, agent_id, content, embedding, memory_type)
VALUES (
'550e8400-e29b-41d4-a716-446655440000',
'agent-planner-001',
'用户偏好使用 Python 进行数据分析,喜欢简洁的代码风格',
tencentdb_ai.get_embedding('bge-m3', '用户偏好使用 Python 进行数据分析'),
'preference'
);

记忆检索(语义搜索)

-- 根据当前上下文检索相关记忆
SELECT content, memory_type,
1 - (embedding <=> query_vec) AS relevance
FROM memory.records
WHERE agent_id = 'agent-planner-001'
AND (expires_at IS NULL OR expires_at > NOW())
ORDER BY embedding <=> tencentdb_ai.get_embedding('bge-m3', '用户的编程偏好是什么?')
LIMIT 5;

记忆衰减与遗忘

-- 基于时间和重要性的记忆衰减
SELECT content,
importance * EXP(-0.01 * EXTRACT(EPOCH FROM (NOW() - created_at)) / 86400) AS current_weight
FROM memory.records
WHERE agent_id = 'agent-planner-001'
ORDER BY current_weight DESC
LIMIT 10;

记忆总结与压缩

-- 使用大模型对旧记忆进行总结压缩
SELECT tencentdb_ai.chat_completions(
'<your-llm-model>',
'请将以下多条记忆总结为一段话:' || string_agg(content, E'\\n')
)
FROM memory.records
WHERE agent_id = 'agent-planner-001'
AND created_at < NOW() - INTERVAL '7 days'
GROUP BY DATE(created_at);

多租户隔离

基于 PostgreSQL RLS(行级安全策略)实现多租户数据隔离:
-- 每个 Agent / 租户只能访问自己的记忆
SET app.tenant_id = '550e8400-e29b-41d4-a716-446655440000';
SET app.agent_id = 'agent-planner-001';

-- RLS 自动过滤,无需应用层判断
SELECT * FROM memory.records; -- 只返回当前租户的数据

接入方式

接入形态
操作方式
PG 协议
直接执行 SQL 读写 memory.*
REST API
通过 PostgREST 调用 /memory/records 端点

适用场景

AI 助手:记住用户偏好,提供个性化服务。
客服机器人:记住客户历史问题,避免重复询问。
代码 Agent:记住项目架构和约定,保持一致性。
研究 Agent:积累调研结论,避免重复搜索。

相关文档