本地企业级知识库

构建本地化企业级,AI大模型知识库问答系统 #

打造一个完全本地化的企业级知识库问答系统

本地大模型回答演示图 #

gitmin1.jpg

知识库导入演示图 #

gitmind2.jpg

我认为本地化主要有2方面的意义: #

1. 安全性 #

当使用外部模型或服务时,我们的私有数据,用户问题,都会被发送给第三方 那我们就要面临私有数据暴露给别人的风险,甚至会导致数据泄露 本地化会让我们的数据就更安全

2. 灵活性 #

另外随着我们的业务发展,如果模型不能很好的满足我们需求的时候 我们可以很方便的对本地模型其进行微调 以达到更好的适配

这样就既兼顾了安全,又兼顾了灵活性

应用场景 #

知识库问答的使用场景其实非常多,我随便举2个商业系统的例子

比如对个人,可以用来整理笔记论文解读文献检索文档问答等等。 这里我用 轻闪PDF的文档对话 https://lightpdf.cn/chatdoc 来演示一下效果。

我们随便上传一个PDF文档,等文档解析完成后,我们就可以通过提问的方式,对文档里面的内容进行解读,可以很快的从文档中找到我们想要的内容, 大大提高我们查看文档的效率

对企业,可以用来做智能客服数据沉淀或者数字员工等等,同样我用思乎的在线客服 https://gitmind.cn 来演示一下。

我们可以向客服提问,AI就会准确的回复我们的问题,而这些问题的答案,大模型本身是没有的。 因为大模型既不了解我们的业务,也不知道我们的数据,这些AI回复的答案,都是从企业的知识库里面获取的。这样我们就实现了一个7x24小时的智能客服, 不仅为企业降本增效,还提高了客户的满意度

服务器配置要求 #

环境最低配置推荐配置
测试2核 2GB2核 4GB
100w 组向量4核 8GB 50GB4核 16GB 50GB
500w 组向量8核 32GB 200GB16核 48GB 200GB
1000w 组向量16核 48GB 200GB32核 64GB 500GB

架构图 #

整个的系统搭建,都是基于这个架构图来进行的

架构图

RAG原理 #

是什么 #

  • 检索:Retrieval,通过向量模型,或者多种混合检索方式,从知识库中检索出相关的文档
  • 增强:Augmentation,通过将检索到的文档,附加到提示词中,进行增强。也即 ICL(In Context Learning)
  • 生成:Generation,通过大语言模型,生成答案

有什么优势 #

  1. 有助于减轻大模型的幻觉,提高大模型回复的准确性
  2. 与微调不同,RAG提供了一定的可观察性和可检查性
  3. 成本低,好实施

rag.png

安装 Docker #

下载 Docker 并安装 https://www.docker.com/products/docker-desktop/

选择相应版本:如何知道自己电脑是arm还是amd

1.打开一个新的命令提示符窗口。

2.键入echo %PROCESSOR_ARCHITECTURE%,并按Enter键。

image-20241115103831556

下载后安装:

image-20241119134054784

上面两个一定要勾选;

安装后进行测试:

WIN:

docker –version

docker-compose –version

image-20241119135127991

如图安装成功。

安装 Ollama #

下载 Ollama 并安装 https://ollama.com/

安装完成后在cmd:

ollama –version

下载 Chat 模型 #

我使用阿里的通义千问作为演示,根据自己的电脑配置情况,选择合适的模型。

总体来说,模型是越大,效果越好,但是对电脑的配置要求也越高

  • 4b 模型要 3GB内存
  • 7b 模型要 8GB 内存
  • 13b 模型要 16GB 内存
  • 70b 模型要 64GB 内存

特别注意:你如果要用于商业用途,需要申请授权,否则只能用于个人学习

申请商用授权: https://dashscope.console.aliyun.com/openModelApply/qianwen

下载模型 #

ollama run qwen:7b

测试API请求 #

等模型下载和安装好后,执行下面的命令,测试API请求是否成功

Mac/Linux下执行: #
curl 'http://localhost:11434/api/chat' \

--data '{

    "model": "qwen:7b",

    "messages": [

        {

            "role": "user",

            "content": "你是谁"

        }

    ],

    "temperature": 0.1,

    "stream": false

}'
Windows下执行: #
curl "http://localhost:11434/api/chat" ^

--data "{""model"": ""qwen:7b"", ""messages"": [{""role"": ""user"", ""content"": ""你是谁""}], ""temperature"": 0.1, ""stream"": false}"

下载 Embedding 模型 #

我使用了 DmetaSoul 的中文Embedding模型,该模型号称在 MTEB 中文榜单取得开源第一的成绩: https://huggingface.co/DMetaSoul/Dmeta-embedding-zh/blob/main/README_zh.md

下载模型 #

1ollama pull shaw/dmeta-embedding-zh

