起底 QAnything 解析 目录与第三方库和工具

2024-08-29 13:12

本文主要是介绍起底 QAnything 解析 目录与第三方库和工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

├─configs
│      conversation.py
│      model_config.py
│      __init__.py
│
├─connector
│  │  __init__.py
│  │
│  ├─database
│  │  │  __init__.py
│  │  │
│  │  ├─faiss
│  │  │      faiss_client.py
│  │  │      __init__.py
│  │  │
│  │  └─mysql
│  │          mysql_client.py
│  │          __init__.py
│  │
│  ├─embedding
│  │      embedding_backend.py
│  │      embedding_onnx_backend.py
│  │      embedding_torch_backend.py
│  │      __init__.py
│  │
│  ├─llm
│  │  │  llm_for_fastchat.py
│  │  │  llm_for_llamacpp.py
│  │  │  llm_for_openai_api.py
│  │  │  __init__.py
│  │  │
│  │  └─base
│  │          base.py
│  │          __init__.py
│  │
│  └─rerank
│          rerank_backend.py
│          rerank_onnx_backend.py
│          rerank_torch_backend.py
│          __init__.py
│
├─core
│  │  local_doc_qa.py
│  │  local_file.py
│  │  __init__.py
│  │
│  └─tools
│          web_search_tool.py
│
├─dependent_server
│  └─ocr_server
│      │  ocr.py
│      │  operators.py
│      │  postprocess.py
│      │  test.jpg
│      │  __init__.py
│      │
│      └─ocr_models
│              det.onnx
│              ocr.res
│              rec.onnx
│
├─nltk_data
│  ├─taggers
│  │  └─averaged_perceptron_tagger
│  │          averaged_perceptron_tagger.pickle
│  │
│  └─tokenizers
│      └─punkt
│          │  czech.pickle
│          │  danish.pickle
│          │  dutch.pickle
│          │  english.pickle
│          │  estonian.pickle
│          │  finnish.pickle
│          │  french.pickle
│          │  german.pickle
│          │  greek.pickle
│          │  italian.pickle
│          │  malayalam.pickle
│          │  norwegian.pickle
│          │  polish.pickle
│          │  portuguese.pickle
│          │  README
│          │  russian.pickle
│          │  slovene.pickle
│          │  spanish.pickle
│          │  swedish.pickle
│          │  turkish.pickle
│          │
│          └─PY3
│                  czech.pickle
│                  danish.pickle
│                  dutch.pickle
│                  english.pickle
│                  estonian.pickle
│                  finnish.pickle
│                  french.pickle
│                  german.pickle
│                  greek.pickle
│                  italian.pickle
│                  malayalam.pickle
│                  norwegian.pickle
│                  polish.pickle
│                  portuguese.pickle
│                  README
│                  russian.pickle
│                  slovene.pickle
│                  spanish.pickle
│                  swedish.pickle
│                  turkish.pickle
│
├─qanything_server
│  │  handler.py
│  │  sanic_api.py
│  │  __init__.py
│  │
│  ├─dist
│  │  └─qanything
│  │      │  favicons.png
│  │      │  index.html
│  │      │
│  │      └─assets
│  │              ai-avatar-x9recamI.png
│  │              bot-avatar-CBCRm2Zm.js
│  │              BotEdit-B06BJPmC.js
│  │              BotEdit-Dyyrp2t7.css
│  │              BotPublish-Md0cVb8-.js
│  │              BotPublish-vC4PWAbv.css
│  │              Bots-AormuCAr.js
│  │              Bots-DY07q9tM.css
│  │              BotShare-BXdYidoX.js
│  │              BotShare-XmfA0gEJ.css
│  │              BotsManage-ByjTYN3B.css
│  │              BotsManage-NdeULFGl.js
│  │              ChatSourceDialog-5XKToKnC.js
│  │              ChatSourceDialog-BUTjD5tw.css
│  │              collapseMotion-CnI03Kdl.js
│  │              EditDetail-BDpSMOci.js
│  │              EditDetail-kqYHzZye.css
│  │              Home-DBAe-9jL.js
│  │              Home-XMpT4gwr.css
│  │              html2canvas-D_OCvnp_.css
│  │              html2canvas.esm-CgGVt5kG.js
│  │              icon-file-Bxz0aRpP.png
│  │              index-B-fQPM5e.js
│  │              index-BrCLkR8m.js
│  │              index-BxuJyBHW.js
│  │              index-B_yw3M95.js
│  │              index-CyNctjbS.js
│  │              index-DHKaP0Tj.css
│  │              index-ot0vH8Oz.js
│  │              index-YJKHzL67.css
│  │              knowledge-zhu8jsrY.js
│  │              lock-DmQwPPsI.js
│  │              logo-small-b0CKaHl6.png
│  │              RightOutlined-CoMfy0iO.js
│  │              router-B43zTIJp.js
│  │              useBots-BQmzf1CJ.js
│  │              useBotsChat-R5Fputbs.js
│  │              useChatSource-DQGmBhaY.js
│  │              useOptiionList-BYMemxlG.js
│  │              utils-FmuO9fEK.js
│  │
│  └─static
│          redoc.standalone.js
│          swagger-ui-bundle.js
│          swagger-ui.css
│
└─utils│  custom_log.py│  general_utils.py│  __init__.py│└─loader│  audio_loader.py│  csv_loader.py│  image_loader.py│  markdown_parser.py│  my_recursive_url_loader.py│  pdf_loader.py│  __init__.py│└─pdf_to_markdown│  convert2markdown.py│└─core└─layout│  layout_model.py│  layout_parser.py│  table_parser_e2e.py│  __init__.py│├─table_cls│      infer_onnx.py│      __init__.py│└─table_rec│  __init__.py│└─lib│  logger.py│├─datasets│  │  dataset_factory.py│  ││  ├─dataset│  │      table.py│  │      table_mid.py│  │      table_small.py│  ││  └─sample│          ctdet.py│├─detectors│      base_detector.py│      ctdet.py│      detector_factory.py│├─external│      Makefile│      nms.pyx│      setup.py│      shapelyNMS.py│      __init__.py│└─models│  classifier.py│  data_parallel.py│  decode.py│  losses.py│  model.py│└─networks└─DCNv2│  LICENSE│  _ext.cpython-37m-x86_64-linux-gnu.so│  __init__.py│├─build│  ├─lib.linux-x86_64-cpython-37│  │      _ext.cpython-37m-x86_64-linux-gnu.so│  ││  ├─temp.linux-x86_64-3.9│  │      build.ninja│  ││  └─temp.linux-x86_64-cpython-37│      │  .ninja_deps│      │  .ninja_log│      │  build.ninja│      ││      └─ssd8│          └─exec│              └─huangjy│                  └─AdvancedLiterateMachinery│                      └─DocumentUnderstanding│                          └─LORE-TSR│                              └─src└─DCNv2.egg-infodependency_links.txtPKG-INFOSOURCES.txttop_level.txt

