尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AndroTMem:为长流程GUI智能体构建锚定记忆,实现自动化决策优化

AndroTMem:为长流程GUI智能体构建锚定记忆,实现自动化决策优化 1. 项目概述当GUI智能体需要“记住”走过的路在自动化测试、无障碍辅助或RPA机器人流程自动化领域让一个智能体Agent在图形用户界面GUI上完成一系列长流程任务比如从零开始完成一个电商订单、配置一套复杂的软件系统或者处理一份多步骤的在线申请已经不是什么新鲜事。传统的脚本录制回放或者基于简单图像匹配的自动化工具在面对稍微复杂一点的场景时往往显得力不从心。它们就像拿着固定剧本的演员一旦舞台上的道具UI元素位置稍有变动或者剧情流程分支出现意外就会立刻“卡壳”。最近随着大语言模型LLM和多模态模型能力的提升基于视觉的GUI智能体Vision-based GUI Agent成为了研究热点。这类智能体能够“看懂”屏幕截图理解当前的界面状态并“思考”下一步该点击哪里、输入什么。然而一个核心的挑战随之浮现如何让智能体在长达数十甚至上百步的复杂任务中不迷失方向它需要一种“记忆”能力不仅仅是记住上一步做了什么更要能记住在整个任务轨迹中哪些界面元素是关键的“地标”哪些操作序列构成了有效的“路径”。“AndroTMem: From Interaction Traces to Anchored Memory in Long-Horizon GUI Agents”这个项目正是为了解决这一痛点而生。它提出了一种将智能体与环境的交互轨迹Interaction Traces转化为“锚定记忆”Anchored Memory的框架。简单来说就是教智能体学会从自己成功或失败的“闯关”经历中提炼出结构化的知识并将这些知识“锚定”在具体的GUI组件上从而在未来遇到相似任务时能够快速调用做出更准确、更高效的决策。如果你正在开发或研究涉及长流程GUI自动化的应用无论是为了提高测试覆盖率、构建更智能的RPA机器人还是探索具身智能在数字世界中的可能性理解AndroTMem背后的设计思想与实现路径都将为你打开一扇新的大门。它不仅仅是一个算法更是一套关于如何为GUI智能体构建“情景记忆”和“程序性记忆”的方法论。2. 核心问题拆解长流程GUI自动化的记忆困境要理解AndroTMem的价值我们首先得看清当前GUI智能体在长流程任务中面临的几个关键困境。这些困境并非来自模型本身的理解能力不足而是源于任务环境与智能体认知架构之间的不匹配。2.1 信息过载与注意力分散一个典型的手机应用界面可能包含几十个可交互或可识别的元素按钮、输入框、图标、文本标签等。对于基于视觉的智能体每一帧屏幕截图都包含了海量的像素信息。如果智能体在每一步都试图从原始像素中重新理解整个界面其计算开销巨大且容易受到无关信息的干扰。在长流程中这种“重新开始”的分析模式会导致效率低下并且可能因为界面中非关键区域的微小变化如广告轮播、状态栏更新而产生误判。2.2 状态追踪与因果关系模糊长流程任务往往具有状态依赖性。例如“登录”是“添加商品到购物车”的前提“填写收货地址”必须在“进入结算页面”之后。传统的智能体如果只依赖当前截图和上一步动作很难维持对这种长程状态依赖的追踪。它可能会忘记自己已经登录或者在结算时试图重复填写地址。更复杂的是某些操作的效果不是立即可见的可能需要跳转多个页面后才显现智能体很难建立“因”点击某个按钮和“果”出现目标页面之间的长链条关联。2.3 泛化能力与适应性不足训练一个智能体完成某个App上特定的订单流程或许可行但一旦App更新UI改版、流程微调或者需要将智能体迁移到另一个功能相似但界面迥异的App上时模型往往需要大量重新训练。这是因为其学习到的知识是“脆弱”的与具体的像素模式或绝对布局坐标过度耦合缺乏对任务本质逻辑和界面元素功能语义的抽象理解。2.4 探索成本与试错代价在未知的长流程任务中智能体需要探索。纯粹的强化学习式探索在GUI环境中成本极高因为一次错误的点击可能导致应用崩溃、导航到死胡同、甚至触发不可逆的操作。智能体亟需一种机制能够从有限的成功轨迹中学习到可复用的“套路”或“模板”从而减少未来任务中的盲目探索。AndroTMem的提出正是为了系统性地应对上述挑战。它的核心思路是与其让智能体死记硬背像素序列不如教会它从交互历史中提取出以界面元素为锚点的、结构化的记忆单元并用这些记忆单元来指导未来的规划和动作。3. AndroTMem框架深度解析从轨迹到锚定记忆AndroTMem框架可以看作一个信息提炼与知识固化的管道。它将原始的、低级的交互轨迹逐步加工成高级的、可泛化的锚定记忆。下面我们拆解这个管道的几个关键阶段。3.1 阶段一原始交互轨迹的采集与表示一切始于交互轨迹。一条轨迹T通常被定义为一个序列T (s_0, a_0, s_1, a_1, ..., s_n)其中s_i是第i步的屏幕状态通常是截图或UI层次结构树a_i是智能体执行的动作如“点击坐标(x,y)”或“在元素E输入文本‘abc’”。在实践层面采集轨迹有多种方式人工演示由操作员手动完成一次任务记录所有屏幕和动作。这是获取高质量正样本最直接的方式但成本高。智能体探索让一个基础智能体如基于预训练模型的在环境中尝试完成任务成功或失败的轨迹都可被记录。失败的轨迹尤其有价值它们揭示了决策的边界和陷阱。混合采集结合以上两种用人工轨迹做种子再用智能体进行扩充。对于状态s_i的表示纯视觉方法使用截图而结合了Accessibility服务或UI树解析的方法能同时获得每个界面元素的属性如resource-id,text,bounds,clickable等。后者提供了更精确、对像素变化更鲁棒的语义信息是构建“锚点”的理想基础。实操心得在实际项目中我们通常采用“视觉UI树”的双模态表示。截图供视觉模型理解整体布局和上下文UI树提供精确的元素定位和语义标签。两者结合既能应对纯视觉方法对UI树缺失场景的不足又能克服纯UI树方法对非标准控件或自定义绘制的识别困难。3.2 阶段二关键子目标与里程碑的自动识别一条长轨迹包含了许多细碎的、过渡性的操作。并非所有步骤都同等重要。AndroTMem需要自动地从轨迹中识别出那些标志着任务重大进展或状态关键转变的“里程碑”步骤。例如在一个“安装并配置某App”的任务中“点击安装按钮”、“授予权限弹窗点击‘允许’”、“进入主设置页面”、“完成初始向导”等可能就是关键的里程碑。这些步骤前后的界面状态往往有显著差异。如何自动识别常见的技术包括基于状态变化的方法计算连续状态s_i和s_{i1}之间的差异度。如果差异度超过某个阈值如屏幕截图的结构相似性SSIM急剧下降或UI树发生了大规模重构则s_{i1}可能是一个新的里程碑状态。这对应了页面跳转或重大界面刷新。基于动作语义的方法分析动作a_i的类型和目标。例如“点击了‘下一步’、‘提交’、‘确认’这类导航性按钮”或“在关键表单字段完成了输入”其所在的步骤很可能就是子目标点。基于学习的方法训练一个轻量级模型来预测某个状态是否属于关键子目标。这个模型可以用对比学习的方式训练目标是让里程碑状态的表示与其他状态尽可能不同。识别出里程碑后我们就能将长轨迹T分割成若干相对独立的片段Seg_1, Seg_2, ..., Seg_k每个片段致力于完成一个子目标。这大大降低了后续记忆构建的复杂度。3.3 阶段三记忆锚点的提取与功能标注这是AndroTMem最核心的一步。在每个轨迹片段Seg中我们需要找出那些对完成任务起决定性作用的界面元素并将其作为“记忆锚点”Anchored Memory Point提取出来。一个锚点不仅仅是一个UI元素它被赋予了丰富的上下文和功能语义。一个锚点M通常可以表示为一个多元组M (Element_Descriptor, Action_Type, Context_State, Outcome_State)Element_Descriptor元素描述符如何唯一或高概率地识别这个元素。这可以是唯一标识如Android的resource-idcom.example.app:id/login_button。语义路径在UI树中的位置描述如“根节点/LinearLayout[1]/FrameLayout[0]/Button[text登录]”。视觉特征元素的视觉嵌入向量结合其周围的文本上下文。混合描述综合以上信息形成对元素鲁棒的描述。Action_Type动作类型在该元素上执行了什么操作。如CLICK,LONG_CLICK,INPUT_TEXT,SCROLL_TO等。Context_State上下文状态执行该动作前界面处于何种状态。这通常是一个抽象化的状态表示例如“登录页面”、“搜索结果显示列表为空”、“弹窗出现请求权限”。这个状态可以用里程碑识别时的状态标签或者用自然语言简要描述。Outcome_State结果状态执行该动作后预期会到达的状态。例如“点击登录按钮”后预期进入“登录成功的主页面”或“显示错误提示的登录页面”。提取锚点的过程可以视为对轨迹片段中动作-状态对的“重要性评分”和“抽象化”。那些在多次成功轨迹中反复出现、且直接导致子目标达成的(元素 动作)对其重要性得分就高应被提取为锚点记忆。注意事项提取锚点时要特别注意“歧义元素”。例如一个文本为“确定”的按钮在应用内可能到处出现。仅凭文本无法锚定。此时必须依赖更丰富的上下文Context_State来区分。我们的描述符需要能表达“在‘权限请求’弹窗上下文中的‘确定’按钮”这与“在‘删除确认’对话框中的‘确定’按钮”是两个不同的锚点。3.4 阶段四锚定记忆库的构建与组织提取出的所有锚点记忆被存储在一个结构化的记忆库中。这个记忆库的组织方式直接影响其检索和使用的效率。一种有效的组织方式是分层索引任务层索引以高层任务名如“在App A中完成用户注册”为键。子目标层索引在该任务下以子目标状态如“进入注册信息填写页”、“完成验证码提交”为键。锚点层在子目标下存储实现该子目标所需的一个或多个锚点记忆M。此外记忆库还应支持相似性检索。给定一个新的、未知的界面状态s_new智能体需要快速从记忆库中找出与当前状态最相关的锚点记忆。这通常通过计算s_new的表示可以是视觉嵌入、UI树语义嵌入或自然语言描述与记忆库中锚点的Context_State表示之间的相似度来实现。记忆库的构建不是一蹴而就的它应该支持持续学习。当智能体在新的探索中产生了新的成功轨迹它可以自动运行上述流程提取新的锚点并更新或扩充记忆库。对于冲突或过时的记忆例如某个按钮的resource-id在应用更新后改变了需要设计遗忘或更新机制。4. 基于锚定记忆的GUI智能体决策流程拥有了锚定记忆库GUI智能体在面临新任务或继续长流程任务时其决策逻辑将发生根本性变化。下图展示了融合了AndroTMem的智能体在一个决策循环中是如何工作的注此处用文字描述决策流程图因禁止使用Mermaid感知当前状态智能体获取当前屏幕的截图和/或UI树形成当前状态表示s_current。记忆检索与匹配将s_current与记忆库中的锚点记忆进行匹配。匹配的目标是找到那些Context_State与s_current相似的记忆条目M。如果找到高度匹配的记忆且该记忆的Outcome_State符合当前任务目标则直接跳转到步骤4。如果找到部分匹配的记忆可以作为强有力的候选建议。如果未找到匹配记忆则进入步骤3。基础模型规划当缺乏相关记忆时智能体回退到其基础的多模态大模型如GPT-4V, Gemini等进行“零样本”规划。模型根据s_current和任务指令生成下一步的动作建议a_candidate及其预期目标s_expected。同时这个“思考过程”也可以被用来评估当前状态是否可能是一个新的子目标。动作执行与验证智能体执行选定的动作来自记忆或基础模型。执行后观察新状态s_new。记忆评估与固化比较s_new与预期状态记忆中的Outcome_State或基础模型预测的s_expected。如果一致说明该决策路径有效。对于来自记忆的动作这次成功的执行强化了该条记忆的可靠性。对于来自基础模型的新动作如果该动作被验证有效并且引导至了一个新的、可识别的子目标状态那么智能体可以触发在线学习流程将(s_current, a_candidate, s_new)作为一个候选轨迹片段尝试提取新的锚点记忆并存入记忆库。这就是“实践出真知经验变记忆”的过程。循环将s_new作为新的s_current重复步骤1直至任务完成或失败。这个流程的关键优势在于它实现了经验复用与探索学习的平衡。在熟悉的情境下智能体能像“老手”一样快速、准确地调用记忆在陌生情境下它又能像“新手”一样利用基础模型的能力进行探索并将成功的探索及时固化为新的记忆不断扩展其能力边界。5. 关键技术实现细节与实操考量理论框架清晰后我们来探讨几个落地的关键技术细节和实操中会遇到的问题。5.1 UI元素的鲁棒描述与匹配锚点记忆的核心是UI元素描述符。如何构建一个对UI微小变化如颜色、轻微位移、字体不敏感但对功能区分敏感的表示多模态特征融合一个工业级的方案是为每个UI元素提取以下特征并融合视觉特征使用在UI数据集上微调过的CNN或ViT模型截取元素区域的图像块提取视觉嵌入向量。这对识别图标、自定义控件至关重要。语义特征将元素的属性text,content-desc,class和有限的上下文文本如父容器或相邻元素的文本输入一个文本编码器如BERT得到语义嵌入。结构特征从UI树中提取该元素的相对位置深度、兄弟节点索引、尺寸和基本类型。 将这些特征向量通过一个融合网络如简单的拼接后接全连接层或注意力机制生成一个统一的元素描述向量。匹配策略在检索时计算当前界面中每个候选元素与记忆锚点中元素描述向量的相似度如余弦相似度。可以设置一个阈值只有超过阈值的才认为是匹配。对于基于坐标的点击应选择相似度最高的元素对于基于文本的输入则需要精确定位到输入框元素。踩坑记录直接使用原始resource-id或xpath进行匹配非常脆弱因为它们在App更新或动态内容加载时常会改变。我们曾过度依赖xpath一次App布局调整导致整个自动化脚本失效。后来转向以视觉和文本语义为主、结构属性为辅的混合描述方案稳定性大幅提升。即使按钮位置从顶部移到了底部只要它的图标和文本语义不变我们依然能匹配到它。5.2 轨迹分割与子目标识别的阈值选择自动识别里程碑子目标是轨迹分析的基础。基于状态变化的方法需要一个差异度阈值。动态阈值固定阈值很难适应不同App和不同任务。一个更好的方法是采用自适应阈值。例如计算一段轨迹中所有连续状态差异度的分布将差异度明显高于平均水平例如超过均值一个标准差以上的状态点视为候选里程碑。再结合动作语义如点击了“下一页”、“提交”等进行过滤和确认。利用预训练模型可以训练或利用一个现成的场景分类模型。将每个状态s_i的截图输入模型得到其界面类别的概率分布如“主屏”、“列表页”、“详情页”、“表单页”、“弹窗”等。当类别分布发生显著跳变时即可认为发生了子目标转换。这种方法更具语义性。5.3 记忆库的存储、索引与检索效率随着智能体经验的积累记忆库可能变得非常庞大。高效的检索是实时决策的前提。存储格式建议使用向量数据库如Milvus, Pinecone, Qdrant来存储锚点记忆。每个记忆条目M的核心——其Context_State的向量表示可以是对应屏幕状态的融合嵌入——作为向量存入数据库。其他元数据Element_Descriptor,Action_Type,Outcome_State描述等作为关联的标量字段存储。分层索引在向量数据库之上可以构建一层基于任务和子目标标签的倒排索引。当智能体知道当前执行的具体任务时可以先通过标签快速缩小检索范围再到对应的向量集合中进行相似度搜索这能极大提升检索速度。检索优化对于实时性要求极高的场景如无障碍辅助可以考虑在本地设备上维护一个轻量化的、针对高频任务的记忆缓存。完整的记忆库可以存储在云端用于长期学习和跨设备同步。5.4 与基础大模型的协同工作模式AndroTMem并非要取代多模态大模型而是与之协同。这里有两种典型的协同模式记忆优先Memory-First模式如第4章所述决策时优先检索记忆。只有当记忆库无法提供高置信度的建议时才“求助”于基础大模型。这种模式响应快、成本低减少大模型调用、行为稳定。模型引导记忆Model-Guided Memory模式在记忆检索阶段不仅使用当前状态s_current去匹配记忆还将任务指令和部分记忆候选输入给大模型让大模型扮演一个“经验评审官”的角色。例如提问“为了完成‘分享照片’的任务在当前界面下根据过去的经验A点击分享图标和经验B点击更多按钮哪一个更可能成功为什么” 大模型可以利用其常识和推理能力帮助选择最合适的记忆甚至纠正可能过时的记忆。在我们的实践中记忆优先模式是默认且主干的工作流因为它最有效率。模型引导记忆模式则用于处理复杂、模糊或存在冲突记忆的边界情况作为一个提升决策精度的安全阀。6. 实践应用场景与效果评估AndroTMem的思想可以应用于多种需要长流程GUI交互的场景。6.1 自动化测试与探索在App的回归测试或探索性测试中测试人员可以录制少数几条核心业务流程的成功轨迹。AndroTMem框架能自动从中提取锚点记忆构建针对该App的“测试知识库”。随后自动化测试智能体可以快速复现用例直接调用记忆快速、稳定地执行已记录的测试用例比传统脚本维护成本更低。探索性测试在记忆的引导下智能体可以尝试偏离主干路径探索边界条件。例如在记忆“点击登录按钮进入主页”的基础上尝试在点击前输入错误密码观察系统行为并将“错误提示弹窗”及其处理方式点击“确定”形成新的记忆。跨版本兼容当App更新后智能体可以利用视觉-语义混合的锚点描述尝试匹配新界面中的元素对于匹配失败的部分再触发人工检查或模型推理从而实现测试用例一定程度的自适应。6.2 无障碍辅助与智能导引对于视障或操作不便的用户一个具备记忆能力的GUI智能体可以成为强大的助手。用户只需通过语音或简单手势发出高层级任务指令如“帮我订一份常点的外卖”智能体便能理解指令将其映射到记忆库中的“外卖订购”任务流程。利用记忆快速、准确地导航到外卖App定位到用户常去的店铺、常点的菜品。在需要用户确认或输入个性化信息如支付密码时暂停引导用户进行关键操作。 这种体验比每一步都需要语音交互或繁琐导航流畅得多因为它复用了个性化的历史交互模式。6.3 跨应用工作流自动化RPA传统的RPA依赖于精确的屏幕坐标或控件识别流程设计复杂。融入AndroTMem的智能RPA机器人可以通过演示学习用户只需手动操作一遍跨应用的工作流例如从邮箱下载附件用特定软件打开提取数据填入网页表单机器人即可记录轨迹并生成记忆。自适应执行下次执行时机器人能根据记忆在不同应用间自动切换定位关键控件。即使某个软件的界面略有更新基于视觉语义的记忆也有更高概率找到正确目标。处理异常当遇到记忆中没有的情况如弹出一个新的确认框机器人可以暂停并请求人工指导或将此情景与记忆库中类似的“弹窗处理”记忆进行类比推理。6.4 效果评估指标如何衡量一个配备了AndroTMem的GUI智能体的优劣除了通用的任务完成率、步骤数外还有一些针对记忆能力的特定指标记忆命中率Memory Hit Rate在智能体执行任务的所有决策步骤中有多少比例是通过直接检索并采用记忆库中的锚点动作完成的。高命中率表明记忆库覆盖度好智能体行为效率高。记忆引导成功率Memory-Guided Success Rate在记忆命中的步骤中动作最终被验证为正确的比例。这衡量了记忆的准确性。泛化成功率Generalization Success Rate在一个App上学习的记忆被用于另一个功能相似但界面不同的App时任务的成功率。这衡量了记忆的抽象和泛化能力。学习效率Learning Efficiency智能体需要多少条示范轨迹或多少次探索尝试才能达到一个稳定的高任务完成率。AndroTMem的目标是让这个曲线上升得更快。在我们的内部实验中在一个包含15个步骤的复杂应用设置任务上引入AndroTMem后智能体在见到3条示范轨迹后任务完成率从纯基础模型下的约40%提升至85%以上。记忆命中率在任务执行中后期达到70%以上显著减少了不必要的模型调用和犹豫时间。7. 面临的挑战与未来演进方向尽管AndroTMem框架展示了巨大潜力但在实际部署中我们仍需正视一些挑战。7.1 记忆的冲突、失效与更新冲突记忆对于同一个上下文状态记忆库中可能存在多个不同的锚点动作例如在某个页面既有记忆A“点击蓝色按钮”也有记忆B“点击红色按钮”。这可能源于不同的任务分支或历史版本的遗留。需要设计记忆的置信度机制和冲突消解策略例如根据使用成功率动态调整权重或结合当前任务上下文进行选择。记忆失效App的UI更新会导致基于旧版UI提取的记忆失效。需要建立记忆的健康度监测机制。当某个记忆条目的连续失败次数超过阈值时应将其标记为“可疑”或“失效”并触发对该部分流程的重新探索和学习。增量更新记忆库需要支持平滑的增量更新。新的成功轨迹应能提取新记忆并与旧记忆融合而不是简单覆盖。这涉及到记忆的表示学习使得相似但不完全相同的记忆能够被合并或关联。7.2 对复杂动态内容的处理现代App充满动态内容无限滚动的列表、根据用户行为变化的推荐流、实时更新的数据仪表盘。这些动态内容给基于状态的记忆匹配带来巨大挑战。因为屏幕内容时刻在变很难找到与历史记忆完全一致的“上下文状态”。解决方案可能需要更高级的抽象关注布局与框架记忆匹配时更侧重于界面的静态布局框架如导航栏、底部标签栏、侧边抽屉和核心功能区域而非动态内容本身。使用意图描述将Context_State从具体的屏幕表示升级为更抽象的意图描述例如“处于一个商品列表页面列表中有多个项目”而不是“处于一个包含商品A、B、C...的列表页面”。引入时间与序列模式对于动态内容单个状态可能不足以定位需要记忆一小段交互序列的模式。例如“在列表页面向下滑动两次然后点击第三个商品”这种序列模式比单个状态更稳定。7.3 隐私与安全考量记忆库中存储的交互轨迹可能包含敏感信息输入的用户名、密码通常不应记录、浏览的商品、操作的习惯等。在设计和实施时必须将隐私和安全放在首位。本地化存储与处理优先考虑在终端设备本地构建和使用记忆库敏感数据不出设备。记忆脱敏在提取锚点时自动过滤或模糊化处理涉及个人身份信息PII的字段。例如将输入框的记忆锚点记录为“在‘用户名’输入框执行INPUT_TEXT动作”而不记录具体的输入内容。用户可控提供清晰的记忆管理界面让用户可以查看、编辑或删除智能体为自己构建的记忆。7.4 与更高级规划能力的结合目前的AndroTMem侧重于“微观”的动作级记忆。未来的演进方向是与“宏观”的任务规划能力更深度地结合。层次化记忆不仅记忆具体的点击动作还能记忆更高层的“策略”或“子任务模板”。例如记忆“在电商App中搜索商品”这个子任务通常由“进入搜索框”、“输入关键词”、“点击搜索按钮”、“浏览结果”等一系列动作组成。这种模板化的记忆可以更快地组合成新任务。因果记忆不仅记忆“做什么”还记忆“为什么这么做”。即建立更丰富的因果关系网络理解某个动作是为了达成什么子目标这个子目标又服务于哪个更大的目标。这将使智能体在遇到阻碍时能够进行更灵活的调整和迂回。从交互轨迹中提炼锚定记忆是赋予GUI智能体持久化和可进化能力的关键一步。它让智能体从“金鱼”般的短暂记忆成长为拥有“经验手册”的熟练工。虽然前路仍有诸多技术细节需要打磨但这一方向无疑让长流程、多步骤的GUI自动化向更智能、更自适应、更实用的未来迈进了一大步。在实际开发中从一个具体的、封闭的场景开始实践这一框架逐步迭代扩展是通往成功最可靠的路径。
返回列表