测试API请求 #

等模型下载和安装好后,执行下面的命令,测试API请求是否成功

Mac/Linux下执行: #
curl 'http://localhost:11434/api/embeddings' \

--data '{

  "model": "shaw/dmeta-embedding-zh",

  "prompt": "天空是灰色的"

}'
Windows下执行: #
curl "http://localhost:11434/api/embeddings" ^

--data "{""model"": ""shaw/dmeta-embedding-zh"", ""prompt"": ""天空是灰色的""}"

image-20241119142854303

查看模型安装情况:ollama list

安装FastGPT及其依赖 #

1. 下载 docker 文件 和 config 文件 #

你可以手动下载,放到一个文件夹里面

也可以直接执行下面的命令,自动下载

mkdir kbqa

cd kbqa

curl -O https://harryai.cc/kbqa/docker-compose.yml

curl -O https://harryai.cc/kbqa/config.json

2. 启动 docker #

docker-compose up

注意

  • 第一次启动会有点慢,因为要拉取镜像,后面启动就会很快了
  • 如果第一次启动失败,可以多次执行 docker-compose up
  • 如出现端口错误,请禁用不用的网络连接;

3. 访问 FastGPT 和 OneAPI #

你第一次访问,系统里面是没有数据的,截图里面的数据,是我测试的时候已经创建好了的。

FastGPT #

点击访问:http://localhost:3000

用户名 root,密码 1234(密码可以在 docker-compose.yml 环境变量里设置 DEFAULT_ROOT_PSW 进行修改) fastgpt.jpg

OneAPI #

点击访问:http://localhost:3001

用户名 root,密码 123456 oneapi.jpg

配置OneAPI #

添加模型:http://localhost:3001/channel

添加渠道:

1. 配置大语言模型 #

  1. 类型:Ollama
  2. 名称:ollama-qwen:7b
  3. 模型:输入自定义模型名称,qwen:7b
  4. 密钥:随便填,比如 123
  5. 代理:http://host.docker.internal:11434

2. 配置Embedding向量模型 #

  1. 类型:Ollama
  2. 名称:ollama-dmeta-embedding-zh
  3. 模型:输入自定义模型名称,shaw/dmeta-embedding-zh**,比如
  4. 密钥:随便填,比如 123
  5. 代理:http://host.docker.internal:11434

特别注意:

  1. 模型 必须和 ollama 安装的模型名称保持一致,可以使用 ollama list 命令查看
  2. 代理地址 必须是 http://host.docker.internal:11434,这样 OneAPI 才能访问到 ollama

默认情况下,Docker 使用的是 桥接模式 启动服务,即容器使用 Docker 自己创建的虚拟网络,容器之间可以相互通信,但是它们无法直接访问宿主机(即你的电脑)上的网络服务。

但是 Ollama 是运行在你的电脑上的, 而 OneAPI 是运行在 Docker 容器里面的,所以 OneAPI 无法直接访问 Ollama。

docker 官方提供了一种支持方案,可通过指向 host.docker.internal 来指向宿主机的 IP。

参见官方文档:从容器连接到主机上的服务

配置好后可进行测试:

image-20241119152923702

embedding模型提示400错误是正常的

配置FastGPT #

我们先创建一个简单的应用,实现一个基本的AI对话,目的是测试OneAPI的接口以及Ollama的接口是否正常。

点击访问:http://localhost:3000 root 1234

image-20241119153417158

点击新建

image-20241119153459254

应用名随便写,选择简易模板,确认创建。

image-20241119153623555

选择AI模型

image-20241119153702326

选择本地模型

image-20241119153749973

确认。

image-20241119153903115

测试一下反回正常。

知识库搭建 #

image-20241119154202091

进入知识库选项:

image-20241119154615387

新建知识库,确认创建。

点击名称进入知识库。

手动录入数据: #

image-20241119154813438

点击插入,

image-20241119155205293

搜索测试:

image-20241119155124259

创建应用 #

image-20241119155449097

关联知识库。

提示错误:

undefined 当前分组 default 下对于模型 gpt-3.5-turbo 无可用渠道 (request id: 202411190806321111913785896079)

打开安装目录,config.json

image-20241119164654113

去除多余模型,重起docker。

文件导入数据: #

image-20241119165050765

下载模板,拖动上传。

image-20241119165624458

列出相关问题 #

image-20241119165953854

拒绝回答 #

image-20241119170429710

进入高级编排

image-20241119170850706

配置引用提示词:

image-20241119170925173

选择模板:

image-20241119171010639

选择严格问题模板。

导入PDF:

image-20241119171344343

image-20241119171452203

分享知识库 #

image-20241119171742293

点击开始使用:

image-20241119171902238

嵌入网页:

image-20241119172041290

关闭箭头选项,复制代码加入到网页。