多模态记忆智能体M3部署:切片转码与图谱生成实测

市面上的智能体大多是"金鱼记忆"——对话结束,上下文清空,之前看过什么全部归零。字节开源的 M3-Agent 走了另一条路:实时消费视频和音频流,把看到听到的内容沉淀成可检索的长期记忆,任务执行时再从记忆里捞证据做多轮推理。M3-Bench 上它对 Gemini-1.5-pro 和 GPT-4o 这些基线都有几个点的领先。本文按部署顺序拆这套流程,顺带说清楚哪些坑原文没提。

先搞懂它的记忆为什么不一样

传统 RAG 把知识切成文本块存向量库,M3-Agent 的存储单位是"实体图谱"。人脸、声音、相关知识这些跨模态信息,全部挂到同一个实体节点上——你三个月前提到自己养了猫,下次问"我该给猫买什么粮",它能把这段视频记忆检索回来。情景记忆(episodic)和语义记忆(semantic)分层存放,前者存事件,后者随时间沉淀成结构化知识。

跑分上 M3-Bench-robot(100 个机器人第一视角视频)提升 8.2%,M3-Bench-web(920 个网络长视频)提升 7.7%,VideoMME-long 提升 5.3%。数字本身不算炸裂,但方向有意义:长视频问答这类任务,缺的不是理解力,是"记性"。

环境与依赖:先把工具链装齐

官方给了 setup.sh 一键脚本,但依赖里有个容易忽略的版本锁定——qwen-omni-utils 必须用 0.0.4:

bash setup.sh
pip install qwen-omni-utils==0.0.4

调用外部大模型前,configs/api_config.json 里要先填好 API 配置,这一步漏了后面所有脚本都会空跑。

视频切片:30 秒一段是有原因的

长视频不能整条喂,官方用 ffmpeg 按 30 秒切片。切片脚本先用 ffprobe 拿总时长,再算段数逐段 -c copy 裁切:

#!/bin/bash
video="robot/bedroom_01"
input="data/videos/$video.mp4"
mkdir -p "data/clips/$video"
duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$input")
duration_seconds=$(echo "$duration" | awk '{print int($1)}')
segments=$((duration_seconds / 30 + 1))
for ((i=0; i<segments; i++)); do
    start=$((i * 30)); end=$(((i + 1) * 30))
    ffmpeg -ss $start -i "$input" -t 30 -c copy "data/clips/$video/$i.mp4"
done

-c copy 不重编码,速度快但切点只能是关键帧附近——如果源视频关键帧间隔很大,片段边界会出现几百毫秒的偏移,对记忆生成影响不大,做逐帧分析时要留意。

记忆图谱的生成与验证

切片就绪后跑记忆生成,输出是 pickle 格式的图谱文件:

python data_preparation/generate_memory_qwen.py --data_file data/data.jsonl
python visualization.py --mem_path data/memory_graphs/robot/bedroom_01.pkl --clip_id 1

验证图谱质量别只看可视化顺眼:抽 3 个实体,人工核对它的关联记忆是否都来自真实视频片段。图谱错了,后面 Control 推理再强也是错上加错。最后跑控制模块做问答评估:

python m3_agent/control.py --data_file data/annotations/robot.json

训练资源与适用边界

想自己微调,官方开源了两个训练仓库:记忆模块 sft-qwen2.5-omni-thinker、控制模块 M3-Agent-Training。但要说清边界:这套架构吃 GPU——视频逐切片过 Omni 模型生成记忆,一小时视频的图谱生成成本不低,个人玩家跑 demo 可以,生产化要先算账。它擅长的场景是"长期相处的助手"(机器人陪护、教育),一次性问答任务用普通 RAG 反而更省。

0

评论0

请先
显示验证码
没有账号?注册  忘记密码?