Qanything 2.0项目部署启动手把手教程
2024-9-13
| 2024-12-4
Words 1805Read Time 5 min
type
Post
status
Published
date
Sep 13, 2024
slug
summary
最终目的是以debug的形式将项目启动起来,方便了解项目原理
tags
开发
category
技术分享
icon
password
😀
前言: 该项目是以debug的思想启动的,方便后期通过debug了解项目原理,如果想直接启动项目,可以一键运行项目根目录下的run.sh脚本文件。
 
项目要配置的东西很多,需要有一定的动手能力。
qanything_kernel/configs/model_config.py里面存放了项目需要的配置信息,启动服务的过程中需要修改这里面的配置。
Qanything 2.x版本和1.x版本的其中一个更新就是,在1.x中堆在一起的服务,改成了微服务的架构,将需要用到的很多功能作为服务单独提供出来了。
 
拿到这个项目,我们也不知道项目的启动入口文件在哪里,应该怎么启动。
  1. 阅读readme,可以看到项目根目录下面有一个run.sh的脚本文件
  1. 阅读这个.sh文件,所有的服务都被编排到了根目录下的docker-compose.yaml文件中,以linux版本为例,打开docker-compose-linux.yaml.
  1. docker-compose-linux.yaml中已经将服务编排好了,在这里面也可以看到依赖的一些镜像的版本、镜像依赖等。可以很方便的根据这个yaml的内容将容器服务启动起来。
  1. 其中qanything服务本身的配置如下:
    1. 通过command可以看到执行的命令是bash scripts/entrypoint.sh
  1. 打开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,点击绿色的运行符号。
notion image
点了运行符号之后,会有第一个报错,找不到handler,修改源码第18行:
这是因为当前目录没有加入到python的sys.path中,找不到handler,一种方式你加一下,另一种方式修改成下面的代码样式,采用相对路径的方式导模块。
 
接下来就是解决其他服务依赖以及配置问题了,大概也能猜到哪些地方会报错:
  1. embedding以及reranker的模型文件缺少
  1. mysql数据库配置
  1. milvus向量数据库配置
  1. 大模型问答接口配置,key的配置
  1. ocr服务配置

模型相关文件提供

首先第一个报错,找不到文件
  1. 将有道bce-embedding模型的相关文件放置在qanything_kernel/dependent_server/embedding_server/embedding_model_configs_v0.0.1
    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
  1. 将有道bce-reranker模型相关文件放置在qanything_kernel/dependent_server/rerank_server/rerank_model_configs_v0.0.1
    1. 下载命令: git clone https://www.modelscope.cn/netease-youdao/bce-reranker-base_v1.git
下面就是一些docker容器的启动了,可以参考官方给的docker-compose-linux.yaml的镜像版本和启动命令:
requirements.txt
Github
requirements.txt
Owner
netease-youdao
,直接根据yaml起docker服务一了百了。下面是分开起的。

配置mysql数据库

第二个报错,mysql数据库连接不上
现在已经步入容器化时代了,直接起mysql的docker容器。安装docker的过程自行google。
启动好之后在qanything_kernel/configs/model_config.py配置一下mysql的相关信息。

配置milvus向量数据库

如何安装参考:使用 Docker 安装 Milvus 独立版 – 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的前端界面。
notion image
作为一名算法工程师,前端并不是我想要的,所以我会访问http://ip:8080/docs,可以看到接口文档信息,服务启动好之后打断点,debug每个接口,这一套操作下来,对于rag的原理也就吃透了。
notion image

🤗 总结归纳

对于这种微服务架构的服务,启动的核心过程就是解决各种服务的配置问题。
项目启动起来之后,接下来就可以愉快的玩耍了。debug的过程是理解Qanything以及RAG原理的核心过程,通过debug可以看到所有变量的值、可以看到一个请求进来之后这个项目的流转过程、可以看到一些很多介绍RAG的blog中忽略的细节信息

📎 参考文章

 
💡
有问题,欢迎您在底部评论区留言,一起交流~
  • 开发
  • Qanything 2.0源码解析系列1:新建知识库OCR识别并提取关键内容:用大模型替换掉那繁琐的正则表达式吧
    Loading...