MCPcopy Index your code
hub / github.com/netease-youdao/QAnything

github.com/netease-youdao/QAnything @v2.0.0 sqlite

repository ↗ · DeepWiki ↗ · release v2.0.0 ↗
5,951 symbols 19,201 edges 158 files 117 documented · 2% 25 cross-repo links
README

<img src="https://github.com/netease-youdao/QAnything/raw/v2.0.0/docs/images/qanything_logo.png" alt="Logo" width="911" height="175">

Question and Answer based on Anything

English | 简体中文

         

              

目 录

🚀 重要更新

重要的事情说三遍!

[2024-08-23: QAnything更新V2.0版本]

[2024-08-23: QAnything更新V2.0版本]

[2024-08-23: QAnything更新V2.0版本]

* 此次更新带来了使用门槛,资源占用,检索效果,问答效果,解析效果,前端效果,服务架构,使用方式等多方面的改进。 * 同时合并了旧有的docker版和python版两个版本,改为全新的统一版本,采用docker compose单行命令一键启动,开箱即用。

欢迎贡献代码

我们感谢您对贡献到我们项目的兴趣。无论您是修复错误、改进现有功能还是添加全新内容,我们都欢迎您的贡献!

感谢以下所有贡献者

特别鸣谢!

请注意:我们的贡献者名单是自动更新的,因此您的贡献可能不会立即显示在此列表中。

特别鸣谢!:@ikun-moxiaofei

特别鸣谢!:@Ianarua

商务问题联系方式:

010-82558901

什么是QAnything?

QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。

您的任何格式的本地文件都可以往里扔,即可获得准确、快速、靠谱的问答体验。

目前已支持格式: PDF(pdf)Word(docx)PPT(pptx)XLS(xlsx)Markdown(md)电子邮件(eml)TXT(txt)图片(jpg,jpeg,png)CSV(csv)网页链接(html),更多格式,敬请期待...

特点

  • 数据安全,支持全程拔网线安装使用。
  • 支持文件类型多,解析成功率高,支持跨语种问答,中英文问答随意切换,无所谓文件是什么语种。
  • 支持海量数据问答,两阶段向量排序,解决了大规模数据检索退化的问题,数据越多,效果越好,不限制上传文件数量,检索速度快。
  • 硬件友好,默认在纯CPU环境下运行,且win,mac,linux多端支持,除docker外无依赖项。
  • 易用性,无需繁琐的配置,一键安装部署,开箱即用,各依赖组件(pdf解析,ocr,embed,rerank等)完全独立,支持自由替换。
  • 支持类似Kimi的快速开始模式,无文件聊天模式,仅检索模式,自定义Bot模式。

架构

qanything_system

为什么是两阶段检索?

知识库数据量大的场景下两阶段优势非常明显,如果只用一阶段embedding检索,随着数据量增大会出现检索退化的问题,如下图中绿线所示,二阶段rerank重排后能实现准确率稳定增长,即数据越多,效果越好

two stage retrievaal

QAnything使用的检索组件BCEmbedding有非常强悍的双语和跨语种能力,能消除语义检索里面的中英语言之间的差异,从而实现: - 强大的双语和跨语种语义表征能力【基于MTEB的语义表征评测指标】。 - 基于LlamaIndex的RAG评测,表现SOTA【基于LlamaIndex的RAG评测指标】。

一阶段检索(embedding)

模型名称 Retrieval STS PairClassification Classification Reranking Clustering 平均
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

二阶段检索(rerank)

模型名称 Reranking 平均
bge-reranker-base 57.78 57.78
bge-reranker-large 59.69 59.69
bce-reranker-base_v1 60.06 60.06

基于LlamaIndex的RAG评测(embedding and rerank)

NOTE:

  • 在WithoutReranker列中,我们的bce-embedding-base_v1模型优于所有其他embedding模型。
  • 在固定embedding模型的情况下,我们的bce-reranker-base_v1模型达到了最佳表现。
  • bce-embedding-base_v1和bce-reranker-base_v1的组合是SOTA。
  • 如果想单独使用embedding和rerank请参阅:BCEmbedding

LLM

v2.0版本QAnything不再提供本地大模型,用户可自行接入OpenAI接口兼容的其他开源大模型服务,如ollama, DashScope等。

