一、知识库管理
-
新增知识库:
-
文件类型:支持 docx、pdf 和 txt 格式文本,语言为中文、英文或中英文混排;
-
文档切片:针对业务场景,结合文案的语义特点,切片长度在 512 - 1024 之间为宜;
-
构建向量:向量的构建过程是指将文本拆分为单词或其他基本单元,提取其重要特征,采用特定的算法将这些特征转化为数值向量,构建向量通过 fastembed 组件实现,采用 BAAI/bge-small-zh-v1.5 模型,支持中英文两种语言。
-
索引存储:将文档 ID、文档地址、文档片段及片段向量保存到向量数据库中;
-
-
删除知识库:
-
根据文档 ID 删除向量数据库中该文档的所有记录,记录包括该文档的地址、某个片段和对应片段的向量;
-
知识库中文档记录的删除采用真实删除,即文档内容的更新执行的是删除加新增的双重操作,这是因为文档修改会变更文档分片和向量数值。
-
二、知识库应用
-
接收用户输入的文本内容;
-
对用户输入的文本信息进行预处理,处理过程可能包括敏感信息的提示与过滤,文本信息的纠错和编排;
-
对预处理后的用户输入信息进行向量构建,构建过程必须与新增知识库时使用的组件与模型保持完全一致;
-
采用构建的文本向量到知识库索引向量库中进行检索查询,检索返回条数和向量相似性阈值可以由用户指定,建议默认条数为 10 条,相似度阈值区间在 0.6 - 0.9 之间;
-
系统根据检索结果中的文档片段,组装成 prompt,后面提交给大语言模型服务,要求其根据提示中的文档片段,结合实际情况及语言逻辑,生成全新的、符合用户要求的文档。
-
最后由语言模型根据 prompt 、历史记录、会话背景及上下文信息来进行重新构建和渲染,生成目标内容;
三、向量数据库
各种类型的数据(文本、图像、声音和视频)都可以转换为向量,从而为复杂的数据结构提供了一种强大的数据表示能力,使其在机器学习和人工智能领域有着广泛的适用性和重要性。目前支持向量操作的解决方案有很多,本方案采用 PostgreSQL 数据库加插件的方式来支持向量操作。
-
安装指令:sudo apt-get install postgresql postgresql-contrib postgresql-server-dev-14
-
启动及查看
# 查看 sudo systemctl status postgresql.service # 停止 sudo systemctl stop postgresql.service # 启动 sudo systemctl start postgresql.service # 重启 sudo systemctl restart postgresql.service
-
安装插件
# 临时安装路径 cd /tmp # 下载插件源码 git clone --branch v0.5.1 https://github.com/pgvector/pgvector.git # 进入安装路径 cd pgvector # 编译插件源码 make # 安装部署组件 sudo make install # 重启数据服务 sudo systemctl restart postgresql.service
-
建表指令
# create table tbl_aigc_knowledge # ( # id bigserial, # doc_id bigint, # doc_url text, # doc_chunk text, # doc_embedding vector(1024) # ) # with (fillfactor = 100); # # comment on column tbl_aigc_knowledge.doc_id is '文档 ID'; # comment on column tbl_aigc_knowledge.doc_url is '文档地址'; # comment on column tbl_aigc_knowledge.doc_chunk is '分片文本'; # comment on column tbl_aigc_knowledge.doc_embedding is '分片向量';
四、向量模型
序号 | 模型 | 维度 | 描述 |
1 | BAAI/bge-small-en-v1.5 | 384 | Fast and Default English model |
2 | BAAI/bge-small-zh-v1.5 | 512 | Fast and recommended Chinese model |
3 | BAAI/bge-base-en | 768 | Base English model |
4 | BAAI/bge-large-en-v1.5 | 1024 | Large English model, v1.5 |
五、后端接口
-
知识库添加接口
curl --location --request POST 'http://127.0.0.1/abc/create' \ --header 'Authorization: eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6Ijk2Yzg4OWY2LTMzMzAtNDk4ZC1hMTcyLWE5M2Y1MmI0ZDIyMyIsInVzZXJuYW1lIjoiYWRtaW4ifQ.LBLZkol64er0YkfC70Uwc2r9AC9Tm6vkjpw1ov5nauM7_KJ89GPioFo4P6uJx3mKme8lU78h_5q19YUcxrBSjg' \ --header 'Content-Type: application/json' \ --data-raw '{ "doc_id": 1111, "doc_url": "http://127.0.0.1/test.docx" }'
-
知识库删除接口
curl --location --request POST 'http://127.0.0.1/abc/delete' \ --header 'Content-Type: application/json' \ --data-raw '{ "doc_id": 1111 }'
-
知识库查询接口
curl --location --request POST 'http://127.0.0.1/abc/search' \ --header 'Authorization: eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjozLCJ1c2VyX2tleSI6IjQ1YjMxZDk4LTU1ZDMtNDFkYi05MDgxLWEyN2Q2NzJhNDhlMyIsInVzZXJuYW1lIjoiZ29uZ2xpYmluMSJ9.Ng40cLaboWTJmz_Lq4JwXpk86aRyhDmamqhK_poe4OUZ3-L0xCilevcuZwavQuopAAj2xZjGImjRhKsQu5EvZg' \ --header 'Content-Type: application/json' \ --data-raw '{ "content": "程序", "limit": 10, "threshold": 0.78 }'