剪藏#NASBox#剪藏

手把手教你在 NAS 部署 FastGPT,构建智能 AI 模型问答知识库

2025 年 7 月 18 日1 分钟
分享Twitter / XTelegram微博
手把手教你在 NAS 部署 FastGPT,构建智能 AI 模型问答知识库 封面

如有修改或改动,关注文章底部留言!

教程对你有用,可以 “点赞” 和 “打赏”支持 ~

Notion image

FastGPT:

一个基于 LLM 大模型的开源 AI 知识库构建平台。提供了开箱即用的数据处理、模型调用、RAG 检索、可视化 AI 工作流编排等能力,帮助您轻松构建复杂的 AI 应用。

Notion image

部署架构图:

  • • MongoDB:用于存储除了向量外的各类数据

  • • PostgreSQL/Milvus:存储向量数据

  • • OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验)

Notion image

在线使用:

国际版:https://tryfastgpt.ai

国内版:https://fastgpt.cn

安装

一共有 3 个不同版本可以选择:PgVector版本、Milvus版本、zilliz cloud版本,具体区别可以看下图。下面演示安装的是 PgVector 轻量版,其他版本部署也是类似。

Notion image

TIP:

下面提供的 docker-compose.yml 是我修改过统一容器名称的,需要原汁原味的可以去官方下载即可。

下载最新 docker-compose.yml 文件(文件重命名,端口被占用的话自行修改即可)

https://github.com/labring/FastGPT/blob/main/deploy/docker/docker-compose-pgvector.yml

JAVASCRIPT
# 数据库的默认账号和密码仅首次运行时设置有效
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
# 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)

services:
  # db
  fastgpt-pg:
    image: pgvector/pgvector:0.8.0-pg15 # docker hub
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.8.0-pg15 # 阿里云
    container_name: fastgpt-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
    healthcheck:
      test: ['CMD''pg_isready''-U''postgres''-d''postgres']
      interval: 5s
      timeout: 5s
      retries10
  fastgpt-mongo:
    imagemongo:5.0.18 # dockerhub
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
    # imagemongo:4.4.29 # cpu不支持AVX时候使用
    container_name: fastgpt-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: "fastgpt-mongo:27017" }
              ]
          })
        }' > /data/initReplicaSet.js
        # 启动MongoDB服务
        exec docker-entrypoint.sh"$$@" &

        # 等待MongoDB服务启动
        until mongo -u myusername -p mypassword --authenticationDatabase admin --eval"print('waited for connection')"do
          echo "Wai
JAVASCRIPT
ting for MongoDB to start..."
          sleep 2
        done

        # 执行初始化副本集的脚本
        mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js

        # 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
        wait $$!

  fastgpt-redis:
    imageredis:7.2-alpine
    container_name: fastgpt-redis
    # ports:
    # - 6379:6379
    networks:
      - fastgpt
    restart: always
    command: |
      redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 6010 --maxmemory 4gb --maxmemory-policy noeviction
    healthcheck:
      test: ['CMD''redis-cli''-a''mypassword''ping']
      interval: 10s
      timeout: 3s
      retries3
      start_period: 30s
    volumes:
      - ./redis/data:/data

  # fastgpt
  fastgpt-sandbox:
    container_name: fastgpt-sandbox
    image: ghcr.io/labring/fastgpt-sandbox:v4.9.10-fix2 # git
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.9.10-fix2 # 阿里云
    networks:
      - fastgpt
    restart: always
  fastgpt-mcp-server:
    container_name: fastgpt-mcp-server
    image: ghcr.io/labring/fastgpt-mcp_server:v4.9.10-fix2 # git
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.9.10-fix2 # 阿里云
    ports:
      - 3005:3000
    networks:
      - fastgpt
    restart: always
    environment:
      - FASTGPT_ENDPOINT=http://fastgpt:3000
