起底 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

相关文章

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler