LP(六十九)智能文档助手升级

本文在笔者之前研发的大模型智能文档问答项目中,开发更进一步,支持多种类型文档和URL链接,支持多种大模型接入,且使用更方便、高效。

项目介绍

在文章NLP(六十一)使用Baichuan-13B-Chat模型构建智能文档中,笔者详细介绍了如何使用Baichuan-13B-Chat模型来构建智能文档问答助手。

一般,使用大模型来实现文档问答功能的流程图如下:

LangChain文档问答流程

本次,笔者在之前的项目中更进一步,支持的功能如下:

  • 支持多种格式文档(包括txt, pdf, docx)和URL链接
  • 问答可视化页面
  • 问答可追溯,加入高亮显示
  • 单/多模型调用
  • 模型效果对比

说明如下:

  1. 支持的文档格式由LangChain提供,URL链接的解析由LangChain中的 seleniumunstructured,可支持JavaScript渲染的页面。但网页解析(或者说爬虫)是一项复杂而艰巨的任务,不可能在本项目中实现所有的网页解析。
  2. 可视化问答页面由Gradio模块实现
  3. 支持单模型或多模型调用,并且可以提供问答溯源。同时,还支持不同模型回答结果的比对,该想法来源于OpenCompass .

在工程开发上,加入的特性(features)如下:

  • 丰富使用文档
  • 加入配置文件
  • 增加日志调用
  • ES分词器支持用户词典
  • Milvus支持初步筛选的阈值配置

本项目已开源至Github,代码实现可参考document_qa_with_llm,这里不再讲解代码细节。

支持文档格式

本项目原先只支持txt格式,现在已支持多种格式文档(包括txt, pdf, docx)和URL链接,这得益于LangChain框架中的文档加载模块,使得各种格式的文档加载变得更加统一、简洁、高效。

本项目中的文件解析脚本如下:

# -*- coding: utf-8 -*-
from langchain.document_loaders import TextLoader, PyPDFLoader, Docx2txtLoader, SeleniumURLLoaderfrom utils.logger import loggerclass FileParser(object):def __init__(self, file_path):self.file_path = file_pathdef txt_loader(self):documents = TextLoader(self.file_path, encoding='utf-8').load()return documentsdef pdf_loader(self):loader = PyPDFLoader(self.file_path)documents = loader.load_and_split()return documentsdef docx_loader(self):loader = Docx2txtLoader(self.file_path)documents = loader.load()return documentsdef url_loader(self):loader = SeleniumURLLoader(urls=[self.file_path])documents = loader.load()return documentsdef parse(self):logger.info(f'parse file: {self.file_path}')if self.file_path.endswith(".txt"):return self.txt_loader()elif self.file_path.endswith(".pdf"):return self.pdf_loader()elif self.file_path.endswith(".docx"):return self.docx_loader()elif "http" in self.file_path:return self.url_loader()else:logger.error("unsupported document type!")return []if __name__ == '__main__':txt_file_path = "/Users/admin/PycharmProjects/document_qa_with_llm/files/gdp.txt"content = FileParser(txt_file_path).parse()print(content)pdf_file_path = "/Users/admin/PycharmProjects/document_qa_with_llm/files/oppo_n3_flip.pdf"content = FileParser(pdf_file_path).parse()print(content)docx_file_path = "/Users/admin/PycharmProjects/document_qa_with_llm/files/haicaihua.docx"content = FileParser(docx_file_path).parse()print(content)url = "https://gaokao.xdf.cn/202303/12967078.html"url = "https://www.hntv.tv/50rd/article/1/1700396378818207745?v=1.0"content = FileParser(url).parse()print(content)

问答测试

文档上传页面如下,支持多种格式文档上传和URL解析(依赖于页面解析能力),页面较为粗糙。

文件上传页面

上传后的文件会放至files文件夹上,示例文档可在Github项目中files文件夹中参考。

  • txt文件

我们以files/dengyue.txt为例,问答如下:

你知道格里芬的职务吗?
格里芬的职务是美国宇航局局长。

格里芬发表演说时讲了什么?
根据文档知识,格里芬发表演说时讲了如下内容:他认为如果中国人愿意,2020年他们可以实现载人登月工程。此外,叶培建院士也曾发表自己的观点,认为2025年比较合适。然而,根据中国科学院编制的50年长远规划,中国要实现载人登月工程是2030年。

  • pdf文件

我们以files/oppo_n3_flip.pdf为例,回答如下:

OPPO最新款折叠屏手机叫什么?
OPPO最新款折叠屏手机是OPPO Find N3 Flip。

腾讯有发布自研的大模型吗,什么时候发布的?
是的,腾讯已经发布了自研的大语言模型,名为 “ 混元大模型 ” 。它在 2023 年腾讯全球数字生态大会上正式对外亮相。具体时间为 9 月 7 日。

  • docx文件

我们以files/haicaihua.docx为例,回答如下:

海菜花对生长环境有什么要求?
海菜花对生长环境要求极高,只能在水体洁净、透明度较高的水体中生长,被誉为水质的“试金石”。

  • URL链接