fastgpt:
    container_name: fastgpt
    image: ghcr.io/labring/fastgpt:v4.9.10-fix2 # git
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.9.10-fix2 # 阿里云
    ports:
      - 3000:3000
    networks:
      - fastgpt
    depends_on:
      - fastgpt-mongo
      - fastgpt-pg
      - fastgpt-sandbox
    restart: always
    environment:
      # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
      - FE_DOMAIN=
      # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
      - DEFAULT_ROOT_PSW=1234
      # AIProxy 的地址,如
JAVASCRIPT
果配了该地址,优先使用
      - AIPROXY_API_ENDPOINT=http://fastgpt-aiproxy:3000
      # AIProxy 的 AdminToken,与 AIProxy 中的环境变量 ADMIN_KEY
      - AIPROXY_API_TOKEN=aiproxy
      # 数据库最大连接数
      - DB_MAX_LINK=30
      # 登录凭证密钥
      - TOKEN_KEY=any
      # root的密钥,常用于升级时候的初始化请求
      - ROOT_KEY=root_key
      # 文件阅读加密
      - FILE_TOKEN_KEY=filetoken
      # MongoDB 连接参数. 用户名myusername,密码mypassword。
      - MONGODB_URI=mongodb://myusername:mypassword@fastgpt-mongo:27017/fastgpt?authSource=admin
      # pg 连接参数
      - PG_URL=postgresql://username:password@fastgpt-pg:5432/postgres
      # Redis 连接参数
      - REDIS_URL=redis://default:mypassword@fastgpt-redis:6379
      # sandbox 地址
      - SANDBOX_URL=http://fastgpt-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
      # 对话文件过期天数
      - CHAT_FILE_EXPIRE_TIME=7
    volumes:
      - ./config.json:/app/data/config.json

  # AIProxy
  fastgpt-aiproxy:
    image: ghcr.io/labring/aiproxy:v0.1.7
    # image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.1.7 # 阿里云
    container_name: fastgpt-aiproxy
    restart: unless-stopped
    depends_on:
      fastgpt-aiproxy-pg:
        condition: service_healthy
    networks:
      - fastgpt
    environment:
      # 对应 fastgpt 里的AIPROXY_API_TOKEN
      - 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
      retries10
  fastgpt-aiproxy-pg:
   
JAVASCRIPT
 image: pgvector/pgvector:0.8.0-pg15 # docker hub
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.8.0-pg15 # 阿里云
    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
      retries10
networks:
fastgpt:

下载最新 config.json 文件(修改 mcpServerProxyEndpoint 访问地址)

https://raw.githubusercontent.com/labring/FastGPT/refs/heads/main/projects/app/data/config.json

JAVASCRIPT
// 已使用 json5 进行解析,会自动去掉注释,无需手动去除
{
"feConfigs": {
    "lafEnv""https://laf.dev"// laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。
    "mcpServerProxyEndpoint""http://localhost:3005"// mcp server 代理地址,例如: http://localhost:3005
  },
"systemEnv": {
    "vectorMaxProcess"10// 向量处理线程数量
    "qaMaxProcess"10// 问答拆分线程数量
    "vlmMaxProcess"10// 图片理解模型最大处理进程
    "tokenWorkers"30// Token 计算线程保持数,会持续占用内存,不能设置太大。
    "hnswEfSearch"100// 向量搜索参数,仅对 PG 和 OB 生效。越大,搜索越精确,但是速度越慢。设置为100,有99%+精度。
    "hnswMaxScanTuples"100000// 向量搜索最大扫描数据量,仅对 PG生效。
    "customPdfParse": {
      "url"""// 自定义 PDF 解析服务地址
      "key"""// 自定义 PDF 解析服务密钥
      "doc2xKey"""// doc2x 服务密钥
      "price"0// PDF 解析服务价格
    }
  }
}

创建 fastgpt 文件夹,将 docker-compose.yml 和 config.json 文件放到里面

Notion image

连接 SSH ,文件给一下 777 权限

