建持久化記憶:基于COS Vectors與mem0的實戰(zhàn)方案)
1. 項目緣起當AI助手患上“健忘癥”最近在折騰一個叫OpenClaw的開源AI助手框架它有個挺有意思的代號叫“小龍蝦”。這東西本質(zhì)上是一個智能體Agent平臺你可以把它理解成一個能幫你處理各種任務的“數(shù)字員工”比如自動回復消息、整理文檔、分析數(shù)據(jù)等等。我把它部署起來接入了飛書和微信想讓它幫我處理一些日常的客服和事務性工作。一開始跑得挺歡但用著用著就發(fā)現(xiàn)一個挺頭疼的問題這“小龍蝦”記性不太好。具體來說OpenClaw默認的運行模式是“無狀態(tài)”的。每次你向它發(fā)起一個新的對話或任務它都像第一次認識你一樣。比如上午你剛告訴它“我的項目代號是‘天樞’負責人是老王?!毕挛缒阍賳査袄贤踟撠煹哪莻€項目進展如何”它很可能一臉茫然因為它根本不記得“老王”和“天樞”之間的關(guān)聯(lián)。這種“對話即焚”的特性對于需要上下文連貫、長期跟蹤的復雜任務來說是個致命的短板。想象一下你的客服助手每次都要用戶重新說明問題或者你的個人助理記不住你的日程偏好這體驗就太糟糕了。這就是“持久化記憶層”要解決的問題。我們需要給OpenClaw這個聰明的“大腦”配上一個可靠的“外置硬盤”讓它能夠記住跨會話的重要信息、用戶偏好、歷史對話摘要、任務上下文等等。而實現(xiàn)這個目標我選擇了兩個核心組件騰訊云的COS Vectors向量檢索服務和開源項目mem0智能記憶管理庫。這個組合就是標題里說的為“小龍蝦”構(gòu)建一個“不遺忘”的能力核心。2. 技術(shù)選型為什么是COS Vectors mem0市面上做向量存儲和記憶管理的方案不少比如直接用Chroma、Weaviate這類向量數(shù)據(jù)庫或者用LangChain的Memory模塊。但我最終敲定COS Vectors和mem0是經(jīng)過一番對比和實際測試的主要基于下面幾個核心考量。2.1 COS Vectors云原生向量檢索的“省心之選”首先看存儲層。我們需要一個地方來存放記憶的“向量化”表示。所謂向量化就是把一段文本比如“用戶喜歡喝美式咖啡不加糖”通過AI模型轉(zhuǎn)換成一組高維度的數(shù)字向量這樣計算機才能高效地計算相似度實現(xiàn)“聯(lián)想”和“檢索”。為什么選騰訊云的COS Vectors原因很實在無縫集成與運維成本為零我的OpenClaw本身就部署在云服務器上。COS Vectors作為騰訊云對象存儲COS的擴展服務與云環(huán)境的集成度極高。我不需要再單獨維護一個向量數(shù)據(jù)庫集群沒有安裝、配置、升級、備份這些運維負擔。創(chuàng)建服務、拿到API密鑰就能直接用這對于個人開發(fā)者或小團隊來說吸引力巨大。性能與容量彈性COS Vectors底層基于騰訊云強大的計算和存儲資源能夠輕松應對從幾百條到上億條向量的存儲和檢索。對于OpenClaw的記憶庫初期可能只有幾千條記錄但未來隨著使用增長到幾十萬條也很正常。云服務的彈性讓我完全不用擔心擴容問題。穩(wěn)定與高可用作為云廠商的托管服務SLA服務等級協(xié)議和可用性有保障。自己搭建的數(shù)據(jù)庫可能會因為各種原因掛掉導致記憶丟失而托管服務在這方面要可靠得多。記憶層一旦出問題AI助手就相當于“腦震蕩”了所以穩(wěn)定性是首要考慮。成本清晰可控COS Vectors按實際使用的存儲容量和檢索次數(shù)計費。在記憶數(shù)據(jù)量不大的初期成本幾乎可以忽略不計。這種按量付費的模式比自建服務前期投入固定硬件成本要靈活得多。當然它也有局限比如定制化程度不如自建數(shù)據(jù)庫高網(wǎng)絡調(diào)用會引入毫秒級的延遲。但對于OpenClaw這類對延遲不極度敏感非高頻實時交易、更看重穩(wěn)定和易用的應用場景來說這些局限完全可以接受。2.2 mem0讓記憶管理變得“智能”有了存儲的地方怎么管記憶又是另一個問題。記憶不是簡單的“存”和“取”。它至少涉及記憶的生成從一段對話或事件中提取出哪些信息值得長期記憶是直接存原始對話還是存一個總結(jié)記憶的組織記憶之間有關(guān)聯(lián)嗎如何建立聯(lián)系比如“項目A”的記憶和“成員老王”的記憶記憶的檢索當新對話發(fā)生時如何從海量記憶中快速找到最相關(guān)的幾條不是簡單的關(guān)鍵詞匹配而是語義相似度搜索。記憶的更新與遺忘記憶不是一成不變的。用戶說“我最近改喝拿鐵了”那么之前“喜歡美式”的記憶就需要更新或降權(quán)。甚至有些記憶隨著時間推移應該被“淡忘”。如果這些邏輯全部自己從頭實現(xiàn)會非常復雜。而mem0這個開源庫就是專門為解決這些問題而生的。它不是一個存儲引擎而是一個智能記憶管理框架。你可以把它理解為記憶系統(tǒng)的“操作系統(tǒng)”或“管理層”。mem0的核心價值在于提供高層抽象它定義了Memory、MemoryManager等簡潔的接口。我只需要告訴mem0“這是一段新的對話文本”它內(nèi)部會自動調(diào)用嵌入模型Embedding Model將其向量化并處理好存儲、檢索、關(guān)聯(lián)的邏輯。內(nèi)建優(yōu)化策略mem0實現(xiàn)了多種記憶提取和檢索策略。例如它可以自動對長對話進行總結(jié)只存儲摘要而非全文節(jié)省空間并提升檢索質(zhì)量。它也能根據(jù)時間戳、訪問頻率等因素對記憶進行排序和篩選。與向量存儲解耦mem0支持多種后端存儲。這正是它能和COS Vectors搭配的關(guān)鍵。我只需要實現(xiàn)一個適配器讓mem0知道如何調(diào)用COS Vectors的API進行向量的存入和查詢剩下的智能管理邏輯全部由mem0包辦。開源與可定制作為開源項目我可以查看其源碼根據(jù)OpenClaw的特殊需求進行定制。比如我可以調(diào)整記憶提取的提示詞Prompt讓它更傾向于提取與“任務”、“偏好”、“實體關(guān)系”相關(guān)的信息。簡單來說COS Vectors提供了強大、穩(wěn)定、省心的“倉庫”而mem0提供了智能、靈活、開箱即用的“倉庫管理系統(tǒng)”。兩者結(jié)合既能享受云服務的便利又能擁有高級的記憶管理能力避免了重復造輪子。3. 實戰(zhàn)集成為OpenClaw裝上記憶模塊理論說完了接下來是實操部分。如何將COS Vectors和mem0集成到OpenClaw中這個過程大致可以分為環(huán)境準備、記憶服務封裝、以及與OpenClaw Skill的對接三步。3.1 環(huán)境準備與基礎(chǔ)配置首先確保你的OpenClaw運行環(huán)境Docker或原生Python已經(jīng)就緒。然后我們需要搞定兩邊的鑰匙。第一步開通并配置COS Vectors登錄騰訊云控制臺進入“對象存儲COS”服務。在左側(cè)菜單找到“向量檢索”或“COS Vectors”按指引開通服務。這個過程會創(chuàng)建一個“向量檢索實例”你可以把它理解為一個專屬的數(shù)據(jù)庫實例。創(chuàng)建成功后獲取關(guān)鍵信息ENDPOINT: 向量檢索服務的訪問地址格式類似https://region.cos.tencent.com。SECRET_ID和SECRET_KEY: 騰訊云API訪問密鑰用于身份認證。務必妥善保管建議使用環(huán)境變量或配置文件管理不要硬編碼在代碼里。DATASET_ID: 你需要在實例下創(chuàng)建一個數(shù)據(jù)集Dataset這個ID就是數(shù)據(jù)集的唯一標識。你可以命名為openclaw_memory。第二步安裝依賴庫在你的OpenClaw項目環(huán)境或?qū)iT為記憶服務創(chuàng)建的環(huán)境中安裝必要的Python包pip install cos-vector-sdk-python # 騰訊云官方COS Vectors SDK pip install mem0ai # mem0核心庫 pip install openai # mem0默認使用OpenAI的嵌入模型也可配置為其他模型這里有個關(guān)鍵點mem0默認依賴一個嵌入模型來將文本轉(zhuǎn)為向量。你可以使用OpenAI的text-embedding-3-small也可以配置成開源的模型比如通過Ollama本地部署的nomic-embed-text。為了網(wǎng)絡穩(wěn)定和成本我選擇了后者。第三步配置mem0使用自定義嵌入模型和COS Vectors存儲這是集成的核心代碼片段。我們需要自定義一個存儲類繼承mem0的BaseVectorStore并實現(xiàn)其抽象方法。import os from typing import List, Optional from mem0.vector_stores.base import BaseVectorStore from mem0.vector_stores.types import VectorStoreResult from qcloud_cos_vector import CosVectorClient, VectorDBClient from qcloud_cos_vector.model import DataSet, Document, Filter, SearchByTextParam class CosVectorStore(BaseVectorStore): 自定義適配器將mem0的向量存儲接口映射到COS Vectors SDK。 def __init__(self, endpoint: str, secret_id: str, secret_key: str, dataset_id: str): self.client CosVectorClient( endpointendpoint, secret_idsecret_id, secret_keysecret_key ) self.dataset_id dataset_id self._ensure_dataset_exists() def _ensure_dataset_exists(self): 確保數(shù)據(jù)集存在如果不存在則創(chuàng)建。 try: self.client.describe_data_set(self.dataset_id) except Exception as e: if DataSetNotFound in str(e): print(f數(shù)據(jù)集 {self.dataset_id} 不存在正在創(chuàng)建...) # 這里需要定義向量維度取決于你使用的嵌入模型例如 text-embedding-3-small 是 1536 維 dataset_config DataSet( idself.dataset_id, dimension1536, metric_typecosine # 相似度計算方式余弦相似度最常用 ) self.client.create_data_set(dataset_config) else: raise e async def add(self, embeddings: List[List[float]], texts: List[str], metadatas: Optional[List[dict]] None, ids: Optional[List[str]] None): 添加向量和文本到COS Vectors。 documents [] for i, (embedding, text) in enumerate(zip(embeddings, texts)): doc_id ids[i] if ids else str(uuid.uuid4()) metadata metadatas[i] if metadatas else {} # COS Vectors SDK的Document對象要求 doc Document( iddoc_id, texttext, vectorembedding, metadatametadata ) documents.append(doc) # 調(diào)用SDK的插入接口 self.client.upsert_documents(self.dataset_id, documents) async def search(self, query_embedding: List[float], limit: int 5, filters: Optional[dict] None) - List[VectorStoreResult]: 在COS Vectors中搜索相似向量。 search_param SearchByTextParam( vectorquery_embedding, top_klimit, # 可以在此處構(gòu)建Filter對象實現(xiàn)元數(shù)據(jù)過濾例如 filters{session_id: abc123} filterFilter(**filters) if filters else None ) response self.client.search_by_vector(self.dataset_id, search_param) results [] for item in response.documents: results.append(VectorStoreResult( textitem.text, metadataitem.metadata, scoreitem.score # 相似度分數(shù) )) return results # 還需要實現(xiàn) delete, update 等方法根據(jù)mem0接口定義補全。然后初始化mem0的Memory對象時傳入我們自定義的存儲和嵌入模型from mem0 import Memory from mem0.llms.openai import OpenAiLlm from mem0.embeddings.ollama import OllamaEmbeddings # 假設(shè)使用Ollama本地嵌入模型 # 初始化記憶系統(tǒng) memory Memory( vector_storeCosVectorStore( endpointos.getenv(COS_VECTOR_ENDPOINT), secret_idos.getenv(COS_SECRET_ID), secret_keyos.getenv(COS_SECRET_KEY), dataset_idopenclaw_memory ), embeddingsOllamaEmbeddings( model_namenomic-embed-text, base_urlhttp://localhost:11434 # Ollama服務地址 ), llmOpenAiLlm(modelgpt-4, api_keyos.getenv(OPENAI_API_KEY)) # 用于記憶總結(jié)等文本生成任務 )這個memory對象就是我們?yōu)镺penClaw打造的記憶核心。3.2 設(shè)計OpenClaw的記憶交互邏輯有了記憶服務下一步是設(shè)計OpenClaw何時、如何與它交互。這需要在OpenClaw處理消息的生命周期中插入鉤子Hooks。OpenClaw基于LLM和Skill技能工作一個典型的流程是接收消息 - 路由到對應Skill - Skill調(diào)用LLM處理 - 返回結(jié)果。我們可以在兩個關(guān)鍵節(jié)點插入記憶操作節(jié)點一在Skill處理前檢索相關(guān)記憶當OpenClaw收到用戶消息例如“幫我查一下老王的項目進度”在調(diào)用LLM生成回復之前先調(diào)用記憶服務# 偽代碼在Skill的入口函數(shù)中 async def handle_message(user_input: str, session_id: str): # 1. 檢索記憶查找與當前用戶輸入和會話相關(guān)的歷史記憶 related_memories await memory.search( queryuser_input, filters{session_id: session_id, user_id: user_id}, # 可過濾只找本會話或本用戶的記憶 limit3 ) # 將檢索到的記憶文本作為上下文前綴拼接到給LLM的提示詞中 memory_context \n.join([f- {mem.text} for mem in related_memories]) enhanced_prompt f已知關(guān)于用戶和當前會話的以下背景信息 {memory_context} 當前用戶詢問{user_input} 請根據(jù)以上背景信息進行回復。 # 2. 將enhanced_prompt發(fā)給LLM得到更精準的回復 response await llm.generate(enhanced_prompt) return response這樣LLM在生成回復時就能“想起”之前聊過的內(nèi)容比如“老王負責天樞項目”從而給出準確回答。節(jié)點二在Skill處理后存儲有價值的信息不是所有對話都值得記憶。我們需要判斷哪些信息有長期價值。一個簡單的策略是在LLM回復后讓LLM自己判斷當前對話中是否有需要記住的“事實”或“用戶偏好”。# 偽代碼在得到LLM回復后 extraction_prompt f 對話記錄 用戶{user_input} 助手{assistant_response} 請從以上對話中提取出值得長期記憶的客觀事實或用戶明確陳述的偏好。以簡潔的陳述句列出每條記憶獨立。如果無可記憶內(nèi)容輸出“無”。 例如 - 用戶喜歡喝美式咖啡不加糖。 - 項目“天樞”的負責人是老王。 facts_to_remember await llm.generate(extraction_prompt) if facts_to_remember and facts_to_remember.strip() ! 無: # 將提取出的記憶存入向量庫 for fact in facts_to_remember.split(\n): if fact.strip(): await memory.add( textfact.strip(), metadata{ session_id: session_id, user_id: user_id, timestamp: datetime.now().isoformat(), type: user_preference # 可以分類 } )通過這種方式記憶的沉淀是自動、智能且高質(zhì)量的避免了存儲大量無意義的聊天記錄。3.3 封裝為OpenClaw Skill或Middleware為了讓集成更優(yōu)雅我們可以將上述邏輯封裝成一個獨立的OpenClaw Skill例如叫memory_manager_skill或者一個全局的Middleware中間件。Skill方式適合需要顯式調(diào)用記憶功能的場景比如用戶直接說“記住我明天下午三點開會”。這個Skill專門處理與記憶相關(guān)的指令。Middleware方式更適合我們上面描述的“隱式”記憶增強。在OpenClaw的消息處理管道中插入一個全局中間件。所有流入的消息都會先經(jīng)過它進行記憶檢索所有流出的結(jié)果都會經(jīng)過它進行記憶提取和存儲。這種方式對業(yè)務邏輯侵入最小實現(xiàn)“無感”的記憶增強。我選擇了Middleware方式因為它更符合“為系統(tǒng)底層添加能力”的定位。在OpenClaw的配置文件中添加這個自定義中間件即可。4. 效果驗證與踩坑實錄集成完成后重啟OpenClaw開始測試。效果是立竿見影的??鐣挼膶υ掃B貫性大大提升。例如會話A周一用戶“把‘項目復盤報告.docx’發(fā)給我?!?- AI找到并發(fā)送文件。 - 記憶系統(tǒng)自動提取“用戶索要了文件‘項目復盤報告.docx’”。會話B周三用戶“我上次找你要的那個文檔里面第三點是什么” - AI在回復前檢索記憶找到“項目復盤報告.docx”這條記錄結(jié)合當前問題能準確理解“那個文檔”指代什么并可以去文件中查找第三點內(nèi)容。然而開發(fā)過程絕非一帆風順遇到了幾個典型的坑。4.1 向量維度不匹配的“低級錯誤”在第一次運行memory.add()時COS Vectors服務端返回了400錯誤InvalidParameterValue.DimensionMismatch。意思是插入的向量維度與創(chuàng)建數(shù)據(jù)集時指定的維度不符。排查過程檢查代碼我創(chuàng)建數(shù)據(jù)集時寫死了dimension1536OpenAI text-embedding-3-small的維度。但我實際使用的是Ollama的nomic-embed-text模型。我理所當然地認為它也是1536維。打印出嵌入模型生成的向量長度發(fā)現(xiàn)是768。根因不同嵌入模型的輸出維度不同。text-embedding-3-small是1536維text-embedding-3-large是3072維而許多開源模型如nomic-embed-text、bge-small-zh是768維。創(chuàng)建COS Vectors數(shù)據(jù)集時必須嚴格匹配你所用模型的輸出維度。解決方案在代碼中動態(tài)獲取嵌入模型的維度。例如對于Ollama可以調(diào)用其API的/api/show端點查看模型信息或者簡單地向模型詢問一個空字符串的嵌入向量然后取長度。修改CosVectorStore的_ensure_dataset_exists方法根據(jù)實際維度創(chuàng)建或匹配數(shù)據(jù)集。更穩(wěn)妥的做法是在首次初始化時嘗試插入一條測試數(shù)據(jù)如果報維度錯誤則刪除舊數(shù)據(jù)集并用正確維度重建生產(chǎn)環(huán)境需更謹慎可能涉及數(shù)據(jù)遷移。4.2 記憶檢索的“噪聲”與“精準度”平衡初期測試時發(fā)現(xiàn)有時會檢索到完全不相關(guān)的記憶干擾了LLM的判斷。比如用戶問“天氣如何”卻檢索到了“用戶喜歡美式咖啡”。問題分析語義搜索的固有特性向量檢索基于語義相似度而“天氣”和“咖啡”在某種抽象層面上比如都是“日常話題”可能被模型認為有相似性。元數(shù)據(jù)過濾未充分利用在檢索時我只用了query_embedding沒有很好地利用filters參數(shù)。所有用戶、所有會話的記憶都混在一個“池子”里搜索。優(yōu)化方案強化元數(shù)據(jù)過濾在存儲每條記憶時盡可能豐富其元數(shù)據(jù)metadata。至少包含user_id,session_id,memory_type(如fact,preference,task_context),timestamp。在檢索時強制加上過濾器例如filters{user_id: current_user_id}這樣只會搜索當前用戶的記憶極大減少了無關(guān)記憶的干擾。調(diào)整檢索策略混合檢索結(jié)合向量相似度搜索和基于元數(shù)據(jù)/關(guān)鍵詞的過濾。COS Vectors SDK支持在搜索時傳入filter條件可以同時滿足。重排序Rerank先通過向量檢索出Top K比如20條候選記憶然后使用一個更輕量級或?qū)iT訓練的模型或規(guī)則對這20條結(jié)果進行二次排序剔除明顯不相關(guān)的。mem0本身也支持一些后處理邏輯。設(shè)置相似度閾值只返回相似度分數(shù)score高于某個閾值如0.7的記憶低于閾值的視為不相關(guān)直接丟棄。優(yōu)化記憶文本質(zhì)量讓LLM在提取記憶時使用更規(guī)范、包含關(guān)鍵實體的陳述句。例如提取為“用戶詢問了關(guān)于天氣的信息”而不是存下整句“今天天氣怎么樣”。前者作為記憶被檢索時與“天氣”查詢的語義關(guān)聯(lián)會更精準。4.3 記憶的“更新”與“沖突”難題用戶說“我喜歡藍色?!?系統(tǒng)記住了。過幾天用戶說“我其實更喜歡綠色。” 這時就有兩條矛盾的記憶。簡單的向量添加會導致兩條記憶并存檢索時可能同時出現(xiàn)讓AI困惑。解決方案基于唯一鍵的更新為記憶設(shè)計一個唯一標識符例如fpreference:color:{user_id}。當要存儲新的顏色偏好時先檢查是否存在memory_type為preference且key為color的記憶如果存在則執(zhí)行更新覆蓋或版本管理而不是新增。使用mem0的更新接口完善自定義CosVectorStore中的update方法使其能根據(jù)記憶ID或自定義的唯一鍵來更新已有的向量和文本。引入衰減或版本邏輯更復雜的系統(tǒng)可以為記憶添加“強度”或“新鮮度”字段。每次記憶被成功檢索并利用就增強其強度同時所有記憶會隨時間自然衰減。當出現(xiàn)沖突記憶時保留強度更高或更新鮮的那一條。這需要更復雜的內(nèi)存管理邏輯mem0的高級配置可以支持部分此類策略。5. 性能調(diào)優(yōu)與進階思考基礎(chǔ)功能跑通后可以從以下幾個方向進行優(yōu)化讓這個記憶層更強大、更高效。5.1 降低延遲與成本嵌入模型本地化使用Ollama在本地運行嵌入模型如nomic-embed-text相比調(diào)用云端OpenAI API消除了網(wǎng)絡延遲且沒有按次調(diào)用費用長期成本更低。需權(quán)衡本地服務器的計算資源。批量操作mem0和COS Vectors SDK都支持批量添加向量。在記憶提取后可以積累一定數(shù)量如10條再一次性寫入減少API調(diào)用次數(shù)。緩存熱點記憶對于高頻訪問的記憶如用戶的基本身份信息、常用偏好可以在應用層添加一個內(nèi)存緩存如Redis避免每次對話都去向量庫檢索。異步處理記憶的存儲操作memory.add不一定要阻塞主回復流程。可以將其放入后臺任務隊列異步執(zhí)行確保用戶能第一時間得到AI的回復體驗更流暢。5.2 記憶的結(jié)構(gòu)化與圖譜化目前的記憶是扁平化的文本片段。更高級的模式是引入記憶圖譜。實體鏈接從記憶文本中提取實體人、項目、產(chǎn)品等并建立實體之間的關(guān)系。例如記憶“老王負責天樞項目”可以轉(zhuǎn)化為圖譜中的兩個節(jié)點“老王”、“天樞項目”和一條關(guān)系邊“負責”。優(yōu)勢當用戶問“老王在做什么項目”時可以直接在圖譜中查詢“老王”的“負責”關(guān)系比向量檢索更精確、更可解釋。也可以實現(xiàn)更復雜的推理比如“找到所有由老王負責且狀態(tài)為進行中的項目”。實現(xiàn)這需要引入知識圖譜或圖數(shù)據(jù)庫如Neo4j??梢栽趍em0存儲記憶的同時調(diào)用一個實體識別和關(guān)系抽取的模型或服務將結(jié)果同步存入圖數(shù)據(jù)庫。檢索時可以結(jié)合向量檢索語義模糊匹配和圖查詢精確關(guān)系匹配。5.3 與OpenClaw Skill的深度結(jié)合記憶層不應該只是一個被動的背景板它可以主動賦能Skill。個性化Skill一個“推薦音樂”的Skill可以讀取記憶中的用戶音樂偏好實現(xiàn)千人千面的推薦。上下文感知Skill一個“安排會議”的Skill在用戶說“跟項目組開個會”時能自動從記憶中檢索出“項目組”包含哪些成員老王、小李、小張并填充到會議邀請中。記憶管理Skill開發(fā)一個顯式的Skill讓用戶可以通過自然語言管理自己的記憶例如“刪除我所有關(guān)于咖啡偏好的記憶”、“幫我總結(jié)一下上周討論的項目要點”。為OpenClaw構(gòu)建持久化記憶層從技術(shù)上看是向量檢索與智能體框架的集成但從體驗上看是讓AI從“聰明的鸚鵡”進化到“得力的助手”的關(guān)鍵一步。它開始有了“經(jīng)歷”和“經(jīng)驗”能夠進行連貫的、個性化的服務。COS Vectors提供了堅實、易用的存儲地基mem0提供了智能的管理框架而真正的挑戰(zhàn)和價值在于如何根據(jù)自己業(yè)務的需求設(shè)計好記憶的生成、組織、檢索和更新策略。這個過程沒有標準答案需要不斷地實驗、觀察和調(diào)整。我的體會是先從簡單的“會話記憶”和“用戶事實偏好”開始看到效果后再逐步擴展到更復雜的記憶結(jié)構(gòu)和應用場景這樣迭代起來更穩(wěn)妥也更容易獲得正反饋。