NLP(六十一)使用Baichuan-13B-Chat模型构建智能文档问答助手

  在文章NLP(六十)Baichuan-13B-Chat模型使用体验中,我们介绍了Baichuan-13B-Chat模型及其在向量嵌入和文档阅读上的初步尝试。
  本文将详细介绍如何使用Baichuan-13B-Chat模型来构建智能文档问答助手。

文档问答流程

  智能文档问答助手的流程图如下:

文档问答流程图

  • 文档加载(Document Loading):加载文档,文档格式为URL,PDF,Database。本项目暂时先支持txt文件,后续将支持更多文件格式;
  • 文档划分(Splitting):将文档按照特定格式进行划分,形成文档片段。本项目采用的文档划分方式为LangChain中的RecursiveCharacterTextSplitter,参考网址为:https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter。
  • 文档存储(Storage):将划分后的文档进行向量嵌入,再插入至向量数据库。本项目采用的储存方式为ElasticSearch及向量数据库Milvus。
  • 文档召回:对于输入query,从文档存储中召回相关文档片段。本项目采用的召回方式为ElasticSearch中的内置BM25相似度算法及Milvus中的向量距离。
  • 问答输出:对于召回文档和输入query,构建合适的Prompt,利用大模型(LLM)输出最终答案。

  下面讲介绍细节。本项目已在Github上开源,项目网址为:https://github.com/percent4/document_qa_with_llm 。

环境搭建

  本项目开发的Web框架为Flask,API接口两个:文件上传接口和文档问答接口。文件上传接口如下:
文件上传接口
  文档召回采用ElasticSearch和Milvus相结合的方式,设置ElasticSearch和Milvus召回最相似文本数量为2。
  ElasticSearch中创建的index为docs,mapping结构如下:

{
  "docs" : {
    "mappings" : {
      "properties" : {
        "cont_id" : {
          "type" : "integer"
        },
        "content" : {
          "type" : "text",
          "analyzer" : "ik_smart"
        },
        "source" : {
          "type" : "text"
        }
      }
    }
  }
}

其中source代表上传文档名称,cont_id为文本片段编号,content为文本片段。content字段采用的analyzer为ik_smart,该analyzer可较好地对中文进行分词。
  Milvus创建的collection为docs_qa,schema如下:

Milvus中docs_qa集合的schema
embeddings字段为Baichuan-13B-Chat模型的文本向量嵌入,向量维度为512,范数为1(即单位向量),搜索距离度量采用IP,即两个向量的内积。
  大模型采用Baichuan-13B-Chat,主要用于文本片段的向量嵌入和文档问答。关于Baichuan-13B-Chat模型的部署和使用,可参考文章NLP(六十)Baichuan-13B-Chat模型使用体验。

文档问答

  本文使用的文档为《封神》耗资30亿,第一部上映第次日,北京文化跌停,访问网址为:https://m.jrj.com.cn/madapter/stock/2023/07/22141537710254.shtml ,将其文本内容保存为txt文件,并通过文件上传接口,将数据内容插入至ES和Milvus。
  我们的问题(输入query)为:封神第一部什么时候上映的?,对其进行向量嵌入,在ES和Milvus中召回的相似文本为:

《封神》耗资30亿,第一部上映第次日,北京文化跌停热点快报 2023-07-22 14:15:04《封神第一部》刚刚上映,北京文化股价却出现下跌。7月21日,A股影视传媒板块震荡下挫,北京文化收于跌停,报7.56元,总市值54.12亿元,板块内个股慈文传媒、荣信文化、中国出版、上海电影等跟跌。值得关注的是,《封神第一部》7月20日才正式上映,北京文化为该影片的出品方。
落地误差只有1公里,3条飞船实现了第一阶段的全部任务。
北京文化曾成功投资《我不是药神》《战狼》《流浪地球》《你好,李焕英》等多部爆款影片。此前《封神第一部》宣布定档,北京文化曾迎来3连板。

  大模型问答的Prompt为:

