全部產品
Search
文件中心

Function Compute:長期記憶

更新時間:Jun 04, 2026

當智能體需要在多次對話中持續記住使用者偏好和歷史互動時,可使用長期記憶功能實現跨會話的持久化記憶。開啟後,智能體通過向量檢索擷取相關記憶資料,提供個人化響應。本文介紹如何開啟長期記憶、管理記憶條目以及整合到智能體中使用。

什麼是長期記憶

長期記憶(Long-Term Memory)用於跨會話持久化使用者記憶資料。每條記憶以文本形式儲存,關聯到特定的 User ID、Agent ID 和 Run ID(可選),支援通過向量語義搜尋快速檢索。

長期記憶是記憶儲存功能的三個子模組之一:

  • 長期記憶

  • 會話歷史

  • 工作階段狀態

使用情境

  • 使用者偏好記憶:記住使用者的語言偏好、常用設定等,在後續對話中自動應用

  • 歷史互動回顧:跨會話檢索使用者過往對話內容,避免重複提問

  • 個人化推薦:基於使用者歷史行為和偏好,提供個人化的推薦和建議

前提條件

  • 已建立記憶儲存執行個體,可參考建立和管理記憶儲存

  • 長期記憶需要配置大語言模型(LLM)和向量模型(Embedder),即 llmConfigembedderConfig 均非空

說明

如果記憶儲存建立時未配置 LLM 和向量模型,需在概覽頁的「長期記憶」卡片中點擊開啟長期記憶按鈕,然後在彈出的配置面板中手動填寫 LLM 和向量模型資訊。

限制說明

限制項

說明

列表預設載入上限

200 條,更多記憶請使用搜尋功能

搜尋條件要求

需同時提供搜尋關鍵詞和至少一個 ID(User ID / Agent ID / Run ID)

向量資料庫支援

長期記憶支援 OTS(Table Store)和 RDS(MySQL)兩種向量資料庫類型

計費說明

長期記憶功能本身不收取功能費用,但會消耗以下付費資源:

  • LLM 模型調用:用於記憶內容產生和處理,按大語言模型服務計費

  • 向量檢索:記憶搜尋時觸發,按向量模型服務計費

  • 儲存資源:OTS Table Store或 RDS MySQL,按各自產品的儲存和讀寫容量計費

各資源的計費詳情參見對應產品的計費文檔。

管理記憶

在記憶儲存執行個體詳情頁,選擇长期记忆,管理記憶條目。在整合與使用中,可瞭解如何通過 MCP 整合和代碼整合方式使用記憶能力。

添加記憶

  1. 進入記憶儲存執行個體詳情頁,選擇長期記憶

  2. 點擊添加记忆按鈕,開啟添加使用者記憶表單。

  3. 填寫記憶資訊:

    欄位

    說明

    樣本

    使用者ID

    必填,標識記憶所屬的使用者

    test-user-001

    記憶內容

    必填,記憶的具體內容

    居住在杭州

    中繼資料

    可選,自訂索引值對。點擊添加中繼資料動態增加

    {"category": "food"}

  4. 點擊儲存,等待建立完成。

說明

首次調用 API 可能存在冷啟動延遲,操作後等待 10~30 秒再重試即可。

建立成功後,記憶出現在記憶列表中,顯示使用者識別碼、建立時間、記憶內容等資訊。每個記憶卡片提供查看詳情編輯查看歷史刪除等操作按鈕。

查看記憶列表

記憶列表預設展示最多 200 條記憶。每條記憶卡片包含以下資訊:

  • 第一行:User ID(粗體),搜尋模式下額外顯示匹配度分數標籤

  • 第二行:記憶內容原文

  • 第三行:元資訊格式為 {Agent ID} · {Run ID} · {日期},Agent ID 和 Run ID 為可選,無值時不顯示

支援通過複選框批量選擇記憶條目。當有選中項時,列表右上方出現大量刪除按鈕。

搜尋和篩選記憶

當記憶數量超過 200 條時,使用搜尋功能尋找特定記憶。搜尋時需同時提供關鍵詞和至少一個 ID(User ID / Agent ID / Run ID)。

重要

僅輸入關鍵詞會報錯"請開啟進階篩選,使用者識別碼、Agent ID 或 Run ID 至少需要填寫一個";僅輸入 ID 無關鍵詞會報錯"請輸入搜尋查詢內容"。

