哈喽,大家好,我是小鑫同学,我先后从事Android 、前端开发长达 9 年时间,同时也在 Github 积极参与开源项目建设,目前是一位二次踏足金融行业单挑大模型应用项目落地的研发工程师。欢迎与各位朋友交流开发中的各种心得、体会。
此次分享的项目主要依靠大模型内容分析、理解和推理的能力实现对不同文件内容的审查,为公司不同的材料审查提供初审报告。
工作流程分析:
从工作流程图可以看出,创建审查任务、定时任务扫描、模型路由服务和 LLMs 内容分析四部分组串联起了整个项目的生命周期。
1. 创建审查任务:
- 前端部分:通过文件上传、规则选择和任务确认三步完成任务的提交工作;
- 后端部分:接收任务信息后提取文件的元数据,并将任务存储数据库,文件存储 MinIO 服务;
PS:提取元数据主要是便以创建任务时对文件进行预检测,同时也便于后续模型路由和内容分析的直接提供,减少 I/O 操作。
2. 定时任务扫描:
定时任务:通过 CLI 启动定时任务,扫描任务表中初始化状态的任务,并将其添加到任务队列进行后续的任务消费。
3. 模型路由服务:
- 模型路由:由于不同的大模型针对文件有不同的要求,为了很好的将文件于大模型匹配,所以使用规则引擎来实现模型的路由服务。
- 前端部分:支持规则通过界面可视化调整,且实时生效。
4. LLMs内容分析:
利用提示词要求大模型在完成内容分析后返回结构化数据,便于后续的程序处理,通过结构化数据判断文件是否存在违规现象:
- 没有违规:直接更新状态为已完成,并清理临时文件。
- 存在违规:针对不同的文件进行标注,如:图片标注、音视频关键帧提取、PDF 内容高亮等,并将内容分析的结果存储到数据库,将标注后的文件同步上传MinIO,最后更新任务状态,清理临时文件。
审查规划提取:
- LLMs 结构化提取:将公司的审查手册、文档、规范等不同格式的文件借助大模型的分析、理解和推理的能力结构化提取。
- 搭建本地知识库:将结构化提取到的审查规则利用嵌入模型进行向量化,并借助重排模型提高匹配精度。
PS:任务执行前或创建后优先通过 API 于本地知识库进行交互,利用本地知识库的特定信息增强大型模型的回答。
容器化技术使用:
Docker 是现阶段尝试大模型相关技术必备的一款工具,在此次项目中我分别在开发阶段和生产阶段使用到了两套不同配置的容器:
1. 开发阶段
在开发阶段的目的是使用 Docker 来提供 MySQL 数据库和 MinIO 对象存储的支持,其他的 API 服务、定时任务扫描、测试脚本均提供 CLI 启动,前端服务由内置的 Vite 启动开发服务。
2. 生产阶段
在生产阶段分为4个步骤:
- 基础环境:由于项目需要对视频、音频、图片、文档做一系列的标注处理,所以需要对应的系统组件支持,如
ffmpeg
、libmagic1
以及进程管理工具supervisor
等。 - Web 镜像:包含前端项目编译和 Nginx 部署两部分组成。
- Core 镜像:拉取基础环境镜像后安装 Python 相关的依赖,并通过
supervisord
配置文件启动对应的服务。 - 后续镜像:陆续启动
mysql
、elasticsearch
、logstash
、kibana
。
这样一套具备进程管理且可监控的项目就基本部署完成了,开发阶段提到的 MinIO 服务由于访问问题暂时合并到了 Core 镜像,后续视情况将其迁出。
总结:
目前除本地知识库尚未对接完毕外,主体流程已经完整跑通,利用本地知识库旨在提升审查规则的私有化和大模型回复的准确度,此次全栈项目的开发要特别鸣谢 Copilot Pro 提供完整的技术支持,最后言归正传,欢迎与各位朋友交流开发中的各种心得、体会,谢谢。