LLM大模型实战项目--基于ChatGLM2的小书虫文档阅读助手

news2025/1/6 18:52:36

本文介绍如此从零开始编写一个基于ChatGLM2的文档阅读助手

一、项目介绍

二、获取API接口

三、环境配置

四、代码实现

五、效果展示


一、项目介绍

       小书虫📚 文档阅读助手是一个基于百度千帆大模型平台的Web应用程序,核心是清华大学训练的ChatGLM2大模型。旨在为用户提供一个高效、直观且易于使用的文档处理平台。该工具的核心功能是自动化阅读和分析用户上传的PDF文档,通过先进的文本处理技术,快速提取文档中的关键信息和数据。

        小书虫📚 能够显著提高用户处理文档的效率,尤其是在面对大量阅读材料时。用户不再需要花费大量时间手动翻阅文档,而是可以依赖文档阅读助手来快速获取所需信息。此外,该工具还具备交互式对话功能,允许用户通过提问来获得更加个性化的内容摘要和详细分析。

        在设计上,小书虫📚文档阅读助手注重用户体验,采用响应式布局确保在各种设备上都能提供一致的访问体验。同时,界面简洁、直观,易于新用户快速上手。安全性也是设计的重点,确保用户上传的文档在处理过程中的隐私和安全。

        文档阅读助手的应用场景非常广泛,无论是学术研究、商业分析还是日常学习和工作,它都能提供有力的支持。通过辅助用户进行知识管理和决策制定,文档阅读助手成为了一个强大的助手,帮助用户在信息爆炸的时代中保持信息处理的高效率和质量。

二、获取API接口

 注册百度云

        搜索百度云,打开官网注册,充值一点点大米(收费很低,大概生成几个句子花费一毛钱)

注册之后一定要完成个人认证,不然无法使用。

获取API接口

完成注册与认证之后,打开千帆大模型平台,点开引用接入,应用名称起个名字,描述随便打几个字就行。

获取API Key 和Secret Key(注意保密)

完成之后,大功告成。

三、环境配置

在Anaconda Prompt中创建一个大模型的环境,然后下载库。依次运行以下代码。

 
conda create -n llm python=3.10
#创建llm

conda activate llm
#激活llm

pip install langchain
pip install qianfan
pip install PyPDF2
pip install streamlit
pip install faiss-cpu

#下载

如果在后续的运行中出现缺失包的报错,那就缺的包pip install 下载一下就行啦,你是一个优秀的程序员,你一定可以的!!!!!!

四、代码实现

打开pycharm,新建一个py文档,输入如下代码。

中间的api和密码输入你自己的,刚才在第二节获取到的。

from PyPDF2 import PdfReader # 读取pdf文件
from langchain.text_splitter import CharacterTextSplitter # 文本分割器
from langchain_community.vectorstores import FAISS # 向量库
from langchain_community.llms import QianfanLLMEndpoint # 千帆大模型平台库
from langchain.llms import OpenAI # openai模型库
import streamlit as st # 搭建web界面
from langchain.chains import ConversationalRetrievalChain # 对话检索链
import os
from langchain.embeddings.huggingface import HuggingFaceEmbeddings #向量模型
from langchain_community.embeddings import QianfanEmbeddingsEndpoint
# from project2.API_Config import *
os.environ["QIANFAN_AK"] = "xxxxxxxxxxxxxxxxxx7"
os.environ["QIANFAN_SK"] ="TxxxxxxxxxxxxxxxxxxxxxI"

# 使用国外OPENAI的模型,需要导入API-KEY(需要科学上网)
# os.environ[ "OPENAI_API_KEY" ] = OPENAI_AK
# 使用国内百度千帆平台的模型,需要导入API-KEY和SERECT-KEY
# 设置web页面:比如标题、描述功能

st.title("小书虫📚文档阅读助手")
st.write("别焦虑,请上传一个pdf文档,我来帮您阅读分析.")
# 设置上传pdf文件的功能
uploaded_file = st.file_uploader("选择一个pdf文档", type="pdf")

