字節 Seed 團隊聯合清華大學智能產業研究院開源 MemAgent: 基于多輪對話強化學習記憶代理的長文本大語言模型重構

在這里插入圖片描述

🔥 最新動態!!!

  • [2025/07] 我們提供了快速啟動腳本,讓使用MemAgent變得超級簡單,詳情請見下方"快速入門"部分。
  • [2025/06] 我們發布了RL-MemAgent-14B和RL-MemAgent-7B模型,在350萬token上下文任務中實現了近乎無損的性能表現。
    在這里插入圖片描述

在這里插入圖片描述

📖 簡介

我們提出了一種新穎的長上下文處理框架——MemAgent,它無需改變基礎模型架構,直接通過端到端的強化學習優化長上下文任務。MemAgent 展現出卓越的長上下文處理能力:在 32K 文本上訓練后,可外推至 3.5M 問答任務且性能損失 <5%,并在 512K RULER 測試中達到 95%+ 準確率。

在這里插入圖片描述

亮點:

  • 🚀 創新記憶機制 引入MemAgent架構,可在固定上下文窗口內處理任意長度的輸入,突破傳統上下文窗口長度限制。
  • ? 線性時間復雜度 突破長文本處理的計算瓶頸,實現資源消耗與文本長度的線性擴展。
  • 🎯 強化學習驅動的外推能力 通過MemAgent架構的強化學習訓練,使模型能夠外推到更長的文本而性能損失最小。

在這里插入圖片描述

多輪對話強化學習框架

我們采用可驗證獎勵的強化學習(RLVR)來訓練記憶代理,擴展了DAPO算法以支持具備多輪上下文無關對話的智能體工作流程端到端優化。

在這里插入圖片描述

結果

RL-MemAgent 在超長上下文處理中展現出卓越的穩定性:

  • 140億參數模型:在350萬token的任務上性能衰減<5.5%,實現真正無損的外推。
  • 70億參數模型:在最長上下文中性能僅下降11%,顯著優于現有長上下文模型。

在這里插入圖片描述

快速開始

quickstart.py 提供了一種簡單上手 MemAgent 的方式,支持本地部署和在線模型服務集成。

vLLM 本地部署

  1. 啟動 vllm 服務器:

    vllm serve BytedTsinghua-SIA/RL-MemoryAgent-14B --tensor_parallel_size 2
    
  2. 運行 quickstart.py:

    python quickstart.py --model BytedTsinghua-SIA/RL-MemoryAgent-14B
    

在線大語言模型服務

對于在線大語言模型服務,您需要將模型端點地址和API密鑰配置為環境變量。

例如 gpt-4o-2024-11-20

  • 普通在線服務:直接使用 https://{endpoint}
  • Azure OpenAI:使用格式 https://{endpoint}/openai/deployments/gpt-4o-2024-11-20
export URL=
export API_KEY=
python quickstart.py --model gpt-4o-2024-11-20

可復現性

測試結果

pip install httpx==0.23.1 aiohttp -U ray[serve,default] vllm
  1. 準備問答數據
cd taskutils/memory_data
bash download_qa_dataset.sh
  1. 下載數據集
cd ../..
bash hfd.sh BytedTsinghua-SIA/hotpotqa --dataset --tool aria2c -x 10
export DATAROOT=$(pwd)/hotpotqa
  1. 準備模型

測試中使用的模型將從HuggingFace下載。但Qwen2.5-Instruct系列模型需要手動下載,并正確配置其config.json文件以啟用YaRN功能。請按照Qwen2.5-Instruct倉庫的說明進行操作。

bash hfd.sh Qwen/Qwen2.5-7B-Instruct --model --tool aria2c -x 10
bash hfd.sh Qwen/Qwen2.5-14B-Instruct --model --tool aria2c -x 10
bash hfd.sh Qwen/Qwen2.5-32B-Instruct --model --tool aria2c -x 10
# then change the config.json manually
export MODELROOT=/your/path/to/models # move to your model root directory, this env variable is used in the run.py script
mv Qwen2.5-7B-Instruct $MODELROOT/Qwen2.5-7B-Instruct-128K
mv Qwen2.5-14B-Instruct $MODELROOT/Qwen2.5-14B-Instruct-128K
mv Qwen2.5-32B-Instruct $MODELROOT/Qwen2.5-32B-Instruct-128K
  1. 運行

