本页面由 AI 翻译,可能存在表述不准确之处。以英文版为准。 查看英文版

在手机上运行 LFM3,看它能否替代 LangDict 的 AI 功能

我们测试了 local LLM,即在手机本机上运行的 Liquid AI 小型模型 LFM3,能否替代 LangDict 的 AI 功能。LangDict 是我开发的一款语言学习应用。

它可以运行,但经过测试,我决定不把它放进应用。

测试内容

LangDict 是一款闪卡应用:输入想学的单词,AI 会生成翻译、例句和读音。它在三个功能中使用 Gemini API。

功能 作用
翻译 将输入的文本翻译成另一种语言
卡组生成 根据“Travel at the airport”这样的主题,批量创建包含单词、翻译和读音的卡片
文字识别 将照片中的文字转换为可编辑的文本(OCR)

我们测试了 local LLM 能否替代这些功能。

我们考察了三点:

  • 三个功能能否都在手机上运行
  • 连续使用时的等待时间和速度
  • 输出质量

测试条件

项目 详情
手机 Android 手机(7GB RAM)
模型 LFM3-VL-2B(含 mmproj 约 1.5GB)
方法 使用与 LangDict 相同提示词的测试应用,在充电状态下测量
次数 每种条件运行一次(未测量方差)

数值仅供参考。同时在 PC 上测试过的项目标注为“PC 上”。

问题 1:第一次翻译会卡住约 20 秒

打开应用后的第一次翻译,过了 21.2 秒才开始输出文字,画面看起来像是卡死了。第二次只用了 0.9 秒就开始输出。

第一次翻译与之后翻译的对比

原因在于提示词的长度。翻译提示词有 1,526 个 token,而手机的处理速度是 72 tok/s,光读取它就要约 20 秒。第二次更快,是因为缓存生效了。

提示词几乎是固定的,所以在打开画面时预先处理它,也许能缩短等待。这只是一个想法,我们还没有尝试。

问题 2:持续使用会变慢

使用几分钟后,发热会降低生成速度,后面的任务等待时间更长。

连续运行中的速度变化

生成速度从 10.2 tok/s 降到 6.2 tok/s。生成 20 个短语的卡组用了 156.3 秒,即使是 10 个单词的卡组也用了 66.6 秒。

连续运行中的温度与温控降频

Android 的热状态约 1 分钟后升到 1,约 1.6 分钟后升到 2,约 4.6 分钟后升到 3。图的后半段温度下降,是因为应用在接下来的图像测试中崩溃了。

手机正在生成卡组(左:日语原始画面,右:AI English translated)

仅使用 CPU 运行

到目前为止的数值都是在 GPU 上运行得到的。仅用 CPU 时,卡组生成变快了,从 64.2 秒缩短到 46.2 秒,但内存占用增加,手机也更早发热。

GPU 仅 CPU
生成 10 个单词卡组的时间 64.2 s 46.2 s
应用内存(峰值) 1052MB 1923MB
达到热状态 3 的时间 约 2 分 35 秒 约 1 分 35 秒
SoC 峰值温度 57.4℃ 60.4℃

内存为常驻内存,不包括放在 GPU 上的权重。

问题 3:翻译和读音有错误

模型能保持 JSON 格式,但内容有明显错误。这在闪卡应用中是严重的问题,因为学习者会把错误原样记住。

  • 日语读音几乎没有正确的。空港(机场)变成了 kū kōkun,荷物(行李)变成了 nagō。
  • 英语到日语的翻译有时停留在罗马字,没有变成日语。
  • 它把德语的 “Ich habe Hunger” 识别成了英语。
  • 在 PC 上测试的韩语到日语卡组,10 张只生成了 1 张,且韩语字段里是日语。
  • 要求生成 10 个例句时,GPU 上停在 2 张,仅 CPU 时停在 8 张。

PC 上也出现了同样的错误,所以我们认为这是模型本身的局限。模型卡中的预期用途也是读取图像和文档之类,翻译和卡组生成可能本来就不是它的强项。

与其他模型的比较

我们还在手机上试了 Gemma 4 E2B 和 Qwen3.5-2B。

模型 在手机上的结果
Gemma 4 E2B(Google,约 3.1GB) 4 次加载过程中应用都被终止
Qwen3.5-2B(约 1.3GB) 能运行,但翻译用了 577.4 秒,卡组 10 张只生成 1 到 2 张

在 PC 上,Gemma 4 E2B 的质量好得多,例如能正确读出飛行機(飞机)的读音 hikōki。但在手机上,使用 GPU 设置时它无法加载。第一次尝试的日志记录了 Android 因内存不足而终止应用。我们没有尝试仅用 CPU 的设置。

思考模式

我们还以 1,024 token 为上限试了思考模式。它能给出答案,但处理时间约为 3.5 到 7 倍。10 个单词的卡组从 64.2 秒变成 257.7 秒,读音仍然是错的。

问题 4:能读取文字,但每张图片要 20 到 80 秒

文字识别是三个功能中最有希望的。4 张测试图片中,有 2 张每一行都读对了。但是每张图片需要 20 到 80 秒。

图片 读对的行数 时间
英文菜单 9 行中的 4 行 77.7 s
日语车站标识 5 行中的 5 行 38.4 s
韩语菜单 5 行中的 5 行 39.2 s
小而模糊的日语文字 4 行中的 3 行 18.6 s

所有图片都是为本次测试制作的。在英文菜单上,它漏掉了 5 行的价格;在日语文字中,它把天ぷら读成了天ぶら。

起初我们让图像处理部分在 GPU 上运行,应用因内存不足而崩溃。改到 CPU 后,4 张图片都跑完了。但当手机已经因翻译和卡组生成而发热时,同一张英文菜单用了 122.6 秒。

我们学到了什么

  • 在手机上运行模型是可行的
  • 翻译和卡组生成在等待时间和质量上都不达标
  • 文字识别在质量上有希望,但等待时间长
  • 在 PC 上质量不错的更大模型,可能无法在 7GB RAM 的手机上加载

结论:不用于 LangDict

我认为继续调用 Gemini API 能带来更好的用户体验。使用 local LLM 时,等待时间长,翻译和读音错误很多。

不过我觉得,在没有网络的地方也能立即使用,比如在飞机上,对语言学习应用来说会是一个实实在在的好处。

技术细节

写给想了解技术细节的读者。

  • 模型:LFM3-VL-2B Q4_K_M(1.10GB)和 mmproj F16(0.38GB)
  • 运行时:Expo 和 llama.rn。我们将 llama.cpp 换成了支持 LFM3 的版本,并在本地修复了 llama.rn 中的 JSON 约束 bug
  • 生成设置:temperature 0.1、top_k 50、repetition penalty 1.0。官方推荐值是 1.1,但由于 JSON 容易中途停止,我们做了改动
  • 输出格式:用 JSON schema 指定
  • PC:RTX 2060 6GB,使用 llama-server 和 Vulkan

来源

2026-10-31 确认。所有速度、发热和文字识别的数值均为我们自己的测量结果。