从更详细的文件结构来看,这个项目涉及多个不同的技术模块,涵盖了从数据库连接、自然语言处理、光学字符识别(OCR)到文档转换的多种功能。可以推断这是一个多功能、模块化的系统,可能用于文本、表格和图像处理等多种任务。以下是详细的模块分析:

根目录 (__init__.py)

  • __init__.py 文件存在于多个目录中,表明这是一个 Python 包化的项目,每个文件夹可能代表一个独立的模块或子模块。

configs

  • 包含配置相关的模块文件,如 conversation.py(与对话系统相关的配置)、model_config.py(模型配置)。这些配置文件可以调节系统的行为,例如调整模型的超参数、嵌入的设置或对话的逻辑配置。

connector

  • database:包含 faissmysql 的连接模块。faiss_client.py 处理高效向量相似性搜索,mysql_client.py 则是用于 MySQL 数据库的客户端。
  • embedding:嵌入处理模块,支持不同的后端如 ONNX 和 PyTorch,用于生成文本或图像的嵌入向量。
  • llm:大型语言模型的处理模块,包括不同的接口(如 fastchat, llamacpp, openai_api),这些模块支持不同平台的 LLM 模型调用。
  • rerank:重排序模块,用于对搜索或推荐结果进行优化。可能使用 ONNX 或 PyTorch 来运行重排序模型。