if uploaded_file:
# 读取pdf文件
    doc_reader = PdfReader(uploaded_file)
# 从pdf中提取文档
    raw_text = ""
    for i, page in enumerate(doc_reader.pages):
        text = page.extract_text()
        if text:
            raw_text += text
    #将文本切分成小的模块
    # print(raw_text)
    # print('*'*80)
    text_splitter = CharacterTextSplitter(separator="。",chunk_size=100, chunk_overlap=10)

    texts = text_splitter.split_text(raw_text)
    # print(texts)
    # print(f'len(texts)-->{len(texts[0])}')
    # print('*'*80)
    # embeddings模型
    # EMBEDDING_MODEL = "/Users/ligang/PycharmProjects/llm/langchain_apply/Knowledge_QA/moka-ai/m3e-base"
    # embeddings = HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL)
    embeddings = QianfanEmbeddingsEndpoint()
    # 创建文档搜索
    docsearch = FAISS.from_texts(texts, embeddings)
    # 创建对话链

    qa = ConversationalRetrievalChain.from_llm(
                        llm=QianfanLLMEndpoint(model='ChatGLM2-6B-32K'), # llm=OpenAI(model='gpt-3.5-turbo'),
                        retriever=docsearch.as_retriever(),
                        return_source_documents=True, )
                        # 初始化聊天记录列表
    chat_history = []
                        # 获取用户的查询
    query = st.text_input("请给出你的问题")
    #添加一个生成按钮
    generate_button = st.button("生成答案")
    if generate_button and query:
        with st.spinner("答案生成中..."):
        # 将问题以及历史对话记录传入对话链获得模型输出结果
            result = qa({"question": query, "chat_history": chat_history})
            answer = result["answer"]
            source_documents = result['source_documents']
            #将答案和source_documents合并为单个响应(输出)
            response = { "answer": answer, "source_documents": source_documents}
            st.write("response:", response)


#运行这个文件在终端运行以下命令
#streamlit run new_demo.py

注意!!!!!!!!!

不要直接点击运行,打开Pycharm的终端,

激活llm环境

conda activate llm

然后进入这个文件夹xxx

cd xxx

 输入以下代码运行


streamlit run new_demo.py

        这段代码是一个利用Streamlit框架和Langchain库构建的文档阅读助手的示例。它结合了PDF文件读取、文本分割、向量搜索和对话生成等功能,提供了一个完整的文档分析和交互式问答系统。以下是对代码的简要介绍:

1. **导入依赖**:代码首先导入了必要的库和模块,包括PDF文件读取、文本分割、向量存储、语言模型和Streamlit界面构建等。

2. **环境配置**:设置了使用百度千帆平台模型所需的API密钥和安全密钥。如果使用OpenAI模型,需要配置相应的API密钥。

3. **Web界面设置**:使用Streamlit创建了一个标题为"小书虫📚文档阅读助手"的Web页面,并提供了一个文本输入框让用户上传PDF文件。

4. **PDF文件处理**:当用户上传PDF文件后,使用`PyPDF2`库读取文件内容,并将其转换为纯文本。

5. **文本分割**:使用`CharacterTextSplitter`将文本分割成小块,以便进行后续处理。

6. **向量模型和文档搜索**:使用百度千帆平台的向量模型`QianfanEmbeddingsEndpoint`将文本转换为向量,然后使用FAISS创建一个向量搜索系统。

7. **对话检索链**:构建了一个基于`ConversationalRetrievalChain`的对话生成系统,该系统结合了语言模型和文档检索器来生成回答。

8. **用户交互**:提供了一个文本输入框让用户提出问题,并有一个按钮触发答案生成过程。

9. **答案生成与展示**:当用户点击生成按钮并输入问题后,系统会调用对话检索链生成答案,并将答案和相关文档展示给用户。

10. **运行说明**:提供了在终端运行该脚本的命令。

这个项目的意义在于提供了一个自动化的文档分析和问答系统,可以帮助用户快速从大量文档中提取信息,并以对话的形式回答问题,极大地提高了信息处理的效率和便捷性。同时,它也展示了如何将多种技术(如PDF处理、文本分割、向量搜索和语言模型)结合起来,构建一个功能丰富的Web应用。
 