我们以https://gaokao.xdf.cn/202303/12967078.html 为例,回答如下:

电子科技大学2022年招生多少人?
电子科技大学2022年招生总计划是5030人,其中“电子科技大学”将面向全国招生3300余人,“电子科技大学(沙河校区)”将面向部分省份招生1700余人。

电子科技大学的官网?
电子科技大学的官网是:http://www.zs.uestc.edu.cn/

可视化问答

除了之前的API调用,本项目还支持可视化问答。该功能由Gradio模块实现,支持在页面上进行可视化问答,同时还支持多模型调用,支持的大模型如下:

  • Baichuan-13B-Chat: 百川智能发布的模型,现已更新至Baichuan2
  • LLAMA-2-Chinese-13b-Chat: 在LLAMA 2模型上进行微调得到的中文对话模型
  • internlm-chat-7b:上海人工智能实验室发布的书生(InternLM)对话模型

这些都是中文大模型。理论上,支持的模型由FastChat 和 部署的GPU型号、数量决定,本项目只考虑以上三种。

该页面支持多模型或单模型的问答。多模型问答时,可比较不同模型在相同的Prompt下的回答效果,作为模型评估的一种方式。

单模型问答

多模型问答

同时,该页面还支持问答溯源,可追踪文档问答得到的答案所需的引用文本和对用的数据来源。

问答溯源

问答溯源中的文本高亮

由于Gradio中的表格不支持单元格内文本高亮,因此,我们所用它自带的高亮文本控件对问答溯源中的引用文本进行文本高亮,方便我们对回答内容在原文中的位置进行确认,避免大模型幻觉问题。

问答溯源中的文本高亮算法如下:

  1. 找到问答所在的引用文本列表,由ES和Milvus产生
  2. 对引用文本拆分成列表
  3. 得到与回答相似度最高的文本,相似度采用Jaccard系数
  4. 将相似度最高文本中与回答重合的部分,进行高亮显示

问答溯源中的文本高亮

总结

本项目在之前开源的基础上,加入了更丰富的功能,包括支持多种格式文档解析和URL解析,支持问答可视化页面,支持单/多模型调用,支持多模型效果对比。

本项目已开源至Github,代码实现可参考document_qa_with_llm 。

推荐阅读

  • NLP(六十一)使用Baichuan-13B-Chat模型构建智能文档
  • Gradio入门(1)输入输出、表格、文本高亮

欢迎关注我的公众号NLP奇幻之旅,原创技术文章第一时间推送。

欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。

引用链接

[1] 大模型智能文档问答项目: https://github.com/percent4/document_qa_with_llm
[2] OpenCompass: https://opencompass.org.cn/
[3] document_qa_with_llm: https://github.com/percent4/document_qa_with_llm
[4] 文档加载模块: https://python.langchain.com/docs/integrations/document_loaders/
[5] FastChat: https://github.com/lm-sys/FastChat
[6] document_qa_with_llm: https://github.com/percent4/document_qa_with_llm

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

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

相关文章

【山河送书第十期】:《Python 自动化办公应用大全》参与活动,送书两本!!

【山河送书第十期】:《Python 自动化办公应用大全》参与活动,送书两本!! 前言一书籍亮点二作者简介三内容简介四购买链接五参与方式六往期赠书回顾 前言 在过去的 5 年里,Python 已经 3 次获得 TIOBE 指数年度大奖&am…

新品登场!雅特力发布AT32F402与AT32F405高速USB2.0 OTG MCU

因应高速USB市场需求,产品技术不断推陈出新,USB2.0发展带来的高速连接能力,优化消费者的产品使用体验,且由于支持即插即用和热插拔,提高设备易用性,USB接口在各项设备中成为主流通用接口。在USB2.0标准中&a…

GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程

详情点击链接:GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程 前沿 GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域:1、编程建议和示例代码: 无论你使用的编程语言是Py…

Spring初始化项目

1、官网用法 访问地址:https://start.spring.io idea配置:https://start.spring.io 2、阿里巴巴加速 访问地址:https://start.aliyun.com/bootstrap.html idea配置:https://start.aliyun.com 3、区别 官网阿里巴巴版本最新稍…

jsp页面出现“String cannot be resolved to a type”错误解决办法

篇首语:小编为大家整理,主要介绍了jsp页面出现“String cannot be resolved to a type”错误解决办法相关的知识,希望对你有一定的参考价值。 jsp页面出现“String cannot be resolved to a type”错误解决办法 解决办法: 右键项目…

02JVM_垃圾回收GC

二、垃圾回收GC 在堆里面存放着java的所有对象实例,当对象为“死去”,也就是不再使用的对象,就会进行垃圾回收GC 1.如何判断对象可以回收 1.1引用计数器 介绍 在对象中添加一个引用计数器,当一个对象被其他变量引用时这个对象…

9.4 数据库 TCP

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//判断数据库对象是否包含了自己使用的数据库if(!db.contains("Stu.db")){//不存在数据库&#xff0…