進階篩選條件

篩選條件

預留位置

說明

使用者識別碼

輸入使用者識別碼

按使用者標識篩選

Agent ID

輸入 Agent ID

按 Agent 標識篩選

Run ID

輸入 Run ID

按 Run 標識篩選

支援同時填寫多個 ID 進行篩選,至少需填寫一項。點擊應用執行篩選,點擊重設清空條件。

查看記憶詳情

  1. 在記憶列表中,點擊記憶卡片右側的查看按鈕(Eye 表徵圖)。

  2. 詳情抽屜展示以下資訊:

    • Memory ID、User ID、Agent ID(無值顯示 -)、Run ID(無值顯示 -)、建立時間

    • 記憶內容地區,保留原始換行格式

    • 中繼資料地區(如有),以 JSON 格式展示

    • 標籤地區(如 metadata.tags 存在),以藍色圓角標籤展示

修改記憶

  1. 在記憶列表中,點擊目標記憶右側的編輯按鈕。

  2. 在編輯表單中修改記憶內容欄位。

  3. 點擊儲存更改

編輯表單底部展示 User ID、Agent ID、Run ID、建立時間和更新時間等唯讀資訊。

刪除記憶

單條刪除

  1. 在記憶列表中,點擊目標記憶右側的刪除按鈕。

  2. 在確認對話方塊中確認記憶內容預覽,點擊確認刪除

大量刪除

  1. 在列表中,通過複選框勾選多條記憶,或點擊「全選」複選框。

  2. 點擊列表上方的大量刪除按鈕。

  3. 在確認對話方塊中點擊確認。

說明

大量刪除採用逐條並行方式,部分成功時會提示成功數和失敗數。刪除操作不可恢複。

查看記憶歷史

記憶的版本歷程記錄了每次新增、更新、刪除操作的變更軌跡。

  1. 在記憶詳情抽屜中,點擊查看歷史按鈕。

  2. 歷史列表按時間倒序排列,每條記錄包含:

    • 版本資訊:版本號碼 + 「目前的版本」標籤(最新版本)+ 事件類型(新增/更新/刪除)

    • 時間戳記:格式為 YYYY/MM/DD HH:mm:ss

    • 操作者:actor_id + role(如有)

    • 記憶內容:目前的版本的記憶文本

    • 變更詳情(如有變更):舊值(紅色背景)和新值(綠色背景)對比

事件類型

標籤顏色

說明

新增(ADD)

綠色

建立新記憶

更新(UPDATE)

藍色

修改記憶內容或中繼資料

刪除(DELETE)

紅色

刪除記憶

整合與使用

MCP 整合

記憶儲存支援通過 MCP(Model Context Protocol)服務將記憶能力整合到智能體中。在 MCP 整合中,可以啟動/關閉 MCP 服務、擷取服務 URL、查看動態配置,並將服務接入智能體。

MCP 服務狀態

MCP 服務狀態包括:

狀態

說明

可執行操作

未启动

MCP 服務尚未啟動

點擊启动服务配置按鈕

启动中

服務正在部署中,等待部署完成

無需操作,等待狀態變為運行中或啟動失敗

运行中

MCP 服務已就緒,可正常使用

查看 MCP 配置或关闭服务

启动失败

服務部署失敗,通常因許可權不足或配置異常導致

檢查許可權或配置後重新啟動服務配置

啟動 MCP 服務

  1. 在記憶儲存執行個體詳情頁,選擇长期记忆,切換到MCP集成

  2. 若 MCP 服務狀態為未啟動,點擊啟動服務配置按鈕。

  3. 檢查許可權:系統需要 AliyunFCFunctionAIServicesDeployPolicy 策略。若提示許可權缺失,前往 RAM 控制台為當前帳號授予該策略,然後返回重新點擊啟動服務配置

  4. 等待系統自動安裝 Toolset 並檢查狀態,直至達到終態:

    • Toolset 狀態為 InstalledinternetUrl 存在 → 服務狀態變為運行中

    • Toolset 狀態為 Failed → 服務狀態變為啟動失敗

  5. 服務啟動成功後,頁面展示兩個子 Tab:

    • 配置MCP服务器:展示動態產生的 MCP 配置 JSON,包含 MCP 服務 URL 和工具定義,可直接複製到智能體配置中使用

    • 使用MCP工具:提供 JavaScript 程式碼範例,示範如何在代碼中調用 MCP 工具

