全部產品
Search
文件中心

AnalyticDB:AnalyticDB for PostgreSQL長記憶進階功能指南

更新時間:Feb 28, 2026

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

  • 可用過濾欄位及操作符:

欄位

支援的操作符/說明

user_id

精確匹配使用者ID。

agent_id

精確匹配Agent ID。

run_id

精確匹配單次運行ID。

created_at

支援 gte(大於等於)、lte (小於等於)進行時間範圍過濾。

metadata

對匯入時 meta 欄位中的自訂 Key-Value進行過濾,支援ANDORNOTcontainsin* wildcard等操作符。

  • 樣本 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_detailstravel、 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();