🚀 最近更新

  • 2024-08-23: 支持快速开始、前端配置参数、在线预览和编辑chunk块,极大优化项目架构和启动方式,极大优化解析和检索效果。 - 详见👉 v2.0.0
  • 2024-05-20: 支持与OpenAI API兼容的其他LLM服务,并提供优化后的PDF解析器。 - 详见👉 v1.4.1
  • 2024-04-26: 支持联网检索、FAQ、自定义BOT、文件溯源等。 - 详见👉 v1.4.0
  • 2024-04-03: 支持在纯Python环境中安装;支持混合检索。 - 详见👉 v1.3.0
  • 2024-01-29: 支持自定义大模型,包括OpenAI API和其他开源大模型,GPU需求最低降至GTX 1050Ti,极大提升部署,调试等方面的用户体验 - 详见👉 v1.2.0
  • 2024-01-23: 默认开启rerank,修复在windows上启动时存在的各类问题 - 详见👉 v1.1.1
  • 2024-01-18: 支持一键启动,支持windows部署,提升pdf,xlsx,html解析效果 - 详见👉 v1.1.0

开始之前

在GitHub上加星,即可立即收到新版本的通知! star_us * 🏄 在线试用QAnything * 📚 在线试用有道速读 * 🛠️ 想只使用BCEmbedding(embedding & rerank) * 📖 FAQ * 👂️需求反馈 | 让我听见你的声音

开始

最新特性表

