LangChain-v0.2 构建 PDF 采集和问答系统

PDF 文件通常包含其他来源无法获取的重要非结构化数据。它们可能非常长,而且与纯文本文件不同,通常无法直接输入到语言模型的提示中。

在本中,我们将创建一个可以回答有关 PDF 文件的问题的系统。更具体地说,就是使用文档加载器加载 LLM 可以使用的格式的文本,然后构建检索增强生成 (RAG) 管道来回答问题,包括来自源材料的引文。

一、加载文档

首先,您需要选择要加载的 PDF。我们将使用 Python基础学习 文档。它长达 197 页,包含一些关键数据和较长的说明性文字。不过,您可以随意使用您选择的 PDF。

选择 PDF 后,下一步是将其加载为 LLM 更容易处理的格式,因为 LLM 通常需要文本输入。LangChain 内置有几个不同的文档加载器可用于文档转化文本,您可以尝试使用。下面,我们将使用一个由包提供支持的pypdf从文件路径读取的加载器:

1、安装所需库:

%pip install -qU pypdf langchain_community
%pip install faiss-cpu

2、代码使用:

from langchain_community.document_loaders import PyPDFLoaderfile_path = "PythonBase.pdf"
loader = PyPDFLoader(file_path)docs = loader.load()print(len(docs))
print(docs[0].page_content[0:100])
print(docs[0].metadata)

打印结果可以看出,能够正常的将pdf文档内容读取,这里的 PythonBase.pdf 替换成你们自己的pdf文档,放到跟代码同一目录下,即可正常读取到。

上面的代码实现逻辑:

1)加载器将指定路径下的PDF读入内存。

2)然后它使用该包提取文本数据pypdf。

3)最后,它为 PDF 的每一页创建一个 LangChain文档,其中包含页面的内容以及有关文本来源位置的一些元数据。

二、使用RAG

接下来,我们将已加载的文档进行处理,以供稍后检索。在此使用文本分割器,把已加载的文档分割成更小的文档,以便更容易地放入 LLM 的上下文窗口,然后将它们加载到向量存储中。然后,从向量存储中创建一个检索器,以在我们的 RAG 链中使用:

1、使用语言模型:

LangChain支持许多不同的语言模型,包含:OpenAI、Anthropic、Azure、Google、Cohere、FireworksAI、Groq、MistralAI、TogetherAI等,您可以互换使用 ,选择您要使用的语言模型!

1)下面内容将居于OpenAI语言模型进行演示:

pip install -qU langchain-openai

2)配置API KEY环境

import os
os.environ["OPENAI_API_KEY"]="填写自己的API KEY"
os.environ["LANGCHAIN_TRACING_V2"]="true"
os.environ["LANGCHAIN_API_KEY"]="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"
from langchain_openai import ChatOpenAImodel = ChatOpenAI(model="gpt-4")

2、文本分割器

from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISStext_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)#向量化
vector = FAISS.from_documents(splits, OpenAIEmbeddings())
retriever = vector.as_retriever()

3、使用一些内置助手来构建最终的rag_chain

from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplatesystem_prompt = ("你是问答任务的助理,使用以下检索到的上下文来回答问题。如果你不知道答案,就说你不知道。最多使用三句话,并保持回答简明扼要。""\n\n""{context}"
)prompt = ChatPromptTemplate.from_messages([("system", system_prompt),("human", "{input}"),]
)question_answer_chain = create_stuff_documents_chain(model, prompt)
rag_chain = create_retrieval_chain(retriever, question_answer_chain)results = rag_chain.invoke({"input": "介绍一下python"})results

answer 中你可以看到,在 results 中获得了最终答案,并且 context 获得了用于生成答案的 LLM。

检查 context 数据,您可以看到它们是每个包含一部分提取的页面内容的文档。有用的是,这些文档还保留了第一次加载时的原始元数据。在 metadata 中还可以看到文档来源和页码。

 

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

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

相关文章

【前端 14】Vue常见指令

Vue常见指令 Vue.js 是一个构建用户界面的渐进式框架,它通过一系列简洁的指令(Directives)来增强HTML的功能,使得开发者能够更加方便地构建出响应式的Web应用。本文将详细讲解Vue中的几个核心指令:v-bind、v-model、v…

AndroidAOSP定制之关闭某些app的通知

AndroidAOSP定制之关闭某些app的通知 前言: ​ 最近在做AOSP系统定制时发现gms定制好了后,Google应用商店用不了,提示此设备未获得Play保护机制认证,Google应用和服务无法在此设备上运行,查看官方文档和资料,说是由于…

【学习笔记】| 03 - 使用STM32CubeMX新建工程

使用STM32CubeMX新建工程是一个相对直观的过程,主要涉及到选择芯片型号、配置外设、时钟系统、GPIO引脚等,并最终生成工程代码。以下是一个详细的步骤指南: 一、打开STM32CubeMX并新建工程 启动STM32CubeMX: 打开STM32CubeMX软件…

FPGA实验6: 有时钟使能两位十进制计数器的设计

一、实验目的与要求 1.. 熟练掌握使用原理图设计较复杂电路; 2. 学习原理图设计中总线的表示以及使用方法。 二、实验原理 运用Quartus II 集成环境下的图形设计方法设计有时钟使能的两位十进制计数器。进行波形仿真和分析、引脚分配并下载到实验设备上进行功能…