core

  • local_doc_qa.pylocal_file.py 可能涉及本地文档的问答或处理功能。tools 目录中的 web_search_tool.py 可能实现了基于网络的搜索工具,帮助文档处理或问答系统从互联网上获取信息。

dependent_server

  • ocr_server:包含 OCR 模块,支持光学字符识别。ocr.pyoperators.pypostprocess.py 处理 OCR 的核心功能。ocr_models 文件夹存储了模型文件(如 det.onnx, rec.onnx),用于文本检测和识别。

nltk_data

  • 存储了 NLTK(自然语言工具包)的预训练数据。taggers 文件夹中的 averaged_perceptron_taggertokenizers 文件夹中的 punkt 等 pickle 文件用于分词和词性标注。支持多种语言的文本处理。

qanything_server

  • 这是一个服务器模块,包含 API 处理文件(如 handler.pysanic_api.py),以及静态文件资源(如 index.html, assets)。这可能是一个提供问答服务的接口,使用前端和后端交互来实现某种聊天或问答系统。

utils

  • 实用工具模块,包含日志记录(custom_log.py)、常用工具(general_utils.py)等。loader 目录下有多个文件加载器模块(如 audio_loader.py, csv_loader.py, image_loader.py, pdf_loader.py),负责处理各种格式的数据输入。
  • pdf_to_markdown:负责将 PDF 文件转换为 Markdown 的工具。core 目录中的 layout_model.pytable_parser_e2e.py 可能用于处理复杂文档的布局和表格。

table_clstable_rec

  • 这些文件夹可能负责表格的分类与识别(table_clstable_rec)。其中的模型和数据集(如 datasetsmodels)提供了对表格进行检测和分类的能力,可能应用于文档中的表格解析任务。

DCNv2

  • 这是一个深度卷积神经网络(DCN)模块,通常用于图像处理。包含编译的二进制文件和与深度学习相关的组件(如 LICENSE, build, models)。这可能与图像中的表格或布局检测相关。

目录分析总结

该项目是一个复杂的多模块系统,结合了多种技术功能。主要涉及:

  • 自然语言处理(NLP):利用嵌入、词性标注和分词等技术进行文本处理。
  • 光学字符识别(OCR):通过 OCR 模型识别图像中的文本。
  • 文档处理:从 PDF 转换到 Markdown、表格识别和布局解析。
  • 问答系统:通过 qanything_server 提供智能问答服务,可能结合 LLM 和网络搜索功能。

这个项目非常多功能,适用于处理文档、文本、图像和问答任务的复杂系统。
通过观察dockerfile我们可以知道qanything应用以下几个库完成功能。

modelscope==1.13.0 \Pillow==10.2.0 \numpy==1.24.3 \PyMuPDF==1.23.22 \easyocr==1.7.1 \onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/ \# onnxruntime==1.17.1 \torch==2.1.2 \torchvision==0.16.2 \transformers==4.36.2 \vllm==0.2.7 \openai==1.12.0 \concurrent-log-handler==0.9.25 \sentencepiece==0.1.99 \tiktoken==0.6.0 \sanic==23.6.0 \sanic_ext==23.6.0 \faiss-cpu==1.8.0 \openpyxl==3.1.2 \langchain==0.1.9 \pypinyin==0.50.0 \python-docx==1.1.0 \unstructured==0.12.4 \unstructured[pptx]==0.12.4 \unstructured[md]==0.12.4 \accelerate==0.21.0 \networkx==3.2.1 \python-dotenv==1.0.1 \html2text==2024.2.26 \duckduckgo-search==5.3.0 \faster-whisper==1.0.1

这些依赖是该项目中使用的第三方库和工具,它们涵盖了多种功能,包括深度学习、自然语言处理、OCR(光学字符识别)、文档处理、API处理和前端/后端通信等。下面逐一介绍这些依赖库的用途:

