ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

智能体面试准备(五十三):多模态 Agent 工程实战——感知-决策闭环与 4MRAG 串联

智能体面试准备(五十三):多模态 Agent 工程实战——感知-决策闭环与 4MRAG 串联 智能体面试准备五十三多模态 Agent 工程实战——感知-决策闭环与 4MRAG 串联引言多模态 Agent 不是LLM 加个看图接口B25 讲过多模态 Agent 的概念边界B47 讲过 Agentic RAG 的自主知识工作流。但把多模态 Agent 真正工程化落地最难的是感知和决策之间那道缝模型看到的图像怎么变成 Agent 可推理、可调用工具、可纠错的闭环本篇是工程实战深化的第三讲聚焦多模态 Agent 的感知-决策闭环并把它和你的 4MRAG 项目多模态检索增强生成串起来讲——这既能体现技术深度又能在面试里自然带出你的论文工作。读完本篇你应当能说清视觉 grounding 怎么落进 Agent loop、Agent 怎么主动决定看哪里、多模态记忆怎么存、失败了怎么自我恢复。文本 Agent 闭环 observe(text) - think(LLM) - act(tool_call) - observe(result) - ... 多模态 Agent 闭环多一段感知 perceive(image/video) - ground(定位要素) - think(LLM多模态) - act(工具/导航/生成) - perceive(新画面) - 纠偏/续跑 关键差异perceive 产出的是带坐标/带置信度的结构化感知而非裸图像第一节 视觉 grounding让 Agent 指得准1.1 grounding 的本质LLM 输出的是 token但 Agent 要操作的是画面里第三排第二个按钮图表左上角的标题。把语言指代解析成空间坐标就是视觉 grounding。常见两类检测式 grounding给定文本 query输出 bbox边界框。如 GLIP、Grounding DINO。指代/点击式 grounding给定图像和指令输出点/框/掩码。如 Set-of-MarkSoM给每个可交互元素打标号让 LLM 只输出编号。1.2 Set-of-Mark 的工程价值SoM 的核心巧思不要在像素层面让 LLM 直接回归坐标又慢又不准而是先对图像里的可交互元素做实例分割并打上可见编号① ② ③…再把带编号的图连同任务给 VLM。LLM 只需输出点击 ③定位由编号映射回原坐标完成。这把视觉定位转化成了从离散编号里做选择大幅降低出错率。SoM 流程 原始图 - 实例分割 - 给每个元素画框编号 - 带编号图喂 VLM VLM 输出: 点击 ③ - 编号映射 - 真实坐标 (x,y) - 执行器点击# Set-of-Mark 最简示意defset_of_mark(image,detector):masksdetector.segment(image)# 实例分割annotatedimage.copy()mark_map{}fori,minenumerate(masks,start1):annotateddraw_box(annotated,m,labelf{i})mark_map[i]m.centroid()# 编号 - 真实坐标returnannotated,mark_mapdefact_on_mark(vlm_decision:str,mark_map):numparse_number(vlm_decision)# 点击 ③ - 3returnmark_map[num]# 真实 (x,y)第二节 主动感知Agent 该看哪里、何时重看2.1 被动看 vs 主动看朴素多模态 Agent 是把当前画面一股脑塞给 VLM。但长任务里画面会变、关键信息可能不在当前帧。主动感知要求 Agent 在 think 阶段显式决策需要看哪块区域、需要重新截取哪个窗口、是否需要放大。2.2 用工具调用表达看把看也建模成 tool。Agent 的 action 空间里除了 click/type还有 zoom(region)、crop(box)、reobserve()。这样感知和决策在同一套 ReAct 循环里统一表达可追溯、可重放。think - [action: zoom(图表标题区)] - perceive(放大图) - think(读出数值) - [action: click(③)] - perceive(新页面) - think(校验) - ...2.3 与 4MRAG 的天然衔接你的 4MRAG 是多模态检索增强生成给定复杂多模态问题先规划要检索哪些模态文本/表格/图像/图表再用对应检索器取回证据最后生成答案。把它包成 Agent 的一个知识工具主动感知就变成了主动决定检索哪个模态、检索哪段——这正是 4MRAG 的规划器在做的事。面试里可以讲我的 Agent 不只是看屏幕它还会主动决定去知识库里看哪张图、哪张表感知从看画面扩展到看多模态证据。感知模式输入决策主体典型失败缓解被动全图整帧无全喂关键细节被淹没区域裁剪SoM 编号带编号图VLM 选编号编号遗漏重分割主动 zoom/crop子区域Agent 规划看错区域校验重看4MRAG 检索多模态证据规划器模态选错按需组合检索器第三节 多模态记忆图像和视频怎么存、怎么取3.1 为什么不能只存文本文本 Agent 的记忆是对话历史 摘要天然可检索。但多模态 Agent 还要记住之前看到的那张图里第三个柱子的数值那段视频第 12 秒出现的车牌。直接存原始像素既不经济也不可检索。3.2 结构化多模态记忆工程上常用三层原始层图像/视频片段原文件按 ID 存对象存储只保留引用表征层用 ViT/CLIP 编码成向量支持以图搜图相似画面召回语义层把画面里的关键实体、数值、文字OCR抽成结构化字段支持关键词/SQL 检索。多模态记忆架构 画面 - OCR(文字) 检测(实体/数值) CLIP向量 - 写入 [语义字段库] [向量库] [原图引用] 取用: 文本问题 - 先语义/向量召回 - 再用原图做精细 grounding# 多模态记忆写入示意classMultiModalMemory:defadd(self,frame_id,image):textocr(image)# 文字层entitiesdetector.detect(image)# 实体/数值层vecclip.encode_image(image)# 向量层self.kv.put(frame_id,{text:text,entities:entities})self.vec_db.add(frame_id,vec)self.store.put(frame_id,image)# 原图引用defrecall(self,query):idsself.vec_db.search(clip.encode_text(query),k5)return[self.kv.get(i)foriinids]第四节 失败恢复检测到错了怎么兜回来4.1 多模态特有的失败模式看错grounding 把③映射到错误元素点了不该点的地方读错OCR 把1,234读成1234或图表坐标轴误读看漏关键信息在没截取到的区域Agent 基于残缺信息决策。4.2 恢复策略策略一状态校验。每个 action 执行后重新 perceive 当前画面用断言检查预期状态是否达成如应该进入结算页。不达成则进入恢复分支。策略二回滚到检查点。长任务里周期性存画面快照 决策点失败时可回退到上一个稳定检查点重规划而不是从零开始。策略三降级到人工/澄清。连续两次失败后抛出 HITL 请求B27或反问用户你指的是哪个元素。失败恢复闭环 act - perceive(校验) - [断言通过] 续跑 - [断言失败] - 回滚检查点 / 反问澄清 / 换检索模态第五节 一个可落地的多模态 Agent 工程骨架把前面四节拼起来就是一个最小可用的多模态 Agent 循环。下面给出骨架伪代码重点看感知、决策、校验三件事如何在同一循环里闭环。classMultiModalAgent:def__init__(self,vlm,tools,memory,four_mrag):self.vlmvlm;self.toolstoolsself.memorymemory;self.mragfour_mragdefstep(self,obs):# 1. 感知: 把画面转成可操作的结构化表示annotated,mark_mapset_of_mark(obs.image,self.detector)# 2. 决策: 把历史当前感知工具描述喂给 VLMdecisionself.vlm.decide(historyself.memory.recent(),imageannotated,toolsself.tools.spec())# 3. 执行: 若是看知识库, 调 4MRAG; 若是点, 映射坐标ifdecision.toolfour_mrag:evidenceself.mrag.query(decision.arg)# 跨模态检索self.memory.add_evidence(evidence)elifdecision.toolclick:coordmark_map[decision.mark]self.tools.click(coord)# 4. 校验: 重新感知, 断言预期状态new_obsself.perceive()ifnotself.assert_state(decision.expect,new_obs):returnself.recover(decision,new_obs)# 回滚/重规划self.memory.append(obs,decision,new_obs)returndecisiondefrecover(self,decision,obs):# 连续失败则升级为人工澄清self.retry1ifself.retry2:returnself.tools.ask_human(你指的是哪个元素?)returnself.step(self.rollback_checkpoint())# 回退到检查点这个骨架的工程要点有三个第一perceive 永远在决策之前保证 Agent 看见的是最新的第二每个 action 后都有 assert_state 校验而不是默认成功第三recover 把失败当成一等公民处理长任务才扛得住。面试里能把这三点讲清楚基本就超出大多数候选人的水平。第六节 多模态 Agent 的七个工程坑坑一坐标漂移。屏幕分辨率、缩放比、滚动偏移都会让 grounding 坐标失效。必须对截图环境做标准化固定分辨率/无滚动窗口或每次感知都基于当前可见帧重算坐标。坑二OCR 幻觉。OCR 对模糊、倾斜、特殊字体极易读错且 VLM 会自信地沿用错误数字。缓解关键数值二次校验如从表格结构里取而不是直接读图、重要字段要求结构化抽取而非自由文本。坑三上下文膨胀。每帧画面编码成几百 token多轮下来上下文被图像 token 撑爆。必须靠多模态记忆第三节把看过的沉淀成结构化字段而不是把原始帧全塞进对话历史。坑四感知与决策不同步。Agent 基于三秒前的画面做了决策但执行时画面已变。务必在执行前重新 perceive或给 action 加前置状态断言。坑五4MRAG 返回证据过多。检索器返回一堆图文证据直接全喂 VLM 同样撑爆上下文。需要重排rerank取 top-k并把证据做成可被引用的结构带出处方便后续溯源。坑六恢复循环死锁。recover 里又失败又 recover无限套娃。必须设最大重试和升级人工的硬出口否则任务永远卡住。坑七不可重放难调试。多模态交互天然难复现画面随时间变。工程上要把每轮的画面快照 决策 断言结果落日志出问题能回放定位而不是靠猜。第七节 与 4MRAG 的项目串联话术面试可直接用把上面四节收进你的项目叙事建议这样串我的 4MRAG 解决复杂多模态问题需要跨模态证据的痛点规划器决定检索哪些模态、用哪些检索器而多模态 Agent 是这个能力的执行外壳——它既能感知屏幕SoM grounding、主动 zoom又能调用 4MRAG 作为知识工具去看知识库里的图与表还能在取证后做失败恢复。二者结合Agent 不是盲看屏幕而是带着检索增强的视野去感知和决策。这段把论文工作和 Agent 工程自然打通是面试里的差异化亮点。面试速答本篇可直接背的 3 句多模态 Agent 比文本 Agent 多一段感知关键不是喂图而是把感知变成带坐标/带置信度的结构化输出如 SoM 编号才能被决策和工具调用消费。主动感知把看建模成 toolzoom/crop/reobserve/4MRAG 检索让感知和决策在同一套 ReAct 循环里统一表达、可追溯可重放。多模态记忆要分三层原图引用 CLIP 向量 语义字段失败恢复靠执行后校验 检查点回滚 必要时 HITL而不是赌一次看对。高频追问清单Set-of-Mark 和直接让 VLM 输出坐标相比除了准确率还有什么工程好处提示可重放、可审计Agent 主动决定看哪块区域这个决策本身可能出错怎么防提示校验回滚4MRAG 作为工具被 Agent 调用返回的证据怎么和当前画面做对齐多模态记忆里 CLIP 向量和 OCR 文字召回时怎么融合排序长视频 Agent 里记忆窗口放不下全部帧怎么做关键帧摘要失败恢复的检查点存在哪状态快照包含哪些字段怎么保证可重放
返回列表