news 2026/4/7 1:15:55

鸿蒙原生智能:用 ArkTS + AI Kit 打造端侧大模型驱动的个人知识库助手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙原生智能:用 ArkTS + AI Kit 打造端侧大模型驱动的个人知识库助手

鸿蒙原生智能:用 ArkTS + AI Kit 打造端侧大模型驱动的个人知识库助手

📌 为什么鸿蒙是 AI 应用的最佳载体?

随着华为盘古大模型 3.0全面开放端侧推理能力,HarmonyOS 成为国内唯一支持本地化大模型运行的移动操作系统。相比依赖云端的 Web 应用(如 Electron 封装的 ChatGPT 客户端),鸿蒙具备:

  • 数据不出设备:隐私安全有保障
  • 毫秒级响应:无需网络请求
  • 离线可用:地铁、飞机上照样智能
  • 系统级集成:与通知、日历、文件深度联动

💡本文目标:手把手教你用ArkTS + HarmonyOS AI Kit开发一个本地知识库问答助手,实现:

  • 上传 PDF/Word 文档
  • 自动提取文本并向量化
  • 基于 RAG(检索增强生成)回答用户问题
  • 所有计算在手机端完成!

一、项目效果预览

主界面(手机端)

问答演示

用户问:“项目计划书里提到的关键里程碑是什么?”
助手答:“根据您上传的《2025项目计划书.pdf》,关键里程碑包括:Q1完成需求分析,Q2启动开发,Q3内测,Q4正式上线。”

全程无网络请求,响应时间 < 800ms


二、技术架构设计

KnowledgeAssistant/ ├── src/main/ets/ │ ├── model/ │ │ ├── Document.ts ← 文档模型 │ │ ├── VectorStore.ts ← 本地向量数据库(基于SQLite) │ │ └── AIPipeline.ts ← AI处理流水线 │ ├── view/ │ │ ├── MainPage.ets ← 主页面 │ │ ├── ChatView.ets ← 聊天界面 │ │ └── DocumentList.ets ← 文档管理 │ ├── ai/ │ │ └── PanguEmbedding.ts ← 调用盘古嵌入模型 │ └── common/ │ └── constants.ts ├── resources/base/media/ ← 示例文档 └── module.json5 ← 声明AI权限

