1、前言
1.1、要求
本演示采用的windows进行部署,后续会介绍linux的演示,如果在linux系统下熟练了docker和docker-compose的使用,那么自行举一反三也很不难
要求1:如果使用的是云端服务器,那么至少CPU为4核8g才能勉强带动,否则轻则问答时间长,重则docker崩溃,乃至远程连接崩溃,一般个人计算机都能达到要求
要求2:对docker和docker-compose有一定熟悉,尽量本文章会提示一些新手出错点
1.2、介绍
使用本地模型与自建知识库,信息安全不易泄露,可自行微调达到目的,语料也可以私有不泄露。后续可能跟进微调操作等,先一步步进行
本次演示目的仅仅是将项目核心搭建,可拓展的方向如:LLM的更换、LLM的微调、知识库的更新、向量模型的更新。
本次演示采用的模型、知识库内容、主机配置都是基础配置。(qwen2、dmeta-embedding-zh、8核16GB无独显)
后续会更新在此基础上的拓展玩法,可以期待一下
2、下载docker-desktop以及做好相应配置,以及配置文件的基本介绍(本操作linux有很大区别)
2.1、下载docker-desktop
进入docker官网需要梯子
选择相应docker_desktop安装包下载
注意大部分windows是AMD架构,所以不要选错了,具体可以看系统设置(易错点1)
直接运行exe文件
下面两个选项需要勾上
如果报错可以不勾第一个,后面再更新wsl即可
建议装好后cmd运行wsl --update
(易错点2)(通用的,可以都使用一些,可能需要梯子,可以使用镜像)
随机使用wsl -v
查看版本,如果为wsl2.x即更新成功
使用docker -v
查看docker版本(官网下的肯定最新的,主要是看是否安装成功)
使用docker-compose -v
查看docker-compose是否安装成功(这两个都是docker-desktop里面包含的)
此处docker安装结束
2.2、config.json和docker-compose.yml配置文件
首先cd到自己的该项目工作目录
curl -O https://harryai.cc/kbqa/docker-compose.yml
curl -O https://harryai.cc/kbqa/config.json
分别运行,将两份配置文件下载到工作目录下
这里介绍一些需要知道的参数
1、image:镜像文件,上图用了国内镜像,不需要梯子
这里mysql:版本号这样的值,就是去docker.com官网上拉取镜像,需要梯子
2、ports: 3001:3000, 左边是映射到宿主机的端口号,右侧是docker内部虚拟网络的运行端口号(docker虚拟网络后面会提到)
3、volumes,是容器文件和宿主机文件的映射(对本演示无关,了解即可)
上面就是将./oneapi的内容与docker内oneapi容器内部/data目录保持一致(一变另一个跟着变)
config.json配置文件
这是fastgpt镜像的配置文件
对于本次演示,唯一要改变的参数不多,如图
llmModels配置了模型对应接口去对接oneapi,重要的参数是model,这个参数如何用后面启动时介绍
3、启动docker-compose 将所需所有image下载
docker-compose up -d
注意:需要在docker-compose.yml同处目录下的cmd执行(易错点3)
同时,只有配置了国内源的镜像能拉取成功,有个别是从docker.com拉取的,需要梯子再执行一次上述命令,会比较慢耐心等待拉取成功
注意:mysql配置在3306端口,如果电脑本身就装了mysql并且在运行,会报错3306端口占用(易错点4)netstat -ano | findstr 3306
通过此命令找到占用3306端口的进程,最右侧是PID
找到后ctrl+Alt+delete打开任务管理器,ctrl+F搜索获取的PID并右键结束进程
netstat命令不清楚是否windows内置,linux里面是不内置的,可以在网上看相应软件包并下载下来
成功放开3306端口后,先执行docker-compose down
将所有images关闭,再重新调用docker-compose up -d
进行启动
通过docker ps
查看容器的运行,当然windows有docker-desktop可以图形化展示
用http://localhost:端口号,去访问fastgpt和oneapi的本地化页面即可,其他暂时用不上
当然直接点击端口的蓝字即可进入
当fastgpt和oneapi能正常进入即成功,fastgpt默认用户root密码1234。oneapi用户root密码123456
会弹出改密码界面,没有必要不用管
接下来运行docker-compose down
将docker全部关闭,至此docker部分完成
4、下载ollama和模型qwen2:7b和向量模型dmeta-embedding-zh
4、下载ollama
直接在官网ollama.com下载即可,运行exe直接安装即可
结束后,在cmd里面运行ollama -v
检查是否安装成功ollama list
可以查看安装且配置在ollama的模型,现在肯定没有
在ollama.com上方models搜索框搜索qwen2(其他LLM也可以,不过需要对config.json和oneapi机制熟悉的朋友可以换其他LLM,如果是新手朋友,建议跟我选一样的)
下方是模型文件,右侧有拉取的对应命令,复制到cmd执行即可
同样操作找到向量模型并拉取
都结束后,使用ollama list查看已拉取的模型,有上面下载的两个即可
ollama运行时开放在11434端口,与oneapi和fastgpt,mysql道理一样
测试qwen2模型接口:`curl "http://localhost:11434/api/chat" ^
--data "{""model"": ""qwen2"", ""messages"": [{""role"": ""user"", ""content"": ""你是谁""}], ""temperature"": 0.1, ""stream"": false}"
`有回复即成功
测试向量模型接口:`curl "http://localhost:11434/api/embeddings" ^
--data "{""model"": ""shaw/dmeta-embedding-zh"", ""prompt"": ""天空是灰色的""}"
`有向量数据即成功
注意如果下载的是其他模型,需要相应替换model的value,模型的名字可以在ollama list后复制
5、对接所有模块
5.1、oneapi对接配置
docker-compose up -d
启动docker-compose
进入oneapi本地化界面http://localhost:3001/
点击渠道->添加新的渠道
类型选择ollama,名称随意,分组随意,模型必须和ollama list里面的名称一致,因为就是靠这个匹配模型的,密钥随意
代理填这个:http://host.docker.internal:11434,通过11434端口访问ollama程序
注意的是,docker内使用的是虚拟网络,port 3001:3000右边就是docker内使用的端口号,左边是宿主机映射的端口号,docker内部无法直接访问宿主机网络,而oneapi运行在docker环境中,所以oneapi要想对接到宿主机的ollama程序,需要使用docker官方提供的http://host.docker.internal:端口号进行访问。
而oneapi对接fastgpt等同为docker容器内的程序,可以直接通信,至于fastgpt和oneapi对接在docker-compose.yml文件中如图
就是OPENAI_BASE_URL参数,如果你是在非本地部署的,需要将openapi换成服务器公网ip
CHAT_API_KEY这个参数也是用于非本地部署的,可以去找资料或者视频研究,此时演示本地部署不用管这两个,默认就好
渠道配置好后,点击测试,成功即可,注意向量模型测试返回400就是正常
同理给qwen2也配置好渠道并测试,如果失败则说明ollama没有启动成功,用下面命令查看是否成功
ollama装好就是一直运行的,即使没有运行里面的模型。如果11434端口没在运行,可以搜一下教程
5.2、config.json配置
将config.json这个位置第一个model和name修改成qwen2,这个会传入到fastgpt模型选择参数中,同时也用来对接oneapi渠道的模型名称(易错点5)所以一定要一致,不一致后面会报错的
同理下面有embedding模型,不过默认已经配置好了,如果需要用到别的模型就得一样修改
保存config.json文件,执行docker-compose down
关闭,后启动docker-compose up -d
每次修改完配置文件都需要重启docker-compose才行
6、测试模型和自建知识库
6.1、测试LLM
首先刷新oneapi渠道页面,重新测试LLM和向量模型,正常后打开fastgpt页面
新建一个简易应用,点进去,里面model的选项对应上的就是config.json的LLMModels的参数列表
选择qwen2,也只能用这个,后面的模型使用相应接口去对接用不了。
进行测试对话是否成功,如果报错,大概率还是config.json和oneapi渠道model名称不一致,可以检查一下,注意修改后需要重启docker-compose
6.2、测试自建知识库
新建知识库
会看到索引模型和文件处理模型,缺一不可,如果没有索引(向量)模型,那么知识库无法使用
手动录入一段信息如上图
回到应用选择知识库
并再次进行问答
速度会较慢,我用的轻薄本没有独显,CPU跑的,这里也是测试成功了
接下来就熟练一下fastgpt的使用即可
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。