
简介李飞飞团队联合多所高校与微软研究机构发布的Agent AI前沿综述面向AI研究者、算法工程师及具身智能方向学习者系统梳理多模态交互智能体的研究框架。内容涉及Agent AI在游戏NPC行为优化、机器人多模态操作、医疗辅助诊断等场景的应用同时讨论数据隐私、模型偏见、可解释性等关键挑战并展望跨现实训练与通用人工智能AGI路径。资源为PDF格式共1个文件约30.93MB内含综述全文、图表、参考文献及作者对大型基础模型、具身智能、交互式学习等概念的解读。已有2171人学习下载。阅读后可快速建立Agent AI的整体认知掌握将LLM/VLM扩展为物理及虚拟环境中行动代理的方法理解视觉、语言、环境感知与上下文记忆如何融合也能为论文选题、项目落地提供跨学科参考是跟踪多模态智能体前沿的重要资料。1. 为什么李飞飞这篇 Agent AI 综述值得一行行读做多模态应用的工程师大多有过这种挫败感对话 Agent 已经能聊得头头是道一旦让它去操作真实环境——点一个按钮、看一眼屏幕、拿起一个物体——就立刻翻车。李飞飞这篇《Agent AI: Surveying the Horizons of Multimodal Interaction》讲的正是这件事Agent AI 不是多模态大模型 提示词的简单叠加而是把感知、推理、行动放在同一个闭环里重新设计的系统范式。文章最大的价值不是给出某个模型而是给出了一张完整的技术版图从基础模型、行动空间、记忆机制到评测基准覆盖了做 Agent 产品会碰到的所有关键环节。适合正在做多模态交互产品、想做 AI Agent 落地、或者刚入行想找方向的工程师读。这一篇技术笔记我按自己落地多模态 Agent 的经验把这篇 survey 里的框架拆成能直接用的设计和踩坑记录。2. Agent AI 的定义与边界和 LLM 对话式 Agent 有什么实质区别2.1 Agent AI 到底指什么交互闭环 vs 文本对话很多人对 Agent AI 的理解停留在能让 LLM 调用工具这个层面但李飞飞团队在 survey 里的定义要广得多Agent AI 是能感知多模态环境、做出决策、并执行动作去影响环境的交互智能体。关键词是行动和环境。对话式 Agent 的闭环是指令进、文本出Agent AI 的闭环是环境状态进、环境操作出。一个典型例子是让它操作浏览器感知层要读懂屏幕截图里每一个按钮的位置规划层要把订机票拆成搜索、筛选、填表、确认四个子任务执行层要生成的是鼠标点击和键盘输入而不是一句我已经帮你查好机票了。这个区别解释了为什么很多团队用 GPT-4V 做 GUI Agent 会翻车大模型确实能看懂截图但看懂和能操作之间隔着行动空间的定义、状态追踪的设计、以及一个可靠的反馈回路。Survey 里反复强调的交互智能就是这个意思——模型能力是基础但系统设计才是决定成败的部分。2.2 三个本质差异行动空间、记忆结构、反馈回路第一个差异是行动空间。对话 Agent 的动作空间是输出下一段文字粒度由 token 决定Agent AI 的动作空间是结构化的环境操作比如click(x, y)、type(text)、press(key)粒度由环境定义。这带来一个工程问题模型怎么在动作空间里做选择survey 里提出把动作表示成程序化语言或者结构化命令这样既方便模型学习也方便执行器验证。第二个差异是记忆结构。对话 Agent 的记忆基本就是上下文窗口超了就截断或者做摘要。但多模态 Agent 面对的环境状态是持续变化的——上一个动作执行后屏幕变了物品位置变了。Survey 里区分了几种记忆短期工作记忆当前感知到的状态、情节记忆过去几轮任务怎么做、语义记忆长期积累的环境知识。这三种记忆在工程上对应不同的存储方案不能全塞进 LLM context。第三个差异是反馈回路。对话 Agent 的反馈来自用户的下一句话而 Agent AI 的反馈来自环境对动作的响应——执行错误会报异常、等待超时、界面元素变化。Survey 专门讨论了交互式学习interactive learningAgent 如何从执行结果中学习而不是只靠预训练数据。这一点对工程很重要因为它决定了你的 Agent 是每次从零开始还是越用越准。2.3 Agent Foundation Model为什么要为交互专门训练模型Survey 里提出了一个值得注意的方向Agent Foundation ModelAgent 基础模型。现在的多模态大模型是在海量图文数据上训练的擅长理解和生成但不擅长决定下一步操作什么。李飞飞团队主张利用大规模交互数据——网页操作日志、游戏录像、机器人遥操作数据——来训练专门面向 Agent 的基础模型。这篇文章的后半部分大量讨论 WebAgent、游戏 Agent、机器人 Agent 的预训练逻辑和 LLM 一样先在海量行为数据上预训练再在下游任务上微调。这对普通团队有什么启示你不需要从零训练一个 Agent Foundation Model但你要理解你的 Agent 缺的是什么。如果你的任务高度依赖视觉定位那视觉编码器的选择比 LLM 的选择更重要如果你的任务依赖长序列决策那你在微调时要把行为序列数据混进训练集而不是只放指令数据。3. 把 Survey 的技术栈拆成可落地的模块感知、行动、规划与记忆3.1 感知层多模态输入怎么变成可用于规划的状态做 Agent AI 的第一件事不是选模型而是定义环境状态。感知层的任务是把屏幕截图、语音流、传感器数据统一成结构化的状态表示。我的习惯是用一个 JSON 结构描述环境状态包含视觉元素表、当前任务进度、最近动作结果三块。视觉元素表尤其重要——它决定 Agent 看到了什么。以浏览器操作为例视觉感知不是把整张截图塞给模型就完事。你需要先做元素解析把页面里的按钮、输入框、链接提取成带坐标和类型的结构化元素列表。市面上常见的做法是接一套 accessibility tree或者用 OCR 目标检测做兜底。这一步做完模型看到的就不是一张大图而是一份类似这样的状态描述。{ elements: [ {id: btn_submit, type: button, text: 登录, bbox: [120, 340, 200, 380]}, {id: inp_user, type: input, text: , placeholder: 用户名, bbox: [120, 260, 320, 300]}, {id: lnk_reg, type: link, text: 注册新账号, bbox: [120, 400, 240, 420]} ], task_progress: step_2_of_4, last_action: {type: click, target: btn_agree, result: success} }这段 JSON 的逻辑是把高频变化的文本框内容、按钮状态交给结构化提取模块LLM 只做任务推理不需要从原始像素里找按钮。参数上要注意bbox的坐标系必须和执行器一致——如果你的截图是 1440x900但执行层的坐标是按 1280x720 算的点击必然全部偏位。这个坑我踩过不止一次建议在感知层出口统一做一次坐标归一化。3.2 行动空间为什么不要用自然语言让 Agent 操作环境Survey 里把 Agent 的动作分为低层次原语和高层次指令。低层次原语是click、type、swipe这类不可再分动作高层次指令是打开设置里的飞行模式这类需要多步完成的命令。工程上有一个常见误区让模型直接输出自然语言来操作环境然后靠解析器理解。解析 请点击右上角那个蓝色的按钮 这种句子容错率极低模型每次表述稍微变化就可能解析失败。我更推荐的做法是把行动空间定义成一个有限集合用类型化参数约束模型的输出。下面是一个行动空间定义的示意实际项目中可以按环境扩充ACTION_SCHEMA { type: object, properties: { action: { type: string, enum: [click, type, scroll, wait, finish] }, target_id: {type: [string, null]}, text: {type: [string, null]}, direction: {type: [string, null], enum: [up, down]} }, required: [action] }我把finish单独列为一种动作它的含义是我认为任务已经完成。这个设计非常关键没有它模型在任务完成时会继续瞎操作导致整个执行过程失控。参数target_id直接引用感知层输出的元素 ID而不是再用坐标——元素 ID 比坐标稳定页面发生滚动或布局变化时不会失效。text只对type动作生效这样从 schema 层面就排除了模型把文字填到按钮上这类低级错误。3.3 规划与记忆状态追踪器为什么比更长的上下文窗口重要很多做 Agent 的团队有一个思维惯性上下文不够就往上堆 window。Survey 里专门讨论了 episodic memory 和 state tracking我的实践经验是对多模态交互任务一个明确的状态追踪器比无限长的上下文窗口有用得多。状态追踪器要回答三个问题当前在哪个任务阶段这一步的目标是什么上一步的动作产生了什么效果我用一个简单的状态机来管理class TaskStateTracker: def __init__(self, task_plan): self.task_plan task_plan # [打开登录页, 填写凭据, 点击登录, 验证结果] self.current_step 0 self.last_result None def update(self, perception_state, last_action): if self.last_result success: self.current_step 1 elif self.last_result failed: # 不推进状态等待重试或切换策略 pass self.last_result perception_state.last_action[result]这个设计的核心思路是模型每次只需要看当前这一步的信息历史信息存进 JSON 日志而不是塞回 prompt。有几个参数值得注意重试上限我一般设为 2——超过 2 次不成功说明当前策略有问题需要换思路而不是继续硬试每次切换策略后要清空旧的中间 buffer避免模型被自己的失败记录干扰。这套思路和 survey 里讲的 episodic memory 一致让 Agent 记住上次怎么失败的很重要但只保留关键节点不要让每一步的噪音都留在记忆里。3.4 最小闭环设计一个可复用的 Agent 配置样例综合上面三个模块一个最小的 Agent AI 闭环应该是感知模块解析环境 → 状态追踪器更新当前状态 → LLM 规划和决策 → 执行器执行动作 → 环境反馈回到感知模块。我把这套配置写成了 YAML方便在不同项目里复用agent_config: perception: vision_extractor: florence2 # 元素检测和 OCR state_format: structured_json coordinate_normalization: true planner: model: gpt-4o max_plan_steps: 8 retry_limit: 2 memory: episodic: true summary_every_n_steps: 4 semantic_db: chroma action_space: schema: action_schema_v1 executor: playwright几个字段的选择理由vision_extractor我用 Florence2 这类统一模型而不是 OCR 检测两个模型串联因为少一个模块就少一个延迟来源summary_every_n_steps是控制上下文占用的关键参数——每 4 步做一次摘要把旧步骤压缩成两句话实测可以在不损失决策质量的前提下把长任务 token 占用降低 60% 以上。max_plan_steps限制任务拆分的层数防止模型把打开浏览器拆成 20 个子步骤。4. 从 Survey 场景到工程实现三条最可能落地的路径4.1 GUI Agent浏览器和桌面自动化的最快落地方式Survey 里花了大量篇幅讨论 GUI Agent理由是网页交互数据最容易获取也最容易评估。工程上最有价值的一点是GUI Agent 的质量很大程度上取决于视觉理解和动作执行的配合而不是模型本身。我见过很多团队在模型选择上花大价钱却在页面元素解析上草草了事结果模型再强也找不到正确的按钮。做 GUI Agent 的最小可用路径是Playwright 负责页面操作和截图OCR/视觉模型负责元素解析LLM 负责决策。需要注意的是页面截图的分辨率会影响视觉模型的识别效果超过 2K 的截图建议先按元素区域裁剪切块识别再合并。另一个实用参数是元素去重——很多页面同一个按钮有多个 DOM 节点识别结果会出现登录和登 录两个元素我用 Levenshtein 距离做文本归一化阈值设 0.85。4.2 语音与实时对话 Agent流式输入下的交互设计语音多模态 Agent 是另一个热点场景但 survey 里点出了一个关键难点语音对话不是文本对话的配音版它有实时性和打断机制。用户在说话的时候Agent 需要能判断该继续听还是该回应这需要语音活动检测和端点检测配合而不是把整段语音转成文本再交给 LLM。工程上的一个有效组合是流式 ASR 负责增量识别每 300ms 更新一次中间结果一个轻量分类器判断用户是否已经说完只有判定说完才调用 LLM 生成回应。这个方案避免了每帧音频都触发一次 LLM 调用带来的高延迟和高成本。实测参数端点检测的静音阈值我设为 600ms低于 400ms 容易在句间断点误判高于 800ms 会让对话有明显迟滞感。Survey 里提到的多模态融合在对话中持续发生就是这个意思——语音、表情、环境声音要在时间轴上对齐而不是各走各的。4.3 具身智能 Agent从 Survey 到仿真环境的现实差距具身智能是 survey 里最前沿也最不确定的方向。对大多数工程团队来说直接做真机是不现实的但仿真环境的坑并不少——Sim2Real 的差距、动力学参数的调校、渲染速度对训练的影响每一个都能消耗几周时间。我建议想试这个方向的团队先从已有的仿真平台开始不要自研环境并且把任务限定在桌面操作这类动作空间相对小的场景。真机和仿真最大的区别其实是传感器噪声。仿真里的视觉状态是精确的真机的摄像头有模糊、反光、遮挡。Survey 提到的 domain randomization域随机化就是解决这个问题的在渲染时随机光照、纹理、相机角度让 Agent 学到鲁棒的表征而不是记住仿真环境的特定样式。4.4 先想清楚怎么评估再动手做产品这一条可能是整个 survey 里对工程最有用的部分。李飞飞团队反复强调Agent AI 的评估不能只看最终任务成功率还要看分解步骤的正确率、交互效率、决策可解释性。工程上有三个指标我每次必测任务成功率、平均执行步数、重试率。这三个指标合起来能告诉你 Agent 是真的会做还是靠重试凑出来的成功。平均执行步数和最优步数的比值更有洞察力——如果 Agent 完成任务需要的最短步数是 10 步而实际平均 25 步说明它的规划能力有问题每一步都对但路径绕远了。重试率则暴露执行层的稳定性问题如果某个动作反复失败可能是感知层和目标检测不匹配不一定是模型决策问题。5. 避坑指南从 Survey 到上线多模态 Agent 的 5 个常见坑5.1 视觉感知失败导致行动中断现象Agent 执行到一半突然停住日志显示未找到目标元素但人眼看着元素明明就在屏幕上。原因页面元素在滚动或弹窗出现后坐标系统发生了偏移。感知层输出的元素坐标和当前实际的 DOM 坐标不一致执行器按旧坐标去找目标自然找不到。解决每次动作执行前重新拉取一次感知结果不缓存上一次的元素表。另外给执行器加一层按文本模糊匹配兜底的逻辑——坐标找不到时在 DOM 里搜元素文本找到后重新计算坐标再操作。5.2 长期交互任务的上下文爆炸现象任务进行到第 10 步之后模型响应速度明显变慢同时 token 消耗激增偶发出答偏差。原因每一步的截图、元素表、执行结果都拼进了 prompt上下文窗口被填满注意力被旧信息稀释。解决给记忆模块加上摘要机制。每执行 4 步把旧的步骤序列压缩成一句已完成 X当前状态 Y注意 Z只保留最近两步的完整细节。实测这个策略能把长任务的 token 占用降到原来的三分之一而对决策质量的影响在可接受范围内。5.3 训练 Multimodal Agent 时 Reward 不收敛现象强化学习训练几千步后 reward 曲线震荡严重有时看起来学到策略了有时又完全退化。原因多模态交互任务的动作空间大且 reward 稀疏模型很难凭探索找到正确动作序列。同时视觉表征和策略网络是联合训练的视觉特征的变化会影响策略的稳定性。解决先做行为克隆Imitation Learning暖启动用人工演示数据让模型学会基本策略再切换强化学习。同时把动作空间裁剪到 Top-K只保留与当前任务阶段相关的动作缩小搜索空间。reward shape 上给中间步骤提供小的正向奖励比如成功点击一个有效元素 0.1而不是只有最终成功 1。5.4 数据偏置让 Agent 学到颜色捷径现象Agent 在训练环境里成功率 95%换到测试环境骤降到 40%。检查模型内部特征发现它依赖的是按钮颜色判断可点击性而不是语义和位置。原因训练数据里可点击元素恰好总是蓝色模型学到了颜色和可点击性的虚假相关。这个现象在模拟生成的训练数据里尤其严重。解决做数据增强时随机化视觉样式——按钮颜色、背景、字体、边框圆角都做扰动迫使模型学习语义特征。在评估集里单独构造一个风格偏移测试集颜色分布和训练集完全不同衡量模型的真实泛化能力。5.5 评测只看最终成功率看不出失败在哪一步现象Agent 的最终任务成功率是 70%但每次失败的原因都不一样——有时是找不到元素、有时是规划绕路、有时是执行超时团队无从下手优化。原因单一指标掩盖了失败环节的信息。最终成功率只能告诉你没做完不能告诉你为什么没做完。解决拆解指标分别统计感知失败率、规划低效率、执行失败率。我给每个动作打标签记录它的类型、结果、延迟、重试次数汇总到日志平台做可视化。这样每次版本迭代后能立刻看清楚优化是生效在感知层、规划层还是执行层而不是对着一个最终成功率瞎猜。6. 进阶验证从零到一搭一个多模态 Agent 练手项目并把测试做成自动化6.1 最小实验台截图 LLM 规划 Playwright 执行想验证上面这些设计是否适合自己的场景最快的方式是搭一个最小实验台环境操作用 Playwright视觉感知用截图 OCR决策用 LLM API记忆用一个简单的 JSON 文件。这套组合一天就能跑通适合做让 Agent 自己去网页上完成一个多步任务这类新手练手项目。我搭建的时候分了三步第一步写一个函数把网页截图转成结构化元素列表第二步写一个执行器把模型输出的动作 schema 映射到 Playwright 的点击和输入第三步写一个调度循环把感知、决策、执行、状态更新串起来。一开始不要追求支持全场景固定一两个任务跑通闭环比搭一个大而全的框架有意义得多。def agent_step(state, tracker): elements extract_elements() # 感知截图 - 结构化元素 tracker.update(state) # 状态追踪器更新进度 action planner.decide(elements, tracker) # 决策模型输出动作 result executor.execute(action) # 执行 return {action: action, result: result}这套代码的妙处在于每一步都有明确的输入输出出问题时看日志就能定位。execute返回的result要带上耗时和异常信息——耗时超过阈值说明可能是页面卡顿或选择器失效异常信息则直接对应到 5.1 那一类问题。追踪器每天迭代时优先看哪一步的失败率最高而不是看整条任务的成功率。6.2 用一张自测清单判断 Agent 是否在进步练手项目不能只靠感觉判断有没有进步我给自己定了一张每周跑一遍的测试清单固定三个任务场景记录下面这张表的数据指标说明参考基线任务成功率完整完成任务的百分比目标 80% 以上平均执行步数完成任务的平均操作次数越接近最优步数越好重试率单步动作失败重试的占比低于 20% 才算健康感知错误率元素识别错误的次数占比低于 5%平均单步决策耗时从感知到动作输出的延迟低于 3 秒这张表的价值在于每一次模型更新、提示词调整、感知模块升级后你能立刻对比数据看到变化。我最后的习惯是每改一个东西只更新一个变量跑完清单对比前一次记录。如果一次改了两处出了问题根本不知道是哪一处导致的。血泪经验多模态 Agent 是一个系统不是单个模型任何改动都要用指标验证不要凭感觉判断好还是不好。这个方向的落地路径基本就是本文写的这条线先理解 Agent AI 和对话 Agent 的本质差异再按感知、规划、记忆、行动四模块拆解系统最后用一套固定的评估清单持续迭代。希望帮到你。本文还有配套的精品资源点击获取