QAnything-1.4.01.4.1版本更新!使用指北!
久等了各位!时隔一个多月,我们在4月26日和5月20日接连发布了v1.4.0和v1.4.1两个版本,带来了问答性能,解析效果等多方面的改进,并新增了大量的新功能和新特性
详见:releases 以及 使用说明
最新特性表

开发背景:
在v1.0.x->v1.3.x的版本迭代过程中,通过分析用户反馈,我们发现绝大部分的问题都是在使用本地大模型时产生的,因此我们把相当一部分工作重心放在了本地大模型的适配上
在这个目标下做了一系列的工作:
-
自动检测显卡的型号,计算能力和内存大小,并根据情况自动调整默认启动参数,以提供用户最佳体验,并给予相关提示。
-
支持Nvidia下全系列显卡,并根据用户硬件条件推荐本地大模型Size(3B,7B等)。
-
提供3种LLM推理运行后端:包括FasterTransformer(默认)、huggingface和vllm,通过FastChat Server API支持加载各种开源大模型。
-
提供纯python版本,自动根据运行环境切换本地大模型,模型自动下载等。
确实解决了一部分问题,但是随后我们发现这种做法类似于打地鼠,我们写的自动化逻辑本意是帮助用户减少手动操作的时间,尽量自动化运行QAnything,这个过程中添加了繁杂的检测和判断逻辑,但是相比用户使用场景的复杂性还远远不够,截止至v1.3.3版本发布,最多的问题仍然是本地模型运行过程中与系统软硬件环境产生的冲突,同时我们还发现大量用户存在使用自定义模型的需求,并不需要我们内置本地大模型(我们考虑到大部分个人用户的硬件条件,内置大模型主要是3B和7B的,实际使用效果欠佳),因此我们及时改变策略,将大模型这块独立出来,仅提供基础的本地大模型,同时提供更方便的使用其他开源大模型的接口,把工作重心放在增加更多的大模型衍生功能,同时进一步降低用户使用门槛上。
新发布的V1.4.0&V1.4.1将新增如下新特性:
-
新增联网检索
-
支持FAQ问答
-
支持自定义Bot
-
支持语音文件
-
支持文件溯源
-
支持问答日志检索
-
支持国产OS(OpenCloudOS)
-
支持所有与OpenAI-API兼容的大模型服务(包含ollama,通义千问DashScope等)
-
支持多卡推理
-
PDF文件解析效果优化(包含表格效果)
以及部分使用上的改进,包括服务启动时间优化,资源占用优化,修复已知问题等
联网检索
注意:联网检索依赖于第三方库:GitHub - deedy5/duckduckgo_search
duckduckgo_search使用依赖外网VPN,如无法获取外网VPN请在前端页面关闭联网检索功能,防止报错。
未开启联网检索:

开启联网检索:

