毕昇的初探之旅
文章目录
前言
Bisheng是一款领先的开源大模型应用开发平台,赋能和加速大模型应用开发落地,帮助用户以最佳体验进入下一代应用开发模式。底层采用的是Langchain+Langflow的架构,可免费商用二开。Bisheng项目GitHub传送门,Bisheng飞书文档传送门
一、工具列表
Bisheng二开需要的工具列表如下:
- windows11
- VSCode
- mysql 8.0
- redis 7.0.4
- onlyoffice 7.2.1
- elasticsearch 8.12.0 (可选)
- milvus: (milvus 2.3.3,minio RELEASE.2023-03-20T20-16-18Z,etcd 3.5.5)
- frontend 前端代码
- backend 后端代码
- bisheng-langchain bisheng版langchain封装代码
二、环境部署
1. 基础环境部署
vmware、centos、docker、docker-compose 部署可参考从零开始之Dify部署篇 搭建流程1-5步骤即可。
2. 部署mysql
可参考 MySQL的docker部署传送门,需注意部署完成后最好创建一个bisheng的用户,方便与其他系统隔离。
3. 部署redis
可参考 Redis的docker部署传送门,也可直接下载后通过如下命令运行即可。部署后可通过 Another Redis Desktop Manager 检验Redis是否可用。
docker run \
-p 6379:6379 \
--name redis \
--restart unless-stopped \
-v ./data/redis:/data \
-d redis:7-alpine
4. 部署OnlyOffice
可直接下载后通过如下命令运行即可。
docker run -d -p 8701:80 \
--name bisheng-office \
--restart always \
-e TZ=Asia/Shanghai \
-v ${DOCKER_VOLUME_DIRECTORY:-.}/office/bisheng:/var/www/onlyoffice/documentserver/sdkjs-plugins/bisheng \
onlyoffice/documentserver:7.2.1
5. 部署elasticsearch
可直接下载后通过如下命令运行即可。
docker run -id --name elasticsearch -d --restart=always -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.type=single-node" docker.io/bitnami/elasticsearch:8
6. 部署milvus
可参考 Milvus及attu可视化工具的docker部署传送门,部署完成后,可通过 attu 可视化查看Milvus是否可用。
7. 部署源代码
7.1 fork原项目
可参考 Github与VSCode结合,与Fork项目保持同步
7.2 修改Action文件
Github有自动CI/CD流程,个人项目可通过Github的Actions功能触发。Github中的CI/CD介绍。其中的bisheng-langchain的模块的打包逻辑见飞书 bisheng-langchain打包逻辑。
7. 3 初始化前端
7.3.1 进入前端主目录
通过如下命令进入前端代码主目录
cd src\frontend
7.3.2 安装依赖
可先装nvm,nvm可以创造node的虚拟环境,方便不同的node环境切换。本文采用的 npm 版本为 10.2.4。通过如下命令进行项目的依赖包安装。
npm install
7.3.3 启动前端
通过如下命令启动前端。
npm run start
7.4 初始化后端
bisheng后端,包含bisheng后端项目代码和bisheng-langchain项目代码。
7.4.1 建立bisheng后端虚拟环境
通过vscode在backend下创建.venv的python虚拟环境,本文采用的python版本为3.10.11
7.4.2 进入bisheng后端主目录
通过如下命令进入后端代码主目录
cd src\backend
7.4.3 安装bisheng后端依赖
因为后端是通过poetry管理依赖的,所以需要先安装poetry,命令如下所示。
.venv\Scripts\pip install poetry -i https://pypi.tuna.tsinghua.edu.cn/simple
通过poetry 安装依赖,命令如下所示。
.venv\Scripts\poetry install
7.4.4 建立bisheng-langchain虚拟环境
通过vscode在bisheng-langchain下创建.venv的python虚拟环境,本文采用的python版本为3.10.11
7.4.5 进入bisheng-langchain项目主目录
通过如下命令进入bisheng-langchain项目主目录地址
cd src\bisheng-langchain
7.4.6 安装bisheng-langchain依赖
bisheng-langchain没有通过poetry进行管理,直接通过pip安装即可
.venv\Scripts\pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
因为修改完bisheng-langchain项目后需要打包,以便让bisheng项目通过pip安装使用。所以需要下载打包工具。
.venv/Scripts/pip install wheel
修改完bisheng-langchain项目后打包命令如下。
.venv\Scripts\python setup.py sdist bdist_wheel
因为上述命令打包时,并不会将静态文件如requirements.txt等文件打包进去,而pip安装时又需要这些静态文件,所有我们需要创建一个MANIFEST.in文件,文件中的内容如下。python打包静态文件配置参考
include requirements.txt
include version.txt
7.4.7 修改bisheng的bisheng-langchain依赖路径
因为bisheng项目依赖的bisheng-langchain项目不为我们本地的项目,所以需要通过poetry将其更改为我们本地的bisheng-langchain项目。
首先通过poetry将步骤7.4.6打包后的bisheng-langchain包依赖加入pyproject.toml中(bisheng-langchain打完包后,存放在主目录的dist文件夹下)。命令如下所示。
.venv\Scripts\poetry add D:\bisheng\bishengforweb\bishengforweb\src\bisheng-langchain\dist\bisheng_langchain-0.2.3.2.tar.gz
可能通过上面步骤并不会安装对应依赖,可以通过pip安装,命令如下所示。
.venv\Scripts\pip install D:\bisheng\bishengforweb\bishengforweb\src\bisheng-langchain\dist\bisheng_langchain-0.2.3.3.tar.gz
7.5 配置抓包工具
为了方便调试项目,本文采用fiddler为抓包工具。fiddler安装步骤传送门,因为fiddler配置的为系统代理所以会监听到所有的接口。
fiddler会自动修改win11的全局代理配置。可通过命令行的方式查看,也可通过界面的方式查看。
netsh winhttp show advproxy
因为大模型的网站一般为https,所以如果还需要进行证书相关的配置,可参考fiddler抓取https包,按照以上配置fiddler便可抓取浏览器的https包了,然而在python程序运行时可能会出现如下提示。
Unable to get local issuer certificate when using requests
此时可按照 fiddler不能抓取python的https请求解决方案1、fiddler不能抓取python的https请求解决方案2 配置。
注意:
因为bisheng调用的是bisheng-langchain的依赖,如果出现配置了bisheng项目的环境下的certifi对应的证书后没有用,可配置bisheng-langchain项目的环境下的certifi对应的证书(调试程序时,发现会直接调用bisheng-langchain的源码,通过src\bisheng-langchain.venv\lib\site-packages\httpx_config.py 中的 DEFAULT_CA_BUNDLE_PATH = Path(certifi.where()) 找对应的certifi证书配置)
三、可能遇到的问题
1. 包依赖:
可以通过用pip下载 pipdeptree,用这个命令查看对应的包依赖。pipdeptree用法介绍
2. vscode调试时无法定位其他库代码:
参照如下配置 vscode调试无法定位其他库代码配置传送门 。
3. GLM4官方SDK中的JWT版本不兼容:
因为bisheng采用的fastapi_jwt_auth自从2020年就没更新了,而fastapi_jwt_auth依赖的Pyjwt版本也很低,GLM4的Pyjwt版本为最新的版本,所以需要将GLM4中的SDK对应的Pyjwt发送的代码部分更改。主要更改的地方为添加.decode(“utf-8”)
ret = jwt.encode(
payload=payload,
key=secret,
algorithm="HS256",
headers={"alg": "HS256", "sign_type": "SIGN"},
).decode("utf-8")