AnalyticDB for PostgreSQL长记忆高级功能指南

更新时间:
复制为 MD 格式

本指南面向已掌握 AnalyticDB for PostgreSQL长记忆基础用法的开发者。本文将详细介绍一系列高级功能,旨在为您提供对记忆生命周期、检索逻辑、内容处理和监控审计的精细化控制能力。所有功能均通过调用 adbpg_llm_memory 模式下的 SQL 函数(UDF)实现。

记忆内容处理

设置记忆自动过期时间

在导入记忆时,支持通过 meta 字段设置 expiration_date,以实现记忆的自动过期管理。过期的记忆在后续的检索中将不会被召回。

  • 函数:adbpg_llm_memory.add()

  • 参数:meta(JSON)

  • 示例:设置一条记忆在 20251130日后自动过期。

    -- 如下的记忆被导入之后,如果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 的记忆内容修改为“喜欢喝咖啡”。

    -- 将idb55a108f-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.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_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.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();