智能问答系统全解析:从核心架构到落地实践的技术指南
一、安装docker环境
6.Docker Desktop 安装使用教程-CSDN博客
参考上述文档安装Docker Desktop和wsl2
以下为转载内容 ,部分有变动
1.前言
作为开发人员,在日常开发中,我们需要在本地去启动一些服务,如:redis、MySQL等,就需要去下载这些在本地去启动,操作较为繁琐。此时,我们可以使用Docker Desktop,来搭建我们需要的服务,直接在容器中去启动即可。
2.下载 Docker Desktop
docker官网:https://www.docker.com/
3.安装 Docker Desktop
3.1.配置 Docker Desktop 环境
因为docker desktop 是可以部署在windows 上来运行docker的应用服务的,其基于windows 的 Hyper-V
服务和WSL2内核的Windows上创建一个子系统(linux),从而实现其在windows上运行docker。所以电脑上需要开启Hyper-V
服务,和安装WSL2。
开启 Hyper-V 服务:控制面板—程序—程序和功能—启动或关闭Windows功能 中 勾选【Hyper-V】和【容器】选项。

- 这个我电脑上没有,我没√(但好像对后续没影响也能用)

- 这个我电脑上也没有,我没√(但好像对后续没影响也能用)

配置完毕后,重启电脑
3.2.安装 wsl2
先去看看自己的电脑命令行,打开 powershell 管理员终端,执行wsl –help 命令看看,有没有 wsl,如果有就不用安装了,直接 wsl --set-default-version 2 设置 wsl2 为默认版本就行了。如果本机没有 wsl,再去安装哦
我们可以从微软官网下载最新版本的wsl2,然后正常打开。
下面这个链接,访问下载,安装更新:
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
下载完成后直接双击安装即可

3.3.下载并安装Docker Desktop
我在windows上下载的是 Docker Desktop,下载地址,点进去根据自己的需要去下载,我是下载的Windows版本的。把下载下来的.exe文件双击打开,如下图所示,直接点击OK即可。

3.4打开 Docker Desktop 的问题
1.问题一:wsl 2 installation
打开 docker desktop, 如果出现报错如下,报错意思是:是因为我们还需要进行wsl的下载和配置
这里我们用两步来解决这个问题:
1.我们先去系统里查看一下有没有启用Windows的Linux子系统,步骤如下:

如果没有的话,我们勾选上,重新启动电脑,打开Docker Desktop 。
2.如果还是没有解决的话。原因就剩一个了就是:

我们使用的wsl2版本很旧,因此需要手动更新。进入 Window PowerShll,执行命令 wsl --update
2.问题二:wsl kernel 版本低
如果已经按照过wsl , 打开 docker desktop, 如果出现报错如下,报错意思是:wsl kernel 版本低,需要进行更新。
解决方法:以管理员的身份打开控制台(cmd),并执行命令 wsl –update 进行更新


如上图中提示,wsl 更新成功后,需要对wsl重启后才会更新生效。可以执行 wsl –shutdown 进行关闭wsl (我执行命令后又重启了一下电脑。)
重启后,再次打开 docker desktop即可
如果电脑windows 10 的企业版的话,以上的安装部署就完毕了, 但我在安装windows 10 家庭版的时候,报错。网上查的意思是说 docker 必须安装在win10 企业版本,如果想安装在家庭版本上,需要如下操作: 打开注册表编辑器,在“ 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ” 下找到 EditionID ,数值数据改为Professional即可。

4.Docker Desktop 配置镜像源
配置镜像源:打开Docker ,找到 设置–docker engine 中,添加如下图所示的镜像源地址。

选择Docker
Engine,在其中输入(这里使用的是163的源,如果想要使用其他源可以自行设置,github上有个项目:docker_mirror可以自动检测在你的网络环境下那个源是最快的)
作者提示:最好此处配一个阿里云的加速地址!!!。加速地址参考:https://blog.csdn.net/lzb348110175/article/details/132847035 的 docker加速配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| { "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "debug": false, "experimental": false, "insecure-registries": [], "registry-mirrors": [ "https://ufe3o0ts.mirror.aliyuncs.com/", "https://docker.1ms.run/", "https://docker.xuanyuan.me/", "https://dislabaiot.xyz/", "https://docker.sunzishaokao.com/", "https://hub.rat.dev/", "https://doublezonline.cloud/", "https://dislabaiot.xyz/", "https://xdark.top" ] }
|

一直转转转,等一会就可以了,不转了就可以了

5.Disk image location路径的修改
操作如下(示例):完成安装后,打开软件,点击右上角的设置,将图2中的红框标注部分的选中给取消,然后按照图3进行路径的修改,再返回图2界面,把红框部分选中,并应用即可。




6.验证是否安装成功
代码如下(示例):在左下角的搜索框中,输出PowerShell,打开PowerShell。输入docker
images命令,出现下图所示即表示安装成功。

7.在Docker中给fastgpt配置:
新建一个项目文件夹,里面新建配置文件:
config.json:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| { "feConfigs": { "lafEnv": "https://laf.dev", "mcpServerProxyEndpoint": "" }, "systemEnv": { "datasetParseMaxProcess": 10, "vectorMaxProcess": 10, "qaMaxProcess": 10, "vlmMaxProcess": 10, "tokenWorkers": 30, "hnswEfSearch": 100, "hnswMaxScanTuples": 100000, "customPdfParse": { "url": "", "key": "", "doc2xKey": "", "price": 0 } }, "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com" ], "llmModels": [ { "model": "OpenAI", "name": "gemma3:27b", "avatar": "/imgs/model/openai.svg", "maxContext": 16000, "maxResponse": 4000, "quoteMaxToken": 13000, "maxTemperature": 1.2, "charsPointsPrice": 0, "censor": false, "vision": false, "datasetProcess": true, "usedInClassify": true, "usedInExtractFields": true, "usedInToolCall": true, "usedInQueryExtension": true, "toolChoice": true, "functionCall": false, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig":{} } ]
}
|
docker-compose.yml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325
|
version: '3.3' services: pg: image: pgvector/pgvector:0.8.0-pg15 container_name: pg restart: always 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', 'username', '-d', 'postgres'] interval: 5s timeout: 5s retries: 10
mysql: container_name: one-api-mysql image: mysql:8.0 restart: always environment: - MYSQL_ROOT_PASSWORD=751225hzx - MYSQL_DATABASE=oneapi - MYSQL_CHARSET=utf8mb4 - MYSQL_COLLATION=utf8mb4_unicode_ci - TZ=Asia/Shanghai volumes: - ./volumes/mysql/data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ptest2024"] interval: 10s timeout: 5s retries: 5
mongo: image: mongo:5.0.18 container_name: 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: "mongo:27017" } ] }) }' > /data/initReplicaSet.js # 启动MongoDB服务 exec docker-entrypoint.sh "$$@" &
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; 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: 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-minio: image: minio/minio:latest container_name: fastgpt-minio restart: always networks: - fastgpt ports: - '9000:9000' - '9001:9001' environment: - MINIO_ROOT_USER=minioadmin - MINIO_ROOT_PASSWORD=minioadmin volumes: - ./fastgpt-minio:/data command: server /data --console-address ":9001" healthcheck: test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live'] interval: 30s timeout: 20s retries: 3
fastgpt: container_name: fastgpt image: ghcr.io/labring/fastgpt:v4.12.4 ports: - 3000:3000 networks: - fastgpt depends_on: - mongo - sandbox - pg restart: always environment: - FE_DOMAIN= - DEFAULT_ROOT_PSW=1234 - TOKEN_KEY=any - ROOT_KEY=root_key - FILE_TOKEN_KEY=filetoken - AES256_SECRET_KEY=fastgptkey
- PLUGIN_BASE_URL=http://fastgpt-plugin:3000 - PLUGIN_TOKEN=xxxxxx - SANDBOX_URL=http://sandbox:3000 - AIPROXY_API_ENDPOINT=http://aiproxy:3000 - AIPROXY_API_TOKEN=aiproxy
- DB_MAX_LINK=30 - MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin - REDIS_URL=redis://default:mypassword@redis:6379 - PG_URL=postgresql://username:password@pg:5432/postgres
- LOG_LEVEL=info - STORE_LOG_LEVEL=warn - WORKFLOW_MAX_RUN_TIMES=1000 - WORKFLOW_MAX_LOOP_TIMES=100 - CHAT_FILE_EXPIRE_TIME=7 volumes: - ./config.json:/app/data/config.json sandbox: container_name: sandbox image: ghcr.io/labring/fastgpt-sandbox:v4.12.4 networks: - fastgpt restart: always fastgpt-mcp-server: container_name: fastgpt-mcp-server image: ghcr.io/labring/fastgpt-mcp_server:v4.12.4 ports: - 3005:3000 networks: - fastgpt restart: always environment: - FASTGPT_ENDPOINT=http://fastgpt:3000 fastgpt-plugin: image: ghcr.io/labring/fastgpt-plugin:v0.1.13 container_name: fastgpt-plugin restart: always networks: - fastgpt environment: - AUTH_TOKEN=xxxxxx
- MINIO_ENDPOINT=fastgpt-minio - MINIO_PORT=9000 - MINIO_USE_SSL=false - MINIO_ACCESS_KEY=minioadmin - MINIO_SECRET_KEY=minioadmin - MINIO_BUCKET=fastgpt-plugins depends_on: fastgpt-minio: condition: service_healthy
aiproxy: image: ghcr.io/labring/aiproxy:v0.3.2 container_name: 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@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 restart: unless-stopped container_name: 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: driver: bridge
|
现在启动docker
启动服务
运行以下命令启动服务:
该命令会在后台启动服务,并自动根据 docker-compose.yml 文件中的配置、容器的初始化和启动。
8.打开fastgpt
会显示在localhost:3000,打开它,用户名是root,密码在环境变量里面是1234
在里面调用外部语言和索引大模型
二、fastgpt搭建知识问答系统
1.连接语言和索引模型
语言模型我们用的是 deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
索引模型我们用的是 BAAI/bge-m3
SiliconCloud(硅基流动): 提供开源模型调用的平台 ,在该平台调用上述模型
模型提供商—>模型配置—>模型参数编辑
2.导入知识库
创建进出口知识库,csv文件拖入后,所有状态栏显示“已就绪”,则知识库搭建完成(若遇报错则不断刷新)
3.搭建工作流
- 其中的四个预测模型接口是要在本地运行python代码,根据对应的端口进行填写,我填的是我自己本地跑的端口号
- 注意填写各个工具的描述
如图搭建(用的模型如果是免费的会不稳定,用modelscope也可以试试)
细节:



4.调用这个工作流
创建免登录窗口分享链接
- 这只是在本地能过访问,要想别人能访问,要在一个有公网ip的服务器上面映射此台电脑
三、效果
ai会根据你进行的描述调用合适的工具
