┌─────────────────────────────────────────────────────┐│ 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, -- 所属 Agentproject_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.recordsUSING hnsw (embedding vector_cosine_ops);-- RLS 策略ALTER TABLE memory.records ENABLE ROW LEVEL SECURITY;CREATE POLICY tenant_isolation ON memory.recordsUSING (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 relevanceFROM memory.recordsWHERE 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_weightFROM memory.recordsWHERE agent_id = 'agent-planner-001'ORDER BY current_weight DESCLIMIT 10;
-- 使用大模型对旧记忆进行总结压缩SELECT tencentdb_ai.chat_completions('<your-llm-model>','请将以下多条记忆总结为一段话:' || string_agg(content, E'\\n'))FROM memory.recordsWHERE agent_id = 'agent-planner-001'AND created_at < NOW() - INTERVAL '7 days'GROUP BY DATE(created_at);
-- 每个 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 端点 |
文档反馈