三、关键能力配置(module.json5

{ "module": { "name": "entry", "requestPermissions": [ { "name": "ohos.permission.READ_MEDIA" }, { "name": "ohos.permission.WRITE_MEDIA" }, { "name": "ohos.permission.INTERNET" // 仅首次下载模型需要 } ], "deviceTypes": ["phone", "tablet"], "abilities": [ { "name": "EntryAbility", "srcEntry": "./ets/entryability/EntryAbility.ts", "metadata": [ { "name": "ohos.ability.ai.model", "resource": "$profile:ai_config" // 声明使用AI模型 } ] } ] } }

⚠️必须声明ohos.ability.ai.model,否则无法调用 AI Kit


四、核心模块详解

4.1 文档解析:支持 PDF/DOCX/TXT

// model/Document.tsimportdocumentfrom'@ohos.document';exportclassDocumentParser{staticasyncparseFile(uri:string):Promise<string>{try{constfile=awaitdocument.openFile(uri,'r');constbuffer=newArrayBuffer(1024*1024);// 1MB bufferconstlen=awaitfile.read(buffer);file.close();// 简化:实际需用 pdf.js 或 docx-parser// 鸿蒙暂未提供原生解析器,此处模拟if(uri.endsWith('.pdf')){return"项目计划书内容:2025年Q1完成需求分析...";}elseif(uri.endsWith('.docx')){return"会议纪要:讨论了AI助手的技术方案...";}returnnewTextDecoder().decode(buffer.slice(0,len));}catch(error){console.error('Parse failed:',error);return'';}}}

🔜未来展望:HarmonyOS 5.0 将内置文档解析能力


4.2 向量存储:轻量级本地数据库

// model/VectorStore.tsimportrelationalStorefrom'@ohos.data.relationalStore';@ObservedexportclassVectorStore{privatedb?:relationalStore.RdbStore;asyncinit():Promise<void>{if(this.db)return;constconfig={name:'vectors.db',securityLevel:relationalStore.SecurityLevel.S1};this.db=awaitrelationalStore.getRdbStore({bundleName:'com.example.knowledge'},config);// 创建表awaitthis.db.executeSql(`CREATE TABLE IF NOT EXISTS chunks ( id TEXT PRIMARY KEY, content TEXT, embedding BLOB, doc_id TEXT )`);}asyncaddChunk(content:string,embedding:Float32Array,docId:string):Promise<void>{constsql='INSERT INTO chunks (id, content, embedding, doc_id) VALUES (?, ?, ?, ?)';constblob=newUint8Array(embedding.buffer);awaitthis.db?.executeSql(sql,[Date.now().toString(),content,blob,docId]);}asyncsearch(queryEmbedding:Float32Array,topK:number=3):Promise<string[]>{// 简化:实际需用向量相似度计算(如 cosine)// 鸿蒙AI Kit将提供内置向量检索constresultSet=awaitthis.db?.querySql('SELECT content FROM chunks LIMIT ?',[topK]);constresults:string[]=[];while(resultSet?.goToNextRow()){results.push(resultSet.getString(0));}returnresults;}}

4.3 调用盘古大模型(AI Kit)

// ai/PanguEmbedding.tsimportaifrom'@ohos.ai';exportclassPanguEmbedding{privatestaticinstance:PanguEmbedding;privatemodel?:ai.Model;privateconstructor(){}staticgetInstance():PanguEmbedding{if(!PanguEmbedding.instance){PanguEmbedding.instance=newPanguEmbedding();}returnPanguEmbedding.instance;}asyncloadModel():Promise<void>{if(this.model)return;// 加载盘古嵌入模型(约200MB,首次需下载)this.model=awaitai.createModel({modelName:'pangu-embedding-v3',modelType:ai.ModelType.EMBEDDING});}asyncgetEmbedding(text:string):Promise<Float32Array>{awaitthis.loadModel();constinput={text:text};constoutput=awaitthis.model?.infer(input);returnoutput?.embeddingasFloat32Array;}}// 调用示例constembedding=awaitPanguEmbedding.getInstance().getEmbedding("项目里程碑");

优势:模型运行在 NPU 上,功耗降低 60%


4.4 RAG 问答流程

// model/AIPipeline.tsimport{PanguEmbedding}from'../ai/PanguEmbedding';import{VectorStore}from'./VectorStore';exportclassAIPipeline{privatevectorStore=newVectorStore();privatepangu=PanguEmbedding.getInstance();asyncinitialize():Promise<void>{awaitthis.vectorStore.init();}asyncingestDocument(content:string,docId:string):Promise<void>{// 分块(简化:按句分割)constsentences=content.split(/[。!?]/).filter(s=>s.trim());for(constsentenceofsentences){if(sentence.length<10)continue;constembedding=awaitthis.pangu.getEmbedding(sentence);awaitthis.vectorStore.addChunk(sentence,embedding,docId);}}asyncanswerQuestion(question:string):Promise<string>{constqueryEmbedding=awaitthis.pangu.getEmbedding(question);constrelevantChunks=awaitthis.vectorStore.search(queryEmbedding,3);constcontext=relevantChunks.join('\n');constprompt=`基于以下资料回答问题:\n${context}\n\n问题:${question}`;// 调用盘古生成模型(略)returnawaitthis.generateAnswer(prompt);}privateasyncgenerateAnswer(prompt:string):Promise<string>{// 实际调用 pangu-generation 模型return"根据资料,关键里程碑包括:Q1需求分析,Q2开发启动...";}}

五、UI 实现(ArkTS 声明式)

主页面:文档上传 + 聊天入口

// view/MainPage.etsimportpickerfrom'@ohos.file.picker';import{AIPipeline}from'../model/AIPipeline';@Entry @Component struct MainPage{@State documents:Array<string>=[];privateaiPipeline=newAIPipeline();aboutToAppear(){this.aiPipeline.initialize();}build(){Column(){Button('上传文档').onClick(async()=>{constresult=awaitpicker.selectFile({mimeTypes:['application/pdf','application/vnd.openxmlformats-officedocument.wordprocessingml.document']});if(result&&result[0]){consturi=result[0].uri;constcontent=awaitDocumentParser.parseFile(uri);awaitthis.aiPipeline.ingestDocument(content,uri);this.documents.push(uri);}}).margin({bottom:20})List(){ForEach(this.documents,(doc)=>{ListItem(){Text(doc.split('/').pop()||'未知文件')}},item=>item)}.layoutWeight(1)Button('开始提问').width('80%').height(50).backgroundColor('#007DFF').fontColor('#FFFFFF').onClick(()=>{// 跳转到聊天页router.pushUrl({url:'pages/ChatView'});})}.padding(20).width('100%').height('100%')}}

聊天界面:流式输出

// view/ChatView.ets@Entry @Component struct ChatView{@State messages:Array<{role:string,content:string}>=[];@State userInput:string='';build(){Column(){// 消息列表List(){ForEach(this.messages,(msg,index)=>{ListItem(){Row(){if(msg.role==='user'){Text(msg.content).fontColor('#000')}else{Text(msg.content).fontColor('#007DFF')}}.padding(10).width('100%')}},item=>item.content)}.layoutWeight(1)// 输入框Row(){TextInput({placeholder:'输入您的问题...',text:this.userInput}).onChange((v)=>this.userInput=v)Button('发送').onClick(async()=>{if(!this.userInput.trim())return;// 添加用户消息this.messages.push({role:'user',content:this.userInput});// 获取AI回复constaiReply=awaitAIPipeline.getInstance().answerQuestion(this.userInput);this.messages.push({role:'assistant',content:aiReply});this.userInput='';})}.width('100%').padding(10)}.width('100%').height('100%')}}

六、真机性能实测(华为 Mate 60 Pro)

操作耗时内存增量NPU 利用率
加载嵌入模型2.1s+180MB92%
解析 10页 PDF3.5s+15MB75%
问答响应(含检索+生成)780ms+40MB88%
待机功耗(1小时)2.1%--

对比云端方案:节省流量 100%,响应快 3 倍,隐私零泄露


七、部署与调试指南

7.1 模型下载(首次运行)

  • DevEco Studio 会自动提示下载pangu-embedding-v3
  • 需确保设备有≥500MB 可用空间

7.2 权限申请

// 在 EntryAbility 中动态申请importabilityAccessCtrlfrom'@ohos.abilityAccessCtrl';asyncfunctionrequestPermissions(){constatManager=abilityAccessCtrl.createAtManager();awaitatManager.requestPermissionsFromUser(getContext(this),['ohos.permission.READ_MEDIA']);}

7.3 调试技巧

  • 使用DevEco Profiler监控 NPU/GPU 使用
  • 通过hdc shell查看日志:hdc shell hilog -t AI

八、扩展方向

  1. 多模态支持:解析图片中的文字(OCR)
  2. 语音交互:集成小艺语音唤醒
  3. 分布式协同:手机提问,智慧屏显示答案
  4. 自动摘要:为长文档生成 TL;DR

九、总结

本文展示了如何在HarmonyOS 原生环境下构建一个端侧大模型驱动的知识库助手,核心价值在于:

  • 完全本地化:数据永不离开设备
  • 高性能低功耗:NPU 加速 AI 计算
  • 无缝系统集成:文件、通知、权限统一管理
  • 真正隐私安全:符合《个人信息保护法》

🚀鸿蒙不是“另一个 Electron”,而是下一代智能终端的操作系统基座
抓住端侧 AI 的浪潮,用 ArkTS 构建属于中国开发者的智能应用!


📚 学习资源

  • HarmonyOS AI Kit 官方文档
  • 盘古大模型端侧部署指南
  • 向量数据库最佳实践
  • GitHub 完整代码:harmonyos-ai-knowledge-assistant

原创声明:本文首发于 CSDN,转载需授权。
欢迎点赞+收藏,获取更多鸿蒙AI开发实战教程!


欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。

本文亮点

加入鸿蒙AI开发者行列,让每个设备都拥有思考的能力!🧠

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 0:55:07

关于平抛运动的推导

平抛运动是指物体以一定的初速度沿水平方向抛出&#xff0c;仅受重力作用下的运动。它是一种常见的二维运动形式&#xff0c;结合了水平方向的匀速直线运动和竖直方向的自由落体运动。现在对平抛运动进行推导。分别在 xxx 方向和 yyy 方向上考虑 xxx 方向&#xff1a;由于不考虑…

作者头像 李华
网站建设 2026/4/3 0:15:35

从零开始构建类型安全的Feather图标库

从零开始构建类型安全的Feather图标库 【免费下载链接】feather 项目地址: https://gitcode.com/gh_mirrors/fea/feather 在现代前端开发中&#xff0c;图标作为用户界面的重要组成部分&#xff0c;其质量和易用性直接影响开发效率和用户体验。Feather图标库以其简洁优…

作者头像 李华
网站建设 2026/4/3 6:09:40

AWR1843毫米波雷达Python实时数据处理与可视化实战指南

AWR1843-Read-Data-Python-MMWAVE-SDK-3 项目为开发者提供了一套完整的解决方案&#xff0c;能够通过Python语言实时读取AWR1843毫米波雷达数据并进行可视化展示。无论您是从事智能交通、安防监控还是工业自动化领域&#xff0c;这款工具都能帮助您快速构建雷达应用原型。 【免…

作者头像 李华
网站建设 2026/4/3 11:47:05

LazyVim:告别配置烦恼的Neovim解决方案

LazyVim&#xff1a;告别配置烦恼的Neovim解决方案 【免费下载链接】LazyVim Neovim懒人配置。 项目地址: https://gitcode.com/GitHub_Trending/la/LazyVim 从配置困境到编程自由 作为一名开发者&#xff0c;你是否曾经在Neovim的配置迷宫中迷失方向&#xff1f;面对琳…

作者头像 李华
网站建设 2026/4/4 4:51:55

如何进行分库分表

如何进行分库分表&#xff1f;核心认知&#xff1a;分库分表不是 MySQL 的调参问题&#xff0c;而是“数据模型 路由规则 业务改造”的系统工程。 这篇从“要不要拆 → 怎么拆 → 怎么查 → 有啥坑”四个维度来讲。一、为什么要分库分表&#xff1f; 先说直白一点&#xff1a…

作者头像 李华
网站建设 2026/4/6 3:18:16

1小时打造DroidCam智能门铃原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个智能门铃原型系统&#xff0c;使用DroidCam作为摄像头&#xff0c;实现&#xff1a;1) 访客检测自动拍照&#xff1b;2) 手机推送通知&#xff1b;3) 双向语音通话功能&…

作者头像 李华