逐日推举一篇专注于办理实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题办理和代码动手的能力。

原文标题:Create Your Own PDF Question Answering System with OpenAI GPT, LangChain, and Streamlit

原文地址:https://medium.com/python-in-plain-english/create-your-own-chatbot-for-pdf-documents-with-openai-gpt-and-streamlit-e5b35826bc1e

Github:https://github.com/liviaellen/ask_pdf

运用 OpenAI GPTLangChain 和 Streamlit 创建自己的 PDF 问答系统

利用 OpenAI GPT、LangChain 和 Streamlit 创建自己的 PDF 问答系统

您是否有兴趣创建一个能阅读 PDF 文档并回答与文档内容干系问题的谈天机器人?在本教程中,我将向您展示如何利用 OpenAI 的 GPT 措辞模型和 Python 的 Streamlit 库创建谈天机器人。
我们还将利用 LangChain 库来完整天然措辞处理任务。

下面是创建 chatpdf.com 中谈天机器人的分步指南,它可以回答与您上传的 PDF 文件干系的问题。

这便是我们要创建的网站: https://ask-gpt-pdf.streamlit.app/

最棒的是,用户可以利用自己的 OpenAI API 密钥来利用它。
用户可以从这里获取 OpenAI API 密钥。

无论你须要从报告、学术论文或任何其他 PDF 文档中提取信息,这款工具都能为你省时省力。

此外,该工具还能为您供应所回答的每个问题的本钱信息。
通过这一功能,您可以跟踪 API 的利用情形和用度。

在本教程中,我们将向您展示如何利用 OpenAI 的 GPT 措辞模型、Streamlit 和 LangChain 创建这个谈天 PDF 工具。
谈天 PDF 工具将回答有关任何上传 PDF 文件内容的问题。

先决条件

确保打算机上安装了 Python 3.10.6。

本项目须要两个文件:requirements.txt 和 app.py。

您还须要以下 Python 库,请将它们添加到 requirements.txt 中,但不包括圆点/破折号。

langchain==0.0.154PyPDF2==3.0.1python-dotenv==1.0.0streamlit==1.18.1faiss-cpu==1.7.4streamlit-extrasaltair==4.1.0openaitiktoken

您可以利用以下命令安装它们:

pip install -r requirements.txt创建 app.py 的分步指南1.设置 Streamlit

首先,用所需的页面标题初始化 Streamlit,并创建一个包含干系信息的侧边栏:

st.set_page_config(page_title=’ PDF Chat App — GPT’)with st.sidebar: st.title(' PDF Chat App') st.markdown('## About') st.markdown('This app is an LLM-powered chatbot built using:') st.markdown('- [Streamlit](https://streamlit.io/)') st.markdown('- [LangChain](https://python.langchain.com/)') st.markdown('- [OpenAI](https://platform.openai.com/docs/models) LLM model') add_vertical_space(5) st.write('Made with ❤️ by [Livia Ellen](https://liviaellen.com/portfolio)')2.创建紧张功能

接下来,定义运用程序的紧张功能,以处理用户交互:

def main(): #…3.网络用户输入

提示用户供应 OpenAI API 密钥,让他们上传 PDF 文件并输入问题:

st.header("1. Pass your OPEN AI API KEY here")openai_key = st.text_input("OPEN AI API KEY")st.write("You can get your OpenAI API key from [here](https://beta.openai.com/account/api-keys)")os.environ["OPENAI_API_KEY"] = openai_keyst.header("2. Upload PDF")pdf = st.file_uploader("Upload your PDF", type='pdf')st.header("3. Ask questions about your PDF file:")query = st.text_input("Questions", value="Tell me about the content of the PDF")4.处理 PDF 文件

用户上传 PDF 文件后,从 PDF 文件中提取文本并将其分割成易于管理的部分:

if pdf is not None: pdf_reader = PdfReader(pdf) text = "" for page in pdf_reader.pages: text += page.extract_text() text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, length_function=len ) chunks = text_splitter.split_text(text=text)5.创建嵌入

现在,利用 LangChain 的 OpenAIEmbeddings 类为文本块创建嵌入:

file_name = pdf.name[:-4]if os.path.exists(f"{file_name}.pkl"): with open(f"{file_name}.pkl", "rb") as f: VectorStore = pickle.load(f)else: embeddings = OpenAIEmbeddings() VectorStore = FAISS.from_texts(chunks, embedding=embeddings) with open(f"{file_name}.pkl", "wb") as f: pickle.dump(VectorStore, f)6.问答

利用 LangChain 库和 OpenAI 模型,根据 PDF 内容回答用户的问题:

if st.button("Ask"): if openai_key == '': st.write('Warning: Please pass your OPEN AI API KEY on Step 1') else: docs = VectorStore.similarity_search(query=query, k=3) llm = OpenAI() chain = load_qa_chain(llm=llm, chain_type="stuff") with get_openai_callback() as cb: response = chain.run(input_documents=docs, question=query) st.header("Answer:") st.write(response) st.write('--') st.header("OpenAI API Usage:") st.text(cb)7.运行 Streamlit 运用程序

末了,添加以下几行以运行 Streamlit 运用程序:

if __name__ == '__main__': main()

在终端中利用以下命令启动运用程序:

streamlit run app.py

完成后,您可以将其上传到 github 并免费托管到 share.streamlit.io。

结论

在本教程中,我们创建了一个谈天机器人,它可以利用 OpenAI GPT 措辞模型、Streamlit 和 LangChain 回答有关 PDF 内容的问题。
这个谈天机器人可以帮助您从 PDF 中提取信息,而无需阅读全体文档。
试试吧,看看它能如何帮助你更高效地浏览和理解 PDF 文件。

总结streamlit可视化PyPDF2.PdfReader读取PDFlangchain.text_splitter.RecursiveCharacterTextSplitter 分块langchain.embeddings.openai.OpenAIEmbeddings 向量嵌入Faiss检索openai 调用模型langchain.chains.question_answering.load_qa_chain 问答往期干系

[1] Google Gemini模型本地可视化

[2] 当科技遇上神奇:用Streamlit定制AI可视化问答界面