本指南面向已掌握 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-intl.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-intl.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-intl.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-intl.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-intl.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-intl.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();