AnalyticDB for PostgreSQL长记忆高级功能指南
本指南面向已掌握 AnalyticDB for PostgreSQL长记忆基础用法的开发者。本文将详细介绍一系列高级功能,旨在为您提供对记忆生命周期、检索逻辑、内容处理和监控审计的精细化控制能力。所有功能均通过调用 adbpg_llm_memory 模式下的 SQL 函数(UDF)实现。
记忆内容处理
设置记忆自动过期时间
在导入记忆时,支持通过 meta 字段设置 expiration_date,以实现记忆的自动过期管理。过期的记忆在后续的检索中将不会被召回。
函数:
adbpg_llm_memory.add()参数:
meta(JSON)示例:设置一条记忆在 2025年11月30日后自动过期。
-- 如下的记忆被导入之后,如果2025-12-01检索去检索,该记忆将不会被召回 SELECT adbpg_llm_memory.add($$ [ {"role": "user", "content": "我这周末将会去北京旅行"} ] $$, 'test_u', null, null, $${"expiration_date": "2025-11-30"}$$, null, null);
更新记忆内容
如果对已抽取的记忆内容不满意,可以通过 update 接口直接修改指定记忆的内容。
版本要求:7.2.1.9及以上
函数:
adbpg_llm_memory.update(memory_id TEXT, new_content TEXT)示例:将指定 ID 的记忆内容修改为“喜欢喝咖啡”。
-- 将id为b55a108f-f073-4d48-87ec-2ffc18603e3d记忆内容修改为“喜欢喝咖啡” SELECT adbpg_llm_memory.update('b55a108f-f073-4d48-87ec-2ffc18603e3d', '喜欢喝咖啡');
记忆检索与过滤
添加高级检索过滤条件
search 接口的 filter 参数支持复杂的结构化查询,以精确召回符合条件的记忆。
函数:
adbpg_llm_memory.search()参数:
filter(JSON)可用过滤字段及操作符:
字段 | 支持的操作符/说明 |
| 精确匹配用户ID。 |
| 精确匹配Agent ID。 |
| 精确匹配单次运行ID。 |
| 支持 |
| 对导入时 |
示例 1:检索在特定时间范围内、由特定 Agent 生成的记忆。
SELECT adbpg_llm_memory.search('推荐去周末游玩的地点', 'test_u', null, null, $$ { "AND": [ {"created_at": {"gte": "2025-07-29", "lte": "2025-07-30"}}, {"agent_id": "travel1"} ] } $$);示例 2:检索元数据中
categories字段包含 "food" 的记忆。-- 其中categories为在调用adbpg_llm_memory.add时,在metadata中加入的字段 SELECT adbpg_llm_memory.search('what do you know about me?', 'test_u', null, null, $$ { "AND": [ {"categories": {"contains": "food"}} ] } $$);
指定检索返回的记忆条数
search 接口支持 limits 参数来指定返回的最相关记忆数量,默认值为 10。
版本要求:7.2.1.7 及以上
函数:
adbpg_llm_memory.search()参数:
limits(INTEGER)示例:检索并返回 5 条最相关的记忆。
-- 指定返回5条最相关的记忆 SELECT adbpg_llm_memory.search('推荐去周末游玩的地点', 'test_u', null, null, $$ { "AND": [ {"created_at": {"gte": "2025-07-29", "lte": "2025-07-30"}}, {"agent_id": "travel1"} ] } $$, 5);
指定相似度阈值
search 接口支持 threshold 参数,仅召回相似度分数高于该阈值的记忆。
版本要求:7.2.1.9及以上
函数:
adbpg_llm_memory.search()参数:
threshold(FLOAT, 0.0-1.0)示例:仅召回相似度大于 0.4 的记忆。
-- 相似度阈值大于0.4的记忆才会被召回 SELECT adbpg_llm_memory.search(query => 'what do you know about me?', user_id => 'test_u', threshold => 0.4);
启用 Rerank 精排
为提升检索质量,可以在向量召回后,使用 Rerank 模型对结果进行二次排序。这会增加一定时延,但能显著提高结果相关性。精排后的分数体现在 rerank_score 字段中。
版本要求:7.2.1.9及以上
配置方式:在
adbpg_llm_memory.config()中添加reranker配置节。支持模型:目前支持通义千问系列的Rerank模型。
示例:
-- 在配置长记忆时,添加rerank模型相关信息,目前只支持qwen系列的rerank模型 SELECT adbpg_llm_memory.config( $$ { "llm": { "provider": "qwen", "config": { "model": "qwen3-32b", "qwen_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", "api_key": "sk-xxxxxxx" } }, "embedder": { "provider": "openai", "config": { "model": "text-embedding-v3", "api_key": "sk-xxxxxx", "embedding_dims": "1536", "openai_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1" } }, "vector_store": { "provider": "adbpg", "config": { "user": "username", "dbname": "postgres", "hnsw": "True", "embedding_model_dims": "1536" } }, "reranker": { "provider": "qwen", "config": { "model": "qwen3-rerank", "api_key": "sk-xxxx", "top_k": 2 ----返回排名最高的前2个结果。 } } } $$ );
记忆处理与定制
自定义事实抽取 Prompt
您可以自定义 Prompt,以控制从对话中抽取事实的逻辑。
自定义 Prompt 的最终输出必须遵循 {"facts": ["fact1", "fact2", ...]} 的 JSON 格式。
配置方式:在
adbpg_llm_memory.config()中设置custom_fact_extraction_prompt字段。示例:
SELECT adbpg_llm_memory.config( $$ { "llm": { "provider": "qwen", "config": { "model": "qwen3-32b", "qwen_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", "api_key": "sk-xxxxxxx" } }, "embedder": { "provider": "openai", "config": { "model": "text-embedding-v4", "api_key": "sk-xxxxxx", "embedding_dims": "1536", "openai_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1" } }, "vector_store": { "provider": "adbpg", "config": { "user": "username", "dbname": "postgres", "hnsw": "True", "port": "xx" "embedding_model_dims": "1536" } }, "custom_fact_extraction_prompt": "xxxx" } $$ );
记忆自动标签分类
add 接口会自动为导入的记忆打上分类标签。系统提供了一套默认标签(如 personal_details、travel、 food 等),您也可以自定义分类体系。
版本要求:7.2.1.8及以上
设置自定义分类:
adbpg_llm_memory.set_custom_category(categories JSON),此操作会覆盖系统默认分类。查看当前分类:
adbpg_llm_memory.get_custom_category()示例:
-- 设置自定义的标签分类 SELECT adbpg_llm_memory.set_custom_category($$[ { "product_inquiry": "Records user questions about product features, pricing, availability, or compatibility" }, { "technical_support": "Captures issues related to installation, errors, bugs, or usage of software/hardware" }, { "account_management": "Tracks requests regarding billing, subscriptions, login issues, or profile updates" }, { "feedback_and_suggestions": "Stores user feedback, feature requests, or usability improvement ideas" }, { "onboarding_assistance": "Documents user needs during initial setup, tutorial requests, or getting-started guidance" } ]$$); -- 查看当前自定义的标签分类 SELECT adbpg_llm_memory.get_custom_category();
直接导入原始记忆(跳过抽取)
如果您的记忆内容已在外部处理完毕,无需再通过大模型抽取,可以在导入时跳过此步骤。
版本要求:7.2.1.10及以上
函数:
adbpg_llm_memory.add()参数:
infer => 'false'示例:
SELECT adbpg_llm_memory.add($$ [ {"role": "user", "content": "我这周末将会去北京旅行"} ] $$, 'test_u', infer => 'false');
记忆监控与审计
追踪记忆历史操作
您可以开启历史操作追踪,以记录记忆的读、写、删等行为,用于审计和问题排查。
版本要求:7.2.1.9及以上
开启方式:在
adbpg_llm_memory.config()中设置trace字段。None(默认):不记录。read:仅记录检索操作。write:仅记录增、删、改操作。all:记录所有操作。
相关管理函数:
adbpg_llm_memory.get_history(memory_id TEXT):查看单条记忆的历史。adbpg_llm_memory.delete_history(memory_id TEXT):删除单条记忆的历史。adbpg_llm_memory.delete_all_history():删除所有历史记录。adbpg_llm_memory.history_size():查看历史记录占用的磁盘空间。
示例:
-- 配置是否记录历史操作 SELECT adbpg_llm_memory.config( $$ { "llm": { "provider": "qwen", "config": { "model": "qwen3-32b", "qwen_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", "api_key": "sk-xxxxxxx" } }, "embedder": { "provider": "openai", "config": { "model": "text-embedding-v3", "api_key": "sk-xxxxxx", "embedding_dims": "1536", "openai_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1" } }, "vector_store": { "provider": "adbpg", "config": { "user": "username", "dbname": "postgres", "hnsw": "True", "embedding_model_dims": "1536" } }, "trace": "all" $$ ); ``` -- 查看记忆的历史操作,参数为记忆的id SELECT adbpg_llm_memory.get_history('b55a108f-f073-4d48-87ec-2ffc18603e3d'); -- 删除某条记忆,参数为记忆的id SELECT adbpg_llm_memory.delete_history('b55a108f-f073-4d48-87ec-2ffc18603e3d'); -- 删除所有记忆 SELECT adbpg_llm_memory.delete_all_history(); -- 获取记忆历史操作,占用磁盘大小 SELECT adbpg_llm_memory.history_size();
查看记忆占用磁盘大小
通过 memory_size 函数可以快速获取长记忆数据占用的总磁盘空间。
版本要求:7.2.1.9及以上
函数:
adbpg_llm_memory.memory_size()示例:
SELECT adbpg_llm_memory.memory_size();