[
    {
        "role": "system",
        "content": "你是一个出色的文档问答助手,回答要合理、简洁,回复语言采用中文,。若问题与文本片段相关,请根据给定的文本片段和问题,答案以\"根据文档知识\"开头若问题与文本片段相关性较小,则使用外部知识回答问题,答案以\"根据外部知识\"开头。"
    },
    {
        "role": "user",
        "content": "使用下面的文本片段列表,回答问题:封神第一部什么时候上映的?\n\n文本片段1: 《封神》耗资30亿,第一部上映第次日,北京文化跌停热点快报 2023-07-22 14:15:04《封神第一部》刚刚上映,北京文化股价却出现下跌。7月21日,A股影视传媒板块震荡下挫,北京文化收于跌停,报7.56元,总市值54.12亿元,板块内个股慈文传媒、荣信文化、中国出版、上海电影等跟跌。值得关注的是,《封神第一部》7月20日才正式上映,北京文化为该影片的出品方。\n文本片段2: 落地误差只有1公里,3条飞船实现了第一阶段的全部任务。\n文本片段3: 北京文化曾成功投资《我不是药神》《战狼》《流浪地球》《你好,李焕英》等多部爆款影片。此前《封神第一部》宣布定档,北京文化曾迎来3连板。\n"
    }
]

输出答案为:

根据文档知识,《封神第一部》于2023年7月20日上映。

更多测试内容可参考本项目的Github网址。

总结

  本项目的Github网址为:https://github.com/percent4/document_qa_with_llm ,后续将持续优化这个项目,提升文档问答的方便性和智能性。
  本文详细介绍了如何使用Baichuan-13B-Chat模型来构建智能文档问答助手,希望能给读者们一些启发。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka集群——(区别于Master/Slave架构的的分布式集群)

Kafka角色介绍: 1. Producer:消息生产者: 2. Broker: kafka实例,可以理解为一台kafka服务器,kafka cluster 是由多个broker构成的集群。 3. Topic: 消息主题,理解为消息队列,kafka数据就保存在topic里。…

Docker——compose单机容器集群编排

Docker——compose单机容器集群编排 一、Docker-compose概述1.为何需要Docker-compose2.Docker-compose 的特征3.Docker-compose 的优势4.Docker-compose 的劣势5.Docker-compose 的生产环境 二、Docker Compose 环境安装三、YAML 文件格式及编写注意事项四、Docker Compose配置…

常用的数据结构 JAVA

目录 1、线性表2、栈&#xff1a;3、队列&#xff1a; 1、线性表 List<Object> narnat new ArrayList<>();ArrayList&#xff1a;动态数组 1、可以嵌套使用 2、add(x)添加元素x&#xff0c;remove(index)删除某个位置的元素 3、注意list是指向性的&#xff0c…

STM32MP157驱动开发——按键驱动(中断)

文章目录 编写使用中断的按键驱动程序编程思路设备树相关驱动代码相关 代码修改设备树文件gpio_key_drv.cMakefile编译测试 编写使用中断的按键驱动程序 对于使用中断的按键驱动&#xff0c;内核自带的驱动程序 drivers/input/keyboard/gpio_keys.c 就可以&#xff0c;需要做的…

【vue3】常见的使用vue3创建项目的几种方法

1、使用ui界面创建&#xff0c;winr打开命令提示符&#xff0c;输入vue ui 2、winr打开命令提示符&#xff0c;输入vue create 项目名称 3、使用脚手架创建 其中方法一&#xff0c;方法二是使用npm run serve来运行的&#xff0c;方法三是使用npm run dev运行的

Unity进阶--对象池数据场景管理器笔记

文章目录 泛型单例类泛型单例类&#xff08;不带组件版&#xff09;对象池管理器数据管理器场景管理器 泛型单例类 using System.Collections; using System.Collections.Generic;public abstract class ManagersSingle<T> where T : new() {private static T instance;…

线性代数(主题篇):第三章:向量组 、第四章:方程组

文章目录 第3章 n维向量1.概念(1)n维单位列向量 2.向量、向量组的的线性关系(线性相关性)(1)线性表示 &#xff1a;AXβ(2)线性相关、线性无关&#xff1a; AX0①线性相关②线性无关③线性相关性7大定理 3.极大线性无关组、等价向量组、向量组的秩1.极大线性无关组2.等价向量组…

