VideoAgent 开发笔记0: 基于 Mem0 的实时视觉问答 Agent
1. 项目目标 (Project Objective)
构建一个能够实时处理视频流输入的智能 Agent。该 Agent 需具备以下能力:
- 实时感知:理解当前的视觉(视频)信息。
- 长期记忆:通过检索历史交互和视频内容,结合当前上下文进行连贯问答。
2. 核心架构 (Core Architecture)
2.1 技术栈 (Tech Stack)
- Captioning Model & Main Inference Model: 豆包 (Doubao) API。
- Embedding Model: OpenAI
text-embedding-3-small。 - Memory Framework: Mem0。
2.2 记忆模块 (Memory Module)
采用 mem0 作为记忆管理框架,负责视频内容的语义化存储。
- 写入机制:采用固定窗口策略(0-10s, 10-20s...),每 10秒 截取一个视频片段,通过多模态模型转换为文本描述 (Caption),写入记忆库。
- 存储痛点:mem0 设计了
add(新增),update(更新),delete(删除),noop(无操作) 四种状态。- 现状:由于视频 Caption 内容随时间变化大,且带有时间戳信息,导致系统几乎总是触发
add操作,造成记忆库快速膨胀。
- 现状:由于视频 Caption 内容随时间变化大,且带有时间戳信息,导致系统几乎总是触发
2.3 推理管线 (Inference Pipeline)
当接收到用户 Query 时,构建如下 Context 输入给大模型:
- 用户指令 (User Prompt / System Prompt)
- 当前视觉信息:最近的 4帧 图像(作为实时视觉感知的锚点)。
- 相关记忆 (RAG):根据 Query 从 mem0 中检索出的 Top-3 历史视频 Caption。
- 当前问题 (Current Query)。
3. 当前挑战与局限 (Challenges & Limitations)
3.1 上下文覆盖不足 (Context Coverage)
- 问题:固定的 Top-3 RAG 检索仅能覆盖约 30秒 (3 x 10s) 的历史跨度。
- 后果:对于需要长跨度信息的“总结性问题”无能为力。单纯增加检索数量 (Top-K) 会导致上下文过长,引起注意力稀疏 (Sparse Attention),反而降低回答性能。
3.2 记忆干扰与噪声 (Memory Interference)
- 问题:对于仅需“所见即所得”的实时问题(如“现在画面里有什么?”),引入历史记忆反而造成干扰。
- 后果:模型可能混淆“当前画面”与“记忆中的过时信息”,导致回答错误。
3.3 语义推导与记忆路由失效 (Failure in Reasoning-based Memory Routing)
- 问题:当前的 RAG 机制仅依赖直接语义相似度,无法处理任何需要逻辑推导才能定位目标记忆的问题(不仅限于时间维度)。
- 核心缺陷:系统缺失“先分析意图,再制定检索策略”的能力。
- 案例:
- 隐式时间约束:用户问“刚刚那本书叫什么”,系统无法理解“刚刚”意味着需要检索最新的记录,只能机械地检索与“书”语义最接近的片段(可能是很久以前的《哈利波特》)。
- 逻辑/因果链条:若问“他做完饭后干了什么?”,系统倾向于检索包含“做饭”画面的记忆,而非“做饭”之后的时间片段。
- 结论:单纯的 Semantic Search 无法承担复杂的记忆路由 (Memory Routing) 任务。
3.4 混合推理策略失效 (Strategic Failure)
- 尝试方案:设计两阶段推理 —— 先让模型看最近几帧尝试回答;若无法回答,再请求访问记忆。
- 失败原因:模型倾向于“偷懒”或自信地产生幻觉 (Hallucination),不愿承认“不知道”并调用记忆工具。Prompt 优化目前尚未奏效。