深度学习与模型相关

  1. modelscope==1.13.0:ModelScope 是一个模型库平台,提供了多种预训练模型及其应用接口,支持多种 AI 任务。
  2. torch==2.1.2torchvision==0.16.2:PyTorch 和其计算机视觉扩展库,用于深度学习的训练与推理,支持图像处理、神经网络构建等。
  3. onnxruntime-gpu:ONNX Runtime 是一个高效的推理引擎,gpu 版本使用 GPU 加速 ONNX 模型的运行,支持大规模模型部署。
  4. transformers==4.36.2:Hugging Face 的 Transformers 库,支持多种预训练语言模型,如 BERT、GPT、T5 等,用于 NLP 任务。
  5. vllm==0.2.7:用于高效推理大型语言模型(LLM)的库,特别是优化了 GPU 加速。
  6. faiss-cpu==1.8.0:FAISS 是一个高效的相似度搜索工具,用于快速进行大规模向量数据的相似度检索。
  7. faster-whisper==1.0.1:更高效的 Whisper 模型实现,主要用于语音识别任务,支持快速处理语音转文本。

文本处理与自然语言处理(NLP)

  1. sentencepiece==0.1.99:SentencePiece 是一个文本分词库,常用于 BERT 等模型的预处理步骤。
  2. tiktoken==0.6.0:用于处理 OpenAI 的 GPT 模型的 token 化工具,优化了 GPT 的输入输出处理。
  3. langchain==0.1.9:LangChain 用于构建和管理 LLM(大语言模型)应用,支持任务链构建。
  4. openai==1.12.0:OpenAI 的 API 客户端,用于与 OpenAI 模型(如 GPT)进行通信和交互。
  5. pypinyin==0.50.0:将汉字转换为拼音的工具,常用于中文自然语言处理。

图像与文档处理

  1. Pillow==10.2.0:Pillow 是一个图像处理库,支持打开、操作、保存多种格式的图片。
  2. PyMuPDF==1.23.22:用于操作 PDF 文档的库,支持读取、提取文本、处理 PDF 文件。
  3. easyocr==1.7.1:一个轻量的 OCR 库,用于从图像中提取文本。
  4. python-docx==1.1.0:用于处理 Word 文档(.docx 文件)的库。
  5. openpyxl==3.1.2:用于处理 Excel 文件(.xlsx)的库。

文档与格式化处理

  1. unstructured==0.12.4:用于处理非结构化数据的库,支持从多种文件类型中提取信息(如 PDF, Word, HTML 等)。
    • unstructured[pptx]==0.12.4unstructured[md]==0.12.4:分别支持从 PPTX 和 Markdown 文件中提取结构化数据。
  2. html2text==2024.2.26:将 HTML 转换为纯文本的工具,通常用于清理网页数据。
  3. duckduckgo-search==5.3.0:基于 DuckDuckGo 的搜索引擎 API,用于执行网络搜索。

并发与日志处理

  1. concurrent-log-handler==0.9.25:支持并发环境中的安全日志记录工具。
  2. networkx==3.2.1:用于创建、操作复杂图结构的库,支持网络分析和图算法。
  3. python-dotenv==1.0.1:用于加载 .env 文件中的环境变量配置,便于在项目中管理环境变量。

Web 框架与 API

  1. sanic==23.6.0sanic_ext==23.6.0:Sanic 是一个异步的 Web 框架,支持快速的 API 开发。Sanic Extensions 提供了额外的扩展功能。
  2. accelerate==0.21.0:Hugging Face 提供的工具,用于加速和分布式训练模型,特别适用于深度学习领域。

数学与科学计算

  1. numpy==1.24.3:基础科学计算库,用于高效的数组运算和数值计算。

第三方库和工具小结

这些库和工具共同构成了一个多功能系统,支持从深度学习推理、NLP、文档和图像处理到 Web API 开发等广泛的任务。这些依赖允许项目处理大规模数据、运行复杂的深度学习模型,并通过 API 提供交互式服务。

从提供的资料和目录结构来看,QAnything 项目似乎是一个集成了多种人工智能技术和自然语言处理(NLP)工具的系统,具备处理多模态输入(文本、图像、PDF等)、执行大规模语言模型推理、OCR、嵌入向量搜索、以及提供API服务等多项功能。下面是基于目录结构和依赖分析得出的几个核心功能:

