编辑
2024-08-02
我当运维
00

目录

前提
1. FastGPTDocker
2. FastGPTConfig
3. oneapi
3.1 首先要有令牌
3.2 然后是渠道

最近不是本地知识库挺火么,我就在笔记本搭了一下,跑不动事真的,才6G现存,32G内存,但是流程摸清楚了,这里记录下,本地模型使用 Ollama,知识库测试了使用 FastGPTAnythingLLM,后者比较简单,这里主要记录FastGPT

前提

部署 DockerOllama ,没啥可说的 如果没有GPU 默认跑 CPU

1. FastGPTDocker

这里是完整的docker-compose.yml

注意

注意

  1. 这里的 #139 行 oneapi的版本是 :v0.6.4,和官方下的不一样,这个版本能用,默认提供的不能用
  2. 在最下面增加了 reranker 重排模型,非常好用
  3. 如果oneapi链接不上,即host.docker.internal 无效,可以给oneapi设置网络别名
networks: fastgpt: aliases: - oneapinetwork

fastgpt节点直接使用 OPENAI_BASE_URL=http://oneapinetwork:3001/v1 同样 reranker 也可以,reranker的地址在config

  1. 没有GPU,要注释 rerankerdeploy 节点
docker-compose.yml
# 数据库的默认账号和密码仅首次运行时设置有效 # 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~ # 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。 # 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包) version: '3.3' services: # db pg: image: pgvector/pgvector:0.7.0-pg15 # docker hub # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 # 阿里云 container_name: pg restart: always ports: # 生产环境建议不要暴露 - 5432:5432 networks: - fastgpt environment: # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果 - POSTGRES_USER=username - POSTGRES_PASSWORD=password - POSTGRES_DB=postgres volumes: - ./pg/data:/var/lib/postgresql/data mongo: image: mongo:5.0.18 # dockerhub # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云 # image: mongo:4.4.29 # cpu不支持AVX时候使用 container_name: mongo restart: always ports: - 27017:27017 networks: - fastgpt command: mongod --keyFile /data/mongodb.key --replSet rs0 environment: - MONGO_INITDB_ROOT_USERNAME=myusername - MONGO_INITDB_ROOT_PASSWORD=mypassword volumes: - ./mongo/data:/data/db entrypoint: - bash - -c - | openssl rand -base64 128 > /data/mongodb.key chmod 400 /data/mongodb.key chown 999:999 /data/mongodb.key echo 'const isInited = rs.status().ok === 1 if(!isInited){ rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "mongo:27017" } ] }) }' > /data/initReplicaSet.js # 启动MongoDB服务 exec docker-entrypoint.sh "$$@" & # 等待MongoDB服务启动 until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')" > /dev/null 2>&1; do echo "Waiting for MongoDB to start..." sleep 2 done # 执行初始化副本集的脚本 mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js # 等待docker-entrypoint.sh脚本执行的MongoDB服务进程 wait $$! # fastgpt sandbox: container_name: sandbox image: ghcr.io/labring/fastgpt-sandbox:latest # git # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:latest # 阿里云 networks: - fastgpt restart: always fastgpt: container_name: fastgpt image: ghcr.io/labring/fastgpt:v4.8.7 # git # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.7 # 阿里云 ports: - 3000:3000 networks: - fastgpt depends_on: - mongo - pg - sandbox restart: always environment: # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 - DEFAULT_ROOT_PSW=1234 # AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。 - OPENAI_BASE_URL=http://host.docker.internal:3001/v1 # AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改) - CHAT_API_KEY=sk-fastgpt # 数据库最大连接数 - DB_MAX_LINK=30 # 登录凭证密钥 - TOKEN_KEY=any # root的密钥,常用于升级时候的初始化请求 - ROOT_KEY=root_key # 文件阅读加密 - FILE_TOKEN_KEY=filetoken # MongoDB 连接参数. 用户名myusername,密码mypassword。 - MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin # pg 连接参数 - PG_URL=postgresql://username:password@pg:5432/postgres # sandbox 地址 - SANDBOX_URL=http://sandbox:3000 # 日志等级: debug, info, warn, error - LOG_LEVEL=info - STORE_LOG_LEVEL=warn volumes: - ./config.json:/app/data/config.json # oneapi mysql: # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云 image: mysql:8.0.36 container_name: mysql restart: always ports: - 3306:3306 networks: - fastgpt command: --default-authentication-plugin=mysql_native_password environment: # 默认root密码,仅首次运行有效 MYSQL_ROOT_PASSWORD: oneapimmysql MYSQL_DATABASE: oneapi volumes: - ./mysql:/var/lib/mysql oneapi: container_name: oneapi image: ghcr.io/songquanpeng/one-api:v0.6.4 # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云 ports: - 3001:3000 depends_on: - mysql networks: - fastgpt restart: always environment: # mysql 连接参数 - SQL_DSN=root:oneapimmysql@tcp(mysql:3306)/oneapi # 登录凭证加密密钥 - SESSION_SECRET=oneapikey # 内存缓存 - MEMORY_CACHE_ENABLED=true # 启动聚合更新,减少数据交互频率 - BATCH_UPDATE_ENABLED=true # 聚合更新时长 - BATCH_UPDATE_INTERVAL=10 # 初始化的 root 密钥(建议部署完后更改,否则容易泄露) - INITIAL_ROOT_TOKEN=fastgpt volumes: - ./oneapi:/data reranker: image: registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1 container_name: reranker networks: - fastgpt # GPU运行环境,如果宿主机未安装,将deploy配置隐藏即可 deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] ports: - 6006:6006 environment: - ACCESS_TOKEN=sk-fastgpt networks: fastgpt:

