合并重復(fù)的用戶偏好)
OpenViking記憶壓縮與去重完整指南LLM如何自動(dòng)合并重復(fù)的用戶偏好【免費(fèi)下載鏈接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/op/OpenVikingOpenViking 是面向 AI Agent 的自進(jìn)化上下文數(shù)據(jù)庫(kù)Context Database它統(tǒng)一管理 Agent 記憶、知識(shí) RAG 與技能。本文聚焦它最實(shí)用的一項(xiàng)能力——記憶壓縮與去重當(dāng)你在多次對(duì)話里反復(fù)告訴 Agent“我偏好 TypeScript、喜歡簡(jiǎn)潔代碼風(fēng)格”時(shí)LLM 會(huì)自動(dòng)把重復(fù)的用戶偏好識(shí)別、合并進(jìn)同一份記憶文件而不是堆積出一堆雷同記錄。為什么 Agent 記憶需要壓縮與去重沒有壓縮機(jī)制的 Agent記憶庫(kù)會(huì)很快變成“垃圾場(chǎng)”Token 浪費(fèi)重復(fù)的偏好摘要反復(fù)注入上下文擠占對(duì)話空間信號(hào)稀釋召回時(shí) 5 條相似偏好同時(shí)命中Agent 反而抓不住重點(diǎn)版本沖突你先說(shuō)“用 tabs 縮進(jìn)”后來(lái)說(shuō)“換成 spaces”舊記錄不更新就會(huì)自相矛盾。OpenViking 的解法是每次會(huì)話結(jié)束時(shí)由 LLM 做“提取 補(bǔ)丁式合并”把新信息精準(zhǔn)寫回已有的偏好記憶而不是追加一條新記錄。如上圖所示OpenViking 的記憶按類型分層組織preferences/偏好、entities/實(shí)體、events/事件等目錄各司其職去重合并正是發(fā)生在這一層級(jí)上。記憶提取LLM 如何決定“新增還是更新”會(huì)話壓縮的核心鏈路位于 compressor_v3.py會(huì)話內(nèi)容達(dá)到閾值后被壓縮LLM 從完整上下文中抽取結(jié)構(gòu)化的MemoryOperation新增 / 更新 / 刪除。關(guān)鍵在于 LLM 拿到的不只是新對(duì)話還有現(xiàn)有記憶文件的當(dāng)前內(nèi)容因此它能直接判斷這條偏好已存在 → 輸出“補(bǔ)丁”修改或跳過(guò)偏好發(fā)生變化如縮進(jìn)風(fēng)格從 tabs 改成 spaces→ 輸出“替換”全新偏好 → 輸出“新增”。補(bǔ)丁內(nèi)容通過(guò) patch_merge_context_provider.py 組裝把目標(biāo)記憶文件的原文、行號(hào)和周邊上下文一起喂給 LLM保證它改的是“原文里真實(shí)存在的片段”。合并去重SEARCH/REPLACE 補(bǔ)丁式寫入執(zhí)行層在 memory_updater.py 中應(yīng)用 LLM 的輸出具體合并策略由 merge_op/ 模塊提供定義了 4 種字段級(jí)合并操作見 merge_op/base.py合并操作行為典型場(chǎng)景patch按 SEARCH/REPLACE 塊局部修改文本“偏好 Python” 更新為 “偏好 Python 3.12”replace整字段替換用戶改口直接覆蓋舊值sum數(shù)值累加使用次數(shù)、計(jì)數(shù)類字段immutable只讀禁止修改創(chuàng)建時(shí)間等元數(shù)據(jù)其中patch是去重的主力LLM 輸出的 StrPatch 由若干“搜索-替換”塊組成每塊必須精確匹配記憶文件中的唯一片段命中才修改——這既避免重復(fù)寫入也讓每次合并都可追溯到原文。字符串字段的補(bǔ)丁應(yīng)用邏輯在 merge_op/patch.py 中實(shí)現(xiàn)文件原本不存在時(shí)直接采用替換內(nèi)容已存在時(shí)則逐塊匹配修改匹配不到就保持原文不變天然冪等。增量提交commit配合上述合并操作實(shí)現(xiàn)了“邊聊邊壓縮”每輪對(duì)話的新信息被持續(xù)提取、與既有記憶合并而不必等到會(huì)話結(jié)束才做一次性大總結(jié)。如何在 OpenViking Studio 中驗(yàn)證去重效果合并是否生效可以在 Studio 里直觀驗(yàn)證參考 docs/zh/guides/ 中的使用指南在同一會(huì)話內(nèi)兩次告訴 Agent 同一偏好第二次故意改一個(gè)細(xì)節(jié)如“現(xiàn)在改成 4 空格縮進(jìn)”提交后打開preferences/目錄查看對(duì)應(yīng)記憶文件——應(yīng)該只有一條偏好記錄且內(nèi)容是最新版本用檢索接口查詢?cè)撈门浜纤菰葱畔provenanceTrue可看到它命中的具體目錄與層級(jí)召回側(cè)同樣做了去重各記憶桶的結(jié)果匯總后會(huì)統(tǒng)一去重、全局排序詳見 docs/zh/api/06-retrieval.md保證注入上下文的內(nèi)容干凈、無(wú)重復(fù)??焖偕鲜秩襟w驗(yàn)記憶壓縮與去重git clone https://gitcode.com/GitHub_Trending/op/OpenViking.git cd OpenViking uv sync uv run openviking server隨后在 Cursor、Claude Code 或 OpenCode 等 Agent 中接入 OpenViking配置說(shuō)明見 docs/zh/agent-integrations/連續(xù)兩次會(huì)話提及同一偏好再查看記憶目錄即可看到自動(dòng)合并的結(jié)果。小結(jié)OpenViking 通過(guò)“LLM 提取 SEARCH/REPLACE 補(bǔ)丁合并”實(shí)現(xiàn)增量式記憶壓縮重復(fù)的用戶偏好會(huì)被合并到同一條記錄4 種字段級(jí)合并操作merge_op/讓“改、換、累加、鎖定”都有明確的寫入語(yǔ)義增量提交機(jī)制讓記憶始終處于“已壓縮、無(wú)冗余”狀態(tài)顯著節(jié)省上下文 Token也讓召回結(jié)果更聚焦?!久赓M(fèi)下載鏈接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/op/OpenViking創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考