五、效果展示

输入文档,提出问题,获得结果。

 

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

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

相关文章

算法加项目

1.仅加号 很简单&#xff0c;找到每次添加后最小的即可&#xff0c;这里不做演示。 2.采药 dp&#xff0c;for1数目&#xff0c;for2时间&#xff0c;简单的dp模板题目。 #include<bits/stdc.h> using namespace std; int n,m; const int N105,M105; long long a[M],b[M…

TInyWebServer面试题

一、项目介绍 &#xff08;1&#xff09;为什么要做这样一个项目&#xff1f; &#xff08;2&#xff09;介绍一下你的项目 这个项⽬是我在学习计算机⽹络和Linux socket编程过程中独⽴开发的轻量级Web服务器&#xff0c;服务器的⽹络模型是主从reactor加线程池的模式&#xf…

VMware虚拟机网络模式配置详解【原理,功能,特点层面】

VMware虚拟机网络模式配置详解【原理,功能,特点层面】 文章目录 VMware虚拟机网络模式配置详解【原理,功能,特点层面】桥接模式&#xff08;Bridged&#xff09;原理功能点介绍虚拟网络编辑器配置虚拟机配置 配置教程编辑-虚拟网络编辑器虚拟机网络配置 特点 NAT模式概念功能点…

数学建模--智能算法之蚁群优化算法

目录 基本原理 算法步骤 Python代码示例 应用领域 特点及改进 蚁群优化算法在解决哪些具体组合优化问题方面表现最为突出&#xff1f; 如何有效地改进蚁群优化算法以提高其收敛速度和避免陷入局部最优的问题&#xff1f; 蚁群优化算法与其他群体智能优化算法&#xff0…

三维旋转矩阵

前言 本文讲述三维旋转的矩阵推导&#xff0c;推导过程遵循下面的规则&#xff1a; 本文的坐标系是基于右手坐标系的逆时针旋转为正向旋转 围绕坐标轴的旋转 x x x轴 我们假设旋转的点为 P P P 假设旋转之前点 P P P的坐标为 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0​,y0​,…

CAN总线中注入拓展帧、远程帧,CAPL通用函数。

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe,博客目录大全,点击跳转👉 【测试需求】:CAN总线要求DUT 接收到非预期的扩展帧、远程帧时,通信正常,…

vulhub:nginx解析漏洞nginx_parsing

这个解析漏洞其实是PHP CGI的漏洞&#xff0c;在PHP的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的&#xff0c;当URL中有不存在的文件&#xff0c;PHP就会向前递归解析。在一个文件/xx.jpg后面加上/.php会将 /xx.jpg/xx.php 解析为 php 文件 条件&#xff1a; Ngi…

釉面陶瓷器皿和玻璃器皿 SOR/2016-175认证

釉面陶瓷制品和釉面玻璃制品设计用于盛装食品&#xff0c;包括扁平餐具、杯子或马克杯、小号或大号凹形器皿&#xff08;杯子或马克杯除外&#xff09;以及水罐。这些法规适用于以下釉面陶瓷制品和釉面玻璃制品&#xff1a; 完全或部分由陶瓷或玻璃制成完全或部分覆盖含铅或镉…

MATLAB(12)预测模型

一、前言 在MATLAB中创建一个预测模型通常涉及多个步骤&#xff0c;包括数据准备、模型选择、训练模型、评估模型以及使用模型进行预测。以下是一个简化的例子&#xff0c;说明如何使用MATLAB中的内置函数来创建一个基于线性回归的预测模型。这个例子将使用MATLAB的fitlm函数来…

C语言函数初识

文章目录 &#x1f34a;自我介绍&#x1f34a;函数初识前言概念具体实例解释函数的实用性 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍 Hello,大家好&#xff0c;我是小珑也…

院人全年无休计划背后,芒果把To C综艺玩明白了

