4
端侧开发参考
背景、SDK 接入与权限(非 Demo 快速步骤)
端侧 vs 云端
端侧优势
- 隐私:数据主要留在本机
- 离线可用、减少云端调用成本
端侧挑战
- 内存、算力、功耗有限
- 需平衡效果、速度与稳定性
Android 工程接入摘要(id=1802)
建议基于官方 Demo 二次开发。核心五步:基座 init(子线程)→ startLora →(多模态则 callVit)→ generate → releaseLora / release。
java
LlmConfig config = new LlmConfig();
config.modelPath = "/sdcard/1225/1.7.0.4_1225_mtk9500";
config.multimodal = false;
config.nCtx = 2048;
// init 在子线程;0 表示成功
String prompt = "[|Human|]:" + userInput + "\n[|AI|]:";
llmManager.generate(prompt, tokenCallback);
// LoRA(init 成功后)
llmManager.startLora("lora_test", "/sdcard/lora_test", 2048);
多模态 prompt:[|Human|]:<im_start><image><im_end>{输入}\n[|AI|]:,须先 callVit 再 generate。
文本审核:对用户输入与模型输出分别调用 TextModeration(id=1804)。
Manifest 权限要点
- 存储:
MANAGE_EXTERNAL_STORAGE(Android 11+ 读模型目录) - NPU:
mediatek.permission.ACCESS_APU_SYS - 审核:
vivo.aiservice.permission.AISERVICE_ACCESS
端侧排查
| 现象 | 处理方式 |
|---|---|
adb unauthorized | 手机弹窗允许 USB 调试 |
| 基座 init 失败 | 核对赛项预置路径与专用手机 |
| LoRA 加载失败 | lora_name 一致、分片全部推送 |
| 输出乱码 | 使用官方 prompt 模板 |
-2101 | DLA 与 NPU 不匹配,换比赛专用手机 |
-2105 | 词表缺失或模型目录不存在 |