淄博外贸网站制作,在wordpress能做些什么,wordpress post-type,seo排名点击工具在这篇文章中#xff0c;我们将探索创建一个简单但有效的聊天机器人#xff0c;该机器人根据上传的 PDF 或文本文件的内容响应查询。该聊天机器人使用 Langchain、FAISS 和 OpenAI 的 GPT-4 构建#xff0c;将为文档查询提供友好的界面#xff0c;同时保持对话上下文完整。…在这篇文章中我们将探索创建一个简单但有效的聊天机器人该机器人根据上传的 PDF 或文本文件的内容响应查询。该聊天机器人使用 Langchain、FAISS 和 OpenAI 的 GPT-4 构建将为文档查询提供友好的界面同时保持对话上下文完整。
APP链接地址Streamlit 潜在用例
在深入研究实际代码之前让我们花点时间回顾一下该工具的潜在用例以及如何使用它来进一步增强您的研究、信息检索或摘要工作流程
1.内容概括
三句摘要用三个简洁的句子总结 PDF 的每个部分以捕捉核心思想。要点摘要总结每个部分的关键要点以概述所涵盖的主要主题。QA 摘要将每个部分的要点转化为问答形式以对话的方式简化对内容的理解。表格摘要将要点组织到 Markdown 表格中其中包含章节名称、主要发现和含义的列。
2. 信息提取
关键句子提取从每个部分中识别并提取总结要点的关键句子。关键词提取识别并列出经常出现的关键词和关键短语以快照主题联系方式收集从 PDF 中提取重要片段例如联系信息。页面定位器指向 PDF 中感兴趣的特定主题所在的确切页面。多文档查询跨多个文档查询以提取比较见解或聚合信息。情绪分析了解文档或文档特定部分所传达的情绪或语气。
这些工具是可扩展的可以改进附加功能例如内容增强、可视化甚至用于自动化文档处理的工作流集成。通过利用这一工具人们可以提高文档交互、分析和信息检索过程的效率和深度。
然而为了增强该工具用于特定用例或更高质量的交付需要以即时工程、使用更强大的向量数据库和嵌入模型的形式进行进一步细化。人们还可以考虑对模型进行微调以获得更高质量的结果。
您可以在我的 GitHub Repo 中找到使用的完整代码 AI-DocumentQnA,使用 Langchain 和…构建的简单的支持 LLM 的文档问答应用程序,下载AI-DocumentQnA的源码_GitHub_帮酷https://github.com/yakshb/AI-DocumentQnA.git?sourcepost_page-----83f00c1f6b4b-------------------------------- 设置和依赖项 首先请确保您已安装以下库。如果没有请使用 pip 安装它们
pip install streamlit PyPDF2 langchain openai sentence-transformers faiss-cpu在深入代码之前让我们先简要了解一下关键组件
Langchain一个极其通用和全面的库旨在简化使用法学硕士构建的应用程序的创建。Langchain 使开发人员可以将 LLM 连接到自定义数据库和 API并提供各种 NLP 工具和代理功能。Facebook AI 相似性搜索FAISSMeta 开发的一个框架用于高效相似性搜索和密集向量聚类。OpenAI API这不需要更深入的解释。大多数人都熟悉 GPT——我们将使用它来生成对用户查询的响应的底层语言模型。您可以在此处获取 OpenAI API 令牌。
接下来让我们导入必要的模块
import streamlit as st
from PyPDF2 import PdfReader
from langchain.embeddings import OpenAIEmbeddings, SentenceTransformerEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain, RetrievalQA
from langchain.memory import ConversationBufferWindowMemory
from langchain.vectorstores import FAISS
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
提高模块化程度的辅助函数
现在让我们创建辅助函数来处理 PDF 文档中的文本将文本转换为向量并初始化用于处理用户查询的对话链。这些辅助函数支持采用结构化方法来处理和准备 PDF 文档中的文本数据以供进一步分析。
# Extracts and concatenates text from a list of PDF documents
def get_pdf_text(pdf_docs):text for pdf in pdf_docs:pdf_reader PdfReader(pdf)for page in pdf_reader.pages:text page.extract_text()return text# Splits a given text into smaller chunks based on specified conditions
def get_text_chunks(text):text_splitter RecursiveCharacterTextSplitter(separators\\n,chunk_size1000,chunk_overlap200,length_functionlen)chunks text_splitter.split_text(text)return chunks
# Generates embeddings for given text chunks and creates a vector store using FAISS
def get_vectorstore(text_chunks):embeddings SentenceTransformerEmbeddings(model_nameall-MiniLM-L6-v2)vectorstore FAISS.from_texts(textstext_chunks, embeddingembeddings)return vectorstore
最初从 PDF 文档列表中提取文本并将其连接成单个字符串。然后该文本被分割成更小的块使其更易于分析管理。最后使用句子转换器将这些块转换为向量嵌入并在 FAISS 向量存储中进行组织以便在后续操作中实现高效的相似性搜索功能。通过这些步骤代码为高级文本分析奠定了基础为更大系统中的相似性搜索和上下文查询等功能铺平了道路。
使用 Langchain 和 OpenAI 作为 LLM 引擎
在对话式人工智能领域保留和参考过去交互的能力对于维持对话中的上下文相关性非常宝贵。下面的代码片段揭示了 Langchain一个帮助我们构建对话代理的库如何与 OpenAI 的 GPT 模型一起使用来初始化对话链——一系列可以随时间引用或扩展的交互序列。
# Initializes a conversation chain with a given vector store
def get_conversation_chain(vectorstore):memory ConversationBufferWindowMemory(memory_keychat_history, return_messageTrue)conversation_chain ConversationalRetrievalChain.from_llm(llmChatOpenAI(temperaturetemperature_input, model_namemodel_select),retrievervectorstore.as_retriever(),get_chat_historylambda h: h,memorymemory)return conversation_chain
以下是该代码片段中关键组件的细分
内存初始化ConversationBufferWindowMemory创建一个指定为memory_key“chat_history”的实例。该对象将保存对话历史记录允许对话链引用以前的交互。对话链创建该ConversationalRetrievalChain对象通过其from_llm方法进行实例化这意味着使用大型语言模型LLM作为对话处理的底层引擎。
检索器规范该retriever参数使对话链能够在对话期间查询向量存储以获取相关信息。记忆关联参数memory与之前创建的实例相关联ConversationBufferWindowMemory将对话历史记录链接到对话链。
有了这个框架我们就可以开始构建一个交互式界面供用户开始查询他们的文档。
对于这个项目我们将使用Streamlit这是一个越来越流行的工具供希望快速测试和部署数据应用程序的开发人员使用。通过简单的 Python 脚本执行Streamlit 有助于 AI 应用程序的快速原型设计。
使用 Streamlit 简化文档上传和处理
提供的代码片段演示了使用 Streamlit 库处理文件上传、处理和对话分析准备的简化而有效的方法。它提供了简单的 UI 元素例如文件上传按钮和处理指示器这对于用户参与和反馈至关重要。
user_uploads st.file_uploader(Upload your files, accept_multiple_filesTrue)
if user_uploads is not None:if st.button(Upload):with st.spinner(Processing):# Get PDF Textraw_text get_pdf_text(user_uploads)# Retrieve chunks from texttext_chunks get_text_chunks(raw_text)# Create FAISS Vector Store of PDF Docsvectorstore get_vectorstore(text_chunks)# Create conversation chainst.session_state.conversation get_conversation_chain(vectorstore)
Streamlit 小部件和会话状态的使用分别实现了用户友好的界面和持久的对话上下文与创建直观的交互式文档问答应用程序的目标非常一致。
聊天界面
现在所提供的文档是使用 LLM 模型处理的 PDF 解析、文本嵌入和向量存储辅助函数进行处理的现在任何文档都可以用作与用户对话的上下文。从这里开始就非常简单了。初始化聊天机器人功能您应该能够开始使用您自己的文档问答助手。
if user_query : st.chat_input(Enter your query here):# Process the users message using the conversation chainif conversation in st.session_state:result st.session_state.conversation({question: user_query, chat_history: st.session_state.get(chat_history, [])})response result[answer]else:response Please upload a document first to initialize the conversation chain.with st.chat_message(assistant):st.write(response)结论
我们现在使用 Streamlit、Langchain、FAISS 和 OpenAI GPT 模型创建了一个上下文感知文档问答聊天机器人用户可以在 GPT 3.5、3.5-turbo 或 GPT-4 之间进行选择。用户可以上传PDF文档并进行交互查询。该聊天机器人可以成为一个有用的工具可以轻松地从文档中提取有价值的见解。
我鼓励读者使用这个工具并发现从他们的见解中解锁见解的方法。如果这有帮助请告诉我。您可以进一步增强和自定义该聊天机器人以满足特定要求使文档查询变得轻而易举。