K1 OH5.0 AI 构建开发说明
修订记录
修订版本 | 修订日期 | 修订说明 |
001 | 2025-03-28 | 初始版本 |
002 | 2025-04-12 | 优化格式 |
1. 前置准备
参考编译文档完成系统编译、烧录:K1 OH5.0 下载编译烧录说明
1.1. ollama+deepseek 资源准备
下载地址:点我下载
deepseek-r1-distill-qwen-1.5b-q4_0.gguf
Modelfile
Ollama
deepSeek-r1-distill-qwen-1.5b-q4_0.gguf
经过压缩和优化的模型文件。它使用 GGUF 格式,这是一种专为高效推理和压缩设计的格式。这种格式可以在资源受限的环境中高效运行,例如在嵌入式设备或移动设备上。
modefile
定义了如何配置和使用 deepseek-r1-distill-qwen-1.5b-q4_0.gguf
模型文件。
ollama
运行和管理各种机器学习模型。它支持多个模型版本和格式,包括 DeepSeek 系列模型。通过 Ollama,你可以方便地部署、运行和管理 DeepSeek-R1-Distill-Qwen-1.5B-Q4_0.gguf 模型。
1.2. 环境和工具准备
- MUSE Paper 及电源一套
- type-c 线(用于烧录和 hdc 连接)
- Windows 系统端 hdc(用于和板子之间传输文件)
- IDE(DevEco 4.0)
- K1 OH5.0 编译构建环境
2. 安装 ollama+deepseek-r1-1.5b
为了让开发者快速体验,提供了一键打包安装的安装包。
2.1. 用 type-c 线连接 Windows 系统和 Muse Paper
确认 hdc shell
可以连接 MUSE Paper
D:\>hdc list targets
0123456789ABCDEF
2.2. 把安装包下载到 Windows 电脑,解压到任意位置
下载地址 :点我下载(前面已下载,请忽略),内部包括安装包、二次开发所需要的程序和开发手册等。
2.2.1. 一键自动安装 deepseek
双击图中的红色圈住的安装脚本:setup_ohos_ollama_env_v1.0.bat
, 给 OH 安装所有 LLM 的依赖库和应用程序:
2.2.2. 运行调试
安装完后,应用就可以进行 LLM 的问答了。
- 运行 ollama,显示如下图表示 ollama 正常工作:
- list 为空,表示模型没有安装,需要加载大模型
- 加载大模型
- 再查看模型列表
- 在命令行运行大模型进行对话
- 打开 OH 的 HAP 程序
- 测试 HAP 的使用界面
3. 二次开发
3.1. 开发环境准备
-
OH 系统开发:VSCode + ubuntu Linux server
-
HAP 开发:DevEco 4.0 【deveco-studio-4.1.0.400.exe】
-
需要开发文件:点我下载(前面已下载,请忽略)
- chatgpt: oh chatgpt lib 代码 + testNAPI 代码
- deepseek :演示 HAP 代码
3.2. OH 系统构建
将 chatgpt
文件夹放到 oh5.0\foundation\communication\chatgpt
目录 ,配置好模块编译配置,就可以编译出对应的库。这个库是用于给上层 HAP 提供访问 ollama 接口的。
3.2.1. 编辑开发代码
根据自己的需求,修改代码。
3.2.2. 编译镜像
命令如下:
./build.sh --product-name musepaper2 --ccache --prebuilt-sdk
与本工程相关的两个库为:
- libchatgpt_napi.z.so
- libchatgpt_core.z.so
新编译的镜像包含这两个 so,可以烧录镜像,也可以用 hdc file send 命令推送进去,如下:
hdc file send libchatgpt_napi.z.so /lib64/module/
hdc file send libchatgpt_core.z.so /lib64/
3.3. HAP 测试工程
OH5.0\foundation\communication\chatgpt\testNapi
主要用于二次开发者参考开发自己的 AI 大模型应用,用下面版本 DevEco 打开工程编译,编出测试所需 testNapi HAP,可以用于测试和帮助开发自己的 LLM 应用。
3.4. 开发调试
3.4.1. 查看日志
-
hdc shell higlog | grep Chatgpt
-
hdc shell hilog | grep Index
-
设置 ollama debug:
- export OLLAMA_DEBUG=1 //可输出日志
- export OLLAMA_HOST='0.0.0.0' //可外部访问 OLLAMA
02-28 12:35:58.260 4086 4086 I C01650/ChatGPT: ChatGPT instance created
02-28 12:35:58.260 4086 4086 I C01650/ChatGPT: Generating streaming response for input: who are you
02-28 12:35:58.261 4086 7595 I C01650/ChatGPT: Request payload: {"model":"deepseek-r1-1.5b","prompt":"who are you","stream":true}
02-28 12:35:58.262 4086 7595 I C01650/ChatGPT: Making request to Ollama API at [http://localhost:11434/api/generate](http://localhost:11434/api/generate)
02-28 12:35:58.266 4086 7595 I C01650/ChatGPT: CURL request completed after 1 attempts
02-28 12:35:58.267 4086 7595 I C01650/ChatGPT: Request completed successfully
3.5. 演示 HAP 工程
同样使用 DevEco Studio 4.1 Release 打开对应代码工程,编译演示 HAP。
4. oh+ollama+deepseek 设计说明
4.1. 架构
-
前端层(ArkTS)
- 界面和业务
-
服务层 (ArkTS)
- 跨 NAPI 回调实现 (ArkTS ↔ OS Native)
- 回调注册和管理
- 业务逻辑、API 交互和数据处理
-
NAPI 层
- JavaScript/TypeScript 与 C++ 的接口
- 参数解析和传递
- 回调注册
-
C++ 实现层
- 核心功能及本地 API 交互
- napi_async_work 实现(防止主线程阻塞 导致 app 主线工作线程发生 block crash);
- 实现跨 napi 的 callback( arkts <---> os native )
- ollama 集成
- deepSeek 集成
4.2. llm(chatgpt) 子系统部件 设计&实现
-
ChatGPTService 使用单例
-
C++ ChatGPT 类使用单例
-
异步处理
- NAPI 层使用
napi_async_work
- C++ 层使用
std::thread
- 智能指针防止内存泄漏,增加健壮性,替代
new
- UI 层使用实时回调
- 流式 stream 处理
- 详细日志跟踪
- NAPI 层使用
4.2.1. 调用流程
- 用户在 UI 输入文本 → 触发
onClick
事件 ChatGPTService
调用 NAPI 模块的generateResponse
- NAPI 层转换参数,创建异步工作
- C++ 层执行 HTTP 请求,通过回调返回结果
- 结果通过回调链传回前端显示,前端实时渲染
4.2.2. chatgpt_napi.cpp 设计
数据结构:
struct AsyncCallbackData {
napi_env env; // NAPI 环境
napi_ref streamCallbackRef; // 流式回调引用
napi_ref completionCallbackRef; // 完成回调引用
std::string chunk; // 数据块
std::string result; // 结果
napi_value resourceName; // 资源名称
};
回调处理
-
StreamCallbackComplete
:处理流式数据回调,当有数据 chunk 出现进行处理- 获取回调函数引用
- 创建参数数组
- 调用 JavaScript 回调函数