offline • mobile • llama.cpp

大模型
装进你的手机

一个 440MB 的翻译专用模型,在设备端本地运行,断网也能翻译

440 MB
模型体积
1.25 bit
量化精度
30 ms
首 token 延迟
Flutter llama.cpp Hy-MT1.5 STQ1_0 macOS Android

📸 实机截图

macOS 端翻译截图
macOS
Android 端翻译截图
Android

为什么值得关注

这不是又一个云端 API 的壳——推理跑在你的手机 CPU 上

🔒

完全离线

翻译数据不出手机,断网也能用。没有第三方服务器看到你翻译的内容。

📱

手机原生运行

llama.cpp 编译为 arm64 静态库链接进 App。不需要 CLI、不需要终端、不需要 root。

440MB 跑大模型

STQ1_0 1.25bit 量化——把 7GB 的原始模型压缩 16 倍,手机内存轻松承载。

🧠

纯 C++ 推理引擎

一份 translator_engine.cpp 在两个平台共用。macOS 用 ObjC++,Android 用 JNI。

✂️

打字机流式输出

推理一个 token 就渲染一个 token,30–50ms 间隔,和 ChatGPT 一样的流式体验。

🆓

完全开源

MIT 协议,代码公开。欢迎贡献、学习、二次开发。

它是怎么跑起来的

从 Flutter UI 到底层 llama.cpp——四层架构,每层职责清晰

Layer 1
Flutter UI (Dart)
翻译页面 · 模型管理 · 语言选择 · 打字机流式渲染
MethodChannel ▼
Layer 2
Platform Bridge (Swift / Kotlin)
模型导入下载 · 文件管理 · 线程调度
C++ function call ▼
Layer 3 — 共用引擎
TranslatorEngine (C++)
llama.cpp 模型加载 · tokenize · 推理循环 · 采样 · 取消
links against ▼
Layer 4 — 底层
llama.cpp
ggml · llama · common (chat template)
PR #22836 · STQ1_0 量化支持

为什么选 STQ1_0 量化

Hy-MT1.5 约 440MB(1.25bit 量化),手机端加载完全可行。该量化格式需 llama.cpp PR #22836 支持——仓库通过 submodule 固定到对应 commit。

推理核心流程

prompt 构建(jinja chat template)→ tokenize → 推理循环(逐 token 生成至 EOS 或 128 token)→ 采样 → 解码为文本。可中途取消(atomic flag)。

怎么包装 llama.cpp

核心是 translator_engine.hpp / .cpp——一份纯 C++ 引擎文件, 封装了模型加载、jinja chat template、tokenize、采样和生成循环。上层只调用三个方法:

📄 flutter_app/native/translator_engine/translator_engine.hpp
// 纯 C++ 翻译引擎 — 不依赖 Flutter / 平台
struct TranslatorEngine {
    bool loadModel(const char* model_path);
    void translate(const char* text, char* out, size_t out_size);
    void cancel();
    bool isModelLoaded();
};

这份引擎代码在两个平台 完全共用——macOS ObjC++ 和 Android JNI 直接调同一份 .cpp。

怎么在移动端跑起来

  1. 模型体积 — Hy-MT1.5 约 440MB(1.25bit STQ1_0),对比原始 bf16(~7GB)缩小约 16 倍,手机存储和内存都扛得住。
  2. 推理线程 — 推理在 std::thread 中执行,不阻塞 Flutter UI。取消通过 std::atomic<bool> 标记。
  3. n_ctx=256 — 翻译场景不需要长上下文,小窗口显著降低内存和推理延迟。
  4. 构建即交付 — llama.cpp 编译为静态库链接进 App:macOS Xcode 静态链接 arm64、Android CMake + NDK 交叉编译 arm64-v8a。安装包里已包含全部推理能力。
  5. 模型独立管理 — 模型不内置在 App 包体里,用户按需下载/导入到 App 私有目录。App 本体 15–30MB。

平台桥接

平台桥接层模型目录编译方式
macOSObjC++ wrapper → C++Application SupportXcode 静态链接
AndroidJNI → C++files/models/CMake + NDK

踩过的坑

下载

🍏

macOS

DMG · arm64

获取最新版本中 代理下载
正在读取 GitHub Release

首次打开需右键 → 打开

🤖

Android

APK · arm64-v8a

获取最新版本中 代理下载
正在读取 GitHub Release

需手动授予存储权限

加入讨论

对端侧 AI、大模型移动端落地的技术感兴趣?

一起探讨 AI,交流学习 — 加微信 Kelegele

GitHub