入门 ChatGPT 知识库开发
知识库构建一般流程:
- 上传文件
- 解析文件
- 文件分块
- 分块矢量化
- 存储
知识库查询一般流程:
- 用户输入矢量化
- 数据库矢量匹配
- ChatGPT 总结输出
- 用户显示
接下来我将一一介绍各个流程实现
文件解析
使用知识库,我们需要上传一系列文件,比如 txt、markdown、pdf 等,我们需要对它们一一做下解析。
使用 nuxt3 声明上传接口:
txt 解析
直接获取原始数据转成字符串
markdown 解析
直接使用 markdown-it
进行解析
pdf解析
直接使用 unpdf
解析
矢量数据库
目前笔者使用的是 supabase,对于免费账户,它会提供 500 M 的容量
我们使用 prisma
来构建数据库模型和操作 supabase
,有兴趣的可以 深入了解
prisma 主要由三块组成,我们重点介绍下其中 Client
和 Migrate
:
- Prisma Client
查询器,将对象操作映射数据库 - Prisma Migrate
命令行形式 将 schema 转换成数据库结构 - Prisma Studio
可视化工具
新建一个 prisma/schema.prisma
文件,接下来步骤都在这个文件里面操作
构建模型
这里我把知识库和会话绑定在一起了,不需要可以去掉
连接数据库
在 .env
文件添加 DATABASE_URL
,值为 supabase
以下内容:
添加矢量扩展
指定客户端
使用 prisma-client-js
进行客户端操作,包括增删改查等等
Prisma 初始化
数据库构建和连接
在 package.json
的 scripts
中添加 "prisma": "npx prisma migrate dev"
,这样可以直接运行 pnpm prisma
完成数据库的初始化
prisma client 导出
我们可以使用 client
来操作 supabase
数据库
新建 prisma.ts
ChatGPT 封装
构建知识库
数据分块
在解析文件之后,我们取得文件内容,那么接下来需要对数据进行分块
矢量化、储存
取得文件块之后,需要转成矢量,并保存到 supabase
enqueue
添加了重试逻辑,可以先不关注这方面
完整上传接口
查询
在完成知识库的构建之后,我们查询的时候,只需要把 propmt
转成 矢量,在矢量数据库查询相关矢量,再发送给 ChatGPT
就可以了
总结
以上就是知识库构建的全部内容,有兴趣的话可以使用我构建的 WebUI 使用完整功能吧~