1. 自然语言处理与大语言模型(LLM)推理

  • connector/llm 目录包含了不同的 LLM 接口实现,包括对 OpenAI API、FastChat 和 llama.cpp 的支持。这表明 QAnything 可以连接并调用多种大语言模型,可能用于对话生成、文本生成、回答问题等任务。
  • 依赖库如 transformersvllm 支持模型的高效推理,意味着 QAnything 能够加载和运行各种预训练的语言模型,处理复杂的自然语言任务。

2. 问答系统与知识管理

  • 目录 core/local_doc_qa.py 暗示了该系统可能实现了本地化的文档问答功能,可以基于存储在本地的文档数据直接回答问题。
  • faiss-cpulangchain 这些依赖表明系统可能使用了向量检索技术(如基于嵌入向量的相似度搜索)来进行问答或信息检索。LangChain 则提供了将大语言模型与工具结合使用的能力,可能支持链式推理任务。

3. OCR(光学字符识别)功能

  • dependent_server/ocr_server 目录包含了 OCR 模型和处理代码,如 det.onnxrec.onnx,显示出系统具备从图像或文档中提取文本的能力。
  • 依赖库 easyocrPyMuPDF 支持该功能,表明 QAnything 能够处理图片和 PDF 格式的文档,提取并识别其中的文本信息。这对于多模态信息的处理非常重要。

4. 多模态数据处理

  • utils/loader 目录下的子模块,如 pdf_loader.pyaudio_loader.pyimage_loader.pycsv_loader.py 表明系统具备处理多种数据类型的能力,包括 PDF 文档、音频、图像和 CSV 数据。
  • pdf_to_markdown 模块以及 layout 相关的子模块似乎表明该系统不仅可以从 PDF 提取文本,还可以进行结构化处理,如解析表格或页面布局。这表明 QAnything 可能用于处理复杂文档,将其转换为可供进一步分析或问答的结构化数据。

5. Web API 与服务

  • qanything_server 目录下的文件如 sanic_api.py 表示 QAnything 提供了 Web 服务接口,可能通过 REST API 或其他方式供外部系统访问其核心功能。Sanic 框架则表明系统可能是异步的,能够高效地处理并发请求。
  • dist/qanything 目录中的前端资源(如 HTML 文件、CSS 和 JS 文件)表明该项目还包含了用户界面,用于提供一个图形化的交互平台。这可能是一个用于展示问答结果或执行其他互动功能的 Web 界面。

6. 信息检索与搜索功能

  • connector/rerankweb_search_tool.py 表明 QAnything 可能支持在线信息检索与排名重排功能。通过 DuckDuckGo 搜索库和 web 工具,系统可能具备从网络检索信息并结合本地知识库进行增强问答的功能。
  • rerank_onnx_backend.py 等文件显示,系统可能会对检索到的结果进行重新排序,以便提供更相关的答案。

7. 文档格式转换与处理

  • unstructuredmarkdown_parser.py 表明 QAnything 能够将各种格式的文档(如 PPTX、Markdown、PDF 等)转换为结构化文本。这对于实现从文档中提取有价值的信息非常重要,可能用于问答、信息提取等任务。

8. 工具集成与扩展

  • core/tools/web_search_tool.py 表明系统可能集成了网络搜索功能,允许用户在本地知识库之外搜索信息。
  • 依赖如 html2textduckduckgo-search 支持从网页或其他外部数据源提取和格式化信息。这些工具与大语言模型结合可能用于增强系统的问答能力,甚至可以实时获取网络信息来回答问题。

总结

QAnything 是一个多功能的 AI 系统,集成了大语言模型推理、OCR、信息检索、文档处理等功能,具备多模态数据处理的能力。它可以通过 Web API 提供问答、信息检索、文档解析等服务,支持文本、图像、PDF等多种输入形式,结合嵌入向量检索技术和在线搜索功能,能够为用户提供高效的知识问答与文档解析服务。

这篇关于起底 QAnything 解析 目录与第三方库和工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117959

相关文章

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

在C#中合并和解析相对路径方式

《在C#中合并和解析相对路径方式》Path类提供了几个用于操作文件路径的静态方法,其中包括Combine方法和GetFullPath方法,Combine方法将两个路径合并在一起,但不会解析包含相对元素... 目录C#合并和解析相对路径System.IO.Path类幸运的是总结C#合并和解析相对路径对于 C

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批