擷取 MCP 服務 URL

MCP 服務 URL 是智能體串連記憶儲存的端點地址。服務啟動成功後,可在配置 MCP 伺服器子 中的配置 JSON 裡擷取,該 URL 來源於 Toolset 部署成功後的 toolset.status.outputs.urls.internetUrl 欄位。

查看動態 MCP 配置

服務啟動成功後,在配置 MCP 伺服器子 中展示動態產生的 JSON 配置。該配置包含 MCP 服務 URL 和可用工具定義,會隨服務狀態即時更新。將此配置複製到智能體的 MCP 服務配置中,即可在運行時通過 MCP 工具訪問記憶儲存。

關閉 MCP 服務

  1. 在 MCP 整合頁面,點擊关闭服务按鈕。

  2. 确认关闭MCP服务對話方塊中確認操作。單擊确认关闭後系統將移除工具集。

警告

關閉服務將移除工具集,此操作不可恢複。關閉後需重新啟動服務才能使用 MCP 功能。

關閉成功後,服務狀態變為未啟動配置 MCP 伺服器使用 MCP 工具子 將不再顯示。

接入智能體

MCP 服務運行中後,在建立智能體時,在記憶配置項中選擇已建立的記憶儲存執行個體,並啟用 MCP 選項。智能體即可在運行時通過 MCP 工具訪問記憶儲存。

代码集成

通過 AgentRun SDK 可整合記憶儲存功能。以下樣本示範如何通過 MemoryCollection 擷取記憶儲存配置,並轉換為 mem0 Memory 用戶端進行記憶操作。

環境準備

  1. 安裝 AgentRun SDK:

    pip install agentrun
  2. 配置訪問憑據。確保已設定環境變數 ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,SDK 將自動讀取這些憑據進行身分識別驗證。

  3. 將範例程式碼中的記憶儲存名稱 mem-OGzJ 替換為您自己的記憶儲存執行個體名稱,執行個體名稱可在記憶儲存列表頁面查看。

說明

如果記憶儲存使用 RDS(MySQL)向量資料庫,本地調試需配置環境變數 AGENTRUN_MYSQL_PUBLIC_HOST 為 MySQL 公網地址,並將本地出口 IP 加入 RDS 白名單,否則串連會失敗。

from agentrun.memory_collection import MemoryCollection

# 擷取記憶儲存META資訊
memory_collection = MemoryCollection.get_by_name("mem-OGzJ")
print(f"擷取成功: {memory_collection}")

# 轉換為mem0_memory用戶端
memory = MemoryCollection.to_mem0_memory("mem-OGzJ")

# 使用mem0ai Memory用戶端進行操作
user_id = "user123"

# 添加記憶
result = memory.add(
    "我喜歡吃蘋果和香蕉",
    user_id=user_id,
    metadata={"category": "food"},
)
for idx, res in enumerate(result.get("results", []), 1):
    print(f" {idx}. ID: {res.get('id')}, 事件: {res.get('event')}")

# 搜尋記憶
search_results = memory.search("使用者喜歡吃什麼水果?", user_id=user_id)
for idx, result in enumerate(search_results.get("results", []), 1):
    print(
        f" {idx}. 內容: {result.get('memory')}, 相似性: {result.get('score', 0):.4f}"
    )

生态集成

記憶儲存可與 LangChain 等開源智能體開發框架組成,實現基於記憶的對話系統。以下樣本展示如何將記憶儲存整合到 LangChain 對話鏈中,實現基於歷史記憶的個人化響應。

說明

運行以下樣本前,需先完成環境準備(安裝 SDK、配置訪問憑據等),參見上方環境準備。範例程式碼中的記憶儲存名稱需替換為您自己的執行個體名稱。

from typing import List, Dict
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from agentrun.integration.langchain import model
from agentrun.memory_collection import MemoryCollection

# 從模型名稱建立
llm = model("qwen3-max")
# 從記憶儲存名稱建立
mem0 = MemoryCollection.to_mem0_memory("mem-OGzJ")


