使用FastGPT和ChatGPT快速搭建知识库问答系统

使用FastGPT和ChatGPT快速搭建知识库问答系统

概述

使用开源项目FastGPT,配合ChatGPT、文心一言、讯飞星火等大模型API,可快速构建企业通用知识库平台。实现企业内部知识问答、客户在线咨询等在线问答系统。

FastGPT介绍

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景。

开源项目地址:https://github.com/labring/FastGPT

文档地址:https://doc.fastgpt.in/docs/

项目技术栈:NextJs + TS + ChakraUI + Mongo + Postgres (Vector 插件)

使用FastGPT和ChatGPT快速搭建知识库问答系统

FastGPT优势:

  • 强大的可视化图形编排功能
  • 开发部署简单:支持本地开发部署、docker部署方式
  • 功能完善,知识库导入功能健全:支持手动输入、文本导入、url读取等方式,支持文本、word、知识库链接等方式导入
  • 多模型支持:支持大部分AI大模型,兼容 OpenAI 、Azure 、国内主流模型和本地模型

准备工作

  • 云服务器:推荐2核2G以上配置
  • 域名:建议使用域名访问,部署前完成域名解析
  • 安装Docker:非必须,建议使用docker,部署简单,无需考虑环境差异等兼容性问题。
  • 申请AI大模型API:如果使用ChatGPT API并且使用国内或香港区域服务器,由于OpenAI限制,需要单独购买其他地域中转服务器或者购买中转服务。目前国内中转服务较多,价格低廉,响应速度尚可。

docker部署步骤

1.安装 Docker 和 docker-compose

2.创建目录并下载 docker-compose.yml

依次执行下面命令,创建 FastGPT 文件并拉取docker-compose.ymlconfig.json,执行完后目录下会有 2 个文件。

注意: docker-compose.yml 配置文件中 Mongo 为 5.x,部分服务器不支持,需手动更改其镜像版本为 4.4.24

mkdir fastgpt
cd fastgpt
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/files/deploy/fastgpt/docker-compose.yml
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json

3.修改docker-compose.yml

示例代码:

version: '3.3'
services:
  pg:
    image: ankane/pgvector:v0.5.0 # git
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.5.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
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云 国内机器请使用此镜像
    container_name: mongo
    restart: always
    ports: # 生产环境建议不要暴露
      - 27017:27017
    networks:
      - fastgpt
    environment:
      # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
      - MONGO_INITDB_ROOT_USERNAME=username
      - MONGO_INITDB_ROOT_PASSWORD=password
    volumes:
      - ./mongo/data:/data/db
  fastgpt:
    container_name: fastgpt
    image: ghcr.io/labring/fastgpt:latest # git
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:latest # 阿里云 国内机器使用
    ports:
      - 3000:3000
    networks:
      - fastgpt
    depends_on:
      - mongo
      - pg
    restart: always
    environment:
      # root 密码,用户名为: root
      - DEFAULT_ROOT_PSW=1234
      # 中转地址,如果是用官方号,不需要管。务必加 /v1
      - OPENAI_BASE_URL=https://api.openai.com/v1
      - CHAT_API_KEY=sk-xxxx
      - DB_MAX_LINK=5 # database max link
      - TOKEN_KEY=any
      - ROOT_KEY=root_key
      - FILE_TOKEN_KEY=filetoken
      # mongo 配置,不需要改. 如果连不上,可能需要去掉 ?authSource=admin
      - MONGODB_URI=mongodb://username:password@mongo:27017/fastgpt?authSource=admin
      # pg配置. 不需要改
      - PG_URL=postgresql://username:password@pg:5432/postgres
    volumes:
      - ./config.json:/app/data/config.json
networks:
  fastgpt:

配置说明

DEFAULT_ROOT_PSW:前台root管理员登录密码,建议修改

OPENAI_BASE_URL:AI大模型接口地址,如果是使用ChatGPT API中转服务,请配置中转地址

CHAT_API_KEY:AI大模型接口KEY

4.config.json配置

一般可不调整,使用默认配置

示例代码:

