On-Device Call Answering Assistant|端侧智能通话代接系统

端侧智能通话代接系统On-Device Call Answering Assistant

端侧On-device全离线Fully offlineLLMASR

通话代接所需要用到的 ASR、NLU 和 TTS 均在手机本地运行,无需联网。实测设备为 OPPO K13x(天玑 6300,6 GB RAM,Android 16,首发售价 799 元)。

The ASR, NLU and TTS used for call answering all run locally on the phone, without a network connection. The test device is an OPPO K13x (Dimensity 6300, 6 GB RAM, Android 16, launch price RMB 799).

亮点Highlights

  1. 在业务场景中可靠地使用 0.8B LLM
    微调 0.8B 模型作为“观察者”:模型只负责识别来电场景、提取字段和本轮状态变化;回复来自人工审定的模板,挂断和转接由规则与状态机决定。针对这一提取任务微调后,0.8B 模型在同一评测集上,JSON 可解析率与同族 397B 基线持平,其余所列指标更高。

  2. 在真正的低端机型上开发和测试
    内存驻留、线程调度、热稳定性和上下文预算均在 OPPO K13x 上测试和调整。

  3. 通过前缀复用、增量输出和语法约束降低时延
    提前算:将 system prompt 作为静态前缀,复用其快照,在来电者说话时提前完成预填;
    少算:LLM 只输出本轮变化的 schema 字段(稀疏增量),解码长度大幅缩短;
    不白算:通过 GBNF 语法约束,解码时限制输出符合指定语法。
    实测:首 token p50 2948 → 447 ms(−85%),单轮 p50 4842 → 2423 ms(−50%)

  4. 完整的产品设计与 APP 交付
    应用包含授权引导和自动代接功能。每通代接电话保留摘要、整通录音和逐句转写;代接、拦截和转接事件进入系统消息列表,便于机主回看。机主可以预先设置生效时段、接管时机、白名单和黑名单。

  1. Using a 0.8B LLM reliably in a specific application
    The 0.8B model is fine-tuned to act as an “observer”: it only identifies the call scenario, extracts fields and tracks changes in the current turn. Replies come from human-reviewed templates, while rules and a state machine determine when to hang up or transfer the call. After fine-tuning for this extraction task, the 0.8B model matches the 397B baseline from the same model family on JSON parseability and scores higher on the other listed metrics, using the same evaluation set.

  2. Developed and tested on an entry-level phone
    Memory residency, thread scheduling, thermal stability and context budgets were tested and adjusted on the OPPO K13x.

  3. Reducing latency through prefix reuse, incremental output and grammar constraints
    Compute earlier: treat the system prompt as a static prefix, reuse its snapshot and complete prefill while the caller is speaking;
    Compute less: the LLM outputs only the schema fields that changed in the current turn (sparse deltas), substantially shortening decoding;
    Avoid wasted computation: GBNF constrains the output to the specified grammar during decoding.
    Measured: first-token p50 2948 → 447 ms (−85%), per-turn p50 4842 → 2423 ms (−50%).

  4. Complete product design and app delivery
    The app includes permission onboarding and automatic call answering. Each answered call retains a summary, a full recording and a per-utterance transcript. Answered, blocked and transferred calls appear in the system notification list for the owner to review. The owner can configure active hours, takeover timing, an allowlist and a blocklist in advance.

整体介绍App Overview

通话下行采集需要 CAPTURE_AUDIO_OUTPUT 权限,官方文档与我们的实测都确认第三方应用拿不到。这只影响 demo 的呈现形式 —— 系统本身在拿到该权限后(例如作为手机厂商系统的一部分)即可直接落地。

Capturing the downlink audio of a call requires the CAPTURE_AUDIO_OUTPUT permission, which both the official documentation and our own measurements confirm is out of reach for third-party apps. That only constrains how the demo can be presented — the system itself is ready to run as soon as the permission is granted, for example as part of a phone vendor’s own system.

竖屏 1080×1920 · 4′53″ · 60.4 MB · 点击播放才开始加载Portrait 1080×1920 · 4′53″ · 60.4 MB · nothing loads until you press play

场景演示Case Demos

以下 8 段真机演示展示外卖、快递、留言、转接和威胁处理等场景。视频点击播放后才开始加载;对话文字建议全屏观看。

The following eight recordings on the phone demonstrate food delivery, courier calls, message taking, transfers and threat handling. Videos load only when played; fullscreen is recommended for reading the on-screen dialogue.

每个视频下方都可以查看助手回复的每一句话背后的原理:schema、累计状态、引擎动作等等。

Below each video, you can inspect how each assistant reply was produced, including the schema, cumulative state and engine actions.

Case 1 正常外卖来电Regular takeout call 助手询问收货地址、记下地址,并提示对方可以挂断The assistant asks for the delivery address, records it and tells the caller they may hang up
Case 2 快递员多轮对话Courier, multi-turn 机主预置的放置地点逐个给出(门口 → 保安室),直到对方接受Owner-preset drop-off spots are offered one by one (front door → security office) until the courier accepts
Case 3 地址连续受阻后转接Transfer after repeated location failures 先逐个提出机主授权的地点;“进不去”触发前置规则后,提醒机主接听Owner-authorized locations are offered in order; "cannot enter" triggers a pre-NLU rule that alerts the owner to take the call
Case 4 骑手找不到地址Rider can't find the address 骑手需要的帮助超出转述和记录范围,助手提醒机主接听The rider needs help beyond relaying and recording information, so the assistant alerts the owner to take the call
Case 5 威胁辱骂场景Threats and abuse ⚠ 请不要在公众场合外放⚠ Do not play out loud in public 命中安全词表后立即播放警告话术A match in the safety wordlist immediately triggers a spoken warning
Case 6 来电者要求转告机主Caller asks to relay a message 先把事情收下来,转告事项进入摘要The matter is taken down first; relay items go into the summary
Case 7 物业有多件事要转告Property office, several matters 多条待办逐条记录(交物业费、周三停水)Multiple to-dos recorded item by item (pay the property fee; water outage on Wednesday)
Case 8 同事来电后要求转接Colleague, then a transfer request 先收集信息,随后识别到来电者要求机主本人接听,发出铃声级提醒并等待接管The assistant first collects information, then recognizes a request to speak with the owner, sounds a ring-level alert and waits for takeover

关键指标Key Numbers

端侧数字均实测于 OPPO K13x(天玑 6300,6 GB RAM,Android 16)。

All on-device numbers were measured on an OPPO K13x (Dimensity 6300, 6 GB RAM, Android 16).

NLU 精度:三条路线对照(使用 Qwen3.5 系列 LLM)

NLU accuracy: three approaches side by side (Qwen3.5 family)

指标0.8B 微调模型 + 精简 system prompt397B Baseline + system prompt 加入完整 schema 说明书0.8B Baseline + system prompt 加入完整 schema 说明书
Schema validity · JSON 可解析
输出能不能被解析成 JSON
100%100%74.49%
Schema validity · 契约合规
解析出来之后,字段、枚举、摘录是否全部符合约定
100%92.97%12.45%
Active Intent Accuracy
这通电话属于哪种场景,判断对了没有
98.12%72.37%4.32%
Slot-Event F1
从原话里抽出的每一条(字段值、待办事项、候选操作)准不准
0.92880.24320.0049
Average Goal Accuracy
该记下来的东西有没有记对,不追究多记
91.85%37.31%0.56%
Joint Goal Accuracy
整份累积记录一字不差才算对,多记一条即归零
84.21%11.09%29.32%
Sentence-level Frame Accuracy
这一轮输出的 11 个字段全部正确的比例
90.23%12.22%0.00%
回复正确率
经规则引擎渲染后,来电者实际听到的那句话对不对
93.23%60.34%0.38%
Metric0.8B fine-tuned + compact system prompt397B baseline + full schema spec in the system prompt0.8B baseline + full schema spec in the system prompt
Schema validity · JSON parseable
Can the output be parsed as JSON at all
100%100%74.49%
Schema validity · contract compliant
Once parsed: are all fields, enum values and excerpts within the contract
100%92.97%12.45%
Active Intent Accuracy
Which scenario this call belongs to — was it identified correctly
98.12%72.37%4.32%
Slot-Event F1
Accuracy of each item extracted from what the caller said (field values, to-dos, candidate actions)
0.92880.24320.0049
Average Goal Accuracy
Of what should have been recorded, how much was recorded correctly — over-recording not penalized
91.85%37.31%0.56%
Joint Goal Accuracy
The whole accumulated record must match exactly; one spurious entry zeroes the turn
84.21%11.09%29.32%
Sentence-level Frame Accuracy
Share of turns where all 11 output fields are correct
90.23%12.22%0.00%
Reply correctness
After the rule engine renders it, is the sentence the caller actually hears correct
93.23%60.34%0.38%
口径说明