特性 python (v1.4.2) docker (v1.2.2) 全新QAnything v2.0.0 说明
详细安装文档
API支持
生产环境(小型生产环境)
离线使用
支持多并发
支持多卡推理 v2.0.0版本不再提供默认本地LLM,一律通过openai接口接入,用户可自行通过ollama等工具部署本地LLM
支持Mac(M系列芯片)
支持Linux python旧版本Linux下默认使用onnxruntime-gpu for cuda12,glibc<2.28时自动切换为onnxruntime
支持windows (无需WSL python和docker旧版本均要求WSL环境,v2.0.0可直接在非WSL环境下启动
支持纯CPU环境 v2.0.0版本Mac,Linux,Win统一不再使用GPU,完全迁移至CPU
支持混合检索(BM25+embedding)
支持联网检索(需外网VPN
支持FAQ问答
支持自定义机器人(可绑定知识库,可分享)
支持文件溯源(数据来源可直接点击打开)
支持问答日志检索 python和docker旧版本均只能通过API检索,v2.0.0可直接在前端检索
支持解析语音文件(依赖faster_whisper,解析速度慢) 依赖whisper,速度慢且占用资源大,暂时去除
支持OpenCloudOS
支持与OpenAI接口兼容的其他开源大模型服务(包括ollama) python和docker旧版本需手动修改api_key,base_url,model等参数,v2.0.0版本均改为前端设置自动保存
pdf(包含表格)解析效果+++ v1.4.2版本需手动设置,v2.0.0无需手动设置,pdf解析效果和性能均有提升
用户自定义embed,rerank配置(实验性:提升速度) v1.4.2需手动设置,v2.0.0默认使用最佳配置
其他文件类型解析效果+++ v2.0.0版本提升url,md,xlsx,docx等解析效果
支持独立服务调用 v2.0.0版本独立依赖服务,包括embed,rerank,ocr,pdf解析服务等,可独立调用(http)
支持快速开始模式 快速开始:无需创建知识库,支持文件即传即问,支持无文件问答
支持仅检索模式 仅返回检索结果,不调用大模型进行问答
支持解析结果chunks内容可视化,手动编辑 v2.0.0版本支持手动编辑chunks内容,实时生效
pdf解析支持图片,支持回答带图

V2.0.0版本新增细节优化:

  • 支持前端配置API_BASE,API_KEY,文本分片大小,输出token数量,上下文消息数量等参数
  • 优化Bot角色设定的指令遵循效果,每个Bot可单独配置模型参数
  • 支持创建多个对话窗口,同时保存多份历史问答记录
  • 支持问答记录保存成图片
  • 优化上传文件逻辑,解析文件与问答请求独立,上传文件不再影响问答
  • 优化镜像大小,旧版本镜像压缩后大小为18.94GB->新版镜像压缩后大小为4.88GB,降为原有的1/4,提供完整Dockerfile
  • 检索优化,chunks新增片段融合与排序,聚合单文档或双文档
  • 检索阶段和问答阶段均嵌入metadata信息,提升检索和问答效果

各阶段数据展示:

  • 知识库所有文件上传进度展示
  • 知识库单个文件上传进度展示,上传各阶段耗时
  • 问答信息统计,包含问答各阶段耗时,tokens消耗,模型信息等
  • 用户信息统计,包含上传文件总数量,总耗时,问答历史记录等

问题修复

  • xlsx表格支持多sheet解析
  • 优化PDF表格漏识别问题
  • 修复部分DOCX文件解析出错问题
  • 优化FAQ匹配逻辑
  • 支持非utf-8编码的txt文件

新旧解析效果对比

  • 首先针对在文档中大段表格,尤其是跨页表格的解析方面,2.0版本进行了显著的改进,新版本解析逻辑能够分析表格的结构,包括行和列的布局,并且能够自动识别出表头,将其置于每个切片分割出的表格的顶部。这样的改进防止了在解析长表格时,由于逻辑上的切割而导致的意义上的中断
原图 旧版本解析效果 新版本解析效果
image.png image.png image.png
  • 此外,2.0版本在处理文本分栏和跨页布局的情况下也做了优化。它能够识别文本的双栏或多栏布局,并根据人类的阅读习惯来正确划分文本块的顺序。同时,该版本还能够保存文档中的图片,确保在文件解析过程中内容的完整性不会丢失。如在下图中,正确的排列顺序应该为一次排列编号1,2,3的文本为一大段并进行切块,而不是将1,2,3分别切块。
  • 在1.4版本解析结果中,跨页文本 “更高一些” 被分块到了下一文本块中,这对大模型语义理解是不利的,而在2.0版本解析结果中是正确划分的,并且也将穿插在文本段落中的图片解析到对应的chunk语句块中,非正文本文 “图1 鉴别与授权及其支持关系 37” 和 “Cover Story 封面专题” 也成功被过滤
原图 旧版本解析效果 新版本解析效果

Core symbols most depended-on inside this repo

u
called by 1373
qanything_kernel/qanything_server/static/swagger-ui-bundle.js
push
called by 1071
qanything_kernel/qanything_server/static/swagger-ui-bundle.js
n
called by 1051
qanything_kernel/qanything_server/static/redoc.standalone.js
get
called by 919
qanything_kernel/qanything_server/static/swagger-ui-bundle.js
replace
called by 565
qanything_kernel/qanything_server/static/redoc.standalone.js
set
called by 517
qanything_kernel/qanything_server/static/swagger-ui-bundle.js
append
called by 477
qanything_kernel/qanything_server/static/swagger-ui-bundle.js
concat
called by 444
qanything_kernel/qanything_server/static/swagger-ui-bundle.js

Shape

Function 2,954
Method 2,087
Class 853
Route 57

Languages

TypeScript78%
Python22%

Modules by API surface

qanything_kernel/qanything_server/static/swagger-ui-bundle.js3,309 symbols
qanything_kernel/qanything_server/static/redoc.standalone.js1,325 symbols
qanything_kernel/dependent_server/pdf_parser_server/pdf_to_markdown/core/vision/operators.py63 symbols
qanything_kernel/dependent_server/ocr_server/operators.py63 symbols
qanything_kernel/qanything_server/handler.py60 symbols
qanything_kernel/connector/database/mysql/mysql_client.py58 symbols
qanything_kernel/dependent_server/pdf_parser_server/pdf_to_markdown/core/layout/table_rec/lib/table_rec_models/networks/pose_dla_dcn.py49 symbols
qanything_kernel/dependent_server/pdf_parser_server/pdf_to_markdown/core/parser/pdf_parser.py46 symbols
qanything_kernel/utils/general_utils.py36 symbols
qanything_kernel/dependent_server/pdf_parser_server/pdf_to_markdown/core/layout/table_rec/lib/table_rec_models/transformer.py35 symbols
qanything_kernel/dependent_server/ocr_server/ocr_server.py33 symbols
qanything_kernel/dependent_server/ocr_server/ocr.py30 symbols

Dependencies from manifests, versioned

PyMuPDF1.24.4 · 1×
PyPDF23.0.1 · 1×
Wikipedia-API0.6.0 · 1×
aiomysql0.2.0 · 1×
anthropic0.25.7 · 1×
boto31.34.79 · 1×
chardet5.2.0 · 1×
concurrent-log-handler0.9.25 · 1×
cryptography42.0.8 · 1×
datrie0.8.2 · 1×
docx2txt0.8 · 1×
duckduckgo-search5.3.0b4 · 1×

For agents

$ claude mcp add QAnything \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact