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,一经查实,立即删除!

相关文章

3033. 修改矩阵

3033. 修改矩阵 题目链接&#xff1a;3033. 修改矩阵 代码如下&#xff1a; class Solution { public:vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {vector<int> maxRows(matrix[0].size());for(int j0;j<matri…

【前端 14】Vue常见指令

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

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

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

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

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

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

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

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

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

AndroidStudio 开发环境搭建

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

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

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

Linux网络-netstat命令

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

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

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

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

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

数据分析详解

一、数据分析教程 1. 入门教程 在线课程&#xff1a;如Coursera、Udemy、网易云课堂等平台提供了大量数据分析的入门课程&#xff0c;涵盖统计学基础、Python/R语言编程、数据可视化等内容。书籍推荐&#xff1a;《Python数据分析实战》、《R语言实战》等书籍是数据分析入门的…

Github 2024-07-27 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-27统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1JavaScript项目1Tauri: 构建小型、快速和安全的桌面应用程序 创建周期:1673 天开发语言:Rust协议类型:Apache Lic…

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

1 什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算 法&#xff0c;是目前公认的解决分布式一致性问题最有效的算法之一。 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 #添加执行权限并且移…

ubuntu20.04安装RabbitMQ +Erlang

ubuntu20.04安装RabbitMQ 3.11.19Erlang 25.3.1_ubuntu20.04.6 安装 rabbitmq-CSDN博客 LINUX下载编译libpng_linux libpng下载-CSDN博客 Ubuntu20.04 安装 Nginx 软件报错&#xff1a;libgd3 缺少 libpng12-0 依赖 Ubuntu安装RabbitMq&#xff08;保姆级教学&#xff0c;直…

论文中的流程图参考图片

写论文的时候&#xff0c;在绘制流程图时&#xff0c;一直纠结n是大写还是小写&#xff0c;用不用斜体&#xff0c;号两边要不要空格。今天找到了一张标准的流程图来参考。图片来自 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地址&#xff0c;eth33 没有显示IP地址 尝试重启&#xff0c;有报错&#xff0c;并且有提示&#xff0c;按照提示执行下看看 解决办法 chkconfig NetworkManager offsystemctl disable NetworkManager.serviceservice NetworkManager stopservice network restart 之后检…

2222222222

222222222222222

“在工作中学习”和“根据遇到的问题捡知识”两者有巨大不同

目前整个软件行业越来越需要一堆多面手&#xff0c;也许现在已经是这样了&#xff0c;只是我还没有注意到。当然&#xff0c;我也不喜欢这种情。现在&#xff0c;好像没有人愿意花更多的时间来把某一个东西学好学深学扎实 编程语言推荐&#xff1a; C 语言不用多说&#xff…