langchain入门系列之六 使用langchain构建PDF解析助手

news2024/9/24 13:16:08

本文将介绍如何使用langchain构建一个pdf解析助手,在此文中你将学习到langchain如何与web应用(fastapi)相结合,向量持久化等知识,话不多说,现在开始。

安装环境

pip install fastapi
pip install python-dotenv 
pip install uvicorn

直接在pycharm新建一个fastapi项目也可!
python-dotenv 管理环境变量,我们会将llm的一些相关变量放在其中。
新建一个.env文件

touch .env
-------------------
在.env 文件中放入千帆相关参数:
QIANFAN_AK = "your key"
QIANFAN_SK = "your secret key"

项目结构图:
在这里插入图片描述

新建一个langchain文件
from langchain.document_loaders import PyPDFLoader
from langchain.vectorstores import Chroma
from langchain.embeddings import QianfanEmbeddingsEndpoint
from langchain.text_splitter import RecursiveCharacterTextSplitter
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 创建embedding模型
embeddings_model = QianfanEmbeddingsEndpoint()
embedding = QianfanEmbeddingsEndpoint()
persist_directory = f'本地持久化路径'

# 解析pdf并保存到本地向量数据库中
def save_pdf(file_path, file_name):
    loader = PyPDFLoader(file_path)
    # 分割
    text_spliter = RecursiveCharacterTextSplitter(
        chunk_size=200,
        chunk_overlap=5,  # 每个块之间的重叠长度
        length_function=len,
    )
    pages = loader.load_and_split(text_spliter)
    persist_path = persist_directory + file_name
    # 持久化到本地
    Chroma.from_documents(
        documents=pages,
        embedding=embedding,
        persist_directory=persist_path
        )

# 加载向量索引
def load_index(file_name):
    persist_path = persist_directory + file_name
    print(persist_path)
    index = Chroma(persist_directory=persist_path, embedding_function=embedding)
    return index

# 在向量中查询
def query(index, question):
    idx = load_index(index)
    return len(idx.similarity_search(question))

这个文件我们主要用来解析和保存pdf文件,其中query用来查询pdf文件内容有多少与查询内容相关的内容个数,你也可以调用parse相关函数解析成str或list返回。

fastapi上传pdf文件接口
import logging
import os
from pydantic import BaseModel
from fastapi import FastAPI
from typing import Annotated
from fastapi import File, Form, UploadFile
from langchain_helper import save_pdf, query

@app.post("/upload")
async def upload_file(
        file: Annotated[UploadFile, File()],
        index_name: Annotated[str, Form()]
):
    file_upload_target_path = os.path.join(os.getcwd(), file.filename)
    with open(file_upload_target_path, "wb+") as f:
        f.write(file.file.read())
    save_pdf(file_upload_target_path, index_name)
    return {"message": f"File uploaded successfully", "file_name": file.filename, "index_name": index_name}

这个接口就是上传pdf,并调用我们上面写的解析和保存pdf的方法,完成pdf的向量持久化。
接口调用成功,成功上传pdf并保存
在这里插入图片描述

fastapi查询接口
class Query(BaseModel):
    index_name: str
    query_question: str

@app.post("/search")
def query_index(request: Query):
    logging.info("--------------------------------------")
    index_name = request.index_name
    query_question = request.query_question
    logging.info(f"index_name: {index_name}, question: {query_question}")
    return query(index_name, query_question)

这里的index_name与上一个上传接口的index_name相同!
调用成功,成功返回内容!
在这里插入图片描述
以上就是langchain解析pdf保存在本地,通过web 接口查询相关内容,这是一个很简单的示例,希望能够做到抛砖引玉,通过以前的文章,在此基础上,我们可以使用langchain玩出更多花活,比如我们在查找书中某些内容的时候,同时让langchain解析其中内容以解惑。

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

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

相关文章

文件和注册表关联

注册表是Windows操作系统的信息存储中心,存放着包括计算机硬件配置、已安装软件的设置信息、当前用户的环境设置及某些文件类型与对其进行访问和操作的应用程序之间的联系等重要信息。Windows操作系统早期版本中存放在初始化文件(.ini)中的许多信息现在都存放在注册…

【STM32单片机_(HAL库)】3-4-3【中断EXTI】【智能排队控制系统】排队系统代码框架搭建

3-4-2系统框图及硬件接线 3.软件 beep、exti、gate、LCD1602、led、tasks驱动文件添加GPIO常用函数中断配置流程main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "tasks.h" #include "gate.h"…

联华证券-股票冲高回落的意义:上方抛压恢复

“股票冲高回落”是指股票价格在一段时期内迅速上涨至较高水平后,随后又下跌的现象。这种情况通常表明市场对股票的短期上涨缺乏持续的支撑。以下是冲高回落的主要意义和原因: 1.上方抛压较重 抛压是指大量的卖出订单,这些订单可能在股价达到…

刘海屏的优雅回归?华为Mate 70 Pro定义新美学

在智能手机的发展历程中,华为Mate系列一直是高端旗舰的代表。而今,华为Mate 70 Pro的神秘面纱终于揭开,其回归的刘海屏设计和独特的寰宇舷窗设计,再次将华为的设计理念推向了新的高度。 刘海屏的回归:经典与创新的融合…