Cesium态势标绘专题-简单箭头(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

跃焱邵隼网站demo

xdm 网站的代码开源了。 今年迷上摄影和剪辑了&#xff0c;所以很少投入到网站的维护。 然后经过群友的一些反馈&#xff0c;所以决定 将网站上demo开源放出来了。 后面有机会再出一些好玩的东西。 哦 对了 3d 编辑器我已经融入地图了 年底搞一些好玩的东西出来。 可以关注…

树、二叉树(C语言版)详解

&#x1f355;博客主页&#xff1a;️自信不孤单 &#x1f36c;文章专栏&#xff1a;数据结构与算法 &#x1f35a;代码仓库&#xff1a;破浪晓梦 &#x1f36d;欢迎关注&#xff1a;欢迎大家点赞收藏关注 文章目录 &#x1f34a;树的概念及结构1. 树的概念2. 树的相关概念3.树…

算法通关村第一关-链表黄金挑战笔记|环的入口

解决链表环入口问题 文章目录 解决链表环入口问题前言链表中环的问题Hash和集合的解法&#xff1a;快慢指针实现解决&#xff1a; 解题思路&#xff1a;Hash或者使用集合的方式实现快慢指针&#xff08;这里使用三次刚好解决&#xff09; 总结 前言 提示&#xff1a;无论今天过…

C++笔记之使用普通指针和shared_ptr在堆上申请类对象的各种写法

C笔记之使用普通指针和shared_ptr在堆上申请类对象的各种写法 code review! 文章目录 C笔记之使用普通指针和shared_ptr在堆上申请类对象的各种写法1.几种不同的写法2.ChatGpt回答 1.几种不同的写法 注&#xff1a;使用普通指针申请堆内存&#xff0c;其实是应该有delete的&…

Redis常用数据类型和使用场景

Redis目前支持5种数据类型&#xff0c;分别是&#xff1a; String&#xff08;字符串&#xff09; List&#xff08;列表&#xff09; Hash&#xff08;字典&#xff09; Set&#xff08;集合&#xff09; Sorted Set&#xff08;有序集合&#xff09; 下面就分别介绍这五…

得物词分发平台技术架构建设与演进

前言 在文章开始前先介绍下导购&#xff0c;导购通常是指帮助消费者在购物过程中做出最佳决策的人或系统。在电商网站中&#xff0c;导购可以引导用户关注热卖商品或促销活动等&#xff0c;帮助用户更好地进行购物。导购的目的是为了提高用户的购物体验&#xff0c;促进销售额…

抽象工厂模式——产品族的创建

1、简介 1.1、简介 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比&#xff0c;抽象工厂模式中的具体工厂不只是创建一种产品&#xff0c;它负责创建一族产品 1.2、定义 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;&#xff1a;提供…

4、非线性数据结构

上一节课我们讲了线性数据结构&#xff0c;这一节我们说下非线性数据结构。 非线性数据结构&#xff0c;从字面意思来看&#xff0c;就是指不是线性的结构。线性结构的特点是只有一个前驱和一个后继。 那么非线性结构的特点就是有多个前驱或后继了。 如果只存在一个没有前驱的…

Python爬虫基础

文章目录 Python学习记录Python基础爬虫&#xff1a;代码&#xff1a;运行结果&#xff1a; Python学习记录 Python基础爬虫&#xff1a; 代码&#xff1a; import urllib.request import random import chardet#请求头列表 us["Mozilla/4.0 (compatible; MSIE 6.0; Wi…

(学习笔记-IP)IP基础知识

基本认识 IP在TCP/IP参考模型中处于第三层&#xff0c;也就是网络层。 网络层的主要作用是&#xff1a;实现主机与主机之间的通信&#xff0c;也叫点对点的通信。 网络层与数据链路层的关系&#xff1a; MAC的作用是实现直连的两个设备之间通信&#xff0c;而IP负责没有直连的…

消息队列- 背景知识

这里写目录标题 前言消息队列消息队列的作用常见的消息队列消息队列的核心概念BrokerServer核心概念消息队列的核心API消息队列与消费者之间的工作模式交换机的类型消息队列的持久化 总结 前言 消息队列,不知道大家是否陌生,如果说消息队列感到陌生的话, 有一个模型肯定大家都…

Nginx下载和安装教程、Nginx目录结构、Nginx具体应用

1、Nginx概述 Nginx是一款轻量级的开源Web服务器软件&#xff0c;也是一种反向代理服务器。它以其高性能和灵活性而被广泛应用于互联网领域。本文将介绍Nginx的概述、下载和安装以及目录结构。 &#xff08;1&#xff09;Nginx介绍 Nginx最初由Igor Sysoev开发&#xff0c;目…