Notion image

直接构建项目就可以了(如果很久都没启动建议看看日志报错)

Notion image

如果遇到问题,建议查看官网文档:

https://doc.fastgpt.cn/docs/development/docker

使用

浏览器中输入 http://NAS的IP:3000就能看到界面

Notion image

TIP:

默认账号是 root,密码为 1234,修改账号和密码需要可以去 docker-compose.yml 文件里配置,Web 界面好像是没有这个功能的。

输入账号和密码进行登录

Notion image

模型供应商

首先需要添加模型供应商

Notion image

支持的厂商还是比较多的

Notion image

这里添加了 moonshot 作为演示,建议将相关供应商模型都勾选上

Notion image

添加完成,测试一下是否正常工作

Notion image

批量测试有可能同时调用 API ,导致提示失败,可以一个个手动点击

Notion image

模型配置,选择模型提供商

Notion image

点击模型测试(需要前面选择了模型才行的),没有问题就可以启用

Notion image

如果创建知识库,需要 3 种类别模型分别是:索引模型,文本理解模型,图片理解模型。下面已经有了图片理解模型(视觉)和文本理解模型(语言模型),还差一个索引模型。

Notion image

不清楚索引模型有哪些,可以点击这里查看

Notion image

为了补齐索引模型,后面我又添加了openai 的接口

Notion image

知识库

点击创建一个知识库,选择通用的就行

Notion image

填写知识库名称,选择模型

Notion image

导入文本数据集

Notion image

这里我导入了 3 个 txt 文本作为测试

Notion image

数据处理就不配置了,都是默认

Notion image

点击文件可以进行预览,进行调整

Notion image

最后上传文本

Notion image

因为数据不是很多,所以很快就索引完成了

Notion image

点击“搜索测试”

Notion image

效果也还行,都可以索引出来(效果不好的,可以自行调节参数)

Notion image

这样知识库就创建好了

Notion image

工作流

创建一个简易应用

Notion image

这里选择用上前面创建的知识库

Notion image

先看看没有知识库前的回复效果

Notion image

添加知识库,明显更有条理了

Notion image

点击“保存并发布”(这里还有很多功能我是没提到了,感兴趣的自行探索了)

Notion image

这样就创建好一个应用了,点击“去对话”就可以直接使用了

Notion image

TIP:

打开新对话会出现“广告”,编辑一下对话开场白就没了

效果不错,会自动引用知识库内容

Notion image

其他

系统插件,这里默认是已经都安装好的了,需要的时候去应用配置就行了

Notion image

模板市场,虽然不是很多,但可以选一个看看别人的工作流

Notion image

右上角,点击“运行”

Notion image

提问也会回答问题,不过感觉不太聪明的样子

Notion image

点击详情查看,一开始还比较正常后面就逐渐偏离主题

Notion image

总结

FastGPT 的功能十分强大,不过由于我平时不常用,所以只能简单的演示。与 Dify 这类工具相比,FastGPT 显得更为轻量,在资源占用方面也更少。在进行设置操作时,能明显感受到它的反应更为快。

综合推荐:⭐⭐⭐(比较轻量,占用资源较少)

使用体验:⭐⭐⭐(还不错,使用简单)

部署难易:⭐⭐⭐⭐(有点难度)︎

资源占用情况

Notion image

原文地址: https://mp.weixin.qq.com/s?__biz=MzI2MjkzMDk3OA==&mid=2247532177&idx=1&sn=d38a7ccc4399749d09e61d8de3056575&chksm=ebdf0ad23b8801c38c89687f2fc2222c9c5b48827ae7c18420ad0bdab49c196e3ce820cae753&mpshare=1&scene=1&srcid=0718dj89eSB9TfQAjKn4gDrj&sharer_shareinfo=605e1b695176f5d18c3f80a97095ba4a&sharer_shareinfo_first=605e1b695176f5d18c3f80a97095ba4a#rd

相关文章