编辑
2024-08-02
我当运维
00
请注意,本文编写于 358 天前,最后修改于 17 天前,其中某些信息可能已经过时。

目录

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

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

前提

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

1. FastGPTDocker

这里是完整的docker-compose.yml

docker-compose.yml
version: "3.3" services: # db pg: image: pgvector/pgvector:0.7.0-pg15 # docker hub container_name: fastgpt_pg # restart: always 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 container_name: fastgpt_mongo # restart: always 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: "fastgpt_mongo:27017" } # ] }) }' > /data/initReplicaSet.js exec docker-entrypoint.sh "$$@" & 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 wait $$! redis: image: redis:7.2-alpine container_name: fastgpt_redis # networks: - fastgpt restart: always command: > redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction healthcheck: test: - CMD - redis-cli - -a - mypassword - ping interval: 10s timeout: 3s retries: 3 start_period: 30s volumes: - ./redis/data:/data # fastgpt sandbox: container_name: fastgpt_sandbox # image: ghcr.io/labring/fastgpt-sandbox:latest # git networks: - fastgpt restart: always fastgpt-mcp-server: container_name: fastgpt_mcp_server # image: ghcr.io/labring/fastgpt-mcp_server:latest # git ports: - 3005:3000 networks: - fastgpt restart: always environment: - FASTGPT_ENDPOINT=http://fastgpt_app:3000 # fastgpt: container_name: fastgpt_app # image: ghcr.io/labring/fastgpt:latest # git ports: - 3000:3000 networks: - fastgpt depends_on: - mongo - pg - sandbox restart: always environment: - DEFAULT_ROOT_PSW=123456 - AIPROXY_API_ENDPOINT=http://fastgpt_aiproxy:3000 # - AIPROXY_API_TOKEN=aiproxy - CHAT_API_KEY=sk-9NeBc4NjKWDMdhZ61686D06eCa0e461d8fC0Eb39C06e4f8c - DB_MAX_LINK=30 - TOKEN_KEY=any - ROOT_KEY=root_key - FILE_TOKEN_KEY=filetoken - MONGODB_URI=mongodb://myusername:mypassword@fastgpt_mongo:27017/fastgpt?authSource=admin # - REDIS_URI=redis://default:mypassword@fastgpt_redis:6379 # - REDIS_URL=redis://default:mypassword@fastgpt_redis:6379 # - PG_URL=postgresql://username:password@fastgpt_pg:5432/postgres # - SANDBOX_URL=http://fastgpt_sandbox:3000 # - LOG_LEVEL=info - STORE_LOG_LEVEL=warn volumes: - ./config.json:/app/data/config.json aiproxy: image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.2.2 container_name: fastgpt_aiproxy # restart: unless-stopped depends_on: aiproxy_pg: condition: service_healthy networks: - fastgpt environment: - ADMIN_KEY=aiproxy - LOG_DETAIL_STORAGE_HOURS=1 - SQL_DSN=postgres://postgres:aiproxy@fastgpt_aiproxy_pg:5432/aiproxy # - RETRY_TIMES=3 - BILLING_ENABLED=false - DISABLE_MODEL_CONFIG=true healthcheck: test: - CMD - curl - -f - http://localhost:3000/api/status interval: 5s timeout: 5s retries: 10 aiproxy_pg: image: pgvector/pgvector:0.8.0-pg15 # docker hub restart: unless-stopped container_name: fastgpt_aiproxy_pg # volumes: - ./aiproxy_pg:/var/lib/postgresql/data networks: - fastgpt environment: TZ: Asia/Shanghai POSTGRES_USER: postgres POSTGRES_DB: aiproxy POSTGRES_PASSWORD: aiproxy healthcheck: test: - CMD - pg_isready - -U - postgres - -d - aiproxy interval: 5s timeout: 5s retries: 10 networks: fastgpt: null

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 许可协议。转载请注明出处!