【大模型】Ubuntu下 fastgpt 的部署和使用
前言
本次安装的版本为 fastgpt:v4.8.8-fix2。
最新版本fastgpt:v4.8.20-fix2 问答时报错,本着跑通先使用起来,就没有死磕下去,后面bug解了再进行记录。
github连接:https://github.com/labring/FastGPT
fastgpt 安装说明:https://doc.tryfastgpt.ai/docs/development/docker/
1 fastgpt 工程部署
1.1 fastgpt的简介
FastGPT 是一个基于大型语言模型(LLM)的知识库问答系统,专注于高效对话和任务处理。以下是关于 FastGPT 的详细介绍:
【功能】
- 专属 AI 客服:通过导入文档或问答对进行训练,AI 模型可以根据文档内容以交互式对话方式回答问题。
- 可视化工作流编排:基于 Flow 模块,用户可以设计复杂的工作流,实现自动化和智能化的处理流程。
- 自动数据预处理:支持多种文档格式(如 Word、PDF、Excel、Markdown 等)的导入,自动完成文本预处理、向量化和问答分割,节省手动训练时间。
- 强大的 API 集成:API 接口对齐 OpenAI 官方接口,可以轻松集成到企业微信、公众号、飞书等平台。
- 多模型兼容性:支持 GPT、Claude、文心一言等多种 LLM 模型。
【特点】
- 高效性:经过优化,能够快速生成高质量内容,适合实时性要求较高的场景。
- 开源性:遵循附加条件的 Apache License 2.0 开源协议,用户可以进行二次开发。
- 个性化与定制化:可以根据具体业务需求定制训练,调整语言风格、语气或行业专用术语。
- 数据处理能力强:能够整合大量非结构化数据,自动优化答案质量和查询效率。
- 用户友好:对话流畅,具备自然的语义理解能力,适合长对话和复杂任务。
1.2 工程所需前置环境
服务器的配置:ubuntu 22.04、Tesla V100-SXM2-32GB、CUDA Version12.2
lsb_release -a nvidia-smi
fastgpt的安装和使用的前提环境:
- docker 的安装:参考 【环境配置】ubuntu中 Docker的安装
- LLMs 的语言大模型:deepseek-r1:32b。参考链接 【大模型】Ubuntu下安装ollama,DeepSseek-R1:32b的本地部署和运行
- 向量模型:m3e-large。参考链接 【大模型】Xinference的安装和部署。当然向量模型也可以选择ollama启动bge-large模型。
1.3 fastgpt 的配置文件
yml 文件和 json 文件的最新版本下载,参考链接 https://doc.tryfastgpt.ai/docs/development/docker/ 中给出了下载命令如下。
mkdir fastgpt cd fastgpt curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json # pgvector 版本(测试推荐,简单快捷) curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml # milvus 版本 # curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-milvus.yml # zilliz 版本 # curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-zilliz.yml
个人使用该版本在使用时报错。所以这里直接给出 fastgpt:v4.8.8-fix2 使用的 yml 和json 的文件,将其放置在路径fastgpt下。
【config.json
】 文件内容如下。
- 其中
llmModels
中,填写自己调用的chat模型的信息。直接复制已有的内容,然后修改model
和name
的内容。vectorModels
中,填写自己调用的向量模型。与上相同,直接复制已有的内容,然后修改model
和name
的内容。{ "feConfigs": { "lafEnv": "https://laf.dev" }, "systemEnv": { "vectorMaxProcess": 15, "qaMaxProcess": 15, "pgHNSWEfSearch": 100 }, "llmModels": [ { "model": "deepseek-r1:32b", "name": "deepseek-r1:32b", "avatar": "/imgs/model/deepseek.svg", "maxContext": 128000, "maxResponse": 128000, "quoteMaxToken": 32000, "maxTemperature": 1.2, "charsPointsPrice": 0, "censor": false, "vision": false, "datasetProcess": true, "usedInClassify": true, "usedInExtractFields": true, "usedInToolCall": true, "usedInQueryExtension": true, "toolChoice": false, "functionCall": false, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} } ], "vectorModels": [ // 如果需要多语言支持和高精度语义检索,推荐 BGE-M3。 // 如果主要处理中文文本,且资源受限,推荐 M3E。 // 如果需要中英文混合处理且对精度要求较高,推荐 BGE-Large。 { "model": "bge-large:latest", "name": "bge-large:latest", "charsPointsPrice": 0, "defaultToken": 256, "maxToken": 512, "weight": 100, "defaultConfig": {}, "dbConfig": {}, "queryConfig": {} }, { "model": "m3e-large", "name": "m3e-large", "charsPointsPrice": 0, "defaultToken": 256, "maxToken": 512, "weight": 100, "defaultConfig": {}, "dbConfig": {}, "queryConfig": {} } ], "reRankModels": [ ], "audioSpeechModels": [ ], "whisperModel": [ ] }
【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:v4.8.20-fix2 # git # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.8.20-fix2 # 阿里云 networks: - fastgpt restart: always fastgpt: container_name: fastgpt image: ghcr.io/labring/fastgpt:v4.8.8-fix2 # git # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.20-fix2 # 阿里云 ports: - 3000:3000 networks: - fastgpt depends_on: - mongo - pg - sandbox restart: always environment: # 前端访问地址: http://localhost:3000 - FE_DOMAIN=http://localhost:3000 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 - DEFAULT_ROOT_PSW=1234 # AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。 - OPENAI_BASE_URL=http://oneapi:3000/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 # 工作流最大运行次数 - WORKFLOW_MAX_RUN_TIMES=1000 # 批量执行节点,最大输入长度 - WORKFLOW_MAX_LOOP_TIMES=100 # 自定义跨域,不配置时,默认都允许跨域(多个域名通过逗号分割) - ALLOWED_ORIGINS= # 是否开启IP限制,默认不开启 - USE_IP_LIMIT=false 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.7 # 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 networks: fastgpt:
1.4 启动容器
在路径fastgpt下的终端运行
docker compose up -d
待结束后,查看容器情况。结果如下则说明工程正确启动。
【过程中可能遇到错误】
现象:端口 3306 被占用:
问题查看:使用下面命令查看端口被占用情况。
发现端口 3306 被本地的 mysqld 进程(PID 1203)占用了。这是一个独立的 MySQL 服务,运行在宿主机上,而不是 Docker 容器中。sudo lsof -i :3306
解决:停止宿主机上的 MySQL 服务。然后重新启动容器
sudo systemctl stop mysql # sudo kill -9 1203 (或者直接杀掉进程) docker compose up -d
oneapi没有启动起来:
该问题个人没有遇到。但较多人遇到过,这里记录下解决方法:# 等待10s,OneAPI第一次总是要重启几次才能连上Mysql sleep 10 # 重启一次oneapi(由于OneAPI的默认Key有点问题,不重启的话会提示找不到渠道,临时手动重启一次解决) docker restart oneapi
2 oneapi 配置
2.1 oneapi 的简介
OneAPI 是一个统一的接口管理与分发系统,旨在通过提供一个单一、统一的接口,简化对多个后端服务或数据源的访问。
它具备以下核心功能和特点:
【核心功能】
- 集中式 API 密钥管理:
提供集中式的 API 密钥管理和二次分发功能,确保安全性和灵活性。
支持令牌的过期时间、额度和 IP 范围管理。- 多系统功能整合:
将来自不同系统的功能和服务整合在一起,开发者只需与一个接口交互,无需分别处理多个不同的 API。
支持多种主流 AI 模型和服务,包括 OpenAI、百度文心一言、阿里通义千问等。- 简化开发与管理:
简化开发过程,提高开发效率。
便于维护和管理,支持动态更新和跨平台同步。
【特点】
- 一键部署:
打包成单个可执行文件,提供 Docker 镜像,实现一键部署和开箱即用的便捷体验。
支持多种部署方式,包括本地部署、Docker 部署和面板部署。- 适用场景:
适用于企业、开发者和研究者,简化多 AI 服务的接入和管理。
支持负载均衡、流式传输和多机部署,提升系统可用性和性能。
2.2 oneapi 的配置
在浏览器访问 http://127.0.0.1:3001,使用默认账号 root 和密码 123456 登录。
2.2.1 oneapi 的渠道
OneAPI 的渠道管理功能允许用户将不同的大模型 API(如 OpenAI、百度文心一言、阿里通义千问等)统一接入到 OneAPI 平台中。每个渠道对应一个 API Key,用户可以通过以下步骤添加和管理渠道。
- 【ollama部署的模型 的oneapi的渠道配置】
在控制台中点击【渠道
】选项卡,选择【添加新的渠道
】。
然后界面如下图:
![]()
- 【类型】选择对应的模型类型 ollama。
- 【名称】自定义渠道名称。这里填写了【ollama】。
- 【模型】选择或填入支持的模型。若是填入的方式,一定注意名称的正确填写,可使用命令【ollama list】查看ollama下载的模型。这里填写【deepseek-r1:32b、bge-large:latest】
- 【密钥】这里是本地部署的模型,密钥随便填写。
- 【代理】这里填写部署ollama模型的地址。
- 【提交】点击“提交”完成渠道添加。
【测试
】如下图,配置正确的话,点击绿色框的测试,界面会弹出 “测试成功” 的字样。
需要注意的是,如果仅添加向量模型,这里是无法测试通的。
- 【xinference 部署的模型 的oneapi的渠道配置】
2.2.2 oneapi 的令牌
复制这里的令牌。
3 fastgpt 的基本使用
3.1 fastgpt 的重启
- 在 文件 docker-compose.yml 中,搜索
CHAT_API_KEY
,将前面复制的令牌粘贴到这里# AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改) - CHAT_API_KEY=sk-fastgptsk-enxd9BewOzi0eaoGB2AdD5BdEf834a5e9b0e269780703dD8
- 重启容器
docker compose down docker compose up -d
重启了后,就可以在服务器中访问 http://127.0.0.1:3000,使用默认账号 root 和密码 1234 登录。
登录后界面如下图。功能测试主要在左侧的【工作台】【知识库】。操作流程如下。
3.2 知识库
- 新建知识库,【+新建】、【知识库】、【通用知识库】、命名、选择配置好的向量模型。
- 成功后界面左侧,【数据集】【搜索测试】【配置】三项。
【数据集】界面中,右上角【新建/导入】、这里测试【文本数据集】、【本地文件】… 后续的操作流程如下图所示
- 文件添加成功后,可以点进文件名称,如上图。点进去后,可以看到文档分割成块后的数据。通过这里的数据,可以看到分割的是否OK。
- 然后在【搜索测试】中,可以测试 问题检索出好坏。在下图中【语义检索】中,可以进一步勾选,这里默认不变。
- 在【配置】中,可以修改模型的选择。
3.3 工作台
- 创建一个【简易应用】。操作如下图:
- 配置关联的知识库,然后进行问答。如下图
- 然后进行 应用发布,点击右上角的【发布】
- 点击【发布渠道】界面,然后【创建新链接】、【开始使用】、【复制链接】在浏览器中打开。
- 链接的界面下,进行问答。
- 若想其他电脑都能访问,则需完成 在服务启动时绑定到公网IP,开放防火墙端口等操作。