news 2026/5/1 4:58:44

鸿蒙原生智能:用 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/30 15:13:17

视频去水印神器:3步搞定烦人水印,让视频重获纯净!

视频去水印神器&#xff1a;3步搞定烦人水印&#xff0c;让视频重获纯净&#xff01; 【免费下载链接】video-watermark-removal Remove simple watermarks from videos with minimal setup 项目地址: https://gitcode.com/gh_mirrors/vi/video-watermark-removal 还在为…

作者头像 李华
网站建设 2026/4/23 14:13:09

3D部件处理实战指南:4种核心文件格式的深度应用

3D部件处理实战指南&#xff1a;4种核心文件格式的深度应用 【免费下载链接】Hunyuan3D-Part 腾讯混元3D-Part 项目地址: https://ai.gitcode.com/tencent_hunyuan/Hunyuan3D-Part 在当今的3D内容创作领域&#xff0c;文件格式的选择直接影响着工作流程的效率和最终成果…

作者头像 李华
网站建设 2026/4/23 18:36:39

深度解析IOPaint:AI图像修复技术架构与实战指南

深度解析IOPaint&#xff1a;AI图像修复技术架构与实战指南 【免费下载链接】IOPaint 项目地址: https://gitcode.com/GitHub_Trending/io/IOPaint 在数字图像处理领域&#xff0c;水印去除一直是一个技术难点。传统的Photoshop等工具需要手动精细操作&#xff0c;而基…

作者头像 李华
网站建设 2026/4/27 19:25:34

7个必知技巧:腾讯混元3D-Part文件格式完全攻略

你是否曾在3D部件生成过程中遇到这样的困扰&#xff1a;导入的模型总是报错&#xff0c;导出的文件在目标平台无法正常显示&#xff0c;或者不同格式之间的转换让你头疼不已&#xff1f;作为专注于3D部件分割与生成的强大工具&#xff0c;腾讯混元3D-Part的文件格式兼容性正是解…

作者头像 李华
网站建设 2026/4/30 9:35:12

企业私有应用商店搭建完整指南:3步实现Android应用安全分发

在数字化转型浪潮中&#xff0c;企业内部应用分发管理已成为提升运营效率的关键环节。InternalAppStore开源项目为企业提供了一套完整的私有应用商店解决方案&#xff0c;让您能够完全掌控应用分发流程&#xff0c;实现安全、高效、可控的应用管理。无论您是中小企业还是大型组…

作者头像 李华