API调用:
import sysimport requestsimport timedef send_request():url = 'http://{your_host}:8777/api/local_doc_qa/local_doc_chat'headers = {'content-type': 'application/json'}data = {"user_id": "zzp","kb_ids": ["KBf652e9e379c546f1894597dcabdc8e47"],"question": "介绍一下韦小宝","networking": True # True开启联网检索}try:start_time = time.time()response = requests.post(url=url, headers=headers, json=data, timeout=60)end_time = time.time()res = response.json()print(res['response'])print(f"响应状态码: {response.status_code}, 响应时间: {end_time - start_time}秒")except Exception as e:print(f"请求发送失败: {e}")if __name__ == '__main__':send_request()
FAQ问答
FAQ问答流程和普通问答一致,区别在于FAQ文件需要单独在问答集页面上传,支持手动输入以及excel文件上传两种方式
手动输入:

Excel上传:

编辑FAQ内容

此时针对知识库的问答会同时检索文档集和问答集:

API调用:
import osimport requestsurl = "http://{your_host}:8777/api/local_doc_qa/upload_faqs"folder_path = "./xlsx_data" # 文件所在文件夹,注意是文件夹!!data = {"user_id": "zzp","kb_id": "KB6dae785cdd5d47a997e890521acbe1c9_FAQ",}files = []for root, dirs, file_names in os.walk(folder_path):for file_name in file_names:if file_name.endswith(".xlsx"):file_path = os.path.join(root, file_name)files.append(("files", open(file_path, "rb")))response = requests.post(url, files=files, data=data)print(response.text)
备注:
FAQ上传单次默认最多处理1000行,可手动修改这个限制,仅影响请求处理速度,太多可能会超时
支持自定义Bot


分享页面:

API调用:
创建Bot
获取Bot信息
修改Bot信息
删除Bot信息
支持语音文件
支持解析MP3和WAV格式文件(依赖faster_whisper,解析速度慢,建议控制语音时长在60秒内)

支持文件溯源
目前仅支持以下格式的文件溯源:
pdf,docx,xlsx,txt,jpg,png,jpeg,联网检索网络链接等,其他类型后续将尽快支持


支持问答日志检索(API)
目前仅支持API检索,后续将提供前端页面操作:检索API
import requestsimport jsonurl = "http://{your_host}:8777/api/local_doc_qa/get_qa_info"headers = {"Content-Type": "application/json"}data = {"user_id": "zzp","kb_ids": ["KBe3f7b698208645218e787d2eee2eae41"],"time_start": "2024-04-01","time_end": "2024-04-29","query": "韦小宝住址","need_info": ["user_id"]}response = requests.post(url, headers=headers, data=json.dumps(data))print(response.status_code)print(response.text)
支持国产OS(OpenCloudOS)
OpenCloudOS是腾讯自研的国产操作系统:官网
OpenCloud 需要在 Docker 容器中运行,请先安装 Docker:Docker 版本 >= 20.10.5 且 docker-compose 版本 >= 2.23.3
git clone -b qanything-python https://github.com/netease-youdao/QAnything.gitcd QAnythingdocker-compose up -ddocker attach qanything-containerpip install -r requirements.txt# 随后启动方式与正常使用一致:https://github.com/netease-youdao/QAnything/blob/master/QAnything%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.md#%E5%9C%A8windows-wsl%E6%88%96linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E8%BF%90%E8%A1%8C3b%E5%A4%A7%E6%A8%A1%E5%9E%8Bminichat-2-3b%E8%A6%81%E6%B1%82%E6%98%BE%E5%AD%9810gb
支持所有与OpenAI-API兼容的大模型服务(包含ollama,通义千问DashScope等)
docker版OpenaiAI接口兼容
bash ./run.sh -c cloud -i 0
# 手动输入api_key,base_url,model_name,context_length,除了api_key外均有默认值,且用户输入会自动保存,下次启动不用再次输入

支持任意与OpenaAI接口兼容的服务
通义千问DashScope支持:通义千问DashScopeAPI
# 示例
openai_api_key = "sk-xxx"
openai_api_base = "https://dashscope.aliyuncs.com/compatible-mode/v1"
openai_model_name = "qwen1.5-72b-chat"
ollama支持:本地启动ollama服务
# 例如,当本地运行ollama run qwen:32b
openai_api_key = "ollama"
openai_api_base = "http://localhost:11434/v1"
openai_api_model_name = "qwen:32b"
python版OpenaiAI接口兼容
支持任意与OpenaAI接口兼容的服务
# Linux或WSL上,注意cpu模式需要加-c参数bash scripts/base_run.sh -s "LinuxOrWSL" -w 4 -m 19530 -q 8777 -o -b 'https://api.openai.com/v1' -k 'sk-xxx' -n 'gpt-3.5-turbo' -l '4096'# Mac上bash scripts/base_run.sh -s "M1mac" -w 2 -m 19530 -q 8777 -o -b 'https://api.openai.com/v1' -k 'sk-xxx' -n 'gpt-3.5-turbo' -l '4096'
通义千问DashScope支持:通义千问DashScopeAPI 自定义
scripts/run_for_openai_api_xxx.sh内容为:
# Linux或WSL上,注意cpu模式需要加-c参数bash scripts/base_run.sh -s "LinuxOrWSL" -w 4 -m 19530 -q 8777 -o -b 'https://dashscope.aliyuncs.com/compatible-mode/v1' -k 'sk-xxx' -n 'qwen1.5-72b-chat' -l '4096'# Mac上bash scripts/base_run.sh -s "M1mac" -w 2 -m 19530 -q 8777 -o -b 'https://dashscope.aliyuncs.com/compatible-mode/v1' -k 'sk-xxx' -n 'qwen1.5-72b-chat' -l '4096'
ollama支持:本地启动ollama服务 自定义scripts/run_for_openai_api_xxx.sh内容为:
# Linux或WSL上,注意cpu模式需要加-c参数bash scripts/base_run.sh -s "LinuxOrWSL" -w 4 -m 19530 -q 8777 -o -b 'http://localhost:11434/v1' -k 'ollama' -n 'qwen:32b' -l '4096'# Mac上bash scripts/base_run.sh -s "M1mac" -w 2 -m 19530 -q 8777 -o -b 'http://localhost:11434/v1' -k 'ollama' -n 'qwen:32b' -l '4096'
支持多卡推理(仅支持docker版):
# 当使用默认后端时:(bash run.sh启动时不指定-b参数或-b参数为default)
无法使用多卡推理大模型,仅支持使用两张卡省显存
bash ./run.sh -c local -i 0,1 -b defaul # 此时的显存使用逻辑为第一张卡部署大模型,第二张卡部署embedding,rerank,和ocr模型,实际意义不大
# 当使用huggingface或vllm后端时支持多卡推理大模型
# 以下示例为两张卡启动,默认embedding,部署在第一张卡上,rerank,ocr模型部署在第二张卡上,两张卡剩余显存均会用于LLM推理
bash ./run.sh -c local -i 0,1 -b default # 指定0,1号GPU启动,请确认有多张GPU可用,注意设备数量必须是1,2,4,8,16,否则显存无法正常分配
说明:多卡部署是指大模型运行平均分配显存到多张显卡上,但是由于embedding,rerank和ocr模型也需要占用显存(共需4G+显存,启动时占用2G显存,运行后会逐渐上涨至4G左右),目前这三个模型默认会分配到前两个设备上,所以第一张,第二张显卡的显存占用会比其他卡多2G以上,默认启动参数-r(gpu_memory_utilization)=0.81,如果手动设置为0.9以上可能会存在前两张卡显存不足无法启动或启动后运行时显存不足报错的情况
PDF文件解析效果优化(包含表格效果)
表格优化前:

表格优化后:

文字优化前:

文字优化后:

所有上传的文档以及文档解析后的结果均会保存在项目根目录下的QANY_DB文件夹中,示例如下,可自行查看解析结果:
> pwd
/Users/liujunxiong/workspace/ai_team/qanything-open-source/QANY_DB/content/zzp/e396215cddf44df9bdde7ef3dbf75ad4
> ls -R
QAnything使用说明.pdf QAnything使用说明_1716194377
./QAnything使用说明_1716194377:
QAnything使用说明.json QAnything使用说明_md
./QAnything使用说明_1716194377/QAnything使用说明_md:
QAnything使用说明.md
注意:优化的PDF解析器需要手动开启:详情
更多信息可见:QAnything开源代码地址:GitHub - netease-youdao/QAnything: Question and Answer based on Anything.
线上直接体验:https://qanything.ai
相关文章:
QAnything-1.4.01.4.1版本更新!使用指北!
久等了各位!时隔一个多月,我们在4月26日和5月20日接连发布了v1.4.0和v1.4.1两个版本,带来了问答性能,解析效果等多方面的改进,并新增了大量的新功能和新特性 详见:releases 以及 使用说明 最新特性表 开发…...
【ARM】Fusa Compiler 6.16 LTS的安全认证报告获取
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解ARM的Arm Compiler for Embedded FuSa 6.16 LTS的安全认证证书和报告的获取 2、 问题场景 对于使用了ARM DS Gold/Platinum、MDK pro或者Arm Compiler for Embedded FuSa 6.16 LTS产品的客户。在对于最终的产品…...
数据持久化第七课-URL重写与Ajax
数据持久化第七课-URL重写与Ajax 一.预习笔记 1.URL重写(对网页地址进行保护) 首先编写module,实现对网络地址的处理 其次就是module的配置 最后验证url重写技术 2.Ajax数据交互 编写后端响应数据 处理跨域的配置问题 运行项目得到后端响应数据的地址 编写前端ajax进行数据请…...
静态网页实现-人脸识别-案例(web)
🤳人脸识别(web) 基于开源大模型,将人脸识别功能整合到网页中,提供用户友好的界面和强大的功能。 核心功能 人脸轮廓识别: 通过深度学习算法,精确识别人脸的轮廓,包括眼睛、鼻子、嘴巴等关键部…...
ARM32开发——串口输入
🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 需求串口数据接收中断函数IDLE中断串口接收流程(了解)完整示例 需求 串口接收PC机发送的数据。 串口数据接…...
个人笔记--python用tanh画圆形,正方形,长方形(epsilon界面宽度)
用tanh函数画图 圆形 import numpy as np import matplotlib.pyplot as plt# 创建一个二维网格 xx np.linspace(-1, 1, 1000) yy np.linspace(-1, 1, 1000) x_i, y_i np.meshgrid(xx, yy)# 圆的半径和中心 r 0.4 center_x, center_y 0, 0 # 假设圆心在(0, 0)# 计算每个网…...
学习Java,stringbuilder用法
有sb.append添加元素,sb.reverse反转内容,sb.tostring转换成字符串,sb.length计算长度。...
16-云原生监控体系-rabbitmq_exporter监控 RabbitMQ-[部署Dashborad告警规则实战]
文章目录 1. 二进制方式部署1.1. 二进制包下载和部署1.2. 配置1.2.1. 可用的环境变量1.2.2. 使用变量2. docker-compose 方式部署3. 配置到 Prometheus3. Metrics3.1. 全局3.2. 基础信息3.3. Queues3.3.1 Queues - Gauge3.3.2. Queues - Counter...
四大运营商频段-2024
四大运营商频段-2023 中国移动900MHz(Band8),889-904/934-949MHz:1.8GHz(Band3),1710-1735/1805-1830MHz:1.9GHz(Band39),1885-1915MHz:2GHz(Band34),2010-2025MHz:2.3GHz(Band40),2320-2370MHz:2.6GHz(Band41,n41),25…...
260只出现一次的数字
一:题目描述 二:思路讲解 三:代码 class Solution { public:vector<int> singleNumber(vector<int>& nums) {int sum 0;for(const int& e : nums){sum ^ e;}int l (sum INT_MIN ? sum : sum&(-sum));int sum1 0…...
【高阶数据结构(八)】跳表详解
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:高阶数据结构专栏⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习更多数据结构 🔝🔝 高阶数据结构 1. 前言2. 跳表的概…...
用旧安卓手机当 linux 开发机
1. 下载 Termux (快速链接,如果失效或者要下载最新版请去github release 下载 ) 注意手机硬件,我这个是 64 的所以下 64 的 https://github.com/termux/termux-app/releases/download/v0.118.0/termux-app_v0.118.0github-debug_arm64-v8a.apk 2. 弄到…...
discuz如何添加主导航
大家好,今天教大家怎么样给discuz添加主导航。方法其实很简单,大家跟着我操作既可。一个网站的导航栏是非常重要的,一般用户进入网站的第一印象就是看网站的导航栏。如果大家想看效果的话可以搜索下网创有方,或者直接点击查看效果…...
[每日一练]患某种疾病的患者,正则表达式的匹配
该题目来源于力扣: 1527. 患某种疾病的患者 - 力扣(LeetCode) 题目要求: 患者信息表: Patients ----------------------- | Column Name | Type | ----------------------- | patient_id | int | | pati…...
PHP身份证识别接口、线上平台如何实现身份证实名认证功能?
线上平台实现身份证实名认证的功能,需要结合身份证识别接口来完成。首先,用户通过上传身份证图片或者拍照的方式实现证件信息的提取,身份证实名认证接口通过对提取到的证件信息进行核验,以此来实现线上用户身份的实名认证…...
若依:mybatis查询的结果未映射到实体类报null
开启驼峰命名转换: mapUnderscoreToCamelCase: true 我的是mtybatis配置开启驼峰命名转换不生效,还需要在MyBatisConfig中配置 // 配置mybatis自动转驼峰 生效 sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true)&#x…...
成都百洲文化传媒有限公司电商服务可信吗?
在当今数字化浪潮席卷之下,电商行业蓬勃发展,成为推动经济增长的重要引擎。在这一领域,成都百洲文化传媒有限公司凭借其专业的电商服务,迅速崛起,成为行业的佼佼者。该公司不仅深谙电商市场的运营之道,更以…...
【递归、搜索与回溯】递归、搜索与回溯准备+递归主题
递归、搜索与回溯准备递归主题 1.递归2.搜索3.回溯与剪枝4.汉诺塔问题5.合并两个有序链表6.反转链表7.两两交换链表中的节点8.Pow(x, n)-快速幂(medium) 点赞👍👍收藏🌟🌟关注💖💖 你…...
MVC前端怎么写:深入解析与实战指南
MVC前端怎么写:深入解析与实战指南 在Web开发领域,MVC(Model-View-Controller)是一种广泛使用的架构模式,它将应用程序的数据、界面和控制逻辑分离,使得代码更加清晰、易于维护。本文将详细探讨MVC前端如何…...
LINUX网络设置
一、1.1.ifconfig:当前设备正在启动的网卡(启动的) ifconfig -a :当前所有设备的网卡(启动的和没有启动的都包括) 1.2.ifconfig展示的ens33各行含意: 1.2.1 ens33: flags 4163<UP, …...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