{
  "FeConfig": {
    "show_emptyChat": true,
    "show_register": true,
    "show_appStore": false,
    "show_userDetail": false,
    "show_contact": true,
    "show_git": false,
    "show_doc": false,
    "systemTitle": "MyGPT",
    "authorText": "Made by MyGPT Team.",
    "scripts": []
  },
  "SystemParams": {
    "pluginBaseUrl": "",
    "vectorMaxProcess": 15,
    "qaMaxProcess": 15,
    "pgHNSWEfSearch": 100
  },
  "ChatModels": [
    {
      "model": "gpt-3.5-turbo-1106",
      "name": "GPT35-1106",
      "price": 0,
      "maxContext": 16000,
      "maxResponse": 4000,
      "quoteMaxToken": 2000,
      "maxTemperature": 1.2,
      "censor": false,
      "vision": false,
      "defaultSystemChatPrompt": ""
    },
    {
      "model": "gpt-3.5-turbo-16k",
      "name": "GPT35-16k",
      "maxContext": 16000,
      "maxResponse": 16000,
      "price": 0,
      "quoteMaxToken": 8000,
      "maxTemperature": 1.2,
      "censor": false,
      "vision": false,
      "defaultSystemChatPrompt": ""
    },
    {
      "model": "gpt-4",
      "name": "GPT4-8k",
      "maxContext": 8000,
      "maxResponse": 8000,
      "price": 0,
      "quoteMaxToken": 4000,
      "maxTemperature": 1.2,
      "censor": false,
      "vision": false,
      "defaultSystemChatPrompt": ""
    },
    {
      "model": "gpt-4-vision-preview",
      "name": "GPT4-Vision",
      "maxContext": 128000,
      "maxResponse": 4000,
      "price": 0,
      "quoteMaxToken": 100000,
      "maxTemperature": 1.2,
      "censor": false,
      "vision": true,
      "defaultSystemChatPrompt": ""
    }
  ],
  "QAModels": [
    {
      "model": "gpt-3.5-turbo-16k",
      "name": "GPT35-16k",
      "maxContext": 16000,
      "maxResponse": 16000,
      "price": 0
    }
  ],
  "CQModels": [
    {
      "model": "gpt-3.5-turbo",
      "name": "GPT35",
      "maxContext": 4000,
      "maxResponse": 4000,
      "price": 0,
      "functionCall": true,
      "functionPrompt": ""
    },
    {
      "model": "gpt-4",
      "name": "GPT4-8k",
      "maxContext": 8000,
      "maxResponse": 8000,
      "price": 0,
      "functionCall": true,
      "functionPrompt": ""
    }
  ],
  "ExtractModels": [
    {
      "model": "gpt-3.5-turbo-1106",
      "name": "GPT35-1106",
      "maxContext": 16000,
      "maxResponse": 4000,
      "price": 0,
      "functionCall": true,
      "functionPrompt": ""
    }
  ],
  "QGModels": [
    {
      "model": "gpt-3.5-turbo-1106",
      "name": "GPT35-1106",
      "maxContext": 1600,
      "maxResponse": 4000,
      "price": 0
    }
  ],
  "VectorModels": [
    {
      "model": "text-embedding-ada-002",
      "name": "Embedding-2",
      "price": 0.2,
      "defaultToken": 700,
      "maxToken": 3000
    }
  ],
  "ReRankModels": [],
  "AudioSpeechModels": [
    {
      "model": "tts-1",
      "name": "OpenAI TTS1",
      "price": 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",
    "price": 0
  }
}

5.启动容器

依次执行命令行:

docker-compose pull 

docker-compose up -d

如果拉取镜像缓慢,可能是使用国内服务器,请将docker-compose.yml文件的image都修改为阿里云的镜像地址。

6.配置域名访问

请提前完成域名解析。

新增nginx配置

反向代理示例代码:

        location / {
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://127.0.0.1:3000;
        }

7.访问测试

使用域名访问,查看是否能进入系统

使用FastGPT和ChatGPT快速搭建知识库问答系统

功能介绍

知识库管理:

使用FastGPT和ChatGPT快速搭建知识库问答系统
使用FastGPT和ChatGPT快速搭建知识库问答系统

应用创建:

使用FastGPT和ChatGPT快速搭建知识库问答系统

应用配置:

使用FastGPT和ChatGPT快速搭建知识库问答系统

问答界面:

使用FastGPT和ChatGPT快速搭建知识库问答系统

外部分享配置:

使用FastGPT和ChatGPT快速搭建知识库问答系统

常见问题Q&A

怎么更新到最新版FastGPT?

执行下面命令会自动拉取最新镜像,一般情况下不需要执行额外操作。

docker-compose pull
docker-compose up -d

如何配置自己企业名称和logo?

企业名称修改:config.json中的systemTitle

logo和登录图,在nginx中配置拦截logo登录图片文件,配置指定文件

示例配置:

                location ~ favicon.ico {
			root /gpt/;
		}

		
		location ~ ^/icon/loginLeft.svg$ {
			root /gpt/;
		}
		
		location ~ ^/icon/logo.png$ {
			root /gpt/;
		}
		
		location ~ ^/icon/loginLeft.png$ {
			root /gpt/;
		}
正文完