起底 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-info
                                                dependency_links.txt
                                                PKG-INFO
                                                SOURCES.txt
                                                top_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等多种输入形式,结合嵌入向量检索技术和在线搜索功能,能够为用户提供高效的知识问答与文档解析服务。

你可能感兴趣的:(人工智能)