news 2026/3/5 19:00:18

鸿蒙原生智能:用 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/3/3 14:07:37

学习周报二十六

摘要 本周深入研读了NeurIPS 2025最佳论文《Gated Attention for Large Language Models》&#xff0c;系统分析了传统Softmax注意力机制存在的“注意力沉没”与“巨量激活”问题&#xff0c;以及Qwen团队通过引入Sigmoid门控实现的创新解决方案。同时&#xff0c;复盘了该论文…

作者头像 李华
网站建设 2026/3/3 14:07:25

ffmpeg-python管道技术:重新定义视频处理的未来

ffmpeg-python管道技术&#xff1a;重新定义视频处理的未来 【免费下载链接】ffmpeg-python Python bindings for FFmpeg - with complex filtering support 项目地址: https://gitcode.com/gh_mirrors/ff/ffmpeg-python 还记得那些被大视频文件折磨的日子吗&#xff1f…

作者头像 李华
网站建设 2026/3/3 14:10:28

any-listen:打造专属私人音乐空间的终极指南

any-listen&#xff1a;打造专属私人音乐空间的终极指南 【免费下载链接】any-listen A cross-platform private song playback service. 项目地址: https://gitcode.com/gh_mirrors/an/any-listen 还在为各大音乐平台的版权限制而烦恼吗&#xff1f;想要拥有一个完全属…

作者头像 李华
网站建设 2026/3/3 14:07:37

Blender与OpenUSD集成实战:打通3D工作流的终极指南

Blender与OpenUSD集成实战&#xff1a;打通3D工作流的终极指南 【免费下载链接】OpenUSD Universal Scene Description 项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD 你是否曾经因为不同3D软件间的格式转换而浪费大量时间&#xff1f;是否遇到过材质在软…

作者头像 李华
网站建设 2026/1/29 14:39:46

bilili:2025终极B站视频下载神器!一键保存番剧/投稿视频+弹幕

bilili&#xff1a;2025终极B站视频下载神器&#xff01;一键保存番剧/投稿视频弹幕 【免费下载链接】bilili :beers: bilibili video (including bangumi) and danmaku downloader | B站视频&#xff08;含番剧&#xff09;、弹幕下载器 项目地址: https://gitcode.com/gh_m…

作者头像 李华