《种地吧》掉粉闹得沸沸扬扬&#xff0c;不少禾伙人希望芒果把“十个勤天”挖走&#xff0c;毕竟芒果做综艺群像确实是一把好手&#xff0c;“院人”就是最好的例子。 在#种地吧粉丝让芒果把十个勤天挖走#的话题登上热搜之后&#xff0c;“学分们”&#xff08;院人粉丝&#…

JS等待所有方法执行完成在执行下一个方法,promise All

在工作中会遇到这样一个场景&#xff0c;前端需要拿到不同接口返回的结果在执行某个逻辑&#xff0c;当使用链式那样的方式去请求&#xff0c;等一个接口响应完在请求下一个接口&#xff0c;这种方法就会导致请求时间特别长。这个时候就可以使用promise all&#xff0c;同时请求…

国产麒麟操作系统下搞单机版

去年纪委单位的一个项目&#xff0c;因为单位保密性质&#xff0c;档案必须要保密&#xff0c;要求采用单机版&#xff0c; 要求跟EXE那样&#xff0c;双击打开&#xff0c;阿公单位信息人员电脑操作水平化滞后还是相当严重啊。 去年已经给他花了时间按他们的要求实现了。 上周…

【直角三角形】python刷题记录

R3-新增每日一题打卡。 目录 思路&#xff08;遍历中间乘法原理&#xff09;&#xff1a; 乘法原理如下&#xff1a; ps: python的zip操作 矩阵转置 并行遍历 对象组合 创建字典 处理不等迭代长度 思路&#xff1a; 这题遍历主要从直角点开始遍历&#xff0c;用到了…

软科中国大学排名爬虫+数据可视化

这一期是关于软科中国大学排名的爬虫分析 目标网址&#xff1a;https://www.shanghairanking.cn/rankings/bcur/2024 每页30所学校信息&#xff0c;共20页 点击翻页&#xff0c;你发现网址没有发生变化&#xff0c;说明该页面信息应该是利用js实现动态加载数据的方式展示的&am…

基于51单片机的篮球计分器Protues仿真设计(LCD12864显示)

目录 一、设计背景 二、设计要求 三、仿真演示 四、程序展示&#xff08;部分&#xff09; 一、设计背景 近年来&#xff0c;随着国家对体育事业的日益重视&#xff0c;体育运动在全民中的普及程度显著提高&#xff0c;篮球作为一项广受欢迎的运动项目&#xff0c;其比赛与…

Linux云计算 |【第二阶段】CLUSTER-DAY1

主要内容&#xff1a; 集群概念、LVS概述、LVS-NAT集群、LVS-DR集群 一、集群概念 集群&#xff08;Cluster&#xff09;是指将多台计算机&#xff08;节点&#xff09;通过网络连接在一起&#xff0c;形成一个统一的计算资源池&#xff0c;共同完成一项或多项任务的系统。集…

如何使用 FTP 将文件上传到 WordPress

作为新手站长&#xff0c;在学习如何管理和维护自己的网站时&#xff0c;掌握一些基本的文件管理技能是非常重要的。通过FTP上传文件到WordPress网站是其中一个必备的技能。本文将详细介绍如何使用FTP将文件上传到WordPress&#xff0c;并分享一些在使用Hostease主机的过程中积…

场外个股期权是什么?20倍奇迹,神仙操作的场外个股期权!

今天带你了解场外个股期权是什么&#xff1f;20倍奇迹&#xff0c;神仙操作的场外个股期权&#xff01;场外期权交易具有独特的特点和优势&#xff0c;它结合了“彩票”和“保险”的双重属性&#xff0c;为投资者提供了一种灵活且高效的投资工具。 场外个股期权是一种金融合约…

Linux内存不够了?看看如何开启虚拟内存增加内存使用量

1、为什么要使用虚拟内存 当我们没有多余的钱去购买大内存的云服务器时&#xff0c;但是当前服务器里面的软件和程序运行的比较多导致内存不够用了。这个时候可以通过增加虚拟内存来扩大内存容量。但是在启用虚拟内存时&#xff0c;需要仔细考虑系统的实际需求和硬件配置&#…