注意: 運行所有測試需要幾天時間,您可能需要指定要運行的測試/模型。

cd taskutils/memory_eval
python run.py

注意: 此腳本將使用所有可用GPU來部署模型。若您擁有多個GPU節點,可以創建一個Ray集群并在其中一個集群節點上運行腳本。使用SERVE_PORTDASH_PORT為Ray集群指定端口。

cd taskutils/memory_eval
SERVE_PORT=8000 DASH_PORT=8265 python run.py # port numbers here are default values, you may need to specify them as the serve/dashboard port in your ray cluster

訓練

首先在run_memory_7B.shrun_memory_14B.sh文件中指定PROJ_ROOT(用于保存檢查點)和DATASET_ROOT(用于訓練數據,應與測試時使用的路徑相同)。

然后直接運行該腳本啟動單節點訓練,或者正確配置Ray集群并在集群節點之一上運行該腳本。

數據

本節操作請在taskutils/memory_data目錄下執行以下命令。

cd taskutils/memory_data
pip install nltk pyyaml beautifulsoup4 html2text wonderwords tenacity fire
  1. 訓練 & dev split: hotpotqa_train.parquet & hotpotqa_dev.parquet
  • 下載問答數據集和合成數據,如果在上一步已經下載過,請跳過此步驟:
bash download_qa_dataset.sh
python processing.py # Dataprocess, synthetic long context multihop-QA
  • 在本地主機8000端口部署Qwen-7B,在本地主機8001端口部署Qwen-7B-Instruct

  • 過濾

python filter.py -i hotpotqa_dev_process.parquet -o hotpotqa_dev_result --noresume
python filter.py -i hotpotqa_train_process.parquet -o hotpotqa_train_result --noresume
python3 filter2.py # Filtering out sample which can be answered correctly by LLM without any context:

2. Main task: eval_{50|100|200|…}.json

export DATAROOT="your_dir_to_hotpotqa_dev.parquet"
python convert_to_eval.py # Convert the `hotpotqa_dev` to `eval_200.json`
python different_docs_eval.py.py # Create eval dataset with different number of documents

3. OOD task: eval_{rulersubset}_{8192|16384|…}.json

export DATAROOT="your_dir_to_hotpotqa_dev.parquet"
python download_paulgraham_essay.py
bash download_qa_dataset.sh
bash ruler_data_prepare.sh 

工程實現

同步模式:從工具調用到通用工作流

受Search-R1啟發,我們實現了一個具有獨立上下文的通用多會話工作流框架。因此上下文不再像原始工具調用那樣僅限于所有先前對話的串聯字符串。該框架使得以端到端方式優化多步智能體成為可能。記憶智能體是該框架的示例之一,展示了如何應用強化學習來優化智能體在多步工作流中的性能。

實現細節請參閱recurrent/impls/memory.py,接口設計參見recurrent/interface.pyrecurrent/generation_manager.py文件。

異步模式:將智能體視為函數

基于服務器模式生成的實現,我們進一步開發了一個全新框架——允許用戶將智能體實現為以openai-api風格調用大語言模型的函數,無需關注批處理張量操作(如分詞、填充、狀態追蹤等),這些操作通常需要大量模板代碼甚至狀態機管理。

在此框架下,每個智能體都是一個函數,其返回值為一個或多個{"role":"", "content":""}字典構成的列表:

在這里插入圖片描述

  • 香草模型(基礎對話):[{"role":"user","content":用戶輸入},{"role":"assistant""content":助手回復}]
  • 多輪工具調用模式:[{"role":"user","content":用戶輸入},{"role":"assistant","content":助手初始回復},{"role":"tool","content":工具觀測結果},{"role":"assistant","content":助手最終回復}]
  • 上下文無關的多輪對話:[{"role":"user","content":對話1輸入},{"role":"assistant","content":對話1回復}], [{"role":"user","content":對話2輸入},{"role":"assistant","content":對話2回復}]

我們修改了chat_template以支持無需張量操作的工具響應掩碼功能。

具體實現請參閱recurrent/impls/async_*.py文件中定義的agent類的rollout方法,框架設計詳見recurrent/interface.pyrecurrent/async_generation_manager.py文件。

RayActor進程池

計算密集型的獎勵計算或工具調用可能會阻塞頭節點向大語言模型發送生成請求。為提高CPU密集型任務的效率,我們在每個節點創建了一個運行進程池的RayActor,用于接收來自頭節點的任務。

