字节笔记本

2026年2月22日

Qwen3-VL Mobile Agent:用多模态大模型实现手机自动化控制

本文介绍 Qwen3-VL 的 Agent Function Call 功能,展示如何利用该多模态大模型的视觉理解能力实现移动端设备的自动化控制。通过自然语言指令,Qwen3-VL 能够分析屏幕截图、理解用户意图并生成精确的操作指令。

什么是 Qwen3-VL

Qwen3-VL 是阿里巴巴通义千问团队开源的多模态大语言模型,具备强大的视觉理解能力。该模型不仅能够理解图像内容,还能通过 Function Calling 机制与外部工具交互,实现复杂的自动化任务。

GitHub 仓库:https://github.com/QwenLM/Qwen3-VL

核心能力

  • 视觉感知:分析手机屏幕截图,识别界面元素
  • 自然语言理解:理解用户的文字指令意图
  • Function Calling:生成结构化的操作指令(点击、滑动、输入等)
  • 多轮交互:支持连续的对话和任务执行

环境准备

安装依赖

bash
pip install git+https://github.com/huggingface/transformers
pip install qwen-vl-utils
pip install qwen_agent
pip install openai
pip install icecream

配置 API 密钥

python
import os
os.environ['DASHSCOPE_API_KEY'] = "your_api_key"

申请 API 密钥:https://bailian.console.alibabacloud.com

可视化工具函数

python
import os.path as osp
from matplotlib import pyplot as plt
from PIL import Image, ImageDraw, ImageFont, ImageColor
import numpy as np
from icecream import ic

def draw_point(image: Image.Image, point: list, color=None):
    """在图像上绘制标记点"""
    if isinstance(color, str):
        try:
            color = ImageColor.getrgb(color)
            color = color + (128,)
        except ValueError:
            color = (255, 0, 0, 128)
    else:
        color = (255, 0, 0, 128)

    overlay = Image.new('RGBA', image.size, (255, 255, 255, 0))
    overlay_draw = ImageDraw.Draw(overlay)
    radius = min(image.size) * 0.05
    x, y = point

    overlay_draw.ellipse(
        [(x - radius, y - radius), (x + radius, y + radius)],
        fill=color
    )

    image = image.convert('RGBA')
    combined = Image.alpha_composite(image, overlay)
    return combined.convert('RGB')

def rescale_coordinates(point, width, height):
    """将坐标从 999x999 比例转换为实际像素坐标"""
    point = [round(point[0]/999*width), round(point[1]/999*height)]
    return point

Mobile Agent 实现

基础代码结构

python
from qwen_agent.llm.fncall_prompts.nous_fncall_prompt import (
    NousFnCallPrompt,
    Message,
    ContentItem,
)
from qwen_vl_utils import smart_resize
import json
from PIL import Image
from utils.agent_function_call import MobileUse
from IPython.display import display
import base64
from openai import OpenAI

def encode_image(image_path):
    """将图片转换为 base64 编码"""
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

使用示例:英文应用

以下示例展示如何在 X (Twitter) 应用中搜索 "Musk":

用户指令:"Search for Musk in X"

模型输出

text
Thought: To search for Musk in X, I need to click on the search bar at the top of the screen. This will allow me to type in the search query.
Action: "I tapped on the search bar to begin searching for Musk."
<tool_call>
{"name": "mobile_use", "arguments": {"action": "click", "coordinate": [447, 81]}}
</tool_call>

工作流程

  1. 截图输入:获取当前手机屏幕截图
  2. 意图理解:分析用户自然语言指令
  3. 视觉分析:识别截图中的可交互元素
  4. 动作生成:输出结构化操作指令
  5. 执行反馈:执行动作并返回结果

核心特性

1. 精确的坐标定位

Qwen3-VL 使用 999x999 的归一化坐标系统,可以精确定位屏幕上的任何位置:

python
# 坐标转换示例
coordinate = [447, 81]  # 归一化坐标
actual_x = round(447/999 * screen_width)
actual_y = round(81/999 * screen_height)

2. 多种操作类型

  • click:点击指定坐标
  • swipe:滑动操作
  • type:文本输入
  • back:返回操作
  • home:返回主屏幕

3. 中英文支持

模型同时支持中英文应用界面和指令,可以处理各种本地化场景。

应用场景

1. 自动化测试

  • UI 自动化测试
  • 兼容性测试
  • 性能测试辅助

2. 无障碍辅助

  • 视障用户操作辅助
  • 语音控制手机
  • 智能操作引导

3. 智能助手

  • 自然语言控制设备
  • 复杂任务自动化
  • 跨应用操作协调

最佳实践

1. 截图质量

  • 确保截图清晰
  • 避免遮挡元素
  • 使用合适的分辨率

2. 指令清晰

  • 使用明确的动作描述
  • 提供必要的上下文
  • 分步骤描述复杂任务

3. 错误处理

  • 添加重试机制
  • 验证操作结果
  • 处理异常情况

完整示例代码

python
# 初始化客户端
client = OpenAI(
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

# 准备截图和查询
screenshot_path = "screenshot.png"
query = "Search for Musk in X"

# 编码图片
base64_image = encode_image(screenshot_path)

# 构建消息
messages = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": query},
            {
                "type": "image_url",
                "image_url": {
                    "url": f"data:image/png;base64,{base64_image}"
                }
            }
        ]
    }
]

# 调用模型
response = client.chat.completions.create(
    model="qwen3-vl",
    messages=messages,
    tools=[MobileUse]
)

# 解析响应
result = response.choices[0].message
print(result.content)

总结

Qwen3-VL 的 Mobile Agent 功能为多模态 AI 应用开辟了新的可能性。通过结合视觉理解和 Function Calling,开发者可以构建智能的手机自动化解决方案。该技术在自动化测试、无障碍辅助和智能助手等领域具有广阔的应用前景。

参考资源

分享: