Files
akmon/doc_news/android大模型语音指令.md
2026-01-20 08:04:15 +08:00

8.4 KiB
Raw Permalink Blame History

uni-app-x Android 大模型语音指令系统设计方案

1. 系统概述

本方案旨在利用 uni-app-x (UTS) 的原生能力结合最新的大语言模型LLM技术构建一个能够理解自然语言并控制 App 行为的语音指令系统。

与传统关键词匹配不同,基于 LLM 的系统可以理解复杂的意图、参数提取以及上下文关联。

2. 技术架构

系统数据流向如下: 用户语音 -> [录音/VAD] -> [ASR 语音转文字] -> [LLM 大模型意图识别] -> [Function Calling] -> [App 业务逻辑执行] -> [TTS 语音反馈]

核心组件选型

组件 推荐方案 备选方案 说明
开发框架 uni-app-x (UTS) - 利用 UTS 直接调用 Android 原生 API零损耗。
语音识别 (ASR) Sherpa-onnx (离线/流式) Android 原生 / OpenAI Whisper Sherpa-onnx (新一代 Kaldi) 端侧离线识别率极高,支持中英混合,远超传统原生 API。
大模型 (LLM) 云端 API (GPT-4o / DeepSeek / Qwen) 端侧模型 (Gemini Nano / Llama 3) 云端模型推理能力强,支持 Function Calling端侧模型隐私好但集成复杂度高。
意图映射 LLM Function Calling (工具调用) Prompt Engineering + JSON 提取 Function Calling 是目前最稳定的指令结构化输出方式。
语音合成 (TTS) Sherpa-onnx (离线 VITS) Edge TTS / Azure TTS Sherpa-onnx 支持 VITS 模型端侧离线生成真人级语音Edge TTS 效果极佳但需联网。

注:为什么推荐 Sherpa-onnx Sherpa-onnx 是基于 Next-gen Kaldi 的开源语音框架,专为端侧设计。

  • 中文识别能力极强:支持阿里达摩院的 Paraformer(非流式准确率天花板)和 Zipformer(流式低延迟)。在 WenetSpeech 等万小时级数据集上训练的模型,中文识别率可媲美商业云 API且支持中英混合说。
  • 端侧高性能:支持流式识别(说话同时出文字),响应速度快。
  • 语音合成:集成了 VITS/Matcha-TTS 等高表现力的语音合成模型,告别机械音。
  • 多平台支持Android (AAR)、iOS、Web (WASM)、Linux 等。WASM vs AAR 区别
    • WASM (WebAssembly):用于浏览器/WebView跨平台Web、移动Web无需编译易集成到 uni-app-x 的 Web 版本或 H5 页面。但性能较低受浏览器JS限制模型大小受限适合轻量场景。
    • AAR (Android Archive)原生Android库性能最高适合 uni-app-x Android 端,零损耗调用。但需编译集成,模型可更大更复杂。
    • 推荐Android 端用 AAR如果需跨Web/小程序,用 WASM。
  • 集成便利:在 Android 上通过 UTS (JNI/AAR) 集成后,可以实现完全离线、低延迟且效果接近云端大厂的语音交互体验。

3. 详细设计与实现

3.1 语音采集与识别 (基于 Sherpa-onnx)

在 uni-app-x 中,通过 UTS 集成 Sherpa-onnx 的 Android AAR 库。

实现思路:

  1. 下载 Sherpa-onnx 的 Android AAR 及预训练模型(推荐 zipformer-bilingual 中英双语流式模型)。
  2. 在 UTS 中引入 AAR调用 SherpaOnnx 相关 API。
  3. 通过 AudioRecord 读取麦克风音频流,实时喂给识别器。
// UTS 伪代码示例 (集成 Sherpa-onnx)
// 需先在 config.json 中配置原生依赖或引入 jar/aar
import { OnlineRecognizer, OnlineRecognizerConfig } from 'com.k2fsa.sherpa.onnx';

// 1. 配置模型路径 (需将模型文件放入 assets 并拷贝到私有目录)
let config = new OnlineRecognizerConfig();
config.modelConfig.tokens = assetPath + "/tokens.txt";
config.modelConfig.transducer.encoder = assetPath + "/encoder.onnx";
config.modelConfig.transducer.decoder = assetPath + "/decoder.onnx";
config.modelConfig.transducer.joiner = assetPath + "/joiner.onnx";

// 2. 初始化识别器
let recognizer = new OnlineRecognizer(config);

// 3. 开启录音 (伪代码)
// AudioRecord 读取 byte[] buffer
// recognizer.acceptWaveform(sampleRate, buffer);
// let text = recognizer.getResult().text;

3.2 大模型意图识别 (核心)

这是系统的“大脑”。我们需要将用户的自然语言转换为 App 可执行的函数。

关键技术Function Calling (工具调用) 最新的大模型(如 GPT-4o, Qwen-Turbo, DeepSeek-V3都支持 Function Calling。你需要预定义 App 支持的功能列表。

Prompt/Schema 设计示例: 假设 App 是一个电商应用,支持“搜索商品”和“查看订单”。

// 发送给 LLM 的 tools 定义
[
  {
    "type": "function",
    "function": {
      "name": "search_product",
      "description": "搜索商品",
      "parameters": {
        "type": "object",
        "properties": {
          "keyword": { "type": "string", "description": "商品关键词" },
          "sort": { "type": "string", "enum": ["price_asc", "sales_desc"], "description": "排序方式" }
        },
        "required": ["keyword"]
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "navigate_to_page",
      "description": "跳转到指定页面",
      "parameters": {
        "type": "object",
        "properties": {
          "page_name": { "type": "string", "enum": ["cart", "profile", "orders"] }
        },
        "required": ["page_name"]
      }
    }
  }
]

交互流程:

  1. 用户说:“帮我找一下红色的连衣裙,按销量排序。”
  2. ASR 识别文本:“帮我找一下红色的连衣裙,按销量排序。”
  3. 请求 LLM API带上上述 tools 定义和用户文本。
  4. LLM 返回结构化数据(而不是普通文本):
    {
      "tool_calls": [
        {
          "function": {
            "name": "search_product",
            "arguments": "{\"keyword\":\"红色连衣裙\", \"sort\":\"sales_desc\"}"
          }
        }
      ]
    }
    
  5. App 解析 JSON调用内部函数 doSearch("红色连衣裙", "sales_desc")

3.3 业务执行与反馈

  1. 执行:根据 LLM 解析出的函数名和参数,在 uni-app-x 中执行路由跳转或数据查询。
  2. 反馈
    • 视觉反馈:弹窗提示“正在为您搜索...”。
    • 语音反馈:将执行结果(如“已为您找到 5 款红色连衣裙”)通过 Android TextToSpeech 朗读出来。

4. 进阶优化策略

4.1 降低延迟 (Latency)

  • 流式传输 (Streaming):如果 LLM 用于生成回复内容(不仅仅是指令),务必使用 Stream 模式,通过 SSE (Server-Sent Events) 实时接收并播放语音。
  • 预测性执行:对于高频指令,可以在本地进行简单的正则匹配作为一级拦截,命中则不走 LLM直接执行。

4.2 上下文管理

  • 维护一个 messages 数组,存储最近 5-10 轮对话。
  • 这样用户可以说“刚才那个太贵了看个便宜点的”LLM 能结合上一轮“搜索连衣裙”的上下文,生成新的搜索指令(价格排序)。

4.3 隐私与安全

  • 敏感操作二次确认涉及支付、删除等操作LLM 解析出指令后App 应弹出确认框,不能直接执行。
  • 数据脱敏:上传给 LLM 的数据中尽量去除用户隐私信息。

5. 推荐接入的大模型服务

  1. OpenAI (GPT-4o): 综合能力最强Function Calling 最精准,但国内访问需代理。
  2. 通义千问 (Qwen-Turbo/Max): 国内模型中 Function Calling 支持较好,价格便宜,速度快。
  3. DeepSeek (V3): 性价比极高,编码和逻辑能力强,适合处理复杂指令逻辑。
  4. 智谱 AI (GLM-4): 同样支持工具调用,国内生态整合较好。

6. 总结

在 uni-app-x 中实现大模型语音指令,核心在于利用 UTS 打通 Android 原生语音能力,并利用 LLM 的 Function Calling 能力实现自然语言到代码逻辑的映射。这种架构既保留了原生 App 的性能,又具备了生成式 AI 的灵活性。