QAnything-1.4.01.4.1版本更新!使用指北!

2024-06-03 20:20

本文主要是介绍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版本更新!使用指北!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028018

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时