[ECharts] There is a chart instance already initialized on the dom. 已存在图表,渲染重复

报错:已存在图表,渲染重复 解决: 在合适的时机执行 dispose 方法即可 // echarts 全局存入 实例 let myChart: any;// 在你的 initChart 初始化 Echarts 方法中 先执行清理方法 const initChart () > {// 执行清理方法然后初始化if(myChart){cons…

AndroidStudio 开发环境搭建

文章目录 AndroidStudio 开发环境搭建JDK 下载与安装,配置环境变量JDK1.8 下载安装配置环境变量新建JAVA_HOME编辑Path 下载AndroidStudio最新版本历史版本先安装JDK,后启动AS以管理员身份运行打开解决双击打不开的问题Error:你的主机中的软件中止了一个…

Coggle数据科学 | 大模型技术内参:39 种提示工程 在 29 种 NLP 任务精度对比

本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。 原文链接:大模型技术内参:39 种提示工程 在 29 种 NLP 任务精度对比 大语言模型(LLMs)在许多不同的自然语言处理&#x…

Linux网络-netstat命令

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux服务器作为一个常用的网络服务器,主要的作用就是向客户端提供网络…

1143. 最长公共子序列(详细版)

目录 dp解法: 1.状态代表什么: 2. 状态转移方程 3.初始化 3. so为什么要这样? 代码实现: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0…

从小白到架构师:万字长文 | 社交媒体应用系统设计

移动互联网时代,社交媒体应用彻底改变了我们联系和共享信息的方式。这些平台在幕后处理庞大的用户群、数据存储和实时交互。 在本文中,我们将深入探讨如何设计一个可扩展且高性能的社交媒体应用系统。我们将探讨关键组件、流程图、功能需求以及容量规划…

科普文:分布式数据一致性协议Paxos

1 什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算 法,是目前公认的解决分布式一致性问题最有效的算法之一。 Paxos由 莱斯利兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公 开&…

Gitops-Argo-Cli安装与使用

一、安装Argo-Cli工具 Release v2.9.21 argoproj/argo-cd GitHub **选择合适的符合你操作系统以及CPU架构的二进制文件 #依v2.9.21-X86-64-Linux操作系统为例 wget https://github.com/argoproj/argo-cd/releases/download/v2.9.21/argocd-linux-amd64 #添加执行权限并且移…

论文中的流程图参考图片

写论文的时候,在绘制流程图时,一直纠结n是大写还是小写,用不用斜体,号两边要不要空格。今天找到了一张标准的流程图来参考。图片来自 Zhi-Chang Ba et al, Combination of DCE-MRI and NME-DWI via Deep Neural Network for Predi…

虚拟机复制后网络不可用,报错“network.service - LSB: Bring up/down networking”

查询IP地址,eth33 没有显示IP地址 尝试重启,有报错,并且有提示,按照提示执行下看看 解决办法 chkconfig NetworkManager offsystemctl disable NetworkManager.serviceservice NetworkManager stopservice network restart 之后检…

边缘计算网关项目(含上报进程、32Modbus采集进程、设备搜索响应进程源码)

目录 边缘层 架构说明 包含知识点 数据上报进程 功能描述 功能开发 上报线程 数据存储线程 指令处理线程 项目源码 上报模块.c代码: 上报模块Makefile代码: STM32采集模块.c代码 设备搜索响应模块Linux部分.c代码 设备搜索响应模块Qt端代码.h …

C语言画蜡烛图

GPT-4o (OpenAI) 在C语言中,绘制蜡烛图(Candlestick Chart)不是直接的任务,因为C语言本身不包含高级图形绘制库。然而,可以通过某些图形库来完成这项任务,例如使用GTK、SDL、OpenGL等。 以下是通过GTK库绘…

Hive3:Hive初体验

1、创建表 CREATE TABLE test(id INT, name STRING, gender STRING);2、新增数据 INSERT INTO test VALUES(1, 王力红, 男); INSERT INTO test VALUES(2, 钉钉盯, 女); INSERT INTO test VALUES(3, 咔咔咔, 女);3、查询数据 简单查询 select * from test;带聚合函数的查询 …

论文写作之latex配置(VSCODE+TEXT LIVE)

1.overleaf 初学者学习latex可以用这个练习,可以在线编辑十分方便,但是编译时间受限制 网站:https://www.overleaf.com/project 2.Tex live 选择一个.iso文件下载 网站:Index of /CTAN/systems/texlive/Images/ 下载成功&am…

2024第三届钉钉杯大学生大数据挑战赛【A题】完整分享

2024第三届钉钉杯大学生大数据挑战赛已经开赛,小编给大家带来非常实用的助力【A题】完整,(看图片下方的说明),资料预览: 微信公众号

进阶篇,内附代码:锂电池二阶模型-离线与在线参数辨识

锂电池二阶模型-在线参数辨识 背景二阶等效电路模型介绍二阶模型的离线参数辨识二阶模型的RLS表达式递推代码已知问题背景 锂电池一阶戴维南等效模型的参数辨识方法,已经在前面两期详细地讲解了一轮。 一阶模型-离线参数辨识一阶模型-在线参数辨识本期继续讲解一下如何进行二…