
作用auto_reply 函数的作用如下信息处理功能处理由 GUI Agent 发起的 INFO 操作通过大语言模型自动生成对用户问题的回复模拟用户角色根据当前任务和页面内容提供简洁直接的答案输入处理接收当前页面截图的 URL接收任务描述接收 Agent 的询问内容接收模型提供商和模型名称输出生成生成简洁明确的回复内容避免多余的解释或礼貌用语4.2 协作关系auto_reply 函数与其他组件的关系如下与 gui_agent_loop 的关系auto_reply 被 gui_agent_loop 在特定条件下调用当 reply_mode 设置为 auto_reply 时触发处理 Agent 发出的 INFO 动作与 execute_task 的关系execute_task 函数通过 reply_mode 参数控制是否使用自动回复功能传递配置信息给 gui_agent_loop间接影响 auto_reply 的执行与 ask_llm_anything 的关系auto_reply 依赖 ask_llm_anything 函数来获取大语言模型的回复通过 ask_llm_anything 与模型提供商交互与 MCP 服务器的关系在 MCP 服务器中可以通过设置 reply_mode 为 auto_reply 来启用此功能提供了自动处理 Agent 询问的能力无需人工干预工作流程触发条件Agent 执行 INFO 动作reply_mode 设置为 auto_reply处理过程构建包含任务目标、Agent 问题和当前页面的提示通过 ask_llm_anything 获取模型回复清理回复内容移除思考部分输出结果返回简洁明确的回复内容用于继续 Agent 的执行流程作用意义实现了自动化的 Agent 交互处理避免了在需要用户澄清时的人工干预保持了任务执行的连续性提高了 GUI Agent 的自主执行能力4.3 代码auto_reply 代码如下def auto_reply(current_image_url, task, info_action, model_provider, model_name): Reply with information action. messages_to_ask [ { role: user, content: [ { type: text, text: f# 角色 你将扮演一个正在使用GUI Agent完成任务的用户。 # 任务 阅读下方提供的所有背景信息针对[Agent的澄清问题]生成一个提供关键信息的、简短直接的回答。 # 背景信息 - **任务目标:** {task} - **agent 问的问题:** {json.dumps(info_action, ensure_asciiFalse)} # 输出要求 - 你的回答必须极其简短和明确。 - 你的回答应直接命中问题的核心解决Agent的疑惑。 - 不要进行任何额外的解释、对话或使用礼貌用语。 - 只输出回答本身不要添加任何引号或其他修饰。 以下是当前页面内容: , }, { type: image_url, image_url: { url: current_image_url } }, { type: text, text: 请基于以上信息简洁直接地回答Agent的问题。 } ] } ] response ask_llm_anything( model_providermodel_provider, model_namemodel_name, messagesmessages_to_ask, args{ max_tokens: 1024, temperature: 0.5, top_p: 1.0, frequency_penalty: 0.0, } ) if /think in response: response response.split(/think)[-1].strip() return response0x05 特殊分析我们接下来就系统的一些特殊之处进行分析。5.1 GUI 操作扩展机制插件化架构工具扩展通过添加新工具扩展功能解析器扩展支持不同动作解析器设备扩展支持不同类型设备配置化管理服务配置mcp_server_config.yaml管理服务参数模型配置model_config.yaml管理模型参数运行配置灵活的运行时配置5.1.1 动作定义层扩展action 类型枚举action_tools.py定义_ACTION_TYPE_ENUM包含现有动作类型新增动作在枚举中添加新动作类型如SCROLL、DOUBLE_CLICK等动作验证机制action_assertion验证动作格式和参数完整性参数检查针对不同动作类型验证特定参数5.1.2 前端执行器扩展动作转换映射action_type_map定义前端动作类型映射关系step_api_to_frontend_action处理 API 动作到前端动作的转换动作实现CLICK实现点击操作处理坐标点转换TYPE实现文本输入支持键盘存在性检测SLIDE实现滑动操作处理路径坐标新增动作需要在act_on_device函数中添加新的动作处理逻辑5.1.3 移动端辅助功能扩展设备操作层mobile_action_helper.py提供底层设备操作接口ADB 命令通过 ADB 实现设备控制坐标系统支持归一化坐标到实际坐标的转换坐标处理convert_point_to_realworld_point坐标转换函数屏幕方向检测自动处理不同屏幕方向的坐标映射5.1.4 扩展步骤详解定义新动作添加动作类型在action_tools.py的_ACTION_TYPE_ENUM中添加新动作更新验证逻辑在action_assertion中添加新动作的参数验证实现动作转换更新映射表在pu_frontend_executor.py的action_type_map中添加新动作映射添加转换逻辑在step_api_to_frontend_action中添加新动作的转换处理实现设备操作添加操作实现在act_on_device函数中添加新动作的 ADB 命令实现参数验证确保新动作的参数验证和错误处理解析器支持更新解析器在parser_0920_summary.py中添加新动作的解析支持动作格式定义新动作的输入输出格式5.1.5 实际扩展示例添加 SCROLL 动作定义动作在_ACTION_TYPE_ENUM中添加 “SCROLL”验证逻辑在action_assertion中添加 SCROLL 参数验证转换实现在step_api_to_frontend_action中添加转换逻辑设备操作在act_on_device中实现 SCROLL ADB 命令扩展参数支持方向参数支持 UP/DOWN/LEFT/RIGHT 方向距离参数支持自定义滑动距离时间参数支持自定义滑动时间5.2 CopilotClientRolloutRunnerCopilotClientRolloutRunner 存在于代码中但是没有调用实例所以我们直接反推。5.2.1 功能CopilotClientRolloutRunner 中的 “rollout” 概念确实来源于强化学习领域在强化学习中rollout 指从当前状态开始执行一系列动作直到终止状态的完整轨迹。CopilotClientRolloutRunner 实际上是一个多设备任务并行执行框架主要功能是管理多个设备上的 GUI 代理任务执行 支持同时在多个设备上运行 GUI 代理任务提高执行效率。CopilotClientRolloutRunner 与强化学习有概念上的联系但不是强化学习算法的实现。主要用途任务分发将任务分发到多个设备并行执行结果收集收集所有任务的执行结果执行监控跟踪每个设备的任务执行状态当然GUI 代理任务的执行轨迹可以用于训练或评估智能体因此CopilotClientRolloutRunner 类可能用于强化学习训练数据的收集执行的轨迹数据可用于后续的强化学习算法训练。5.2.2 具体实现使用multiprocessing模块实现并行处理包含四个主要进程logger_runner- 日志记录进程reader_runner- 任务读取和分发进程work_runner- 每个设备对应一个工作进程writer_runner- 结果写入进程任务队列与负载均衡CopilotClientRolloutRunner 为每个设备维护独立的任务队列task_queue