QAnything README

The project's README from github.com/netease-youdao/QAnything. As one markdown file: README.md.

Logo

Question and Answer based on Anything

English | 简体中文

         

              

    

Table of Contents

🚀 Important Updates

Important things should be said three times.

[2024-08-23: QAnything updated to version 2.0.]

[2024-08-23: QAnything updated to version 2.0.]

[2024-08-23: QAnything updated to version 2.0.]

  • This update brings improvements in various aspects such as usability, resource consumption, search results, question and answer results, parsing results, front-end effects, service architecture, and usage methods.
  • At the same time, the old Docker version and Python version have been merged into a new unified version, using a single-line command with Docker Compose for one-click startup, ready to use out of the box.

Contributing

We appreciate your interest in contributing to our project. Whether you're fixing a bug, improving an existing feature, or adding something completely new, your contributions are welcome!

Thanks to all contributors for their efforts

Special thanks!

Please note: Our list of contributors is automatically updated, so your contributions may not appear immediately on this list.

Special thanks!:@ikun-moxiaofei

Special thanks!:@Ianarua

Business contact information:

010-82558901

For business cooperation, please contact us by phone or email:

What is QAnything?

QAnything(Question and Answer based on Anything) is a local knowledge base question-answering system designed to support a wide range of file formats and databases, allowing for offline installation and use.

With QAnything, you can simply drop any locally stored file of any format and receive accurate, fast, and reliable answers.

Currently supported formats include: PDF(pdf),Word(docx),PPT(pptx),XLS(xlsx),Markdown(md),Email(eml),TXT(txt),Image(jpg,jpeg,png),CSV(csv),Web links(html) and more formats coming soon…

Key features

Architecture

qanything_system

Why 2 stage retrieval?

In scenarios with a large volume of knowledge base data, the advantages of a two-stage approach are very clear. If only a first-stage embedding retrieval is used, there will be a problem of retrieval degradation as the data volume increases, as indicated by the green line in the following graph. However, after the second-stage reranking, there can be a stable increase in accuracy, the more data, the better the performance.

two stage retrievaal

QAnything uses the retrieval component BCEmbedding, which is distinguished for its bilingual and crosslingual proficiency. BCEmbedding excels in bridging Chinese and English linguistic gaps, which achieves

1st Retrieval(embedding)

Model Retrieval STS PairClassification Classification Reranking Clustering Avg
bge-base-en-v1.5 37.14 55.06 75.45 59.73 43.05 37.74 47.20
bge-base-zh-v1.5 47.60 63.72 77.40 63.38 54.85 32.56 53.60
bge-large-en-v1.5 37.15 54.09 75.00 59.24 42.68 37.32 46.82
bge-large-zh-v1.5 47.54 64.73 79.14 64.19 55.88 33.26 54.21
jina-embeddings-v2-base-en 31.58 54.28 74.84 58.42 41.16 34.67 44.29
m3e-base 46.29 63.93 71.84 64.08 52.38 37.84 53.54
m3e-large 34.85 59.74 67.69 60.07 48.99 31.62 46.78
bce-embedding-base_v1 57.60 65.73 74.96 69.00 57.29 38.95 59.43

2nd Retrieval(rerank)

Model Reranking Avg
bge-reranker-base 57.78 57.78
bge-reranker-large 59.69 59.69
bce-reranker-base_v1 60.06 60.06

RAG Evaluations in LlamaIndex(embedding and rerank)

NOTE:

LLM

The open source version of QAnything is based on QwenLM and has been fine-tuned on a large number of professional question-answering datasets. It greatly enhances the ability of question-answering. If you need to use it for commercial purposes, please follow the license of QwenLM. For more details, please refer to: QwenLM

🚀 Latest Updates

Before You Start

Star us on GitHub, and be instantly notified for new release! star_us

Getting Started

Latest Features Table

