探索智能體的記憶:類型、策略和應用

AI Agent 中的記憶:類型、策略和應用

記憶實現是使智能體能夠保持上下文、從過去的交互中學習并做出明智決策的關鍵組成部分。與人類記憶非常相似,智能體記憶允許 AI 系統隨時間存儲、檢索和利用信息,從而為用戶創造更連貫和個性化的體驗。

Agent 記憶的不同類型

AI Agent 中的記憶系統可以根據兩個關鍵維度進行分類:時間范圍(信息保留多長時間)和可訪問性范圍(誰可以訪問信息)。

時間分類

短期記憶

短期記憶側重于在對話或任務中維持即時上下文:

  • 對話記憶:存儲對話歷史,允許 Agent 引用先前的消息并保持對話的連貫性。這對于自然的交互至關重要,因為早期交流的上下文會影響后續的響應。

  • 緩沖區記憶:在定義的時間窗口內管理最近的交互,對于多輪推理任務尤其有用。當函數調用依賴于先前操作的結果,形成依賴推理步驟鏈時,這種類型的記憶變得至關重要。

長期記憶

長期記憶支持跨不同會話的持久性:

  • 跨會話記憶:允許 Agent 回憶先前對話中的信息,即使在會話結束后也是如此。這會隨著時間的推移創造一種連續性和個性化的感覺。

  • 知識庫記憶:存儲事實信息、用戶偏好和學習模式,無論它們最初何時記錄,都可以訪問。

可訪問性分類

私有記憶

為單個 Agent 使用而存儲的信息:

  • 僅供創建或擁有該記憶的特定 Agent 訪問
  • 該 Agent 可以隨時讀取和修改
  • 用于維護特定于 Agent 的上下文和個人用戶信息
共享記憶

可供多個 Agent 使用的信息:

  • 可供系統內已定義的 Agent 組訪問
  • 任何具有適當權限的 Agent 都可以讀取并可能修改
  • 對于協作式多 Agent 系統至關重要,其中信息共享可提高集體績效

Agent 記憶的實現方法

基于變量的記憶

實現記憶的最簡單方法之一是通過系統或用戶定義的變量:

# 基于變量的記憶實現示例
user_preferences = {"language": "English","units": "metric","notification_frequency": "daily"
}# 訪問記憶
def generate_response(query, user_id):prefs = user_preferences.get(user_id, default_preferences)# 使用偏好自定義響應return personalized_response

這種方法簡單直接,但在處理復雜或非結構化信息方面能力有限。

NL2SQL 數據庫記憶

自然語言到 SQL (NL2SQL) 數據庫記憶允許通過自然語言進行結構化數據管理:

# NL2SQL 記憶交互示例
async def update_expense_record(user_query):# 將自然語言轉換為 SQLsql_query = nl2sql_converter.convert("今天午餐新增一筆 45 美元的開銷")# 執行生成的 SQLresult = await database.execute(sql_query)return result

這種方法對于需要結構化數據存儲和檢索的應用(例如費用跟蹤器或庫存管理系統)特別強大。

向量數據庫記憶

向量數據庫將信息存儲為嵌入,從而實現語義檢索:

# 向量數據庫記憶實現示例
from chromadb import ChromaDBVectorMemoryasync def store_information(text_content):# 將文本轉換為向量嵌入并存儲await vector_memory.add(MemoryContent(content=text_content,mime_type=MemoryMimeType.TEXT,metadata={"category": "user_information", "timestamp": current_time()}))async def retrieve_relevant_info(query):# 檢索語義上相似的信息results = await vector_memory.query(query, k=3)return results

向量數據庫擅長基于語義相似性而非精確匹配來檢索信息,使其成為知識檢索系統的理想選擇。

記憶查詢和更新工作流程

用戶 Agent 短期記憶 長期記憶 初始查詢 存儲查詢 查詢相關上下文 返回個性化信息 以上下文感知的答案響應 后續問題 查詢最近的對話 返回對話歷史 用新學到的信息更新 以連貫的后續響應 用戶 Agent 短期記憶 長期記憶

