基于 QAnything 的知识库问答系统:技术解析与应用实践

news2024/11/19 19:26:01

最近已有不少大厂都在秋招宣讲了,也有一些在 Offer 发放阶段。

节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。

针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了深入的讨论。

总结链接如下:

《AIGC 面试宝典》圈粉无数!
《大模型面试宝典》(2024版) 发布!

喜欢本文记得收藏、关注、点赞。更多实战和面试交流


最近在学习大模型 RAG 相关,看了很多市面上流行的 RAG 工业落地框架(QAnything、RAGFlow、FastGPT、智谱 RAG、AnythingLLM、MaxKB、Dify 等等),这些产品在文档处理、召回、重排、LLM处理、交互体验上各有千秋。我计划写一系列相关文章,科普技术知识 + 测试这些产品。

今天就先介绍一下网易有道开源的 QAnything,顺手撸了一个知识库问答聊天页面(源码见文末),这个源码稍作修改,即可适用 N 多支持 api 调用的纯 Chat 或基于知识库的 Chat。

图片

QAnything 简介

QAnything 是一个基于 AI 技术的本地知识库问答系统,它允许用户将各种格式的文档(如 PDF、Word、图片等)导入到本地知识库中,然后通过自然语言对话的方式与这些文档进行交互。这种方式极大地简化了信息检索和知识管理的过程,使得用户可以更加便捷地获取所需信息。

图片QAnything 的应用范围非常广泛,几乎可以在任何需要管理和检索大量文档的场景中发挥作用:

  • 企业知识管理:帮助企业整合内部文档,提高员工获取信息的效率。

  • 个人学习助手:辅助学生或研究人员快速检索和理解大量学习资料。

  • 客户服务:为客服人员提供快速准确的信息检索工具,提高服务质量。

  • 法律和合规:协助法律专业人士快速查找相关法规和案例。

产品特性包括:

  1. 多格式文档支持:QAnything 能够处理多种文档格式,包括但不限于 PDF、Word、Excel、PowerPoint、图片等。这种广泛的格式支持确保了用户可以将几乎所有类型的文档纳入知识库。

  2. 本地部署:与许多云端服务不同,QAnything 支持完全本地化部署。这不仅保证了数据的安全性和隐私,也使得企业可以更好地控制和管理自己的知识资产。

  3. 智能问答:借助先进的自然语言处理技术,QAnything 能够理解用户的问题,并从知识库中快速定位相关信息,提供准确的答案。

  4. 上下文理解:QAnything 不仅能回答单个问题,还能在对话过程中保持上下文的连贯性,使得交互更加自然和高效。

  5. 可视化界面:QAnything 提供了直观的用户界面,使得文档管理和问答交互变得简单易用。

QAnything 的优势,官网总结的非常到位:1是自研RAG引擎,跨语言语义检索准确率业界第一;2是支持全离线私有化轻松部署(提供python和docker双开源版本)

QAnything 技术亮点

QAnything 模型方面包括ocr解析、embedding/rerank,以及大模型。

QAnything 系统方面包括向量数据库、mysql数据库、前端、后端等必要的模块。

整个引擎的功能完整,用户可以直接下载,不需要再搭配其他的模块即可使用。系统可扩展性也非常好,只要硬盘内存足够,就可以一直建库,支持无上限的文档。

图片

  1. 文档处理:QAnything 的此模块使用了 PDF 文件解析,具体是通过 PyMuPDF 库来完成的,该库是目前效率最高的解析工具。在解析文档内容时,无论是文本文件还是图像文件,均使用 PyMuPDF 的 get_text 方法。需要注意的是,如果图像文件中不包含文字,使用此方法时将会出现错误。

  2. 召回模块:QAnything 向量库使用了 Milvus 的混合检索策略(结合 BM25 全文检索和向量检索),在检索过程中不设定任何阈值,直接返回前 100 个最相关的结果(TopK =100)。

  3. Rerank 模块:QAnything 精确排序使用自定义的 Rerank 模型

Reranker是Qanything的亮点,主要解决知识库数据量增加事检索退化问题。使用二阶段 rerank 重排后能实现准确率稳定增长,即数据越多,效果越好

图片QAnything 使用的检索组件BCEmbedding有非常强悍的双语和跨语种能力,能消除语义检索里面的中英语言之间的差异,从而多领域、多语种和跨语种RAG评测(下图)中bce-embedding-base_v1和bce-reranker-base_v1的组合是SOTA。

图片

QAnything 安装使用

step0: 必要条件

系统依赖要求说明
RAM Memory>= 20GB
Linux/MacDocker version>= 20.10.5Docker install
Linux/Macdocker compose version>= 2.23.3docker compose install
WindowsDocker Desktop>= 4.26.1(131620)Docker Desktop for Windows

step1: 下载项目

git clone https://github.com/netease-youdao/QAnything.git

step2: 进入项目根目录执行启动命令

  • 执行 docker compose 启动命令

  • 启动过程大约需要30秒左右,当日志输出"qanything后端服务已就绪!"后,启动完毕!

