RAG问答系统|QAnything:多类型文本的知识库,安全可靠、一键离线部署

news2024/12/23 19:19:38

转自老贾探AI

在日常生活和工作中,我们经常面对大量本地信息资料(如PDF、Doc等),需要进行关联理解和处理。频繁地切换和区分文件格式,再加上需要跨语言理解的环境,使得如何找到一个准确、快速、可靠地处理文件的解决方案成为一项挑战。这个问题既现实又复杂,我们需要一个强大且可靠的工具来解决这个问题。

今天给大家推荐一个GitHub开源项目:netease-youdao/QAnything。该项目已经拥有超过5.8k Star,"Question and Answer based on Anything"。

图片

图片

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)等。

特点
  • 数据安全,支持断网离线安装使用;

  • 支持跨语种问答,可根据文档的语种自由切换中英文问答;

  • 支持海量数据问答,两阶段检索rerank,解决大规模数据检索降级问题(数据越多,效果越好);

  • 高性能生产级系统,可直接私有化生产部署;

  • 易用,无需繁琐配置,一键安装部署,开箱即用;

  • 支持跨知识库问答。

架构

图片

为什么是两阶段检索?

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

QAnything使用的检索组件BCEmbedding有非常强悍的双语和跨语种能力,能消除语义检索里面的中英语言之间的差异。

  • 强大的双语和跨语种语义表征能力->基于MTEB的语义表征评测指标(https://github.com/netease-youdao/BCEmbedding/tree/master?tab=readme-ov-file#semantic-representation-evaluations-in-mteb)

  • 基于LlamaIndex的RAG评测,表现SOTA->基于LlamaIndex的RAG评测指标(https://github.com/netease-youdao/BCEmbedding/tree/master?tab=readme-ov-file#rag-evaluations-in-llamaindex)

提示:

  • 在WithoutReranker列中,bce-embedding-base_v1模型优于所有其他embedding模型。

  • 在固定embedding模型的情况下,bce-reranker-base_v1模型达到了最佳表现。

  • bce-embedding-base_v1和bce-reranker-base_v1的组合是SOTA

LLM

开源版本QAnything的大模型基于通义千问,并在大量专业问答数据集上进行微调;在千问的基础上大大加强了问答的能力。选择一个性价比高的LLM也是很重要的。

最佳实践

准备环境
  • Linux系统

图片

  • Windows系统

图片

部署安装
1: 下载项目
git clone https://github.com/netease-youdao/QAnything.git

2: 进入项目根目录执行启动脚本
cd QAnything
bash ./run.sh -h 获取详细的LLM服务配置方法

bash run.sh # 默认在0号GPU上启动

bash close.sh # 关闭服务

【注意】如果自动下载失败,可手动下载模型。

  • modelscope: https://modelscope.cn/models/netease-youdao/QAnything

  • wisemodel: https://wisemodel.cn/models/Netease_Youdao/qanything

  • huggingfase: https://huggingface.co/netease-youdao/QAnything

(可选)Linux指定单GPU启动

bash ./run.sh -c local -i 0 -b default # 指定0号GPU启动

(可选)Windows指定单GPU启动 - 推荐 Windows10/Windows11 WSL2

# 注意: Windows系统请先进入**WSL2**环境
# Step 1. 下载开源 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

# Step 2. 执行启动命令,其中"-b hf"表示指定使用 Huggingface transformers 后端运行 LLM.

cd ../..
bash ./run.sh -c local -i 0 -b hf -m Qwen-7B-QAnything -t qwen-7b-qanything

(可选)指定单GPU启动 - 推荐 GPU Compute Capability >= 8.6 && VRAM >= 24GB

# 查看 GPU 算力 GPU Compute Capability: 
https://developer.nvidia.com/cuda-gpus

# Step 1. 下载开源 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

# Step 2. 执行启动命令,其中"-b vllm"表示指定使用 vllm 后端运行 LLM.
cd ../..
bash ./run.sh -c local -i 0 -b vllm -m Qwen-7B-QAnything -t qwen-7b-qanything -p 1 -r 0.85

(可选)指定多GPU启动

bash ./run.sh -c local -i 0,1 -b default  # 指定0,1号GPU启动,最多支持两张卡启动

windows断网安装

# 先联网下载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.1

# 导出镜像
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和代码QAnything-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

Linux断网安装

# 先联网下载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.1

# 导出镜像
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和代码QAnything-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

开始体验

1、前端地址: http://${host}:5052/qanything/

2、API 接口地址: http://${host}:8777/api/

3、相关日志:QAnything/logs/debug_logs目录下的日志文件。

  • debug.log

    • 用户请求处理日志

  • sanic_api.log

    • 后端服务运行日志

  • llm_embed_rerank_tritonserver.log(单卡部署)

    • LLM embedding和rerank tritonserver服务启动日志

  • llm_tritonserver.log(多卡部署)

    • LLM tritonserver服务启动日志

  • embed_rerank_tritonserver.log(多卡部署或使用openai接口)

    • embedding和rerank tritonserver服务启动日志

  • rerank_server.log

    • rerank服务运行日志

  • ocr_server.log

    • OCR服务运行日志

  • npm_server.log

    • 前端服务运行日志

  • llm_server_entrypoint.log

    • LLM中转服务运行日志

  • fastchat_logs/*.log

    • FastChat服务运行日志

部署FAQ

FAQ快链:https://github.com/netease-youdao/QAnything/blob/master/FAQ_zh.md

相关技术组件

  • BCEmbedding

  • Triton Inference Server

  • vllm

  • FastChat

  • FasterTransformer

  • Langchain

  • Langchain-Chatchat

  • Milvus

  • PaddleOCR

  • Sanic

引用

  • https://github.com/netease-youdao/QAnything

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2041247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

48天笔试训练错题——day48

目录 选择题 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编程题 1. 左右最值最大差 2. 顺时针打印矩阵 选择题 1. cookie 是浏览器存储数据的机制,是用于维护 http 通信当中客户端的用户信息的。 2. 403 Forbidden 表示资源不可用,服务器理解客户请…

前端案例:酷我音乐项目(移动端自适应)(HTML+CSS)

一个简单的移动端案例,模拟不同设备下逻辑分辨率不同,宽高自适应 正常打开整体布局 打开 f12 (ctrl shift M)或者点击左上角图标,将其模拟为移动端设备 在移动设备iPhone6/7/8,逻辑分辨率375的整体布局 头部和底部的…

虚幻5|角色武器装备的数据库学习(不只是用来装备武器,甚至是角色切换也很可能用到)

虚幻5|在连招基础上,给角色添加武器并添加刀光|在攻击的时候添加武器并返回背后(第一部分,下一部分讲刀光)_unreal 如何给角色添加攻击-CSDN博客 目的:捡起各种不同的武器,捡起的武器跟装备的武器相匹配 …

C语言日常练习 Day15

目录 一、猴子吃桃问题。 二、两个乒乓球队进行比赛,各出3个人。甲队为A,B,C3人,乙队为X,Y,Z3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比赛,C说他不和X,Z比赛…

Java爬虫中的数据清洗:去除无效信息的技巧

在互联网信息爆炸的时代,数据的获取变得异常容易,但随之而来的是数据质量的问题。对于Java爬虫开发者来说,如何从海量的网页数据中清洗出有价值的信息,是一个既基础又关键的步骤。本文将介绍Java爬虫中数据清洗的重要性&#xff0…

VBA自动发邮件如何配置SMTP实现外部发送?

VBA自动发邮件的教程?如何利用VBA自动化发送邮件? 在使用VBA进行自动化办公任务时,自动发送邮件是一项非常实用的功能。AokSend将详细介绍如何通过VBA自动发邮件,并配置SMTP实现外部发送的过程。 VBA自动发邮件:准备…

前端开发攻略---彻底弄懂跨域解决方案

目录 1、浏览器的同源策略 1.1 源 1.2 同源与非同源 1.3 同源请求与非同源请求 2、跨域受到的限制 3、注意点 4、CORS解决Ajax跨域问题 4.1 CORS概述 4.2 CORS解决简单请求跨域 4.3 简单请求与复杂请求 4.4 CORS解决复杂请求跨域 4.5 借助CORS库快速完成配置 5、JS…

Daiqile SQL注入绕过

上源码。 <?php header("Content-type: text/html; charsetutf-8"); require db.inc.php;function dhtmlspecialchars($string) {if (is_array($string)) {foreach ($string as $key > $val) {$string[$key] dhtmlspecialchars($val);}}else {$string str_…

【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇 本篇为大家分享下在C学习中较为具有挑战与难度&#xff0c;同时也是很重要知识。掌握C类的六个默认成员函数&#xff0c;使得在模拟实现STL中容器过程得心应…

企业必备:2024年顶尖10款人事管理系统

本篇文章介绍了以下几个工具&#xff1a;Moka、卓望ShineHR、华夏HR云、中智人事、i人事、北森iTalentX、红海云、Zenefits、ICE Hrm、ADempiere。 在选择合适的人事管理系统时&#xff0c;很多企业面临如何找到既可靠又能满足特定需求的平台的难题。每个系统都有其独特之处&am…

前端工程化-03.环境准备

一.前端工程化 既然要实现前端工程化&#xff0c;那就要使用一些现成的工具来帮助我们实现&#xff0c;这个工具就是vue官方提供的脚手架 首先就要下载安装vue脚手架 二.什么是vue脚手架 三.安装NodeJS 1.先安装NodeJS才能安装vue脚手架。 Node.js — 在任何地方运行 Jav…

window.onload、$(document).ready()、Vue.created() 页面加载完成后执行方法

1、JavaScript 的 window.onload 方法 window.onload 方法是在页面所有元素&#xff08;包括图片、样式、链接等&#xff09;加载完成后触发的&#xff0c;在这个事件之前&#xff0c;页面上的所有资源都必须加载完成。因此&#xff0c;如果页面中包含大量的图片或其他资源&am…

【科目结转】财务科目结转

*&---------------------------------------------------------------------* *&程序名称 &#xff1a;ZFI134 *&程序描述 : 9003差异科目结转 &#xff08;批量操作 F.02 / 查询 FB03) *&申请单位 …

qt quick实现的水波纹特效:横向波纹、纵向波纹效果

qml实现的水波纹特效 1.横向波纹效果2.另一种效果&#xff08;纵向波纹&#xff09; 一直以来使用c qt如果要实现一些高级特效比如水波纹效果都难度比较大&#xff0c;但是使用qt quick难度就会小很多。这里借鉴一些网友的思路简单实现一下水波纹效果。主要思路就是波浪的形成是…

Aigtek高压放大器在无线电能传输的应用范围

无线电能传输是一种重要的技术&#xff0c;广泛应用于电力、通信和工业领域。高压放大器作为无线电能传输系统中的关键组件之一&#xff0c;扮演着放大信号、提高传输效率的重要角色。 无线电能传输是一种将电能通过无线电波或磁场从发送器传输到接收器的技术。它可以实现远距离…

web自动化测试Day4

目标 下拉选择框&#xff1b;弹出框&#xff1b;滚动条操作&#xff1b;frame表单切换&#xff1b;多窗口切换&#xff1b;窗口截图、验证码处理 定位下拉框 select选择框 下标从0开始 #通过下标形式访问 #通过value值形式访问 注意事项 实例化select时候&#xff0c;需要…

如何选择正规的调度控制台厂家?

在现代社会&#xff0c;随着各行各业对高效、安全管理的需求日益增长&#xff0c;调度控制台作为监控与指挥的核心设备&#xff0c;其重要性不言而喻。然而&#xff0c;市场上调度控制台厂家众多&#xff0c;产品质量与服务水平参差不齐&#xff0c;如何从中挑选出正规、可靠的…

Java设计模式之中介者模式:解耦对象交互的秘诀!

中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为设计模式&#xff0c;用于降低多个对象或类之间的通信复杂性。通过引入一个中介者对象&#xff0c;这些对象无需显式地相互引用&#xff0c;而是通过中介者对象进行交互&#xff0c;从而减少对象之间的直接交互&a…

minikube 实践练习3 - 扩容/缩容

多实例运行 参考文档&#xff1a;https://kubernetes.io/docs/tutorials/kubernetes-basics/scale/scale-intro/ 1. 创建类型为 LoadBalancer的service [weihengweihengminikube root]$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) …

构建openGauss-Lite-5.0.2-openEuler基础镜像

构建opengauss数据库基础镜像&#xff0c;需要克服几个困难&#xff1a; 1、使用root和opengauss普通用户来回切换&#xff1a;如果使用Dockerfile中RUN指令&#xff0c;执行su - user切换不生效。 2、需要设置sysctl内核参数&#xff1b;但是&#xff0c;即便使用了--privil…