news 2026/1/29 4:41:48

Open-AutoGLM如何扩展?自定义动作模块开发指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Open-AutoGLM如何扩展?自定义动作模块开发指南

Open-AutoGLM如何扩展?自定义动作模块开发指南

Open-AutoGLM – 智谱开源的手机端AI Agent框架。它基于视觉语言模型,结合 ADB(Android Debug Bridge)实现对安卓设备的自动化控制,让用户可以通过自然语言指令驱动手机完成复杂任务。无论是打开应用、搜索内容,还是执行多步操作,系统都能自动解析意图、理解界面并规划执行路径。

AutoGLM-Phone 是一个以多模态方式理解屏幕内容的 AI 手机智能助理框架。用户只需输入如“打开小红书搜美食”这样的自然语言指令,模型即可自动识别当前界面状态、判断下一步操作,并通过 ADB 发送点击、滑动、输入等指令完成全流程。Phone Agent 在此基础上进一步增强了安全机制和远程调试能力,支持敏感操作确认与人工接管,适用于验证码登录等需干预场景。同时,借助 WiFi 连接下的远程 ADB 调试功能,开发者可以脱离物理连接,在任意网络环境下进行测试与部署。

本文将重点介绍如何在 Open-AutoGLM 框架中扩展自定义动作模块,帮助开发者根据业务需求添加专属功能,提升 Agent 的智能化水平和适用范围。

1. 理解 Open-AutoGLM 的核心架构

要实现自定义动作扩展,首先需要了解整个系统的运行流程和关键组件构成。

1.1 核心工作流

当用户输入一条自然语言指令后,系统会经历以下几个阶段:

  • 指令解析:使用大语言模型提取用户的意图和目标对象。
  • 屏幕感知:通过截图获取当前手机界面,交由视觉语言模型分析 UI 元素及其语义。
  • 动作规划:结合历史上下文和当前状态,推理出下一步应执行的操作类型(如点击、输入、滑动)。
  • 动作执行:调用 ADB 接口完成具体操作,并更新环境状态。
  • 结果反馈:再次截图验证执行效果,决定是否继续或结束。

这个闭环过程构成了 Phone Agent 的自主决策能力。

1.2 动作执行层的设计

所有操作最终都由ActionExecutor统一调度。该模块接收来自规划器的动作指令(Action),并通过 ADB 实现真实设备控制。目前内置的动作类型包括:

  • Tap(x, y):在指定坐标点击
  • InputText(text):输入文本
  • Swipe(start_x, start_y, end_x, end_y):滑动操作
  • Back():返回键
  • Home():回到主屏

这些基础动作虽然覆盖了大部分交互场景,但在实际应用中往往需要更高级的行为封装,比如“跳转到某个应用首页”、“检查是否已登录”等。这就引出了我们今天的核心主题——如何开发自定义动作模块

2. 自定义动作模块开发实践

为了增强 Agent 的语义理解和任务抽象能力,我们可以将一系列低级操作组合成一个可复用的“宏动作”,并注册为新的动作类型。

2.1 创建自定义动作类

假设我们需要实现一个名为OpenAppToSpecificPage的动作,用于打开某 App 并导航至特定页面(例如微信的“发现”页)。我们可以按以下步骤进行开发。

首先,在项目目录下创建新文件:

open_autoglm/actions/custom/open_app_to_page.py

然后定义动作类:

from typing import Dict, Any from phone_agent.action import Action, register_action @register_action( name="open_app_to_specific_page", description="启动指定应用并导航到目标页面。参数: package_name (str), page_name (str)", params={ "package_name": {"type": "string", "description": "应用包名,如 com.tencent.mm"}, "page_name": {"type": "string", "description": "目标页面名称,如 '发现', '我'"} } ) class OpenAppToSpecificPage(Action): def __init__(self, package_name: str, page_name: str): self.package_name = package_name self.page_name = page_name def execute(self, adb_connector) -> Dict[str, Any]: # 启动应用 adb_connector.shell(f"am start -n {self.package_name}/.ui.LauncherUI") # 等待界面加载 import time time.sleep(3) # 根据 page_name 执行不同导航逻辑 if self.page_name == "发现": # 假设“发现”位于第二个 tab adb_connector.tap(540, 1800) elif self.page_name == "我": # “我”在第四个 tab adb_connector.tap(810, 1800) else: return {"success": False, "error": f"不支持的页面: {self.page_name}"} return {"success": True, "message": f"已进入 {self.page_name} 页面"}

