前置条件
- 1已注册腾讯云账号
- 2一台腾讯云服务器:**内存 ≥ 20GB,推荐 8C32G**(低于此配置难以稳定运行)
- 3服务器已安装 Docker 20.10.5+ 与 Docker Compose v2.23.3+
- 4已安装 git-lfs(拉取模型需要)
读完想动手?新用户首单 8 折上云
服务器 + 大模型 API + 对象存储,新用户首购享 20% 补贴
QAnything 腾讯云部署完整指南
QAnything 是网易有道开源的企业级本地知识库问答系统。它在中文场景有个别人不好抄的优势:自研的 BCEmbedding——中英双语、跨语言检索的准确率是官方主打的卖点,再配合 BM25 + 向量的混合检索,召回率比纯向量方案高一档。
另外一个关键特性:支持全离线私有化部署,数据和推理全在本地,适合对数据出境有要求的企业。
代价是门槛不低。这篇先把门槛讲清楚,再带你一步步部署。
第一步:认清硬件门槛
官方文档标注的 Linux 环境要求:
| 项目 | 最低要求 | 说明 |
|---|---|---|
| 系统 | Linux(x86) | 另有 Mac / Windows WSL 方案 |
| NVIDIA GPU 显存 | ≥ 4GB | 推荐 RTX 3090;驱动 ≥ 525.105.17 |
| 内存 | ≥ 20GB | 硬门槛,低于此难以稳定运行 |
| Docker | ≥ 20.10.5 | |
| Docker Compose | ≥ v2.23.3 | |
| git-lfs | 必需 | 拉模型权重用 |
警告
⚠️ 两个容易踩的点:内存 20GB 是实测门槛,不是保守建议;git-lfs 必须先装,否则模型文件拉下来是一堆指针文件,启动必然失败。
机型对照
| 场景 | 推荐配置 | 说明 |
|---|---|---|
| 功能验证 | 8C32G(CPU,纯 Python 版) | 官方不建议生产用 |
| 小团队生产 | 8C32G + GPU(T4 / 3090 级) | 推荐起步 |
| 部门级 | 16C64G + 24GB 显存 | 文档量大、并发高 |
| 全离线私有化 | 上述配置 + 本地大模型 | 需额外跑 Ollama |
如果你现在只有 CPU 机器且内存不到 20GB,直接改用 MaxKB 腾讯云部署教程,别硬撑。
前往 腾讯云轻量应用服务器 选购页选大内存机型;需要 GPU 就在 腾讯云 GPU 机型页面 查看库存。
第二步:环境准备
2.1 安装 git-lfs(必做)
1sudo apt-get update
2sudo apt-get install -y git-lfs
3git lfs install验证:
1git lfs version警告
⚠️ 这一步漏掉的话,后面 clone 下来的模型权重只有几十字节的指针文件,服务启动时报权重加载失败,排查起来很费劲。
2.2 安装 Docker
1sudo apt-get install -y ca-certificates curl gnupg lsb-release
2
3sudo install -m 0755 -d /etc/apt/keyrings
4curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg \
5 | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
6sudo chmod a+r /etc/apt/keyrings/docker.gpg
7
8echo \
9 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
10 https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu \
11 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
12
13sudo apt-get update
14sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
15
16sudo usermod -aG docker $USER
17newgrp docker核对版本:
1docker --version # 需 >= 20.10.5
2docker compose version # 需 >= v2.23.32.3 配置镜像加速
腾讯云控制台「容器镜像服务 → 镜像加速器」里有专属地址,形如 https://xxxxxx.mirror.swr.myqcloud.com:
1sudo mkdir -p /etc/docker
2sudo tee /etc/docker/daemon.json <<'EOF'
3{
4 "registry-mirrors": [
5 "https://你的专属地址.mirror.swr.myqcloud.com"
6 ]
7}
8EOF
9sudo systemctl daemon-reload
10sudo systemctl restart docker2.4 检查资源
1free -h # 确认内存 >= 20GB
2df -h / # 预留 >= 80GB(镜像 + 模型权重)
3nvidia-smi # GPU 方案确认显卡可见第三步:部署 QAnything
3.1 克隆仓库
1cd /opt
2git clone https://github.com/netease-youdao/QAnything.git
3cd QAnything警告
⚠️ 如果 clone 后发现模型文件只有几十字节,说明 git-lfs 没装或没生效。回第二步装好,然后重新 clone(或执行 git lfs pull 补拉)。
3.2 启动服务
Linux 用对应的 compose 文件:
1docker compose -f docker-compose-linux.yaml up -d首次启动要拉多个镜像(含 milvus、mysql、minio、etcd 与业务服务),需要十几分钟,取决于带宽。
想看实时日志就用前台方式(调试时推荐):
1docker compose -f docker-compose-linux.yaml up3.3 确认启动完成
看到这条日志才算就绪:
qanything backend service is ready!
查看日志:
1# 后台方式看日志
2docker compose -f docker-compose-linux.yaml logs -f
3
4# 或看项目日志文件
5tail -f logs/debug_logs/sanic_api.log警告
⚠️ 官方说明启动约需 30 秒,但首次要拉镜像和下模型,实际远不止。别一看到没日志就以为失败了。
3.4 访问
浏览器打开:
http://服务器IP:8777/qanything/
注意路径末尾的 /qanything/ 不能少,直接访问 :8777 或 :8777/qanything 会打不开。
API 地址与前端相同:
http://服务器IP:8777/qanything/
3.5 关闭服务
1docker compose -f docker-compose-linux.yaml down警告
⚠️ 不要加 -v,那会删除数据卷,知识库内容全没。
第四步:接入模型
4.1 用云端 API(最快)
在界面里配置对应厂商的 API Key 即可。适合先跑通流程。
4.2 接本地 Ollama(全离线关键一步)
如果你已经按 GLM 腾讯云部署教程 或 InternLM 腾讯云部署教程 在服务器上跑起了 Ollama,可以把它接进来,实现数据完全不出网。
核心思路:Ollama 提供 OpenAI 兼容接口,把它当成一个自定义的 OpenAI 服务填进配置。
1# 确认 Ollama 可访问
2curl http://127.0.0.1:11434/v1/models警告
⚠️ QAnything 跑在 Docker 里,localhost 指容器自己。访问宿主机上的 Ollama 要用 host.docker.internal,并确保 compose 里有对应的 extra_hosts(- "host.docker.internal:host-gateway")。具体配置字段名以当前版本的 scripts/ 与 compose 文件为准,改动后重启服务生效。
4.3 关于 embedding 与 rerank
QAnything 自带 BCEmbedding(有道自研的 embedding + rerank),这是它中文检索效果好的根本原因。默认会随服务一起加载本地模型,通常不需要你额外配置。
如果你想单独使用 BCEmbedding(不含问答系统),官方也提供了独立的使用方式。
4.4 模型权重下载失败怎么办
自动下载失败时,手动从国内源拉:
- ModelScope:
https://modelscope.cn/models/netease-youdao/QAnything - 官方还列出了 wisemodel 等备用地址
1pip install modelscope
2python -c "
3from modelscope import snapshot_download
4snapshot_download('netease-youdao/QAnything', cache_dir='/data/qanything-models')
5"下载完按项目要求的目录结构摆放,再重启服务。
第五步:构建知识库
5.1 新建知识库
界面里「新建知识库」,填名称与描述。支持的知识库类型按界面提示选择(通用问答 / FAQ 等)。
5.2 上传文档
支持的格式很全:doc、ppt、xls、pdf、docx、pptx、xlsx、txt、图片 等,其中对 docx / pptx / pdf 做了特别优化:
- 能解析出表格和图片
- 保留多级标题的层级结构
这个特性很重要——很多知识库工具把文档切成碎块,标题层级丢了,问答时上下文就断了。QAnything 会按层级标题 + 语义切分,保证每个切片是完整的语义单元。
5.3 混合检索怎么用起来
Docker 版默认支持 BM25 + embedding 混合检索(纯 Python 版不支持,这也是官方建议生产用 Docker 的原因)。
混合检索的价值:
- BM25 擅长精确关键词匹配(人名、型号、编号)
- embedding 擅长语义相近匹配(同义表述)
两者结合,召回率明显高于纯向量方案。中文场景尤其明显。
如果发现检索不准,优先检查:
- 文档是否解析成功(看上传进度与状态)
- 提问词是否过于口语化或与文档用词差异大
- 是否被切分打断(看召回片段)
5.4 验收:问一个只有文档才知道的问题
别一上传完就上线。问一个文档里明确写了、但通用模型答不上来的问题,检查:
- 答案是否正确
- 是否给出了引用来源
- 引用片段是否真的来自你的文档
答案不带引用 = 检索没命中,必须回去排查,不要直接交付给用户。
第六步:API 对接
6.1 调用示例
1curl -X POST http://服务器IP:8777/qanything/ \
2 -H "Content-Type: application/json" \
3 -d '{
4 "question": "年假怎么申请",
5 "kb_id": "你的知识库ID"
6 }'详细的接口字段以官方 API 文档为准(版本间会有变化)。
6.2 挂进内部工具
知识库建好之后,真正的价值在于被用起来。把它接到内部聊天工具里,比单独一个网址有用得多——员工不会主动打开新系统。
自建机器人的话可以参考 chatgpt-on-wechat + NoneBot 腾讯云部署教程。
第七步:运维
7.1 备份
QAnything 的数据分布在 MySQL(元数据)与 Milvus(向量)里,生产环境建议:
- 定期备份 MySQL
- 对数据卷做快照:
docker volume ls查看相关卷
7.2 更新
1cd /opt/QAnything
2git pull
3docker compose -f docker-compose-linux.yaml pull
4docker compose -f docker-compose-linux.yaml up -d更新前先备份,跨版本可能涉及数据结构变更。
7.3 安全
- 用 Nginx 反代 + HTTPS,别直接暴露 8777
- 只放行 22 / 80 / 443
- 如果你已按 1Panel 腾讯云部署教程 装了面板,直接用它的反代功能配 HTTPS,省事
18 条故障排查
| # | 现象 | 原因 | 解决 |
|---|---|---|---|
| 1 | 容器起不来 | 内存不足 20GB | 升配,无其它办法 |
| 2 | 权重文件只有几十字节 | 没装 git-lfs | 装后重新 clone 或 git lfs pull |
| 3 | 镜像拉取极慢 | 没配加速 | 配专属镜像地址 |
| 4 | 页面 404 | 少了路径后缀 | 必须访问 :8777/qanything/(末尾斜杠也要) |
| 5 | 一直不出现 ready 日志 | 首次拉镜像与模型,耗时长 | 耐心等;看 logs/debug_logs/ |
| 6 | GPU 容器报驱动错误 | 驱动版本 < 525.105.17 | 升级 NVIDIA 驱动 |
| 7 | 容器内看不到显卡 | 没装 nvidia-container-toolkit | 装工具包并重启 docker |
| 8 | 连不上本地 Ollama | 用了 localhost | 改 host.docker.internal |
| 9 | 模型权重下载失败 | 网络问题 | 从 ModelScope 手动下载 |
| 10 | 上传文档解析失败 | 格式不支持或文件损坏 | 换格式;确认文件能正常打开 |
| 11 | 表格解析错乱 | 复杂合并单元格 | 手动拆分表格后重传 |
| 12 | 检索召回不准 | 纯向量方案的固有弱点 | 确认混合检索已启用;调整提问词 |
| 13 | 答案不带引用 | 检索没命中 | 检查解析状态;调整切分 |
| 14 | 中文检索效果差 | 用了非 BCEmbedding | 确认走的是自带 embedding |
| 15 | 磁盘快速占满 | 镜像 + 向量数据堆积 | 扩容;清理无用镜像 |
| 16 | 服务重启后数据没了 | 用了 down -v | ⚠️ 日常用不带 -v 的 down |
| 17 | 端口 8777 冲突 | 已被占用 | 改 compose 端口映射 |
| 18 | 账单意外高 | GPU 实例未销毁 | ⚠️ 控制台销毁实例,关机仍收费 |
落地建议
- 内存先买够 20GB —— 在这上面省钱只会换来无限重启。
- git-lfs 提前装 —— 漏了会导致权重全是空指针,是最隐蔽的坑。
- 访问路径别漏
/qanything/—— 包括末尾斜杠,少了就 404。 - 用「只有文档知道答案」的问题验收 —— 通用问题测不出检索是否真的生效。
- 知识库的价值在入口 —— 挂进群聊或内部工具,别指望员工主动打开一个新网址。
常见问题
QQAnything 和 RAGFlow、MaxKB 该怎么选?
看场景。QAnything 的强项是**中文与跨语言检索**——自研 BCEmbedding 在中英混合、跨语言召回上表现突出,加上 BM25 + 向量的混合检索,适合文档语言混杂、要求召回率的场景,代价是硬件门槛较高(内存 20GB 起)。RAGFlow 腾讯云部署教程 主打深度文档理解与原文溯源,适合制度与合同库。 MaxKB 腾讯云部署教程 最轻,4C8G 就能跑,适合快速上手。要中文检索精度选 QAnything,要文档还原选 RAGFlow,要省事选 MaxKB。
Q没有 GPU 能部署吗?
官方 Docker 方案面向 GPU 环境(Linux 前置条件里要求 NVIDIA GPU 显存 ≥4GB,推荐 RTX 3090),因为本地的 embedding 与 rerank 模型跑在 Triton 上。如果你只有 CPU 机器,可以改用官方的「纯 Python 环境安装」版本——它支持纯 CPU 运行,但官方明确说明仅作 demo 体验,不建议生产部署。生产用建议直接上 GPU 机型,或者在 CPU 机器改用 MaxKB。
Q数据真的完全不出外网吗?
可以做到。QAnything 支持全离线私有化:本地部署大模型(官方推荐用 Ollama),embedding 与 rerank 也走本地模型,全程不调用外部 API。本文会给出接入本地 Ollama 的具体配置。注意首次部署仍需要联网拉镜像与模型权重,之后即可断网运行。