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 模板
-2101DLA 与 NPU 不匹配,换比赛专用手机
-2105词表缺失或模型目录不存在