2. FastGPTConfig

部署fastgpt还有一个文件是 config.json 他俩在一个目录下

注意

注意

  1. llmModels 就是模型列表,model字段 和 oneapi 里配置的模型对应上就可以,其他的酌情修改;
  2. vectorModels 是量化模型,也是 model字段 和 oneapi 对应;
  3. reRankModels 是重排模型;
  4. 剩下的我没改过,修改生效需要重启 FastGPT
config.json
// 已使用 json5 进行解析,会自动去掉注释,无需手动去除 { "feConfigs": { "lafEnv": "https://laf.dev" // laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。 }, "systemEnv": { "vectorMaxProcess": 15, "qaMaxProcess": 15, "pgHNSWEfSearch": 100 // 向量搜索参数。越大,搜索越精确,但是速度越慢。设置为100,有99%+精度。 }, "llmModels": [ { "model": "gpt-4o-ca", // 模型名(对应OneAPI中渠道的模型名) "name": "gpt-4o-ca", // 模型别名 "avatar": "/imgs/model/openai.svg", // 模型的logo "maxContext": 125000, // 最大上下文 "maxResponse": 4000, // 最大回复 "quoteMaxToken": 120000, // 最大引用内容 "maxTemperature": 1.2, // 最大温度 "charsPointsPrice": 0, // n积分/1k token(商业版) "censor": false, // 是否开启敏感校验(商业版) "vision": true, // 是否支持图片输入 "datasetProcess": true, // 是否设置为知识库处理模型(QA),务必保证至少有一个为true,否则知识库会报错 "usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true) "usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true) "usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true) "usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true) "toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持) "functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式) "customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型 "customExtractPrompt": "", // 自定义内容提取提示词 "defaultSystemChatPrompt": "", // 对话默认携带的系统提示词 "defaultConfig": {} // 请求API时,挟带一些默认配置(比如 GLM4 的 top_p) }, { "model": "gpt-4o-mini", // 模型名(对应OneAPI中渠道的模型名) "name": "gpt-4o-mini", // 模型别名 "avatar": "/imgs/model/openai.svg", // 模型的logo "maxContext": 125000, // 最大上下文 "maxResponse": 4000, // 最大回复 "quoteMaxToken": 120000, // 最大引用内容 "maxTemperature": 1.2, // 最大温度 "charsPointsPrice": 0, // n积分/1k token(商业版) "censor": false, // 是否开启敏感校验(商业版) "vision": true, // 是否支持图片输入 "datasetProcess": true, // 是否设置为知识库处理模型(QA),务必保证至少有一个为true,否则知识库会报错 "usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true) "usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true) "usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true) "usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true) "toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持) "functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式) "customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型 "customExtractPrompt": "", // 自定义内容提取提示词 "defaultSystemChatPrompt": "", // 对话默认携带的系统提示词 "defaultConfig": {} // 请求API时,挟带一些默认配置(比如 GLM4 的 top_p) }, { "model": "GLM-4-0520", // 模型名(对应OneAPI中渠道的模型名) "name": "chatglm", // 模型别名 "avatar": "/imgs/model/openai.svg", // 模型的logo "maxContext": 125000, // 最大上下文 "maxResponse": 4000, // 最大回复 "quoteMaxToken": 120000, // 最大引用内容 "maxTemperature": 1.2, // 最大温度 "charsPointsPrice": 0, // n积分/1k token(商业版) "censor": false, // 是否开启敏感校验(商业版) "vision": true, // 是否支持图片输入 "datasetProcess": true, // 是否设置为知识库处理模型(QA),务必保证至少有一个为true,否则知识库会报错 "usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true) "usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true) "usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true) "usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true) "toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持) "functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式) "customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型 "customExtractPrompt": "", // 自定义内容提取提示词 "defaultSystemChatPrompt": "", // 对话默认携带的系统提示词 "defaultConfig": {} // 请求API时,挟带一些默认配置(比如 GLM4 的 top_p) }, { "model": "moonshot-v1-32k", // 模型名(对应OneAPI中渠道的模型名) "name": "kimi", // 模型别名 "avatar": "/imgs/model/openai.svg", // 模型的logo "maxContext": 125000, // 最大上下文 "maxResponse": 4000, // 最大回复 "quoteMaxToken": 120000, // 最大引用内容 "maxTemperature": 1.2, // 最大温度 "charsPointsPrice": 0, // n积分/1k token(商业版) "censor": false, // 是否开启敏感校验(商业版) "vision": true, // 是否支持图片输入 "datasetProcess": true, // 是否设置为知识库处理模型(QA),务必保证至少有一个为true,否则知识库会报错 "usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true) "usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true) "usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true) "usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true) "toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持) "functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式) "customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型 "customExtractPrompt": "", // 自定义内容提取提示词 "defaultSystemChatPrompt": "", // 对话默认携带的系统提示词 "defaultConfig": {} // 请求API时,挟带一些默认配置(比如 GLM4 的 top_p) }, { "model": "gpt-4o", "name": "gpt-4o", "avatar": "/imgs/model/openai.svg", "maxContext": 125000, "maxResponse": 4000, "quoteMaxToken": 120000, "maxTemperature": 1.2, "charsPointsPrice": 0, "censor": false, "vision": true, "datasetProcess": false, "usedInClassify": true, "usedInExtractFields": true, "usedInToolCall": true, "usedInQueryExtension": true, "toolChoice": true, "functionCall": false, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} } ], "vectorModels": [ { "model": "chatfire/bge-m3:q8_0", // 模型名(与OneAPI对应) "name": "bge-m3", // 模型展示名 "avatar": "/imgs/model/openai.svg", // logo "charsPointsPrice": 0, // n积分/1k token "defaultToken": 700, // 默认文本分割时候的 token "maxToken": 3000, // 最大 token "weight": 100, // 优先训练权重 "defaultConfig": {}, // 自定义额外参数。例如,如果希望使用 embedding3-large 的话,可以传入 dimensions:1024,来返回1024维度的向量。(目前必须小于1536维度) "dbConfig": {}, // 存储时的额外参数(非对称向量模型时候需要用到) "queryConfig": {} // 参训时的额外参数 }, { "model": "nomic-embed-text:latest", // 模型名(与OneAPI对应) "name": "ollama", // 模型展示名 "avatar": "/imgs/model/openai.svg", // logo "charsPointsPrice": 0, // n积分/1k token "defaultToken": 700, // 默认文本分割时候的 token "maxToken": 3000, // 最大 token "weight": 100, // 优先训练权重 "defaultConfig": {}, // 自定义额外参数。例如,如果希望使用 embedding3-large 的话,可以传入 dimensions:1024,来返回1024维度的向量。(目前必须小于1536维度) "dbConfig": {}, // 存储时的额外参数(非对称向量模型时候需要用到) "queryConfig": {} // 参训时的额外参数 } ], "reRankModels": [ { "model": "bge-reranker-base", // 随意 "name": "检索重排-base", // 随意 "charsPointsPrice": 0, "requestUrl": "http://host.docker.internal:6006/v1/rerank", "requestAuth": "sk-fastgpt" } ], "audioSpeechModels": [ { "model": "tts-1", "name": "OpenAI TTS1", "charsPointsPrice": 0, "voices": [ { "label": "Alloy", "value": "alloy", "bufferId": "openai-Alloy" }, { "label": "Echo", "value": "echo", "bufferId": "openai-Echo" }, { "label": "Fable", "value": "fable", "bufferId": "openai-Fable" }, { "label": "Onyx", "value": "onyx", "bufferId": "openai-Onyx" }, { "label": "Nova", "value": "nova", "bufferId": "openai-Nova" }, { "label": "Shimmer", "value": "shimmer", "bufferId": "openai-Shimmer" } ] } ], "whisperModel": { "model": "whisper-1", "name": "Whisper1", "charsPointsPrice": 0 } }

3. oneapi

注意每次配置完 oneapi 要重启 ,

注意

注意 默认密码是 123456

地址 https://github.com/songquanpeng/one-api

3.1 首先要有令牌

就是上面的 CHAT_API_KEY 字段 (#99 行),这里不用配置,默认就是

3.2 然后是渠道

自己按字段添加就行,这里的模型 就是上面提到的 model 字段,他俩名字一样就能找到了

可是使用 ollama list 查看本地已经下载的模型

这个重排模型很迷,加上没坏处

至此环境就搭建完了,下一篇再记录创建知识库

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:没想好

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!