type
status
date
slug
summary
tags
category
icon
password
前言:
该项目是以debug的思想启动的,方便后期通过debug了解项目原理,如果想直接启动项目,可以一键运行项目根目录下的run.sh脚本文件。
项目要配置的东西很多,需要有一定的动手能力。
qanything_kernel/configs/model_config.py里面存放了项目需要的配置信息,启动服务的过程中需要修改这里面的配置。
Qanything 2.x版本和1.x版本的其中一个更新就是,在1.x中堆在一起的服务,改成了微服务的架构,将需要用到的很多功能作为服务单独提供出来了。
拿到这个项目,我们也不知道项目的启动入口文件在哪里,应该怎么启动。
- 阅读readme,可以看到项目根目录下面有一个run.sh的脚本文件
- 阅读这个.sh文件,所有的服务都被编排到了根目录下的docker-compose.yaml文件中,以linux版本为例,打开docker-compose-linux.yaml.
- docker-compose-linux.yaml中已经将服务编排好了,在这里面也可以看到依赖的一些镜像的版本、镜像依赖等。可以很方便的根据这个yaml的内容将容器服务启动起来。
- 其中qanything服务本身的配置如下:
通过command可以看到执行的命令是
bash scripts/entrypoint.sh
- 打开scripts/entrypoint.sh文件,有这样一段内容。包含启动rerank服务,embedding服务,ocr服务,pdf解析服务等。其中最后一条命令是
python3 -u qanything_kernel/qanything_server/sanic_api.py
启动Qanything服务的核心命令,执行的是sanic_api.py这个文件。
📝 项目配置
克隆代码
环境配置
项目的启动文件是
sanic_api.py
,存放在根目录/qanything_kernel/qanything_server下。直觉告诉我,我直接运行sanic_api.py一定会报错,但其实我也不知道项目缺少哪些依赖,我一般的做法是直接运行,哪里报错解决哪里。通过上述分析,了解到,python3 -u qanything_kernel/qanything_server/sanic_api.py是项目的启动命令,在pycharm中这样配置一下,正常是script选择module,点击绿色的运行符号。
点了运行符号之后,会有第一个报错,找不到handler,修改源码第18行:
这是因为当前目录没有加入到python的sys.path中,找不到handler,一种方式你加一下,另一种方式修改成下面的代码样式,采用相对路径的方式导模块。
接下来就是解决其他服务依赖以及配置问题了,大概也能猜到哪些地方会报错:
- embedding以及reranker的模型文件缺少
- mysql数据库配置
- milvus向量数据库配置
- 大模型问答接口配置,key的配置
- ocr服务配置
- …
模型相关文件提供
首先第一个报错,找不到文件
- 将有道bce-embedding模型的相关文件放置在
qanything_kernel/dependent_server/embedding_server/embedding_model_configs_v0.0.1
下
从huggingface或者modelscope下载都可以,这里贴一个modelscope的地址:https://modelscope.cn/models/netease-youdao/bce-embedding-base_v1
下载命令:
git clone https://www.modelscope.cn/netease-youdao/bce-embedding-base_v1.git
- 将有道bce-reranker模型相关文件放置在
qanything_kernel/dependent_server/rerank_server/rerank_model_configs_v0.0.1
下
下载命令:
git clone https://www.modelscope.cn/netease-youdao/bce-reranker-base_v1.git
下面就是一些docker容器的启动了,可以参考官方给的docker-compose-linux.yaml的镜像版本和启动命令:,直接根据yaml起docker服务一了百了。下面是分开起的。
requirements.txt
netease-youdao
配置mysql数据库
第二个报错,mysql数据库连接不上
现在已经步入容器化时代了,直接起mysql的docker容器。安装docker的过程自行google。
启动好之后在qanything_kernel/configs/model_config.py配置一下mysql的相关信息。
配置milvus向量数据库
如何安装参考:‣
milvus服务启动好之后在model_config.py配置一下milvus的相关信息
配置elasticsearch
es这里用的是7.x的版本,官方用的是8.x的,es一般用不到。
es服务启动好之后在model_config.py配置一下es的相关信息
服务启动成功
配置好这些之后,就没有其他报错了,说明服务已经启动起来了。尽管还有一些要用到的依赖服务没有配置,但是qanything的核心服务已经启动起来了,已经可以调用接口新建知识库、上传文件等操作了,其他一些服务用到了报错在修改就好了。
当然sanic_api中的端口号和workers数量可以根据需要修改,服务器公网暴露了8080端口,所以我改了端口号。
项目启动好之后,根据控制台的提示,浏览器打开http://ip:8080/qanything/就是Qanything的前端界面。
作为一名算法工程师,前端并不是我想要的,所以我会访问http://ip:8080/docs,可以看到接口文档信息,服务启动好之后打断点,debug每个接口,这一套操作下来,对于rag的原理也就吃透了。
🤗 总结归纳
对于这种微服务架构的服务,启动的核心过程就是解决各种服务的配置问题。
项目启动起来之后,接下来就可以愉快的玩耍了。debug的过程是理解Qanything以及RAG原理的核心过程,通过debug可以看到所有变量的值、可以看到一个请求进来之后这个项目的流转过程、可以看到一些很多介绍RAG的blog中忽略的细节信息。
📎 参考文章
有问题,欢迎您在底部评论区留言,一起交流~