features python (v1.4.2) docker (v1.2.2) QAnything v2.0.0 Explanation
Detailed installation document ✅ ✅ ✅
Support API ✅ ✅ ✅
Support production environment ❌ ✅ ✅
Support offline use ❌ ✅ ✅
Support multiple concurrency ❌ ✅ ✅
Support multi-card inference ❌ ✅ ❌ Version 2.0.0 no longer provides default local LLM. All access is through the openai interface, and users can deploy local LLM through tools such as ollama.
Support Mac (M series chips) ✅ ❌ ✅
Support Linux ✅ ✅ ✅ The old version of Python defaults to using onnxruntime-gpu for cuda12 on Linux, and automatically switches to onnxruntime when glibc<2.28.
Support windows ❌ ❌ ✅ Both old versions of Python and Docker require WSL environment. Version 2.0.0 can be started directly in a non-WSL environment.
Support CPU only ✅ ❌ ✅ Version 2.0.0 Mac, Linux, Win unified no longer use GPU, completely migrated to CPU.
Support hybrid search (BM25+embedding) ❌ ✅ ✅
Support web search (need VPN) ✅ ❌ ✅
Support FAQ ✅ ❌ ✅
Support BOT ✅ ❌ ✅
Support Traceability ✅ ❌ ✅
Support Log retrieval ✅ ❌ ✅
Support audio file ✅ ❌ ❌ Relying on whisper, slow speed and high resource consumption, temporarily removed.
Support OpenCloudOS ✅ ❌ ✅
Support interfaces compatible with Openaiapi (including ollama) ✅ ✅ ✅ Old versions of Python and Docker require manual modification of parameters such as api_key, base_url, model, etc. In version 2.0.0, these are all changed to be automatically saved in the front end settings.
PDF parsing performance improvement (including tables) ✅ ❌ ✅ Version 1.4.2 requires manual settings, version 2.0.0 does not require manual settings, and both the PDF parsing effect and performance have been improved.
User-defined configuration (Experimental: Improve speed) ✅ ❌ ✅ v1.4.2 needs to be set manually, v2.0.0 uses the best configuration by default.

QAnything (netease-youdao/QAnything)

Searching Database…

14.2K ·GitHub
这是什么?一个本地知识库问答系统:把自己的文档导入进去,然后提问——你会得到从自己文件里找出的准确答案,而不是来自公开互联网。
它是我自己部署运行的应用,还是我写代码调用的库?是自己部署的应用,不是库:一条 Docker Compose 命令就能启动一个通过网页界面使用的服务。如果你想集成到自己的代码里,它也带 API。
我怎么把它跑起来?拉取 qanything 仓库,进入项目根目录,运行启动命令——v2.0.0 用一行 Docker Compose 就能启动整个服务。也有在线演示可以先试试。
开始之前我需要装好什么?只需要 Docker。其他一切——PDF 解析、OCR、向量化(embedding)、重排序(rerank)——都内置在整套服务里,而且每个组件相互独立,可以随意替换。
它现在有哪些做不到的事?音频文件支持在 2.0 版被移除了,因为基于 whisper 的解析又慢又吃资源,多 GPU 推理也被去掉了。联网搜索功能需要开 VPN。
它能在哪些系统上运行?Windows、macOS(包括 M 系列芯片的 Mac)和 Linux。2.0.0 是第一个不用 WSL 就能直接在 Windows 上启动的版本。
没有网络连接我也能用吗?可以——离线使用是 v2.0.0 支持的模式(旧版 Python 变体没有这个功能)。只有可选的联网搜索功能需要访问互联网。
我的数据会留在我的电脑上吗?会——数据安全是主打特性:整个系统就是按照拔掉网线也能安装使用的思路设计的,你的文档不会离开你的电脑。
许可证在商用方面有什么坑吗?代码采用 AGPL-3.0。另外要注意,开源版本基于一个微调过的 QwenLM 模型构建——该模型的商用需遵循 QwenLM 自己的许可证。
我可以针对哪些类型的文件提问?PDF、Word(docx)、PPT(pptx)、Excel(xlsx)、Markdown、邮件(eml)、TXT、图片(jpg/jpeg/png)、CSV,以及网页链接(html),后续还会支持更多。问答还支持跨语言:你可以用英文提问中文文件的内容,反过来也行,和文件本身的语言无关。
当我的知识库增长到几千个文件时,回答还能保持准确吗?能——这正是它要解决的核心设计问题。它采用两阶段流程(向量检索加一个重排序器 reranker),随着数据增长准确率还能继续提升,而单阶段的向量检索会退化。上传文件的数量没有限制,检索也因为有团队的 BCEmbedding 模型而保持快速。
它自带 AI 模型吗?现在不了。2.0.0 版本去掉了默认的本地大语言模型:一切都通过前端设置里配置的 OpenAI 兼容接口连接,所以你可以接入任何 OpenAI 兼容的服务,或者用 ollama 之类的工具跑本地模型。
除了和我的文件对话,它开箱即用还能做什么?可以像 Kimi 那样不挂文件直接开聊,有纯检索模式,还有自定义 Bot。2.0 版还增加了 FAQ 条目、BM25 加向量的混合检索、分块(chunk)的在线预览和编辑、文件溯源预览,以及日志检索。
Size
114.4 MB
Stars
14.2K
Age
2y
Commits · 90 Days