为什么先判场景。不同场景需要记录不同的信息:外卖骑手需要确认放置地点,中介和保险来电需要记录转告事项,快递到楼下则需要处理到达通知。系统先识别场景(放置协商 / 留言记录 / 到达通知 / 尚未确定),再选择对应的 schema 模板。GBNF 在解码时将输出字段限制在该场景的范围内;如果场景判断错误,后续可填写的字段也会随之出错。

为什么 Joint Goal Accuracy 这一项,0.8B Baseline 反而比 397B Baseline 高。JGA 要求累计记录与标准答案完全匹配,漏记、错记或多记都会导致本轮判错。当标准记录为空时,空输出也可能得到正确结果。0.8B 基线经常无法生成合规输出,记录因此保持为空;397B 基线会填写更多内容,额外或错误的内容会导致整轮不匹配。这解释了 0.8B 基线在该项指标上更高的现象。AGA 衡量标准记录中已有字段的匹配情况,不惩罚额外字段,因此需要结合两项指标阅读结果。AGA 看漏没漏,JGA 看多没多。

How these were measured

Why the scenario is decided first. Different scenarios require different information: a food-delivery rider needs to confirm a drop-off location, an agency or insurer leaves a message to relay, and a parcel courier reports an arrival. The system first identifies the scenario (drop-off negotiation / message capture / arrival notice / not yet determined), then selects its schema template. During decoding, GBNF restricts the output fields to those allowed for that scenario. An incorrect scenario choice therefore also leads to the wrong set of available fields.

Why the 0.8B baseline beats the 397B baseline on Joint Goal Accuracy. JGA requires the cumulative record to match the reference exactly; missing, incorrect or extra entries make the turn incorrect. When the reference record is empty, an empty output can also be correct. The 0.8B baseline often fails to produce compliant output, leaving the record empty. The 397B baseline fills in more content, and extra or incorrect content causes the whole record to mismatch. This explains the 0.8B baseline's higher score on this metric. AGA measures matches for fields present in the reference record and does not penalize extra fields, so the two metrics should be read together. AGA catches what was missed, JGA catches what was invented.

ASR / 时延 / 资源 / 稳定性

ASR / latency / resources / stability

维度指标数值
ASR字错误率 CER
语音转文字每 100 个字错几个,越低越好;在干净语音与两种真实通话信道音质下分别实测取平均
7.49%(AISHELL-1 干净集 5.92% · AMR-NB 窄带 9.79% · AMR-WB 宽带 6.76%,三者平均)
ASR专名字错误率 NE-CER
衡量人名、地名等专有词的识别错误率
15.75% → 6.67%(拼音吸附 + 热词偏置)
时延首 token 时延(优化前 → 优化后)
对方说完话到 AI 开始回话的等待时间(中位数)
2948 → 447 ms(−85%,前缀 KV 快照复用)
时延单轮时延(优化前 → 优化后)
一问一答完整一轮的耗时(中位数)
4842 → 2423 ms(−50%)
资源通话中内存 PSS
通话时 App 实际占用的手机内存
≈1.40 GB
资源通话中 CPU
通话时占用的算力,约一又三分之一个核心
≈1.33 核(整机 16.6%)
资源模型总体积
随 App 装进手机的全部 AI 模型加起来的大小
≈590 MB(LLM 529 + ASR 60 + 词典 0.5)
稳定性满负荷热测
连续高强度跑 17 分钟,手机没有因过热降速
17 min 无降频(Thermal Status 全程 NONE,CPU 峰 60.2 °C)
DimensionMetricValue
ASRCharacter error rate (CER)
Out of every 100 characters transcribed, roughly how many are wrong — lower is better; averaged over clean speech and two real telephone-channel codecs
7.49% (mean of AISHELL-1 clean 5.92% · AMR-NB narrowband 9.79% · AMR-WB wideband 6.76%)
ASRNamed-entity CER
Recognition error rate for proper names, such as people and places
15.75% → 6.67% (pinyin snapping + hotword biasing)
LatencyFirst-token latency (before → after)
Median wait from the caller finishing speaking to the AI starting to answer
2948 → 447 ms (−85%, prefix KV-snapshot reuse)
LatencyPer-turn latency (before → after)
Median time for one full ask-and-answer round
4842 → 2423 ms (−50%)
ResourcesIn-call memory, PSS
RAM the app actually occupies during a call
≈1.40 GB
ResourcesIn-call CPU
Compute used during a call — about one and a third cores
≈1.33 cores (16.6% of the whole device)
ResourcesTotal model footprint
Combined size of all AI models shipped inside the app
≈590 MB (LLM 529 + ASR 60 + lexicon 0.5)
StabilityFull-load thermal test
17 minutes flat out with no heat-induced slowdown
17 min with zero throttling (Thermal Status NONE throughout, CPU peak 60.2 °C)

同一份 APK 换机复测

Same APK, re-measured on another phone

指标OPPO K13x(目标档)Xiaomi 14(对照机)倍数
NLU 整轮时延p50 1406 msp50 608 ms2.31×
ASR 解码 · 裸模型 greedyp50 472.5 msp50 187 ms2.53×
ASR 解码 · 出品配置(beam4 + 179 热词)p50 668.5 msp50 295 ms2.27×
冷启到就绪4.5 s2.2 s2.05×
MetricOPPO K13x (target tier)Xiaomi 14 (reference)Ratio
NLU per-turn latencyp50 1406 msp50 608 ms2.31×
ASR decode · bare model, greedyp50 472.5 msp50 187 ms2.53×
ASR decode · shipped config (beam4 + 179 hotwords)p50 668.5 msp50 295 ms2.27×
Cold start to ready4.5 s2.2 s2.05×

因为 OPPO K13x 只用了两个线程,所以 Xiaomi 14 的线程数也钉死为 2,未用满其大核 —— 这一列不是 Xiaomi 14 的上限。

Because the OPPO K13x only uses two threads, the Xiaomi 14 is pinned to 2 threads as well and does not use its big cores fully — this column is not the Xiaomi 14’s ceiling.

APK 下载Download

下载 APK(597.5 MB)Download APK (597.5 MB)

  • 文件:CallProxyAssistant-release.apk
  • File: CallProxyAssistant-release.apk
  • 大小:597.5 MB(626,517,343 字节)—— 体积主要来自随包内置的 LLM + ASR 权重,安装后无需联网下载任何模型
  • Size: 597.5 MB (626,517,343 bytes) — mostly the bundled LLM + ASR weights; nothing else to download after install
  • SHA-256: 715d18d8dbd0d88bd86126eaf1976286133eb06711d600125ea49cc093494a70
  • 系统要求:Android(开发实测于 Android 16 / 天玑 6300 / 6 GB RAM)
  • Requires: Android (developed and tested on Android 16 / Dimensity 6300 / 6 GB RAM)
  • 安装提示:需要在系统里允许安装未知来源应用;首次启动会引导设置为默认电话应用,并逐项解释所需权限
  • Install notes: allow installation from unknown sources; on first launch the app walks you through setting it as the default phone app, explaining each permission it asks for

← 返回主页← Back to Home