此工作流程演示了短期和長期記憶系統如何在整個對話過程中協同工作以維護上下文和個性化。

記憶更新策略

通過函數調用進行啟發式更新

Agent 可以通過由上下文需求觸發的特定函數調用來更新記憶:

  1. NL2SQL 數據庫更新:Agent 識別何時應存儲信息并生成適當的 SQL 命令。
  2. 向量數據庫更新:當 Agent 確定新信息可能與未來檢索相關時,會將其嵌入并存儲。

這種方法允許動態的、上下文感知的記憶管理。

通過函數邏輯強制更新

某些記憶更新通過編程邏輯自動發生:

  1. 變量更新:系統變量根據直接用戶輸入或推斷的偏好進行更新。
  2. 會話狀態管理:關鍵信息在對話流程的特定點被強制存儲。

這確保了無論 Agent 的決策如何,基本信息始終被捕獲。

記憶查詢策略

啟發式查詢

與更新類似,查詢可以由 Agent 決策觸發:

  1. 上下文檢索:Agent 確定何時額外的上下文可以改善其響應。
  2. 知識增強:當面臨復雜問題時,Agent 可能會查詢其記憶以獲取相關事實。
強制查詢

某些記憶檢索是程序化強制執行的:

  1. 用戶識別:存儲用戶身份的變量在每個會話開始時自動檢索。
  2. 偏好應用:在生成個性化內容之前強制查詢用戶偏好。

研究案例分析

Coze

Coze 支持短期和長期記憶實現:

  • 短期記憶:在會話中維護對話上下文
  • 長期記憶:跨會話記錄用戶配置文件信息和關鍵記憶點
  • 手動編輯:允許開發人員在調試模式下手動編輯記憶

Coze 的記憶方法在情感陪伴場景中尤其出色,其中個性化交互至關重要。

OpenAI

OpenAI 在 ChatGPT 中實現了跨對話的長期記憶:

  • 用戶可以明確指示系統記住特定信息
  • 可以使用諸如“你記得關于我的什么?”之類的短語查詢記憶
  • 用戶通過刪除特定記憶或完全禁用該功能的選項來保持控制

此實現平衡了實用性與用戶隱私和控制。

AutoGen

微軟的 AutoGen 框架提供全面的記憶支持:

  • 內置支持:多種記憶類型,包括基于列表和基于向量的實現
  • 集成:與向量數據庫和外部記憶系統配合使用
  • 自定義:開發人員可以通過覆蓋 addqueryupdate_context 等方法來擴展記憶協議

AutoGen 的記憶系統因其靈活性和可擴展性而特別引人注目。

LangChain 和 LlamaIndex

這兩個框架都提供專門的記憶實現:

  • LangChain:專注于對話和實體記憶,對基于對話的應用有強大的支持
  • LlamaIndex:強調可組合和向量記憶,在數據檢索場景中具有特殊優勢

多智能體系統的記憶設計

在為多智能體設計記憶系統時,有以下幾點考慮:

用于多 Agent 協作的共享記憶

對于多 Agent 系統,共享記憶變得至關重要:

  • 信息共享:諸如文件路徑之類的簡單信息可以使用以對話為維度的變量進行存儲
  • 沖突解決:實施處理來自不同 Agent 的沖突記憶更新的策略

緩沖區記憶壓縮

對于多輪任務,記憶壓縮變得重要:

  • 摘要:將先前的對話輪次壓縮成摘要
  • 任務初始化:開始新任務時,總結先前任務的結果
  • 上下文窗口管理:確保最相關的信息適合模型上下文窗口

長期記憶注意事項

實施長期記憶的決定取決于實際需求:

  • 用戶個性化:對于需要個性化體驗的應用是必要的
  • 知識積累:對于通過持續使用而改進的系統很有價值

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904579.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904579.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904579.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 2395. Find Subarrays With Equal Sum