2.2 注册动作并启用

为了让系统识别这个新动作,必须确保其被正确导入。可以在open_autoglm/actions/__init__.py中添加:

from .custom.open_app_to_page import OpenAppToSpecificPage

或者更推荐的方式是使用插件式加载机制,在配置文件中声明模块路径。

2.3 配置 LLM 动作选择策略

为了让大模型知道何时调用这个新动作,我们需要更新提示词模板中的可用动作列表。

编辑prompts/action_selection_prompt.txt,加入:

- open_app_to_specific_page: 启动指定应用并跳转到特定页面。适合快速进入深层功能。 参数说明: - package_name: 应用包名(必填) - page_name: 目标页面名称,仅支持 '发现' 或 '我'(必填)

这样,当用户说“打开微信去发现页”时,LLM 就有可能生成对应的 action 调用。

3. 高级技巧:带条件判断的复合动作

真正的智能体现在对环境的感知与响应。我们可以让自定义动作具备“观察-判断-执行”的能力。

3.1 示例:带登录检测的自动打卡

设想我们要实现一个“企业微信自动打卡”动作,但前提是用户已经登录。我们可以编写如下逻辑:

@register_action( name="ewechat_auto_checkin", description="在企业微信中完成上班打卡,若未登录则提示人工介入", params={} ) class EWeChatCheckIn(Action): def execute(self, adb_connector) -> Dict[str, Any]: # 启动企业微信 adb_connector.shell("am start -n com.tencent.wework/.launch.WwMainActivity") time.sleep(3) # 截图 + OCR 判断是否在登录页 screenshot_path = adb_connector.screenshot() ocr_result = self._ocr(screenshot_path) if "手机号登录" in ocr_result or "密码" in ocr_result: return { "success": False, "requires_human": True, "message": "检测到未登录状态,请手动完成登录后再试" } # 导航到工作台 adb_connector.tap(540, 1600) time.sleep(2) # 查找“打卡”按钮并点击 if self._find_and_tap_element(adb_connector, "打卡"): time.sleep(2) # 再次确认是否打卡成功 if "今日已打卡" in self._ocr(adb_connector.screenshot()): return {"success": True, "message": "打卡成功"} else: return {"success": False, "message": "打卡失败,请检查网络"} else: return {"success": False, "message": "未找到打卡入口"} def _ocr(self, image_path): # 可集成 EasyOCR 或 PaddleOCR import easyocr reader = easyocr.Reader(['ch_sim']) result = reader.readtext(image_path, detail=0) return " ".join(result) def _find_and_tap_element(self, adb_connector, text): # 简化版 UI 元素查找(实际可用 accessibility service 增强) ocr_text = self._ocr(adb_connector.screenshot()) if text in ocr_text: # 这里可结合 layout 分析定位坐标 adb_connector.tap(540, 900) # 示例坐标 return True return False

这类动作不仅能执行操作,还能主动识别异常状态并请求人工协助,极大提升了系统的鲁棒性。

4. 调试与测试你的自定义动作

开发完成后,必须经过充分测试才能投入生产。

4.1 单元测试示例

建议为每个自定义动作编写独立测试脚本:

# tests/test_open_app_action.py from open_autoglm.actions.custom.open_app_to_page import OpenAppToSpecificPage def test_open_wechat_discover(): action = OpenAppToSpecificPage(package_name="com.tencent.mm", page_name="发现") result = action.execute(adb_connector=mock_connector) # mock connector assert result["success"] is True

4.2 日志监控

execute()方法中加入详细日志输出,便于排查问题:

import logging logger = logging.getLogger(__name__) def execute(self, adb_connector): logger.info(f"正在启动应用: {self.package_name}") ...

4.3 使用远程调试模式验证

利用 Open-AutoGLM 支持的远程 ADB 能力,可在真实设备上实时观察动作执行过程:

python main.py \ --device-id 192.168.1.105:5555 \ --base-url http://your-server-ip:8800/v1 \ "请打开微信并进入发现页面"