用于低质量蒙面人脸识别的一致子决策网络

Consistent Sub-Decision Network for Low-Quality Masked Face Recognition 摘要 提出了一种利用由多个dropout块组成的在线一致性评估结构来获得对应于人脸不同区域的子决策网络,以获得对应于不同面部区域的子决策,并通过加权双向KL散度来约束子决策&…

Transformer模型-5-Multi-Head Attention

上图红色圈中的部分为 Multi-Head Attention,是由多个Self-Attention组成的,虽然Encoder与Decoder中都有Multi-Head Attention,但他们略有区别。Encoder block包含一个 Multi-Head Attention, 而Decoder block包含两个 Multi-Head…

从聊天机器人到智能算法:Facebook AI技术的最新应用

人工智能(AI)技术的飞速发展正推动社交网络进入一个全新的智能化时代。作为全球领先的社交平台之一,Facebook(现已改名为Meta)在AI技术应用方面不断创新,推动了从聊天机器人到智能算法的诸多突破。本文将探…

C++第十三弹 -- STL之stack深度剖析与模拟实现

文章索引 前言1. stack的介绍2. stack的使用3. stack的模拟实现4. stackOJ题目4.1 最小栈4.2 栈的压入弹出序列4.3 用栈实现队列 总结 前言 在现代C编程中,STL(标准模板库)是一个不可或缺的工具。它提供了一套通用的模板类和算法&#xff0c…

Vue 2.x时间转换为北京时间(+8)

文章目录 当前时间格式效果图理想时间格式效果图转换方法总结 当前时间格式效果图 非中国常用时间格式,在上图中给可以看到,选择的时间为:2024-8-26 ~ 2024-8-27,返回结果却是:2024-08-25TXX:XX:XXZ,明显不…

C/C++开发神器CLion全新发布v2024.2——更适用于嵌入式开发

CLion是一款专为开发C及C所设计的跨平台IDE。它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OS X和Windows上来开发C/C,同时它还使用智能编辑器来提高代码质量、自动代码重构并且深度整合CM…

教你识别原装与翻新芯片IC

在IC采购中,鉴别芯片真伪至关重要。原装芯片经过严格测试,而散新、翻新芯片可能存在质量和稳定性问题。市面上的IC芯片林林总总、各式各样,如果不注意区分,有时很难看出各种料有何不同。 假芯片制作手段包括翻新、打磨等&#xf…

2024年小红书图文制作超火爆风格,1单19.9!趣味性插画AI表情包项目思路

今天我想跟大家分享一个每天只需花20分钟就能轻松赚钱的AI表情包项目。 这个项目在小红书上非常受欢迎,因为它符合小红书的用户习惯,而且操作简单。下面我来详细讲讲如何利用软件快速创作有趣的插画! 项目简介 这个项目的原理很简单&#x…

自助共享空间小程序怎么做 共享空间小程序系统开发制作方法

最近很多老板想要做一个自己公司的自助共享空间小程序系统,但是不知道该怎么做,本次瀚林就为大家详细介绍一下各种自助共享空间小程序系统的开发制作方法为大家做参考。 目前市面上的自助共享空间有很多类型例如常见的: 娱乐空间、棋牌室、共…

SpringBoot中MyBatis使用自定义TypeHandler

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

2-77 基于matlab-GUI的图像分割程序

基于matlab-GUI的图像分割程序,分别包括超像素 (superpixels)分割 SLIC算法,mean shift 图像分割,H算法(Felzenszwalb和Huttenloch提出的图像分割算法),SEEDS(Superpixels Extracted via Energy…

docker-compose单机部署rocketmq集群(双主双从,同步双写)

1.本文以RocketMQ 5.3.0 版本的镜像为例。 2.首先先更新docker,之前旧版docker,导致rocketmq一直起不来,一直报错。 3.安装docker-compose。 服务器环境(目前只用192.168.25.135后期改ip地址即可) | 1 | 192.168.…

ArcGIS图斑导出CAD后变成三维多段线?

欢迎关注同名微信公众号,更多文章推送: 正常情况下,将ArcGIS中的图层导出为CAD,生成的是闭合多段线: 导出的CAD: 但是有时候导出的CAD变成三维多段线: 三维多段线有多麻烦用过CAD画图的人应该都…

【GD32 MUC 移植教程】从 GD32F10x 移植到 GD32F30x

1. 前言 对于使用 GD32 系列微控制器进行产品开发的设计人员来说,因产品及功能升级,往往需要将一种微控制器替换成另一种微控制器,在保留既有功能的情况下增加新功能。为了更快地推出新产品,设计人员经常要将应用程序移植到新的…

【数据分享】1999—2022年地级市各类交通工具的客货运量和拥有量数据(Shp/Excel格式)

在之前的文章中,我们分享过基于2000-2023年《中国城市统计年鉴》整理的1999-2022年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、一般公共预算收支状况、…

Transformer模型-4-Inputs

Encoder的输入层和Decoder的输入层是一样的结构,都是由Token embedding(词向量 word embedding) 和 Positional embedding(位置向量) 组合而成,并到最终的 输入向量x。 Transformer引入Positional embedding主要是解决词序问题。…