cd QAnything
# 在 Linux 上启动
docker compose -f docker-compose-linux.yaml up
# 在 Mac 上启动
docker compose -f docker-compose-mac.yaml up
# 在 Windows 上启动
docker compose -f docker-compose-win.yaml up

step3: 开始体验

运行成功后,即可在浏览器输入以下地址进行体验。

  • 前端地址: http://localhost:8777/qanything/

QAnything 核心功能

1、知识库

QAnything核心功能,分文档集和问答集。

支持:md、txt、pdf、jpg、docx、xlsx、pptx、eml、csv、jsonl,单知识库文件总个数<1万个,单个文档<100M,单个文件字数<500万字,图片<5M

图片

对话框支持模型设置和是否开启多轮对话设置。图片

2、Agents

QAnything的Agents相对比较简单,也没有内置太多模板。

图片

设计自由度也不高,只有角色设定、欢迎语、关联知识库、首选模型、回复上限、模型能力等选项可调。图片

3、速读

我理解,速读是知识库问答的简化版,适合临时性阅读特定文档。

图片

文档可以上传或知识库导入,完成文档解析后,自动完成摘要、解读、问答。图片

其中解读很有意思,它内置了模板,可以从文档中提炼背景、方法、实验、结论。也可以自己根据文档类型创建合适的模板。图片

4、AI写手

智能 AI写作有几个步骤:1️⃣、直接输入标题,加入关键词;2️⃣、通过AI智能生成大纲,或使用大纲模板;3️⃣、选择是否关联知识库。

图片

大纲模板可以手动输入/直接导入,也可以AI生成图片

基于 QAnything 的 API 的前端应用

QAnything 平台可以很方便的调用和管理 API(知识库管理、Agent管理、流式问答),主要亮点是:

  • 数据互通:QAnything 平台的数据和 API 完美互通,数据流转无障碍。

  • 问答展示:针对 API 实际调用的问答数据进行展示,并可以人工做问答修正。图片

  • FAQ 管理:接口中增加了对 FAQ 的增删改查功能。

  • 多平台接入:基于”问答秘钥“接口调用,可实现小程序等渠道的快捷接入。图片

应用场景

基于 QAnything 的 API 接口可以轻松赋能多种应用场景:

  • 场景 1:可以在 QAnything 平台上配置管理知识库和 Agent,将配置好的 Agent 通过”问答秘钥“接入到小程序、微信、企业微信业务系统中,可以做为销售顾问、售后咨询机器人等。

  • 场景 2:使用 QAnything 的”管理秘钥“来进行知识库、文件、Agent 的增删改查管理,可以搭建一个属于自己企业的知识库问答系统。

准备 api key、kb_id

开发基于 QAnything 的 API 的前端应用,需要提前准备好API。

路径:个人账号-创建api

图片

api调用地址:https://openapi.youdao.com/q_anything/api

最后准备知识库kb_id,路径:知识库、鼠标点击知识库名,管理

图片

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

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

相关文章

Mysql 学习——项目实战

MySQL 学习——项目实战 项目出处 博主&#xff1a;Asmywishi Linux-Ubuntu启动Mysql sudo mysqlData preparation Create Database and Table Create database : create database mysql_example1;Start database : use mysql_example1;Create Student table : # 学生表…

vue页面保持在div的底部(适用于聊天界面等需要显示最新信息的场景)

代码示例&#xff1a; <script setup lang"ts"> import {nextTick, onMounted, ref} from vueconst count [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, …

如何将题目文档做成一个题库刷题小程序?

✨告别题海战术&#xff0c;迎接智慧刷题新时代&#xff01;&#x1f680; &#x1f4da;面对堆积如山的题库文档&#xff0c;是否感到无从下手&#xff1f;别担心&#xff0c;这款本土定制刷题小程序来救场啦&#xff01;&#x1f389; &#x1f31f;自动生成题库&#xff0c…

数据结构-3.9.栈在递归中的应用

一.函数被调用背后的过程&#xff1a;最后被调用的函数最先结束也符合栈的后进先出 1.main函数为主函数即程序入口&#xff0c;运行时主函数先入栈&#xff0c;然后存入主函数里的数据&#xff1b; 2.func1函数加载在栈中时他后面的代码的地址#1(调用返回地址&#xff0c;不是…

Xshell7下载及服务器连接

一、Xshell-7.0.0164p、Xftp 7下载 1.1、文件下载 通过网盘分享的文件&#xff1a;xshell 链接: https://pan.baidu.com/s/1qc0CPv4Hkl19hI9tyvYZkQ 提取码: 5snq –来自百度网盘超级会员v2的分享 1.2、ip连接 下shell和xftp操作一样&#xff1a;找到文件—》新建—》名称随…

链表OJ经典题目及思路总结(一)

目录 前言1.移除元素1.1 链表1.2 数组 2.双指针2.1 找链表的中间结点2.2 找倒数第k个结点 总结 前言 解代码题 先整体&#xff1a;首先数据结构链表的题一定要多画图&#xff0c;捋清问题的解决思路&#xff1b; 后局部&#xff1a;接着考虑每一步具体如何实现&#xff0c;框架…

