本文介绍如此从零开始编写一个基于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应用。
五、效果展示
输入文档,提出问题,获得结果。