背景介绍
随着微信 HarmonyOS 版本的发布,HarmonyOS 已经构筑了自己的基本版图,未来在信创领域也将大有所为,而目前熟悉 HarmonyOS 的开发者还比较少,网上相关的资料也比较落后,导致搜索引擎和 AI 大模型的检索、对话质量都不高。
那么遇到了疑难问题,我们除了查询 API 文档,是否还有更加便捷一些的办法呢,这里我使用了 RAG 技术,根据网络公开分享的 HarmonyOS 文档以及OpenHarmony代码仓库制作了 HarmonyOS 的资料库。
为了应对向量检索命中率并不优秀的弱点,这里加入了全文索引和一些自定义的 RANK 规则组成混合索引,实际应用中效果还是非常不错。在日常开发和学习 HarmonyOS 时都有不错的效果。
技术方案
现在的 RAG 技术大多基于云平台,部署比较麻烦,运行也比较消耗资源,我这里采用的轻量级的方案:
- 界面使用 electron 开发,所有技术栈基于 nodejs ,最终成品一键安装。
- 基于本地文件目录做索引,方便快捷,文件管理轻松自如
- 使用 langchain 做 document_loaders ,并自己根据不同文件类型开发了分块函数
- 使用 lancedb 做本地向量库,无需任何第三方依赖
- 使用 transformers.js 做 embedding ,当然也支持调用大模型的 embedding API
- 使用 sqlite3 做全文索引
- 使用 jieba 进行分词,根据词性和权重进行关键词过滤重排
- 使用大模型 API 进行对话
实际使用过程中,这套方案部署简单(一键本地安装),查询质量也并不比大型 RAG 系统差,当然主要是以下几个原因
- 向量查询+全文索引能够起到很好的组合作用,通过配置参数可以让两者起到很好的互补,比如使用“全文索引+jieba 分词的词性或权重过滤+选用 AND 还是 OR 的逻辑”的简单配置,可以大幅提升知识库命中率
- 自定义的 rerank 规则,虽然不及现在的 rerank 模型先进,但是简单有效
- 根据不同文件类型的特点,自定义了分块函数,比如 markdown 优先按照标题分割,然后再进一步分块,这样比无脑按 token 大小分块更加能保持上下文的完整性
产品实现
新建知识库
我这里自己做了一个示例,大家可以下载看看效果。
下载地址: https://pan.baidu.com/s/1bZ4sCG21yZJEz2JqIES7YQ?pwd=aw8w ,下载HarmonyOS 应用开发者基础认证.zip 后解压到硬盘任意目录,
左侧主菜单选择知识库 ➔ 知识库设置 ,新建时目录选择刚才的HarmonyOS 应用开发者基础认证.zip 解压目录
验证索引
索引已经建好,执行验证索引 操作验证一下,在列表中找到刚才新建的知识库,点击索引 按钮。
验证完成后索引 按钮前的图标变成✅即可
知识库应用
知识库问答
如果对大模型的回答有疑虑,可以点击左侧图标打开文件进行详细学习和进一步的 AI 问答
图片识别
网络中获取的一些资料不是文本格式,不利于搜索问答,例如
通过图片识别功能(需模型支持多模态功能)来识别题目后进行问答
HTTP 服务器模式
一台机器知识库开启 HTTP 服务器,同局域网中所有设备均可访问,轻松将本地资料库分享给大家
使用 HTTP 服务器时,如您的模型需要借助特定软件上网才能访问,请使用特定软件的Tun 模式
其它设置
- 向量搜索阈值:评级值越小代表匹配的更好。大于这个阈值的数据将不会被命中,设为 0 则代表不使用阈值,推荐在 0.6 到 1.0 之间。
- 全文索引关键字阈值: 全文索引关键字阈值,关键字权重小于此阈值的,不被作为全文索引关键字,推荐在 5 到 8 之间。
- 全文索引关键字匹配个数:全文索引关键字匹配个数,个数越多越精确。小于这个个数的数据将不会被命中,推荐在 1 到 3 之间。
以上参数设置为推荐即可,一般不需要改变
比较重要的全文索引匹配规则
- 精准:适合判断题、单选题
- 宽松:适合多选题、简答题
扩展知识库
如果下载的知识库不能让你满意,可以自行扩展知识库,知识库支持 pdf 、docx 、doc 、pptx 、ppt 、epub 、md 、markdown 、srt 、txt 、html 等多种文件格式进行索引。
拷贝对应文件到文件夹,点击索引 按钮,选择全量索引 或增量索引 即可
索引生成完毕可以将您的文件夹拷贝分享给其它人
相关下载
Local Agents
HarmonyOS 知识库
该知识库为《 HarmonyOS 应用开发者基础认证》构建,内容来源于网络公开分享的 HarmonyOS 文档、题目以及OpenHarmony代码仓库。
下载HarmonyOS 应用开发者基础认证.zip 后解压到硬盘任意目录
配置模型
需要配合大模型使用,需要申请大模型 apiKey
|