项目名称: RAG本地信息与检测报告多模态输出
报告日期:2024年8月18日
项目负责人:乾州小苏
项目概述(必写):
本项目分为两部分,第一部分将本地通讯录【PS:已经导出成为文本文件,放入到原始资料集中】导入项目,然后通过RAG建立个人知识库,在通过统一接口回答问题的时候,如果不通过RGA,那么大模型对于个人信息一无所知,只能回答公开信息,通过RAG之后,提问的问题中私人信息和公开信息都可以正确回答。
第二部分是将血常规检测报告,进行图形化显示,方便大家读取。
技术方案与实施步骤
- 模型选择:
聊天查询类大模型有限尽可能选择数据量全的,减少模型幻觉。比如同样的问题,大模型回答的往往更加准确
小模型就开始胡言乱语
另一方面模型选择尽可能选择更加专业的,符合自己需求的。比如同样一张照片,格式化后小模型ai-phi-3-vision-128k-instruct可以正常接收,并且识别出图片中信息,大模型meta/llama-3.1-405b-instruct反而会因为输入长度的问题,报错,无法正常处理,如下图:
第三个,就是一般向量化会有推荐的相关模型,相对而言性价比更高,可以优先考虑。
- 数据的构建:
RAG的向量化目前都可以通过相关的解析成文本信息自动处理,我们要做的就是将我们的原始信息变成文本数据流交给RAG处理即可。
我的数据源是通讯录,通过手机自带软件导出成文本格式,然后改成txt格式,放在对应格式化的文件位置(如下图)
处理过程注意,为了匹配精度足够高,因为是按行读取向量化,所以经过脚本处理,一个人的信息一行,相关代码如下:
等到处理完毕后,这个文本数据集就OK了,等待后续操作。
图片数据集处理流程思路类似,先将血常规处理结果扫描,然后输出成相应的图片
注意:为了原始信息脱敏,同时也是为了减少运算量,图片经过压缩和裁切处理,放到相应位置
等待后续处理
- 功能整合: 将血常规图片首先进行格式化处理【上面提到的脱敏和压缩】,然后借助phi-3进行识别输出结果
必须说明目前识别进度还比较有限,所以识别出来的文字,精度有待提高。
将文字发给大模型生成可视化图标
中文识别较差,下面显示不出来
实施步骤:
- 环境搭建: I5三代鸿基笔记本,直接安装anaconda,然后conda自己的环境即可,相关配置项可以参考代码中实际调用的库,如下:。
- 代码实现:RAG个人信息实现【获取数据集、RAG解析、生成知识库、访问大模型的时候通过RAG访问,PS具体代码上面已经截图,此处不再详述】。
血检报告制图【读取图片,格式化表格输出,形成文本信息,传递给大模型重绘,PS具体代码上面已经截图,此处不再详述】
注意:很多人很关心代码的细节,甚至每一个函数调用,但是实际上掌握整体逻辑,并在出问题的时候能够直接定位问题并且解决问题才是核心能力。
测试与调优: RAG个人信息部分:
不通过RAG方式,回答一大堆,一个都用不了
通过RAG,回答的信息直接可用且相关
生成医疗图标部分:
相对而言更加直观,但是后期需要适配性增加一点。
- 集成与部署: 目前是在本地部署在笔记本上,后期需要的话可以搭建在自己的jetson nano上面,但是目前这个效果距离可用还有点距离,所以不考虑现网搭建。
项目成果与展示:
- 应用场景展示: 可以用做个人助手,对于自己的客户和相关信息,进行自动搜索和整理。
功能演示:
问题与解决方案:
- 问题分析: 当前的主要问题一方面是环境问题,一方面是数据格式问题
- 解决措施: 环境问题通过模块定位,检查依赖包来进行补充即可。数据格式问题,分析解析代码,然后按照解析规则编辑即可
项目总结与展望:
- 项目评估: RAG相对sft的训练时间成本、算力消耗都少了很多,但是数据间缺乏关联性,而且实际上也很难做到实时更新,同时一定程度上避免了个人信息泄露。
- 未来方向: 模型在往大的发展同时,一定会快速优化,在各个领域形成专有模型,比如医学、教育和安全,与此同时大模型对然提供了强大的查询能力,但是未来从安全的角度出发,个人信息还是会以存储在本地为主,进行格式化加密上传处理,避免大模型的过于垄断。