因此,CPU任務可以通過提交給ray actor異步執行,GPU任務(如LLM生成)同理。

詳見verl/workers/reward_manager/thread.py文件。

致謝

我們感謝verl團隊提供了靈活強大的基礎設施。

我們感謝服務器模式生成的作者們所做的杰出工作,這為我們的異步智能體框架奠定了堅實基礎。

代碼

https://github.com/BytedTsinghua-SIA/MemAgent

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

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

相關文章

【unitrix】 4.20 類型級二進制數減法實現解析(sub.rs)

一、源碼 這段代碼實現了一個用于統計二進制補碼整數位數的系統&#xff0c;支持多種自定義數值類型&#xff08;Z0、P1、N1、B0、B1&#xff09;。 use core::mem::size_of; use crate::number::{Z0, P1, N1, B0, B1, Var};/// 統計二進制位數的 trait pub trait BitLength {f…

手把手教你安全刪除Anaconda虛擬環境(避坑指南)

文章目錄一、刪除前必看清單&#xff08;超級重要&#xff09;二、三種刪除方法對比&#xff08;建議收藏&#xff09;方法1&#xff1a;官方推薦命令&#xff08;最安全&#xff09;方法2&#xff1a;暴力刪除大法&#xff08;快速但需謹慎&#xff09;方法3&#xff1a;核彈級…

Effective Modern C++ 條款7:區分使用 `()` 和 `{}` 創建對象

在 C11 及以后的版本中&#xff0c;初始化對象的方式變得更加靈活&#xff0c;但也帶來了選擇上的困惑。() 和 {} 是兩種常見的初始化語法&#xff0c;它們在語義、行為和適用場景上有顯著差異。本文將通過具體示例&#xff0c;深入解析這兩種初始化方式的區別&#xff0c;并探…

Java基礎-String常用的方法