題目描述 代碼&#xff1a; class Solution { public:bool findSubarrays(vector<int>& nums) {int len nums.size();if(len <2)return false;unordered_set<int> table;int sum 0;for(int i 1;i < len;i){sum nums[i-1]nums[i];if(table.contains(…

Kubernetes(k8s)學習筆記(七)--KubeSphere 最小化安裝

前情提要 可視化操作面板對于開發、運維絕對是提升工作效率的一大利器&#xff0c;因此很有必要搭建一套可視化操作來管理Kubernetes。 可視化面板有多種&#xff1a; 1.Kubernetes官方提供的默認面板&#xff1a;dashboard&#xff0c;用處不大&#xff0c;放棄&#xff1b…

MCP連接Agent:AI時代的TCP/IP

介紹 2023年&#xff0c;生成式AI爆發。2024年&#xff0c;智能體&#xff08;Agent&#xff09;接棒成為AI新焦點。2025年&#xff0c;智能體似乎已經要開始爆發了。目前的智能體更像一個“單機App”&#xff1a;彼此不了解、無法通信&#xff0c;更不能協作。類似互聯網早期…

交換機工作原理(MAC地址表、VLAN)

目錄 一、交換機的基本工作原理 數據幀的轉發 MAC地址表的作用 交換機的轉發方式 二、VLAN&#xff08;虛擬局域網&#xff09; VLAN的定義 VLAN的作用 VLAN的實現方式 VLAN的幀標記 VLAN的通信 三、交換機與VLAN的結合 四、交換機與VLAN的實際應用場景 交換機是局…

eFish-SBC-RK3576工控板外部RTC測試操作指南

備注&#xff1a; 1&#xff09;測試時一定要接電池&#xff0c;否則外部RTC斷電后無法工作導致測試失敗&#xff1b; 2&#xff09;如果連接了網絡&#xff0c;系統會自動同步NTP時鐘&#xff0c;所以需要關閉自動同步時鐘。 關閉自動同步NTP時鐘方法&#xff1a; 先查看是…

淘寶按圖搜索商品(拍立淘)Java 爬蟲實戰指南

在電商領域&#xff0c;按圖搜索商品功能為用戶提供了更直觀、便捷的購物體驗。淘寶的拍立淘功能更是憑借其強大的圖像識別技術&#xff0c;成為許多開發者和商家關注的焦點。本文將詳細介紹如何利用 Java 爬蟲技術實現淘寶按圖搜索商品功能&#xff0c;包括注冊賬號、上傳圖片…

【Redis】List類型

文章目錄 List的特點介紹lpush&#xff0c;lpushx&#xff0c;rpush&#xff0c;rpushx命令lrange命令lpop和rpoplindex命令linsert命令llen命令lrem 命令ltrim命令lset命令阻塞版本的命令blpop和brpop 命令小結list的內部編碼List的應用場景 List的特點介紹 列表相當于一個數…

QT:qt5調用打開exe程序并獲取調用按鈕控件實例2025.5.7

為實現在 VS2015 的 Qt 開發環境下打開外部 exe&#xff0c;列出其界面按鈕控件的序號與文本名&#xff0c;然后點擊包含特定文本的按鈕控件。以下是更新后的代碼&#xff1a; #include <QCoreApplication> #include <QProcess> #include <QDebug> #include…

基于Jenkins的DevOps工程實踐之Jenkins共享庫

文章目錄 前言Jenkins共享庫結構1、共享庫演示2、知識點補充3、實踐使用共享庫格式化輸出日志4、groovy基礎語法4.1、 什么是 Groovy&#xff1f;4.2、groovy特點4.3、運行方法4.4、標識符4.5、基本數據類型4.5.1、string類型4.5.2、list類型 4.6、函數使用4.7、正則表達式 5、…

【Qt4】Qt4中實現PDF預覽

方案一&#xff1a; 在Qt4中預覽PDF文件&#xff0c;你可以使用多種方法&#xff0c;但最常見和簡單的方法之一是使用第三方庫。Qt本身并沒有內置直接支持PDF預覽的功能&#xff0c;但你可以通過集成如Poppler、MuPDF等庫來實現這一功能。下面我將展示如何使用Poppler庫在Qt4中…

