您所描述的场景,是昇腾Model-Agent模型适配大赛第二季中,一个典型的“安卓手机应用直达”任务实现。其核心流程是:用户通过自然语言发出指令,AI Agent理解后,自动操作手机App,直达目标页面(如主页),并利用虚拟身份在App内执行搜索等操作,且搜索范围受控于预设的网站或数据源。
以下是实现此功能的技术方案与关键步骤:
一、 系统架构与数据流
该方案采用端云协同的AI Agent架构,确保指令理解、任务规划和设备控制的高效协同。
| 组件层级 | 核心模块 | 功能说明 | 技术/工具参考 |
|---|---|---|---|
| 云端服务层 | 大模型与规划Agent | 1. 解析用户自然语言指令(如“打开小红书并搜索宠物图片”)。 2. 将指令分解为可执行的设备操作序列(启动App、点击、输入等)。 3. 从虚拟身份库中分配或调用合适的虚拟账号。 | 昇腾NPU加速的大模型(如Qwen、Llama)、FastAPI框架 |
| 端侧执行层 | 安卓应用与本地Agent | 1. 接收云端下发的结构化操作指令。 2. 通过安卓无障碍服务或UI Automator等自动化框架,精确操控目标App。 3. 执行“直达主页”后的后续操作(如输入搜索词、点击搜索按钮)。 | Kotlin/Java、Android无障碍服务、UI Automator |
| 资源与服务层 | 虚拟身份管理与搜索服务 | 1.虚拟身份库:管理用于登录各App的虚拟账号池。 2.受控搜索服务:提供或限定搜索内容的来源,例如将搜索请求定向到指定的搜索引擎API(如360搜索),确保结果在“提供的范围”内。 | 数据库、加密存储、360搜索API |
二、 核心实现步骤#### 1. 任务规划与指令生成(云端)
云端Agent利用大模型将用户指令转化为设备操作脚本。
# 示例:云端Agent的任务规划与指令生成(Python + FastAPI) from fastapi import FastAPI from pydantic import BaseModel import requests app = FastAPI() class UserRequest(BaseModel): command: str # 例如:“打开抖音,搜索关于华为Mate60的评测视频” @app.post("/plan") async def plan_task(request: UserRequest): """接收用户指令,生成设备可执行的操作序列""" # 步骤1:调用大模型进行任务分解与规划 llm_prompt = f""" 用户指令:{request.command} 请将该指令分解为操作安卓手机的具体步骤。步骤格式为JSON数组,每个元素包含: “action”:操作类型,如 “launch_app”, “click”, “input_text”, “scroll” “target”: 操作目标描述或定位符,如 “抖音图标”, “搜索框”, “主页‘推荐’标签” - “value”: 操作值,如用于输入的文本“华为Mate60评测” """ # 假设调用昇腾NPU上的大模型服务 planned_actions = call_ascend_llm_service(llm_prompt) # 步骤2:从虚拟身份库获取本次任务所需的虚拟账号(例如,用于登录的账号) virtual_account = get_virtual_account_from_pool(app_name="抖音") # 步骤3:将虚拟账号信息与操作序列整合,生成最终执行指令 execution_script = { "task_id": "unique_task_id", "virtual_account": virtual_account, # 包含用户名、密码等 "actions": planned_actions, "search_constraint": { # 指定搜索范围约束 "engine": "360_search_api", # 限定使用360搜索API "allowed_domains": ["*.zhihu.com", "*.bilibili.com"] # 示例:限定结果来源 } } return execution_script2. 端侧指令接收与自动化执行(安卓端)
安卓App内的本地Agent接收云端指令,并驱动手机完成操作。
// 示例:安卓端Agent执行指令的核心逻辑 (Kotlin) class DeviceAutomationAgent { // 1. 接收云端下发的执行指令 fun executeRemoteScript(executionScript: JsonObject) { val virtualAccount = executionScript["virtual_account"].asJsonObject val actions = executionScript["actions"].asJsonArray val searchConstraint = executionScript["search_constraint"].asJsonObject // 2. 遍历并执行每个动作 for (action in actions) { when (action["action"].asString) { "launch_app" -> { val packageName = resolveAppPackage(action["target"].asString) launchApp(packageName) // 启动目标App,直达其主页 } "input_text" -> { val targetWidget = findView(action["target"].asString) var inputText = action["value"].asString // 关键:如果动作是输入搜索词,则将其发送给受控搜索服务获取结果 if (isSearchAction(action)) { inputText = fetchConstrainedSearchResult( inputText, searchConstraint ) } targetWidget.setText(inputText) // 在搜索框输入处理后的文本 } "click" -> { findView(action["target"].asString).performClick() } // ... 处理其他操作类型 } } } // 3. 关键函数:调用受控搜索服务,确保结果在指定范围内 private fun fetchConstrainedSearchResult( query: String, constraint: JsonObject ): String { // 根据约束条件,调用相应的搜索API。例如,使用360搜索API并过滤域名 val apiUrl = "https://api.360.cn/search/v1" val params = mapOf( "q" to query, "domain_filter" to constraint["allowed_domains"].asString // 传递域名过滤条件 ) // 发送网络请求,获取格式化后的搜索结果(如第一条结果的标题或摘要) val searchResult = networkClient.post(apiUrl, params) return formatResultForInput(searchResult) // 将搜索结果转换为可在App内输入的文本 } // 通过无障碍服务或UI Automator查找控件 private fun findView(description: String): AccessibilityNodeInfo { //实现基于描述文字、ID、XPath等定位控件的逻辑 } }3. 模型适配与端侧推理集成为确保AI Agent的决策能力能运行在手机端,需对云端大模型进行轻量化适配,或使用小模型在端侧进行简单决策。
# 关键步骤:使用昇腾工具链进行模型转换与部署 # 1. 模型选择与轻量化:选择适合端侧的小模型(如TinyLLaMA)。 # 2. 使用ATC工具将模型转换为昇腾NPU(如Ascend 310P)支持的格式 。 #命令示例: atc --model=./tinyllama.onnx \ --framework=5 \ --output=./tinyllama_ascend \ --soc_version=Ascend310P3 \ --input_format=ND \ --input_shape="input:1,512" \ --log=info # 3. 在安卓端集成MindSpore Lite或NNRT推理引擎,加载转换后的模型 。 # 4. 将部分实时性要求高、简单的意图识别任务(如“这是不是搜索指令”)下放到端侧执行,减少云端交互延迟。三、 技术要点总结
- “直达主页”:通过
launch_app动作调用系统API启动应用,应用默认会打开主页面。 - “虚拟用户”:由云端的虚拟身份管理模块动态提供,在执行登录步骤时,
input_text动作中的value字段会被替换为虚拟账号信息。 - “搜索范围受控”:在
fetchConstrainedSearchResult函数中实现。AI Agent不直接使用App内置搜索,而是将搜索关键词发送到指定的后端搜索服务(如360搜索API)。该服务根据预设规则(如域名白名单)进行过滤和返回,再将处理后的结果回填到App的搜索框中,从而间接控制了搜索的内容和来源 。 - 昇腾NPU价值:在云端用于加速大模型推理,实现快速的任务规划;在端侧(高端手机或开发板)可集成昇腾NNRT,加速端侧轻量模型的运行,提升整体Agent响应速度 。
此方案完整实现了从自然语言指令到安卓App自动化操作,并嵌入虚拟身份与受控搜索的闭环,是AI Agent在移动端落地的典型技术路径。
参考来源
- 14.4 万奖金!昇腾 Model Agent 模型适配大赛正式起航(第二季)
- 昇腾Model Agent大赛技术解析
- 昇腾Model-Agent适配安卓API图文生成
- 昇腾Model Agent弹窗动图实现
- 昇腾模型移动端适配实战