观察终端输出及手机行为是否符合预期。

5. 最佳实践与注意事项

5.1 命名规范清晰

动作名称应简洁明确,避免歧义。推荐格式:verb_object_purpose,例如:

  • scroll_to_bottom_of_feed
  • check_if_logged_in
  • submit_form_with_data

5.2 参数设计合理

尽量减少必填参数数量,提供默认值或智能推断机制。例如可通过 NLP 自动补全常见 app 的包名映射:

APP_PACKAGE_MAP = { "微信": "com.tencent.mm", "抖音": "com.ss.android.ugc.aweme", "小红书": "com.xingin.xhs" }

5.3 错误处理完善

任何外部依赖(ADB、OCR、网络)都可能失败,务必做好异常捕获:

try: adb_connector.tap(x, y) except Exception as e: return {"success": False, "error": str(e), "retryable": True}

5.4 安全边界把控

涉及隐私或高风险操作(如支付、删除数据)时,必须设置确认机制:

return { "success": False, "requires_confirmation": True, "dangerous_action": "delete_account", "impact": "此操作将永久删除账户" }

6. 总结

Open-AutoGLM 提供了一个高度可扩展的手机端 AI Agent 架构,其模块化设计使得开发者能够轻松地注入领域知识定制专属能力。通过开发自定义动作模块,我们可以将重复性高、规则性强的任务封装成智能行为单元,显著提升 Agent 的实用性与泛化能力。

从简单的“打开应用”到复杂的“条件判断+多步执行+人工协同”,自定义动作的本质是赋予 AI 更高层次的认知能力。未来,随着更多开发者参与生态建设,我们将看到越来越多垂直场景下的智能自动化解决方案涌现。

掌握这项技能,意味着你不仅是在使用一个工具,更是在构建属于自己的 AI 助理大脑。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/25 17:16:59

PS4存档管理秘籍:Apollo工具深度使用攻略

PS4存档管理秘籍:Apollo工具深度使用攻略 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 还在为PS4游戏存档丢失而烦恼吗?曾经辛辛苦苦打通的游戏进度,因为一次意外就付…

作者头像 李华
网站建设 2026/1/26 18:05:47

MGeo自动化测试框架:CI/CD中集成地址匹配准确率验证

MGeo自动化测试框架:CI/CD中集成地址匹配准确率验证 1. 为什么需要在CI/CD中验证地址匹配准确率? 你在做地图服务、物流调度或者本地生活类系统时,有没有遇到过这样的问题:用户输入“北京市朝阳区建国门外大街1号”,…

作者头像 李华
网站建设 2026/1/28 17:59:46

麦橘超然参数调优建议:让每张图都达到最佳质量

麦橘超然参数调优建议:让每张图都达到最佳质量 1. 引言:为什么参数调优对麦橘超然如此重要? 你有没有遇到过这种情况:输入了一个自认为非常棒的提示词,结果生成的图像却模糊、失真,或者完全偏离预期&…

作者头像 李华
网站建设 2026/1/26 16:28:13

5步搞定NDI视频传输系统:从零开始的专业级配置指南

5步搞定NDI视频传输系统:从零开始的专业级配置指南 【免费下载链接】obs-ndi NewTek NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 还在为复杂的视频传输系统配置而烦恼?NDI技术让专业级视频传输变得简单…

作者头像 李华
网站建设 2026/1/28 21:03:01

企业级应用参考:BSHM集成到图像处理流水线

企业级应用参考:BSHM集成到图像处理流水线 在现代数字内容生产中,图像处理的自动化程度直接决定了内容产出效率。尤其是在电商、广告设计、视频直播等对视觉质量要求极高的行业,人像抠图作为关键前置步骤,其精度与速度直接影响后…

作者头像 李华
网站建设 2026/1/27 3:01:05

Android系统镜像修改神器:解锁ROM定制的一站式解决方案

Android系统镜像修改神器:解锁ROM定制的一站式解决方案 【免费下载链接】unpackandroidrom 爬虫解包 Android ROM 项目地址: https://gitcode.com/gh_mirrors/un/unpackandroidrom 还在为复杂的Android ROM解包过程而烦恼吗?想要轻松修改系统镜像…

作者头像 李华