在VScode中使用sftp传输本地文件到服务器端

安装SFTP 在VScode的扩展中安装sftp 注意这里需要在你没连接服务器的状态下安装,即本机需要有sftp 配置传输端口 安装成功后,使用快捷键"ctrlshiftp",输入sftp,选择Config 根据自己的实际情况修改配置文件,主要改h…

Python学习 -- datetime模块

当涉及到处理日期和时间数据时,Python的datetime模块提供了一系列类来帮助您执行各种操作。以下是各个类及其常用方法的详细介绍: date 类 date 类表示一个年、月、日的日期对象。以下是一些常用的 date 类方法: date.today()获取当前日期…

法国新法案强迫 Firefox 等浏览器审查网站

导读Mozilla 基金会已发起了一份请愿书,旨在阻止法国政府强迫 Mozilla Firefox 等浏览器审查网站。 据悉,法国政府正在制定一项旨在打击网络欺诈的 SREN 法案 (“Projet de loi Visant scuriser et reguler lespace numrique”),包含大约 2…

ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案

ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案 本文是ElasticSearch第三讲,在了解ElaticSearch之后,我们还要了解Elastic背后的生态 即我们常说的ELK;与此同时,还会给你展示ElasticSearch的案例场景&…

<OpenCV> Mat属性

OpenCV的图像数据类型可参考之前的博客:https://blog.csdn.net/thisiszdy/article/details/120238017 OpenCV-Mat类型的部分属性如下: size:矩阵的大小, s i z e ( c o l s , r o w s ) size(cols,rows) size(cols,rows)&#xf…

(STM32H5系列)STM32H573RIT6、STM32H573RIV6、STM32H573ZIT6嵌入式微控制器基于Cortex®-M33内核

一、应用 工业(PLC、工业电机控制、泵和压缩机) 智能家居(空调、冰箱、冰柜、中央警报系统、洗衣机) 个人电子产品(键盘、智能手机、物联网标签、跟踪设备) 智能城市(工业通信、照明控制、数字…

[react基础]关于v6版本route的变化,以及常见应用模式

该说不说,在做这些之前,你要记得一件事 route不是react或者vue等原本就有的组件!需要你手动下载!然后导入! 原本的框架只是最终挂载到一个html界面上!!! 别再问我为啥你扒下来的代码为啥不好使了! 讨厌 > _< 下载指令去看我另一篇推文 今天复盘了一下自己的实训…

区间DP 计数类DP 数位统计DP 状态压缩DP 树形DP 记忆化搜索

目录 区间DP石子合并分析思路代码实现 计数类DP整数划分完全背包DP的解法二维数组实现一维优化实现 另类DP状态表示的解法&#xff08;分拆数&#xff09;二维数组实现一维优化实现 数位统计DP计数问题注意代码实现 状态压缩DP蒙德里安的梦想实现思路朴素实现预处理优化实现 最…

L1 项目概述与Hadoop部署

1.技术栈&#xff1a;HadoopHiveSqoopFlumeAzkaban Flume采集Nginx web服务器上的日志&#xff0c;采集完成后存储到Hadoop的平台&#xff0c;最终存储到HDFS上&#xff0c;处理和分析采用Hive的方式&#xff0c;处理完之后利用Sqoop导出到Mysql中&#xff0c;最终利用一个Java…

Android逆向学习(一)vscode进行android逆向修改并重新打包

Android逆向学习&#xff08;一&#xff09;vscode进行android逆向修改并重新打包 写在前面 其实我不知道这个文章能不能写下去&#xff0c;其实我已经开了很多坑但是都没填上&#xff0c;现在专利也发出去了&#xff0c;就开始填坑了&#xff0c;本坑的主要内容是关于androi…

5、Nginx 配置实例-负载均衡

文章目录 5、Nginx 配置实例-负载均衡5.1 实现效果5.2 准备工作5.3 实验代码5.3.1、轮询&#xff08;默认&#xff09;5.3.2、weight5.3.3、ip_hash5.3.4、fair&#xff08;第三方&#xff09; 【尚硅谷】尚硅谷Nginx教程由浅入深 志不强者智不达&#xff1b;言不信者行不果。 …

docker常用中间件安装

文章目录 1、前言2、中间件安装2.1、mysql2.2、gitlab容器2.3、nacos2.4、redis2.5、xxljob2.6、zipkin2.7、sentinel2.8、seata2.8.1、获取镜像2.8.2、运行容器并获取配置 2.9、rockerMQ2.9.1、rockerMQ-namesrv2.9.2、rockerMQ-broker2.9.3、rockerMQ-console 2.10、jenkins2…

合宙Air724UG LuatOS-Air LVGL API控件-页面 (Page)

页面 (Page) 当控件内容过多&#xff0c;无法在屏幕内完整显示时&#xff0c;可让其在 页面 内显示。 示例代码 page lvgl.page_create(lvgl.scr_act(), nil) lvgl.obj_set_size(page, 150, 200) lvgl.obj_align(page, nil, lvgl.ALIGN_CENTER, 0, 0)label lvgl.label_crea…