2026/4/3 16:02:47
网站建设
项目流程
网站开发与维护的内容,梅州免费建站,harry louis做受网站,网页小程序开发Open-AutoGLM如何扩展#xff1f;自定义动作模块开发指南
Open-AutoGLM – 智谱开源的手机端AI Agent框架。它基于视觉语言模型#xff0c;结合 ADB#xff08;Android Debug Bridge#xff09;实现对安卓设备的自动化控制#xff0c;让用户可以通过自然语言指令驱动手机…Open-AutoGLM如何扩展自定义动作模块开发指南Open-AutoGLM – 智谱开源的手机端AI Agent框架。它基于视觉语言模型结合 ADBAndroid 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( nameopen_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(fam 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( nameewechat_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, detail0) 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_namecom.tencent.mm, page_name发现) result action.execute(adb_connectormock_connector) # mock connector assert result[success] is True4.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_feedcheck_if_logged_insubmit_form_with_data5.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星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。