
QAnything(Question and Answer based on Anything)是一个本地知识库问答系统,旨在支持多种文件格式和数据库,支持离线安装和使用。
使用 QAnything,您只需放入任何格式的本地文件,即可获得准确、快速、可靠的答案。
当前支持的文件格式包括:PDF(pdf)、Word(docx)、PPT(pptx)、XLS(xlsx)、Markdown(md)、Email(eml)、TXT(txt)、图片(jpg, jpeg, png)、CSV(csv)、网页链接(html)。更多格式即将推出...
在知识库数据量大的场景下,两阶段方法的优势非常明显。如果仅使用第一阶段 embedding 检索,随着数据量增加会出现检索性能下降的问题(如下图中绿线所示)。但在第二阶段重排序(rerank)后,准确率能够稳定提升,数据越多,效果越好。
QAnything 使用检索组件 BCEmbedding,其以双语和跨语言能力著称。BCEmbedding 擅长弥合中英文语言差异,它实现了:
| 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 |
| 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 |

注意:
WithoutReranker 设置中,我们的 bce-embedding-base_v1 优于所有其他 embedding 模型。bce-reranker-base_v1 取得了最佳性能。bce-embedding-base_v1 和 bce-reranker-base_v1 的组合是当前最优方案 (SOTA)。QAnything 的开源版本基于 QwenLM,并在大量专业问答数据集上进行了微调,极大地增强了问答能力。
如果您需要将其用于商业目的,请遵循 QwenLM 的许可证。更多详情请参考:QwenLM。
在 GitHub 上为我们加星,以便在发布新版本时立即收到通知!
我们提供两个版本:Python 版本和 Docker 版本。
Python 版本适合快速体验新功能,Docker 版本适合二次开发和实际生产环境使用,暂时不支持新功能。
不同安装方法对应的功能如下:
| 功能 | Python 版本 | Docker 版本 | 说明 |
|---|---|---|---|
| 详细安装文档 | ✅ 详情 | ✅ 详情 | |
| 支持 API | ✅ 详情 | ✅ 详情 | |
| 支持生产环境 | ❌ | ✅ | |
| 支持离线安装(私有部署) | ❌ | ✅ 详情 | |
| 支持多并发 | ❌ | ✅ 详情 | Python 版本在使用 API 而非本地大模型时,可以手动设置。 详情 |
| 支持多卡推理 | ❌ | ✅ 详情 | |
| 支持 Mac(M 系列芯片) | ✅ | ❌ | 目前在 Mac 上运行本地 LLM 依赖于 llamacpp,问答速度较慢。建议使用 OpenAI API 调用模型服务。 |
| 支持 Linux | ✅ | ✅ | Python 版本在 Linux 上默认使用 onnxruntime-gpu,当 glibc<2.28 时自动切换到 onnxruntime。 |
| 支持 Windows WSL | ✅ | ✅ | |
| 支持纯 CPU | ✅ 详情 | ❌ | |
| 支持混合搜索(BM25+embedding) | ❌ | ✅ | |
| 支持联网搜索(需要 VPN) | ✅ 详情 | ❌ | Docker 版本计划中。 |
| 支持 FAQ | ✅ 详情 | ❌ | Docker 版本计划中。 |
| 支持机器人 | ✅ 详情 | ❌ | Docker 版本计划中。 |
| 支持溯源 | ✅ 详情 | ❌ | Docker 版本计划中。 |
| 支持通过 API 检索日志 | ✅ 详情 | ❌ | Docker 版本计划中。 |
| 支持音频文件 | ✅ | ❌ | Docker 版本计划中,上传文件将支持 mp3 和 wav 格式文件。 |
| 支持 OpenCloudOS | ✅详情 | ❌ | |
| 支持兼容 OpenAI API 的接口(包括 ollama) | ✅ 详情 | ✅ 详情 | 需要手动设置 api_key, base_url, model 等参数。 |
| PDF 解析性能提升(包括表格) | ✅ 详情 | ❌ | |
| 用户自定义配置(实验性:提升速度) | ✅ 详情 | ❌ | |
| 其他文件类型解析性能提升 | ❌ | ❌ | 预计下个版本发布,约 15 天后。 |
如果您不想使用 Docker 安装,我们提供了一份纯 Python 安装指南。纯 Python 环境仅用于演示目的,不建议在生产环境中部署。
| 系统 | 所需项目 | 最低要求 | 备注 |
|---|---|---|---|
| Linux | NVIDIA GPU 内存 | >= 4GB (使用 OpenAI API) | 最低:GTX 1050Ti (使用 OpenAI API) 推荐:RTX 3090 |
| NVIDIA 驱动版本 | >= 525.105.17 | ||
| Docker 版本 | >= 20.10.5 | Docker 安装 | |
| docker compose 版本 | >= 2.23.3 | docker compose 安装 | |
| git-lfs | git-lfs 安装 |
| 系统 | 所需项目 | 最低要求 | 备注 |
|---|---|---|---|
| 带有 WSL Ubuntu 子系统的 Windows | NVIDIA GPU 内存 | >= 4GB (使用 OpenAI API) | 最低:GTX 1050Ti (使用 OpenAI API) 推荐:RTX 3090 |
| GEFORCE EXPERIENCE | >= 546.33 | GEFORCE EXPERIENCE 下载 | |
| Docker Desktop | >= 4.26.1(131620) | 适用于 Windows 的 Docker Desktop | |
| git-lfs | git-lfs 安装 |
git clone https://github.com/netease-youdao/QAnything.git
bash ./run.sh -h 获取 LLM 接口的详细用法cd QAnything
bash run.sh # 默认在 GPU 0 上启动。
cd QAnything
bash ./run.sh -c local -i 0 -b default # gpu id 0
# 对于 Windows 操作系统:需要进入 **WSL2** 环境。
# 第一步:下载公开的 LLM 模型(例如 Qwen-7B-QAnything)并保存到 "/path/to/QAnything/assets/custom_models"
# (可选) 从 ModelScope 下载 Qwen-7B-QAnything:https://www.modelscope.cn/models/netease-youdao/Qwen-7B-QAnything
# (可选) 从 Huggingface 下载 Qwen-7B-QAnything:https://huggingface.co/netease-youdao/Qwen-7B-QAnything
cd QAnything/assets/custom_models
git clone https://huggingface.co/netease-youdao/Qwen-7B-QAnything
# 第二步:执行服务启动命令。这里使用 "-b hf" 指定 Huggingface transformers 后端。
cd ../../
bash ./run.sh -c local -i 0 -b hf -m Qwen-7B-QAnything -t qwen-7b-qanything
# GPU 计算能力:https://developer.nvidia.com/cuda-gpus
# 第一步:下载公开的 LLM 模型(例如 Qwen-7B-QAnything)并保存到 "/path/to/QAnything/assets/custom_models"
# (可选) 从 ModelScope 下载 Qwen-7B-QAnything:https://www.modelscope.cn/models/netease-youdao/Qwen-7B-QAnything
# (可选) 从 Huggingface 下载 Qwen-7B-QAnything:https://huggingface.co/netease-youdao/Qwen-7B-QAnything
cd QAnything/assets/custom_models
git clone https://huggingface.co/netease-youdao/Qwen-7B-QAnything
# 第二步:执行服务启动命令。这里使用 "-b vllm" 指定 vllm 后端。
cd ../../
bash ./run.sh -c local -i 0 -b vllm -m Qwen-7B-QAnything -t qwen-7b-qanything -p 1 -r 0.85
cd QAnything
bash ./run.sh -c local -i 0,1 -b default # gpu ids: 0,1,请确认可用 GPU 数量。最多支持两张卡启动。
安装成功后,您可以在 Web 浏览器中输入以下地址进行体验。
your_host:8777/qanything/如果您想访问 API,请参考以下地址:
your_host:8777/api/如果您想查看相关日志,请检查 QAnything/logs/debug_logs 目录下的日志文件。
如果您在 Windows11 系统上:需要进入 WSL 环境。
bash close.sh
如果您想离线安装 QAnything,可以使用以下命令启动服务。
# 在一台联网的机器上下载 Docker 镜像
docker pull quay.io/coreos/etcd:v3.5.5
docker pull minio/minio:RELEASE.2023-03-20T20-16-18Z
docker pull milvusdb/milvus:v2.3.4
docker pull mysql:latest
docker pull freeren/qanything-win:v1.2.x # 从 [https://github.com/netease-youdao/QAnything/blob/master/docker-compose-windows.yaml#L103] 获取最新版本号。
# 打包镜像
docker save quay.io/coreos/etcd:v3.5.5 minio/minio:RELEASE.2023-03-20T20-16-18Z milvusdb/milvus:v2.3.4 mysql:latest freeren/qanything-win:v1.2.1 -o qanything_offline.tar
# 下载 QAnything 代码
wget https://github.com/netease-youdao/QAnything/archive/refs/heads/master.zip
# 将镜像 qanything_offline.tar 和代码 qany-master.zip 复制到离线机器上
cp QAnything-master.zip qanything_offline.tar /path/to/your/offline/machine
# 在离线机器上加载镜像
docker load -i qanything_offline.tar
# 解压代码并运行
unzip QAnything-master.zip
cd QAnything-master
bash run.sh
# 在一台联网的机器上下载 Docker 镜像
docker pull quay.io/coreos/etcd:v3.5.5
docker pull minio/minio:RELEASE.2023-03-20T20-16-18Z
docker pull milvusdb/milvus:v2.3.4
docker pull mysql:latest
docker pull freeren/qanything:v1.2.x # 从 [https://github.com/netease-youdao/qanything/blob/master/docker-compose-linux.yaml#L104] 获取最新版本号。
# 打包镜像
docker save quay.io/coreos/etcd:v3.5.5 minio/minio:RELEASE.2023-03-20T20-16-18Z milvusdb/milvus:v2.3.4 mysql:latest freeren/qanything:v1.2.1 -o qanything_offline.tar
# 下载 QAnything 代码
wget https://github.com/netease-youdao/QAnything/archive/refs/heads/master.zip
# 将镜像 qanything_offline.tar 和代码 qany-master.zip 复制到离线机器上
cp QAnything-master.zip qanything_offline.tar /path/to/your/offline/machine
# 在离线机器上加载镜像
docker load -i qanything_offline.tar
# 解压代码并运行
unzip QAnything-master.zip
cd QAnything-master
bash run.sh
如果您需要访问 API,请参考 QAnything API 文档。
我们感谢您对本项目的贡献兴趣。无论是修复错误、改进现有功能还是添加全新的功能,都欢迎您的贡献!
🔎 要了解 QAnything 的未来计划和进度,请参阅:QAnything 路线图
🤬 要向 QAnything 提供反馈,请参阅:QAnything 反馈
欢迎加入 QAnything Discord 社区
欢迎关注 QAnything 微信公众号获取最新信息。

欢迎扫码加入 QAnything 讨论群。

如果您需要私下联系我们的团队,请通过以下电子邮件与我们联系:
qanything@rd.netease.com
通过以下方式之一联系维护者:
QAnything 使用 Apache 2.0 许可证
QAnything 采用了以下依赖: