AutoGLM 中文文档 下载 App

自定义 Action Handler 扩展 AutoGLM 设备操作

框架内置的 10 种操作

见 10 种原子操作。如果这 10 种覆盖不了你的业务场景(比如需要"长按同时拖动"或"多点触控"),可以在 Action Handler 层扩展。

代码位置

phone_agent/actions/handler.py — 所有设备动作的执行器。框架解析模型输出的动作 JSON 后,按 action 字段路由到对应的 handler。

如何添加新操作

第一步:在 handler.py 里添加执行函数

# phone_agent/actions/handler.py

def handle_long_press_drag(device, from_point, to_point, duration_ms=500):
    """自定义操作:长按 from_point 然后拖到 to_point"""
    # 这里写具体实现,调用 adb shell input swipe 或其他命令
    # ...
    return True

第二步:注册到动作路由表

在同一个文件里找到动作路由字典,添加新的 action 名称:

ACTION_HANDLERS = {
    "Launch": handle_launch,
    "Tap": handle_tap,
    "Type": handle_type,
    "Long Press": handle_long_press,
    # ... 其他内置操作
    "Long Press Drag": handle_long_press_drag,  # ← 你的新操作
}

第三步:在 System Prompt 里告诉模型新操作存在

修改 phone_agent/config/prompts_zh.py(或 prompts_en.py),在"可用操作列表"部分加入:

# 在系统提示词里追加
你还可以使用以下扩展操作:
- Long Press Drag: 在 from_point 长按 duration_ms 毫秒,然后拖到 to_point(用于拖拽排序、移动元素等场景)

模型怎么"知道"用新操作

模型只能做两件事:在 System Prompt 里学到的操作 + 从历史对话里观察到的可用操作。你加了 handler 但没在 prompt 里告诉模型,它永远不会输出这个动作。

推荐做法:在 prompt 里同时给出新操作的触发场景示例,比如:

当你需要拖拽一个卡片到另一个位置时,请使用 "Long Press Drag" 操作。
示例 JSON:{"action": "Long Press Drag", "from_point": [540, 800], "to_point": [540, 300]}

注意事项

新操作必须返回同步布尔值:True 表示执行成功,False 表示失败。失败后 Agent 会尝试规划下一个动作(可能是重试、可能是换路线)。

如果新操作需要调用底层 ADB 命令,直接用 Python 的 subprocess.run 执行即可,框架没有限制。

相关阅读