type
Post
status
Published
date
Sep 20, 2024
slug
summary
Qanything文件解析服务两个重要函数讲解
tags
category
技术分享
icon
password
前言:
在1.x的版本中文件上传和文件解析是一起执行的。通过文件上传的接口
/api/local_doc_qa/upload_files,将相关信息存入数据库之后会按照不同的文件类型进行文件解析。
但是在2.0之后,文件解析是一个单独的服务,本文主要介绍这个服务的相关内容,涉及到不同的文件类型解析逻辑,会出专门的帖子进行介绍。Qanything 2.0项目部署启动手把手教程 中分析了各个服务的启动命令。
其中,文件解析(插入文件服务)的启动命令如下:
📝 文件解析服务
insert_files_server.py主要是两个方法:
check_and_process从表中拿文件交给process_data方法处理
process_data- 文件切分doc
- doc向量化存milvus向量数据库
下面只介绍核心代码逻辑:
check_and_process
服务启动之前通过app.add_task方法将一个异步任务(check_and_process函数)添加到应用的任务列表中。
check_and_process 的核心是一个while True循环。该循环从File表中拿到status=’gray’ 的文件记录,一次取一个,交给process_data 函数处理。调用上传文件接口时,给定的每个文件的状态都是gray,表示该文件已经上传成功,但是还没有进行解析。
process_data
proces_data的核心:
- 初始化
LocalFileForInsert类对象,在qanything_kernel/core/retriever/general_document.py中定义,包含了很多方法,是文件解析服务的核心类。每个文件都会初始化一个LocalFileForInsert对象进行后续处理。
local_file = LocalFileForInsert(user_id, kb_id, file_id, file_location, file_name, file_url, chunk_size, mysql_client) - 执行
local_file.split_file_to_docs方法,将文件切分成doc - 图片类型(png、jpg、jpeg): Qanything 2.0源码解析系列4: 图片解析逻辑
- pdf类型(pdf):writing, coming soon!
切分逻辑:
- 执行
retriever.insert_documents(local_file.docs, chunk_size)将doc进行split后通过bce-embedding模型向量化并存入Milvus数据库。
🤗 总结归纳
总结文章的内容
📎 参考文章
- source code
有问题,欢迎您在底部评论区留言,一起交流~