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

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

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

相关文章

13-至少有5名直接下属的经理(高频 SQL 50 题基础版)

13-至少有5名直接下属的经理 select name from Employee where id in (select managerId -- 查找大于5的经理idfrom Employeegroup by managerId -- 根据id分组having count(*)>5); -- 根据分组的数据进行求个数

java连接MySQL数据库

环境准备 JDK安装 Navicat MySQL安装 下载jar包 MySQL :: Download MySQL Connector/J (Archived Versions) 创建数据库 1. 打开Navicat 2. 新建数据库 3. 定义数据库名 4. 新建查询 运行如下代码创建表log CREATE TABLE log (user VARCHAR(255) NOT NULL UNIQUE,pwd …

mysql8 .net sqlsuger 批量插入dbScope.Fastest<T>().PageSize(2000).BulkCopy(T)>

连接mysql时出现 MySqlConnector.MySqlException (0x80004005): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation 需要再数据库开启权限 grant SUPER,SYSTEM_VARIABLES_ADMIN on *.* to rootUser;flush pri…

Python数据框操作 -- 提取数据

创建一个数据框 import pandas as pd df pd.DataFrame({a:[2,2,3,4,5], b:[6,7,8,8,9]}) #创建一个数据框 提取某列 df.a # df的a这一列 df[a] # df的a这一列 df.iloc[:,0] # df的所有行,第0列(依然是a列) 提取某几列 df[[a,b]] #…

未见过类型题每周总结(个人向)

1.DP40 小红取数 题目 解析 一道01背包的衍生问题,我们可以按照它的思路定义数组dp[i][j],表示前i个数中%k为j的最大和。为什么设置未%k的最大和呢?是因为当两个数分别%k,如a%kx,b%ky。那么(ab)%k&#…

C++基础与深度解析 | 类进阶 | 运算符重载 | 类的继承 | 虚函数

文章目录 一、运算符重载二、类的继承1.类的继承2.虚函数 一、运算符重载 在C中,operator关键字用于重载运算符,使得类的实例可以使用内置的操作符(如、-、*、/等)进行操作。 运算符重载的特性: 重载不能发明新的运算…

通信协议:常见的芯片间通信协议

相关阅读 通信协议https://blog.csdn.net/weixin_45791458/category_12452508.html?spm1001.2014.3001.5482 本文将简单介绍一些常见的芯片间通信协议,但不会涉及到协议的具体细节。首先说明,芯片间通信方式根据通信时钟的区别可以分为:异步…

上位机图像处理和嵌入式模块部署(f407 mcu中的网络开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 和大家想的不太一样,只要mcu当中带有了mac ip,那么就意味着mcu本身支持了网络开发。但是如果需要mcu支持完整的tcp/ip&…

Java面试题:ArrayList底层实现原理、HashMap的实现原理、HashMap的jdk1.7和jdk1.8有什么区别

文章目录 一、List相关面试题1.1 ArrayList源码分析(底层实现)1.2 ArrayList底层的实现原理是什么1.3 ArrayList listnew ArrayList(10)中的list扩容几次1.4 如何实现数组和List之间的转换1.5 ArrayList 和 LinkedList 的区别是什么 二、HashMap相关面试…

如何在 Vue 组件中正确地使用 data 函数?

在 Vue 组件中正确使用 data 函数有以下几点需要注意: 返回一个对象: data 函数必须返回一个对象,这个对象包含了组件实例需要用到的所有数据属性。export default {data() {return {message: Hello, Vue!,count: 0}} }不要使用箭头函数: data 函数不应该使用箭头函数 () >…

《最游记》游戏全套源码(源码+引擎+文档+客户端+服务端+工具)

《最游记》首款西游降魔修仙网游—还原《西游记》小说经典,华丽场景,玄幻体验;七十二变,机甲配备;仙兵神器,灵兽助阵;降妖除魔,最游天下!源码基于 vs 2005,可…

英伟达GPU架构加速狂飙

NVIDIA首席执行官黄仁勋在台湾大学体育馆发表主题演讲,展示了新一代Rubin架构,这是NVIDIA加速推出新架构的最新成果。 在讨论NVIDIA下一代架构时,黄仁勋提到了Blackwell Ultra GPU,并表示它可能会继续升级。然后他透露&#xff0c…

Qt 【Object::connect: No such slot 。。。】解决方法

发生如下所示问题,有三种原因造成: 1.下图中的Q_OBJECT被注释掉或者漏了(该问题不常见) 2.下图中声明slots漏了(新手较常见) 3.发生下面两行中的错误,在下面两行代码中仅仅是一个参数名字的区别…

发布npm自己的插件包

要发布自己的npm插件包,你需要遵循一系列步骤来确保你的包可以正确地被其他人使用。以下是一个基本的指南: 1. 创建一个npm账户 首先,你需要在npm网站上注册一个账户。这可以通过npm的命令行工具或npm网站完成。 2. 初始化你的项目 在你的…

web刷题记录(2)

[鹤城杯 2021]EasyP 就是php的代码审计 从中可以看出来,就是对四个if语句的绕过,然后过滤了一些语句 代码分析: 通过include utils.php;导入了一个叫做"utils.php"的文件,这意味着在该文件中可能定义了一些与本代码相…

模型训练篇 | yolov10来了!手把手教你如何用yolov10训练自己的数据集(含网络结构 + 模型训练 + 模型推理等)

前言:Hello大家好,我是小哥谈。YOLOv9还没捂热乎,YOLOv10就推出来了,太卷了,太快了,坐等YOLOv9000!自今年2月YOLOv9发布之后, YOLO(You Only Look Once)系列的…

力扣2953.统计完全子字符串

力扣2953.统计完全子字符串 先分组循环求出每个组 分别算个数 对于每个组 枚举一遍其中有多少种字母用cnt数组记录每个字母出现次数 check的时候也是暴力枚举cnt中每个字母出现次数 **分组循环:**从i(新一组的起点)开始,当满足条件时,最后退…

CentOS 7基础操作03_Linux命令的分类

1、Linux命令的分类 Linux命令的执行必须依赖于 Shell命令解释器。Shell实际上是在Linux操作系统中运行的一种特殊程序,它位于操作系统内核与用户之间,负责接收用户输入的命令并进行解释.将需要执行的操作传递给系统内核执行,Shell在用户和内…

搜维尔科技: 使用 Xsens 和 HTC Vive进行电影制作案例

搜维尔科技: 使用 Xsens 和 HTC Vive进行电影制作案例 搜维尔科技: 使用 Xsens 和 HTC Vive进行电影制作案例

全域外卖平台是什么?有哪些系统可以推荐?

随着本地生活下半场的开启,以团购外卖为代表的一系列相关业务也迈入了全域时代。在此背景下,全域外卖赛道正式兴起,全域外卖平台也随之备受瞩目。 作为创业的一大新风口,全域外卖囊括了公域和私域内所有的外卖业务,主…