String常用的三種構造方法 public static void main(String[] args) {//1.使用常量字符串構造String s1 "1.Hello world";System.out.println(s1);//2.使用new關鍵字構造String s2 new String("2.Hello world");System.out.println(s2);//3。使用字符數組…

數學建模:多目標規劃:ε約束法、 理想點法

一、ε約束法定義ε約束法通過將部分目標函數轉化為約束條件&#xff0c;保留一個主要目標進行優化。1、選擇一個主要目標 fk?(x) 進行優化。2、其他目標 fi?(x) 轉化為約束 fi?(x)≤εi?&#xff0c;其中 εi? 是決策者設定的容許閾值。??原理????目標選擇??&…

linux kernel struct regmap_config結構詳解

在 Linux 內核中&#xff0c;struct regmap_config 是 ?Regmap 子系統的核心配置結構體&#xff0c;用于定義如何與底層硬件寄存器進行交互。Regmap&#xff08;Register Map&#xff09;子系統通過抽象不同總線&#xff08;如 I2C、SPI、MMIO 等&#xff09;的寄存器訪問細節…

【Python3教程】Python3高級篇之CGI編程

博主介紹:?全網粉絲23W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

docker安裝Consul筆記

安裝過程 詳細步驟如下&#xff1a; 首先拉取Consul的Docker鏡像&#xff1a; docker pull hashicorp/consul:1.18.1創建Consul的配置文件和數據目錄&#xff1a; mkdir -p /srv/docker/consul/data mkdir -p /srv/docker/consul/config在config目錄下創建一個config.json配置文…

.net數據脫敏

.NET數據脫敏技術&#xff1a;保障數據安全的有效手段 在當今數字化時代&#xff0c;數據安全至關重要。尤其是涉及到用戶的敏感信息&#xff0c;如密碼、手機號碼等&#xff0c;必須采取有效的措施進行保護。數據脫敏就是這樣一種技術&#xff0c;它能夠在不影響數據可用性的…

【openp2p】 學習2:源碼閱讀P2PNetwork和P2PTunnel

【openp2p】 學習1:P2PApp和優秀的go跨平臺項目已經做了初步分析。閱讀原版工程,感覺工程是一個暴露內網服務端口,讓外部可以用的一個實現是一個完整的、跨平臺的可商業化的應用。感謝作者需要學習作者的設計思路工程構建 F:\GolandProjects\openp2p\core\p2pnetwork.go通常…

網安學習NO.14

防火墻基礎實驗 傳統防火墻配置實驗拓撲圖PC&#xff1a; ip 192.168.10.1 255.255.255.0 192.168.10.254 ip dns 114.114.114.114二層交換機 vl 10 ex int e0/0 sw mo ac sw ac vl 10 ex inr e0/1 sw tr en do sw mo tr三層交換機 vl 10 ex int g0/0 sw tr en do sw mo tr ex …

ESP32語音喚醒

兩種喚醒方式AfeWakeWord與EspWakeWord對比 底層技術 AfeWakeWord&#xff1a;基于ESP-IDF的AFE框架&#xff08;esp_afe_sr_iface_t&#xff09;&#xff0c;高性能模式&#xff08;AFE_MODE_HIGH_PERF&#xff09;EspWakeWord&#xff1a;基于WakeNet接口&#xff08;esp_wn_…

借助 Wisdom SSH AI 助手,輕松安裝 CentOS 8 LNMP 環境

打開Wisdom SSH軟件&#xff0c;在AI對話區輸入“在CentOS 8服務器安裝LNMP環境”&#xff0c;AI助手會按以下步驟分析并執行安裝&#xff1a; 安裝Nginx 分析&#xff1a;CentOS 8默認軟件源可能沒有Nginx&#xff0c;所以要先啟用Nginx官方軟件源&#xff0c;然后才能安裝Ngi…

WD0407 40V 7A 超級肖特基二極管,應用于開關汽車工業控制

WD0407 40V 7A 超級肖特基二極管說明? 產品概述? WD0407 是一款性能卓越的超級肖特基二極管&#xff0c;專為滿足現代電子設備對高效、可靠電源管理的需求而設計。它采用先進的半導體制造工藝&#xff0c;在諸多關鍵性能指標上表現出色&#xff0c;能夠為各類電路提供穩定、高…

盧比危機下的金融破局:科倫坡交易所技術升級作戰圖

&#x1f30f; 今日南亞風暴眼 印度雙重上市機制加速落地&#xff1a;印度國家證券國際交易所&#xff08;NSE IX&#xff09;與科倫坡證券交易所&#xff08;CSE&#xff09;達成技術對接協議&#xff0c;斯企可通過印度GIFT City吸引美元資本&#xff0c;交易時段覆蓋全球22小…

upload-labs靶場通關詳解:第20關 /.繞過

一、分析源代碼// 初始化上傳狀態標記&#xff0c;默認為false&#xff0c;即文件未上傳 $is_upload false; // 初始化消息變量&#xff0c;用于存儲錯誤信息 $msg null;// 檢查是否通過POST方式提交了表單&#xff08;點擊上傳按鈕&#xff09; if (isset($_POST[submit])) …

企業用云狀態評估

云部署形態及其策略規劃成熟度 單云部署&#xff1a; 主要業務負載運行在單一公有云或私有云上 多云/混合云部署 —有清晰戰略規劃與實施&#xff1a; 業務負載運行在多個云&#xff08;公有云或混合云&#xff09;上&#xff0c;并且企業擁有清晰的多云/混合云戰略規劃&#x…

STM32G473串口通信-USART/UART配置和清除串口寄存器狀態的注意事項

USART和UART配置的區別 如果USART使用的是異步通信&#xff0c;那么UART與USART配置基本相同。 USART配置如下:UART配置如下&#xff1a;如果USART使用的是同步通信&#xff0c;那么UART配置就有差異。首先通信雙方都是使用USART的同步通信&#xff0c;一個主機&#xff0c;一個…

Debezium:一款基于CDC的開源數據同步工具

Debezium 是由 Red Hat 開源的一種基于變更數據捕獲&#xff08;CDC&#xff09; 的分布式平臺&#xff0c;專為實時捕獲和傳播數據庫的變更事件而設計。Debezium 常見的使用場景包括&#xff1a; 實時數據集成&#xff1a;將數據庫變更同步到數據倉庫或數據湖&#xff0c;支撐…

從面向對象編程語言PHP轉到Go時的一些疑惑?

前言 1、php中面向對象編程時 與 Go中的區別&#xff1f; 2、php中最常使用laravel框架&#xff0c;不用過多關注依賴注入和反射&#xff0c;在go中又該如何使用呢&#xff1f;是 舍棄&#xff1f; 本文是一個系統化梳理&#xff0c;幫助從 語言哲學 → 依賴注入在 Go 的現狀 →…