prompt = ChatPromptTemplate.from_messages([
    SystemMessage(content="""You are a helpful travel agent AI. Use the provided context to personalize your responses and remember user preferences and past interactions.
    Provide travel recommendations, itinerary suggestions, and answer questions about destinations.
    If you don't have specific information, you can make general suggestions based on common travel knowledge."""),
    MessagesPlaceholder(variable_name="context"),
    HumanMessage(content="{input}")
])

def retrieve_context(query: str, user_id: str) -> List[Dict]:
    """Retrieve relevant context from Mem0"""
    try:
        memories = mem0.search(query, user_id=user_id)
        memory_list = memories['results']
        print(f"Memory search successfully: {memory_list}")
        serialized_memories = ' '.join([mem["memory"] for mem in memory_list])
        context = [
            {
                "role": "system",
                "content": f"Relevant information: {serialized_memories}"
            },
            {
                "role": "user",
                "content": query
            }
        ]
        return context
    except Exception as e:
        print(f"Error retrieving memories: {e}")
        # Return empty context if there's an error
        return [{"role": "user", "content": query}]

def generate_response(input: str, context: List[Dict]) -> str:
    """Generate a response using the language model"""
    chain = prompt | llm
    response = chain.invoke({
        "context": context,
        "input": input
    })
    return response.content

def save_interaction(user_id: str, user_input: str, assistant_response: str):
    """Save the interaction to Mem0"""
    try:
        interaction = [
            {
              "role": "user",
              "content": user_input
            },
            {
                "role": "assistant",
                "content": assistant_response
            }
        ]
        result = mem0.add(interaction, user_id=user_id)
        print(f"Memory saved successfully: {len(result.get('results', []))} memories added")
    except Exception as e:
        print(f"Error saving interaction: {e}")

def chat_turn(user_input: str, user_id: str) -> str:
    # Retrieve context
    context = retrieve_context(user_input, user_id)

    # Generate response
    response = generate_response(user_input, context)

    # Save interaction
    save_interaction(user_id, user_input, response)

    return response

if __name__ == "__main__":
    print("Welcome to your personal Travel Agent Planner! How can I assist you with your travel plans today?")
    user_id = "alice"

    while True:
        user_input = input("You: ")
        if user_input.lower() in ['quit', 'exit', 'bye']:
            print("Travel Agent: Thank you for using our travel planning service. Have a great trip!")
            break

        response = chat_turn(user_input, user_id)
        print(f"Travel Agent: {response}")

故障排查

開啟長期記憶失敗

現象

可能原因

處理方法

無法選擇大語言模型或向量模型

尚未建立模型服務

先通過添加模型建立模型服務,然後再開啟長期記憶

無法選擇執行角色

RAM 角色未授權 OTS 或 AgentRun 存取權限

在 RAM 控制台為角色添加 AliyunOTSFullAccessAliyunAgentRunFullAccess 策略

MCP 服務啟動失敗

現象

可能原因

處理方法

MCP 服務狀態顯示為啟動失敗

缺少 AliyunFCFunctionAIServicesDeployPolicy 策略授權

前往 RAM 控制台為當前帳號授予該策略,然後返回 MCP 整合頁面重新點擊啟動服務配置

MCP 服務狀態顯示為啟動失敗

記憶儲存配置異常(如 LLM 或向量模型未正確配置)

在記憶儲存執行個體詳情頁的概覽頁確認長期記憶已正確配置,然後重新啟動 MCP 服務

添加記憶失敗

現象

可能原因

處理方法

首次添加記憶時響應逾時或報錯

首次調用存在冷啟動延遲

首次操作後等待 10~30 秒,重試即可

提示「使用者ID不可為空」

User ID 欄位為空白

填寫有效 User ID 後重新提交

提示「記憶內容不可為空」

記憶內容欄位為空白

填寫有效記憶內容後重新提交

搜尋記憶失敗

現象

可能原因

處理方法

提示「請開啟進階篩選,使用者識別碼、Agent ID 或 Run ID 至少需要填寫一個」

僅輸入關鍵詞,未填寫任何 ID

展開進階篩選面板,至少填寫一個 ID(User ID / Agent ID / Run ID)

提示「請輸入搜尋查詢內容」

僅填寫了 ID,未輸入搜尋關鍵詞

在搜尋方塊中輸入搜尋關鍵詞