feat(AI): 集成MNN推理引擎替换MLX作为主AI运行时

- 引入MNN(alibaba) + Arm SME2 + CPU作为主AI运行时,支持A19/iPhone17的
  SME2和A17的NEON加速
- 添加MLX Swift作为兜底GPU推理方案,实现双后端切换机制
- 使用单一Qwen3.5-2B多模态模型(1.2GB),替代原有的LLM+VL分离架构
- 实现InferenceEngine.current引擎选择逻辑,真机默认MNN,模拟器回退MLX
- 更新AIAgent架构,通过MNNLLMBridge(ObjC++) → MNNBackend进行推理
- 修改队列机制防止并发推理导致OOM,使用信号量闸门控制显存占用
- 更新文档中的技术栈说明、模块边界和周次交付计划
```
This commit is contained in:
link2026
2026-06-15 09:24:59 +08:00
parent 6c6a950140
commit 9d856fcfc4
37 changed files with 2605 additions and 430 deletions

View File

@@ -189,6 +189,9 @@
}
}
}
},
"「设置提醒」只到点提示,不提供任何用药或剂量建议。" : {
},
"/" : {
@@ -909,6 +912,9 @@
}
}
}
},
"📷 %lld" : {
},
"1 项偏低" : {
"extractionState" : "stale",
@@ -1497,6 +1503,7 @@
}
},
"VL 模型未就绪" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -1519,6 +1526,7 @@
}
},
"VL 模型未就绪,先手动录入" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -1541,6 +1549,7 @@
}
},
"VL 输出无法解析:%@" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -1628,6 +1637,9 @@
}
}
}
},
"一次记一种药,多张照片都会作为这种药的原图存入药品库,供查看与 AI 解读参考。不提供任何用药建议。" : {
},
"三" : {
"localizations" : {
@@ -2031,6 +2043,9 @@
}
}
}
},
"仅作清单记录,不提供任何用药或剂量建议。" : {
},
"仅供参考,不构成医疗建议" : {
"extractionState" : "stale",
@@ -2214,6 +2229,9 @@
}
}
}
},
"从药品库删除" : {
},
"任何健康决策(是否就医、用药、调整治疗方案等)请咨询专业医疗人员,并以其意见为准。" : {
"localizations" : {
@@ -2841,9 +2859,6 @@
}
}
}
},
"保存用药记录" : {
},
"偏低" : {
"localizations" : {
@@ -3195,6 +3210,9 @@
}
}
}
},
"共 %lld 次" : {
},
"共 %lld 页" : {
"localizations" : {
@@ -3306,6 +3324,9 @@
}
}
}
},
"关闭搜索" : {
},
"其他" : {
"localizations" : {
@@ -3350,9 +3371,6 @@
}
}
}
},
"再加一种" : {
},
"再拍一项" : {
"extractionState" : "stale",
@@ -3376,6 +3394,9 @@
}
}
}
},
"再记一条「%@」" : {
},
"再说一次" : {
@@ -3680,6 +3701,12 @@
}
}
}
},
"剂量" : {
},
"剂量,如:1 片 / 80mg" : {
},
"前往设置" : {
@@ -3913,6 +3940,16 @@
}
}
},
"原图 · 第 %lld/%lld 页" : {
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "new",
"value" : "原图 · 第 %1$lld/%2$lld 页"
}
}
}
},
"原图%lld张" : {
},
@@ -3937,6 +3974,9 @@
}
}
}
},
"原图已加密保存,详情页随时可翻看放大。系统只识别报告日期与机构作为标签,不逐项录入数值。" : {
},
"原图无法读取" : {
@@ -4125,6 +4165,9 @@
},
"只读取生日、性别、身高、血型" : {
},
"可多选:如同时勾选「每周一三五」+「每月1日」,两种节奏都会提醒。" : {
},
"可选开启 Face ID 启动锁,进一步保护隐私。" : {
"localizations" : {
@@ -4169,6 +4212,15 @@
}
}
}
},
"右上角拍药盒或 + 手动添加" : {
},
"吃了哪个药" : {
},
"吃药:" : {
},
"各引擎实测对比" : {
@@ -4378,6 +4430,7 @@
}
},
"图片保存失败,手动录入并保留文本" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -4398,6 +4451,9 @@
}
}
}
},
"图片保存失败,请重试" : {
},
"在「+ 新建 → 指标记录 → %@」记录一次" : {
"localizations" : {
@@ -4879,6 +4935,7 @@
}
},
"如:缬沙坦 80mg qd" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -4955,6 +5012,9 @@
},
"字号放大 60%" : {
},
"存入药品库" : {
},
"完成" : {
"localizations" : {
@@ -5142,9 +5202,6 @@
},
"导出历史" : {
},
"将记入健康日记(记录页可查),并同步到「当前用药」供 AI 解读参考。不提供任何用药建议。" : {
},
"将追加:" : {
"localizations" : {
@@ -5441,6 +5498,16 @@
}
}
},
"已拍 %lld/%lld 张 · 可拍正面、背面、说明书" : {
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "new",
"value" : "已拍 %1$lld/%2$lld 张 · 可拍正面、背面、说明书"
}
}
}
},
"已拍 1 页" : {
"extractionState" : "stale",
"localizations" : {
@@ -5979,6 +6046,9 @@
}
}
}
},
"开始识别" : {
},
"开始说话…" : {
@@ -6078,6 +6148,7 @@
},
"当前用药" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -6513,6 +6584,9 @@
},
"或手动填写" : {
},
"或手动输入药名" : {
},
"或者自己写" : {
"localizations" : {
@@ -6606,6 +6680,9 @@
},
"手动填写,或拍照自动识别" : {
},
"手动添加" : {
},
"手动记录" : {
@@ -6877,10 +6954,10 @@
"拍药盒" : {
},
"拍药盒或说明书,本地识别药名与规格" : {
"拍药盒或手动添加常用药" : {
},
"拍药盒自动识别" : {
"拍药盒添加" : {
},
"拖动方框对准要识别的指标,可拖右下角缩放" : {
@@ -7419,6 +7496,18 @@
}
}
}
},
"搜索指标" : {
},
"搜索指标 / 报告 / 症状名" : {
},
"搜索指标名" : {
},
"搜索记录" : {
},
"摘要" : {
@@ -8124,6 +8213,9 @@
},
"月份" : {
},
"服药提醒" : {
},
"未下载" : {
"localizations" : {
@@ -8212,6 +8304,12 @@
}
}
}
},
"未能自动识别报告信息,可手动填写" : {
},
"未能自动识别报告信息,已保存原图,可手动填写日期 / 机构" : {
},
"未设置" : {
"localizations" : {
@@ -8940,6 +9038,9 @@
}
}
}
},
"核对报告信息" : {
},
"核对指标" : {
@@ -8948,6 +9049,7 @@
},
"核对识别结果" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -9282,6 +9384,9 @@
}
}
}
},
"每周 · 选星期几" : {
},
"每天" : {
"localizations" : {
@@ -9307,6 +9412,9 @@
},
"每年" : {
},
"每年 · 选月/日" : {
},
"每年%lld月%lld日" : {
"localizations" : {
@@ -9324,7 +9432,7 @@
"每月" : {
},
"每月%lld日" : {
"每月 · 选日期(可多选)" : {
},
"比如:记一下血压 / 我头疼 / 拍个药盒" : {
@@ -9404,6 +9512,15 @@
},
"没听清,再试一次" : {
},
"没有匹配「%@」的指标" : {
},
"没有匹配「%@」的记录" : {
},
"没有匹配的长期监测指标" : {
},
"没有指标 — 点上方「加一项」补一行,或直接保存只存图片" : {
"localizations" : {
@@ -9513,6 +9630,15 @@
},
"添加快捷问答" : {
},
"添加药品" : {
},
"点图放大" : {
},
"点图片可放大查看。原图均存在本机加密目录,不上传。" : {
},
"点底部 + 号可以补一条" : {
"localizations" : {
@@ -9535,6 +9661,9 @@
}
}
}
},
"点照片选「识别此张」· 一次记一种药" : {
},
"点这里再开一次" : {
"localizations" : {
@@ -9873,6 +10002,9 @@
},
"用药记录" : {
},
"用药详情" : {
},
"甲状腺疾病" : {
"localizations" : {
@@ -10175,6 +10307,9 @@
}
}
}
},
"管理常用药清单 · 拍药盒或手动添加" : {
},
"管理用药、复查、监测的周期提醒" : {
"localizations" : {
@@ -10507,6 +10642,9 @@
}
}
}
},
"继续拍" : {
},
"继续拍下一项" : {
"extractionState" : "stale",
@@ -10646,6 +10784,9 @@
}
}
}
},
"编辑药品" : {
},
"腹痛" : {
"localizations" : {
@@ -10854,9 +10995,27 @@
}
}
}
},
"药名,如:缬沙坦胶囊" : {
},
"药品名,如:缬沙坦胶囊" : {
},
"药品库" : {
},
"药品库 · %lld 种常用药" : {
},
"药品库是你的常用药清单。记录某次服用请到「写日记 · 用药」,可填剂量和时间。" : {
},
"药品库还是空的" : {
},
"药品库还没有药,可在「记录 · 药品库」拍药盒或手动添加。这里直接手输也行。" : {
},
"血压" : {
"localizations" : {
@@ -10976,6 +11135,9 @@
}
}
}
},
"记剂量与时间" : {
},
"记录" : {
"localizations" : {
@@ -11093,6 +11255,9 @@
},
"记录时间" : {
},
"记录用药" : {
},
"记录症状" : {
"localizations" : {
@@ -11207,6 +11372,12 @@
}
}
}
},
"设置提醒" : {
},
"识别入药品库" : {
},
"识别全程在本地,图片不会上传" : {
"localizations" : {
@@ -11260,8 +11431,12 @@
},
"识别框内指标" : {
},
"识别此张" : {
},
"识别没有读出指标,请手动补充" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -11306,13 +11481,17 @@
}
}
},
"识别用药" : {
"识别超时,已保存原图,请手动填写信息" : {
},
"识别超时,已保留原图" : {
},
"识别超时,挪一下框再试或手动补充" : {
},
"识别超时(>%llds)" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -11335,6 +11514,7 @@
}
},
"识别超时(>%llds),保留旧编辑" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -11357,6 +11537,7 @@
}
},
"识别超时(>%llds),先手动录入" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -12387,6 +12568,7 @@
}
},
"重新识别没有读出新指标" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {