AIGC系列之FastGPT本地开发和部署

417 阅读5分钟

前言

在前面的文章中,我们部署了FastGPT并进行了使用。那么如果我们想自己进行本地开发,修改FastGPT的代码,需要怎么来处理呢?这部分主要是参考官方文档doc.tryfastgpt.ai/docs/develo…

准备Nodejs

FastGPT项目是一个nodejs项目,所以需要先有nodejs环境。

官方提示需要使用v18.17或v20.x版本,我使用的是v18.17版本。(注意最好使用跟官方一样的版本,我最开始用v18.19版本,结果一直部署不成功)

这里推荐使用nvm来管理nodejs的版本。

另外还需要准备npm或pnpm。(我比较习惯使用pnpm)

克隆代码

代码地址github.com/labring/Fas…

大家可以自己fork一下,然后clone到本地

安装数据库

FastGPT需要mongo和向量数据库,关于向量数据库官方给了三种选择,不过建议使用pgvector方案。

另外不只数据库,它还需要oneapi平台来管理模型。所以这里建议使用docker来一键部署。

这部分与之前文章中FastGPT的docker部署很类似,在前面我们下载了项目/files/docker/docker-compose-pgvector.yml这个文件,并且重命名为docker-compose.yml,这样通过docker compose就可以进行一键部署了。

现在我们需要修改一下,拷贝一下:

cp docker-compose.yml docker-compose.middle.yml

然后在docker-compose.middle.yml文件中将fastgpt相关的内容(包括sendbox)注释或者删除

  # fastgpt
  ...   # 这部分删除或注释
  
  # oneapi

然后我们用这个文件来启动docker即可

docker compose -f docker-compose.middle.yml up -d

这样启动后就可以看到mongo、oneapi(以及它需要的mysql)、pgvector都正常运行起来了,而fastgpt和sendbox就不见了,这样我们就可以本地部署代码了。

配置

这里有几个文件,我们一一说一下

环境变量

在项目的 projects/app 目录下有一个.env.template文件,拷贝一下

cp .env.template .env.local

这个.env.local文件才是最终生效的环境配置,所以需要在这个文件里进行修改。

需要修改的地方不少,挨个说一下

DEFAULT_ROOT_PSW

这个是FastGPT默认root用户的密码,可以不用修改,为了安全就换一下

OPENAI_BASE_URL

OpenAI的地址,因为我们使用OneApi来管理模型,所以这条注释掉

ONEAPI_URL

OneApi的地址,这条本来是注释掉的,我们用这个所以需要放开。然后配置一下我们自己OneApi的地址。

如果是本机而且依照前面用docker进行启动的,那么OneApi的地址是http://localhost:3001

但是这是控制台地址,接口地址则是http://localhost:3001/v1

CHAT_API_KEY

如果前面用OpenAI,这里填它的key。但是我们用OneApi,所以这里需要填OneApi的key。

OneApi的key是指在令牌中创建的那个令牌的key,在对应令牌那里点复制即可,是一个sk-xxxx形式的字符串。

MONGODB_URI

mongo数据库的地址,这里需要跟之前docker-compose.middle.yml的内容一致。

在docker-compose.middle.yml中给mongo配置了用户名和密码,并且设置了认证数据库,如下:

  mongo:
    ...
    ports:
      - 27017:27017
    ...  
    environment:
      - MONGO_INITDB_ROOT_USERNAME=myusername
      - MONGO_INITDB_ROOT_PASSWORD=mypassword
    volumes:
      - ./mongo/data:/data/db
    entrypoint:
      - bash
      - -c
      - |
        ...
        # 执行初始化副本集的脚本
        mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
        ...

比如我们这里端口是27017,用户名和密码是myusername和mypassword,认证数据库是admin,那么在MONGODB_URI就应该是

mongodb://myusername:mypassword@127.0.0.1:27017/fastgpt?authSource=admin&directConnection=true

注意最后要加上directConnection=true,否则无法正常访问,因为mongo是在docker中运行的。

这里的fastgpt是我们使用的库的名称。

PG_URL

我们使用的是pgvector,所以要配置这个地址。如果使用其他向量数据库,则需要配置相应的地址。

这个同样需要与docker-compose.middle.yml中的配置一样,比如:

  pg:
    ...
    ports: # 生产环境建议不要暴露
      - 5432:5432
    ...
    environment:
      # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
      - POSTGRES_USER=username
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=postgres
    ...

这样的话,这个地址就应该是

postgresql://username:password@127.0.0.1:5432/postgres

config配置文件

在项目的 projects/app/data 目录下有一个config.json文件,拷贝一下

cp config.json config.local.json

然后需要修改config.local.json,这个文件之前docker部署的时候也用到过,主要是配置模型的,需要对应oneapi中的配置,在之前文章中已经详细说过了,这里就不细说了,可以直接把前面的内容复制过来就可以了。

运行

先给自动化脚本代码执行权限,在项目根目录下执行

chmod -R +x ./scripts/

然后安装依赖

pnpm install

会安装根 package、projects 和 packages 内所有依赖。

注意:这一步安装完成后会执行几个脚本,比如isolate-vm的初始化,如果失败,有可能是nodejs版本不对,换成官方推荐的版本再试。

依赖全部安装成功后,进入projects/app 目录运行即可

cd projects/app 
pnpm dev

访问

通过pnpm dev运行后就可以看到使用的额端口号,默认是3000,但是如果占用就会自动替换。

然后用浏览器访问即可,就可以正常使用了。

常见问题

下面是我遇到的几个问题

数据库连接失败

mongo或者pgvector连接失败的情况,一定是.env.local中配置的地址不对,要跟docker启动文件中的配置完全一致,比如用户名、密码、库等。

尤其注意docker启动的mongo要添加directConnection=true

getaddrinfo enotfount mongo

这个错误也是mongo连接失败,原因就是没有添加directConnection=true

isolate-vm 安装失败

检查nodejs版本号,最好使用官方推荐的版本,比如v18.17

模型无法使用

有几种情况

一直不响应

比如知识库创建数据集后一直索引中,或者测试应用的时候一直卡住。

这种情况应该是在.env.local中使用的上OpenAi,因为访问它需要代理。还有可能是 CHAT_API_KEY 配置错误。

解决方法要么代理,配置正确的key。要么使用OneApi来配置模型。

Embedding API is not responding

出现这个错误,说明.env.local中OneApi配置不对,检查一下ONEAPI_URL和CHAT_API_KEY

其中ONEAPI_URL要放开(默认是注释掉的),而且注意要有/v1

CHAT_API_KEY是在OneApi平台上创建的令牌