php artisan resetPass 執行密碼重置失敗的原因?php artisan resetPass是什么 如何使用?-優雅草卓伊凡

php artisan resetPass 執行密碼重置失敗的原因&#xff1f;php artisan resetPass是什么 如何使用&#xff1f;-優雅草卓伊凡 可能的原因 命令不存在&#xff1a;如果你沒有正確定義這個命令&#xff0c;Laravel 會報錯而不是提示”重置密碼失敗”用戶不存在&#xff1a;’a…

ai說什么是注解,并以angular ts為例

在編程中&#xff0c;注解&#xff08;Annotation&#xff09; 是一種特殊的語法結構&#xff0c;用于為代碼添加元數據&#xff08;metadata&#xff09;&#xff0c;從而在不修改代碼邏輯的情況下&#xff0c;提供額外的信息或指示編譯器、框架、工具如何處理這些代碼。注解通…

【MySQL】-- 聯合查詢

文章目錄 1. 簡介1.1 為什么要使用聯合查詢1.2 多表聯合查詢時MySQL內部是如何進行計算的 2. 內連接2.1 語法2.2 示例 3. 外連接3.1 語法3.2 示例 4. 自連接4.1 應用場景4.2 示例4.3 表連接練習 5. 子查詢5.1 語法5.2 單行子查詢5.3 多行子查詢5.4 多列子查詢5.5 在from 子句中…

【多線程】六、基于阻塞隊列的生產者消費者模型

文章目錄 Ⅰ. 生產者消費者模型的概念Ⅱ. 生產者消費者模型的優點Ⅲ. 基于阻塞隊列的生產者消費者模型MakefileBlock_queue.hpptask.hpptest.cpp Ⅳ. 如何理解提高了效率??? Ⅰ. 生產者消費者模型的概念 ? 生產者消費者模型是一種常見的并發模式&#xff0c;用于解決生產者…

【Vue】全局事件總線 TodoList 事件總線

目錄 一、 實現所有組件看到x事件 二、 實現$on $off 以及 $emit 總結不易~ 本章節對我有很大的收獲&#xff0c; 希望對你也是&#xff01;&#xff01;&#xff01; 本節素材已上傳至Gitee&#xff1a;yihaohhh/我愛Vue - Gitee.com 全局事件總線圖&#xff1a; 本節素材…

Python編程virtualenv庫的簡介和使用方法

Python編程virtualenv庫的簡介和使用方法 virtualenv和conda的區別是什么

MySQL的行級鎖鎖的到底是什么?

大家好&#xff0c;我是鋒哥。今天分享關于【MySQL的行級鎖鎖的到底是什么?】面試題。希望對大家有幫助&#xff1b; MySQL的行級鎖鎖的到底是什么? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 MySQL的行級鎖是數據庫管理系統&#xff08;DBMS&#xff09;的一…

【C++游戲引擎開發】第33篇:物理引擎(Bullet)—射線檢測

一、射線檢測核心理論體系 1.1 射線檢測的數學基礎 1.1.1 參數化射線方程 射線在三維空間中的數學表達采用參數方程: r ( t ) = o + t d ^ ( t ∈ [

【操作系統】線程崩潰機制詳解

在分布式系統與多線程編程的世界里&#xff0c;一個看似簡單的問題卻暗藏玄機&#xff1a;當某條線程突然崩潰&#xff0c;其所屬進程會隨之消亡嗎&#xff1f;這個問題背后隱藏著操作系統與編程語言的精妙設計&#xff0c;本文將從底層原理到工程實踐層層剖析。 一、線程崩潰…

無人機 | 無人機設計概述

無人機設計是一個復雜的系統工程&#xff0c;涉及空氣動力學、電子技術、材料科學、控制算法等多個領域的綜合應用。以下是無人機設計的主要模塊和關鍵要素概述&#xff1a; 一、總體設計目標 任務需求定義 用途&#xff1a;航拍、物流、農業、軍事偵察、環境監測等性能指標&am…