JavaScript 数学基础:数字与运算符解析——WEB开发系列43

哈哈哈哈可能不是每个人都喜欢数学。有些人从小就享受解决复杂的数学问题&#xff0c;而另一些人则在学校被迫学习乘法表和长除法时对数学产生了厌恶。尽管如此&#xff0c;数学仍是生活中不可或缺的组成部分。无论我们处在哪里&#xff0c;数学的应用在我们生活中随处可见。在…

使用 ModelScope Studio 实现可滚动 ChatBot

前面的文章提到过 Gradio 的 Chatbot 不能自动滚动的问题&#xff0c;最近看到了 ModelScope Studio 扩展的一些组件&#xff0c;其中 Chatbot 就完美解决了自动滚动的问题&#xff0c;同时还增加了很多更细化的功能&#xff0c;例如可以设置用户和 AI 的头像。官方文档&#x…

C++进阶(3): 二叉搜索树

二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一颗空树&#xff0c;或者具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有的节点的值都小于等于 根节点的值若它的右子树不为空&#xff0c;则右子树上所有的节点的值都大于等…

时序必读论文15|TimeXer:通过外部变量增强Transformer在时间序列预测中的能力

论文标题&#xff1a;TimeXer: Empowering Transformers for Time Series Forecasting with Exogenous Variables 论文链接&#xff1a;https://arxiv.org/abs/2402.19072 前言 仅仅关注内生变量&#xff0c;通常不足以保证准确的预测&#xff0c;外部序列可以为内生变量提供…

MongoDB 副本集搭建 【docker compose + 本机部署】【建议收藏起来】

什么是副本集 MongoDB副本集&#xff08;Replica Set&#xff09;是一种数据冗余和故障恢复机制&#xff0c;它允许你维护相同数据的一个或多个副本&#xff0c;并提供自动故障转移和数据恢复能力。副本集是一个包含多个MongoDB实例&#xff08;通常称为成员&#xff09;的集合…

Linux学习笔记(一):Linux学习环境的安装及远程连接工具的使用

Linux学习笔记&#xff08;一&#xff09;&#xff1a;Linux学习环境的安装及远程连接工具的使用 本地安装虚拟机 1.安装VMWare(点击图片跳转下载&#xff09; 2.安装CentOS7光盘源(点击图片下载&#xff09; 3.安装 一路点下一步 点击确认 等待不要动,可能有点久,直到这个…

【内网渗透】最保姆级的春秋云镜Flarum打靶笔记

目录 flag1 flag3 flag4​ flag2 flag1 扫外网 打的是flarum论坛&#xff0c;p牛之前有写过phar反序列化的利用&#xff1a; 从偶遇Flarum开始的RCE之旅 rockyou.txt爆出administrator/1chris&#xff0c;登录 用这个工具生成phar包 https://github.com/ambionics/p…

【Python报错已解决】IndexError: index 0 is out of bounds for axis 1 with size 0

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

springboot整合seata

一、准备 docker部署seata-server 1.5.2参考&#xff1a;docker安装各个组件的命令 二、springboot集成seata 2.1 引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId>&…

helm部署ingress-nginx

helm部署ingress-nginx 19/100 保存草稿 发布文章 sj1163739403 未选择任何文件 ingress-nginx是管理南北向流量很好的一个工具&#xff0c;可以避免在云端频繁对LB进行配置&#xff0c;通过Label也可以实现让ingress-nginx都部署在指定的NodeGroup 一、helm安装ingress-nginx…

数据管理_DM的实现

DataManager 的实现 DataManager 是数据库系统中的核心组件&#xff0c;负责管理底层数据的访问、修改和事务处理。它是 DM 层直接对外提供方法的类&#xff0c;用来对上层其他模块提供数据操作的API的,同时也实现了对 DataItem 对象的缓存管理。DataItem 存储的 key 是由页号…

使用root账号ssh登录虚拟机ubuntu

在C:\Users\Administrator\.ssh目录下的config中&#xff0c;添加ubuntu会在根目录中&#xff0c;建立一个root文件夹。在该文件夹中建一个.ssh目录。像免密登录ubuntu设置中&#xff0c;把公钥考进去。在vscode中打开文件夹中选择要打开的文件夹&#xff0c;就可以不需要在ubu…

fiddler抓包14_自动重定向

课程大纲 重定向&#xff08;Redirect&#xff09;&#xff1a;将网络请求重新定向到其他位置。 按重定向方式分为&#xff1a;网页重定向、域名重定向、接口重定向…… 按持续时间分为&#xff1a;永久重定向、临时重定向。 ① 永久重定向&#xff0c;HTTP 301&#xff08;Mov…

Python或R时偏移算法实现

&#x1f3af;要点 计算单变量或多变量时序距离&#xff0c;使用欧几里得、曼哈顿等函数量化不同时序差异。量化生成时序之间接近度相似性矩阵。使用高尔距离和堪培拉距离等相似度测量。实现最小方差匹配算法&#xff0c;绘制步进模式的图形表示。其他语言包算法实现。 &…