使用 Google Drive 和 Sharepoint 构建一个实时 RAG 聊天机器人

在这篇文章中,我们将讨论如何利用 Google Drive 或 SharePoint 中存储的文件,构建一个实时的可检索问答(RAG)应用。这意味着您的聊天机器人将能够实时访问知识库的最新版本,无需手动更新。本教程将指导您使用 Pathway 和 LlamaIndex 构建一个实时更新的 RAG 聊天机器人。

为什么选择 Pathway?

Pathway 是一个开放的数据处理框架,允许轻松开发数据转换管道和使用实时数据源的机器学习应用程序。Pathway 监听文档的更改、添加和删除,处理加载和索引,无需 ETL。

它提供一个始终是最新的索引解决方案,无需传统的 ETL 管道。它可以监控多个数据源(如文件、S3 文件夹和云存储),向您的 LLM 应用程序提供最新信息,省去了许多繁琐的步骤。

这意味着你无需担心:

  • 检查文件以查看是否有任何更改
  • 解析 PDF、Word 文档或其他文本文件
  • 转换、嵌入文档并将其加载到向量数据库中

一旦对构成你的知识库的文件进行更新,更新的内容将立即重新编制索引------你无需处理重新运行管道。

应用程序概述

此演示由三部分组成。

  1. 使用 Pathway 的向量存储,从知识库文档中获取最新的知识和信息。
  2. LlamaIndex 创建 RAG 管道并提供聊天记录。
  3. Streamlit 提供易于导航的用户界面支持。

先决条件

  • OpenAI API 密钥
  • Pathway 实例(托管版本免费提供用于演示)

1. 向知识库添加数据

Pathway 可以同时监听多个来源,例如本地文件、S3 文件夹、云存储和数据流。在此示例中,您将通过将文件上传到作为来源注册到 Pathway 的 Google Drive 来向您的管道添加示例文档。您还可以查看 Pathway 的 Google Drive 连接器的完整文档

对于此演示,为您提供了一个 Google Drive 文件夹以供您上传文件。为了测试该应用程序,我们将向我们的助手询问有关 Pathway 的问题,它将根据 Google Drive 文件夹中可用的文件进行响应。

请参阅 pathway-io 以获取有关可用连接器和如何实现自定义连接器的更多信息。

2. 构建由 Pathway 提供支持的聊天机器人

检索器

首先,导入应用程序所需的模块。

javascript 复制代码
from llama_index.retrievers import PathwayRetriever
from llama_index.query_engine import RetrieverQueryEngine
from llama_index.chat_engine.condense_question import CondenseQuestionChatEngine
from rag import chat_engine

使用托管的 Pathway 实例初始化检索器并创建查询引擎:

ini 复制代码
PATHWAY_HOST = "api-pathway-indexer.staging.deploys.pathway.com"
PATHWAY_PORT = 80

retriever = PathwayRetriever(host=PATHWAY_HOST, port=PATHWAY_PORT)

聊天引擎

我们使用 CondenseQuestionChatEngine 来使用 LlamaIndex 创建 RAG 聊天机器人。此聊天引擎的一个优点是它使用对话历史记录中提供的上下文来编写搜索查询。这会产生更符合上下文的内容。

为了进一步改进管道,你可以修改聊天引擎类型、提示和其他参数。为了简单起见,我们将使用默认设置。

ini 复制代码
chat_engine = CondensePlusContextChatEngine.from_defaults(
    retriever=retriever,
    verbose=True,
)

3. 使用 Streamlit 创建 UI

为应用程序创建一个标题,并初始化聊天机器人的消息历史记录和聊天引擎的会话状态值。

ini 复制代码
st.title("Pathway + LlamaIndex")

if "messages" not in st.session_state.keys():
    st.session_state.messages = [
        {"role": "assistant", "content": "Hi, ask me a question. My knowledge is always up to date!"}
    ]

    st.session_state.chat_engine = chat_engine

提示用户输入问题,将任何用户输入存储在会话状态中,并打印用户和助手的消息。

css 复制代码
if prompt := st.chat_input("Your question"):
    st.session_state.messages.append({"role": "user", "content": prompt})

for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.write(message["content"])

如果最后一条消息来自用户并且助手正在准备回复,则创建一个 st.spinner 小组件。将消息内容和角色添加到消息历史记录中。

vbscript 复制代码
if st.session_state.messages[-1]["role"] != "assistant":
    with st.chat_message("assistant"):
        with st.spinner("Thinking..."):
            response = st.session_state.chat_engine.chat(prompt)
            st.write(response.response)
            message = {"role": "assistant", "content": response.response}
            st.session_state.messages.append(message)

运行应用程序

在 Streamlit 社区云上

该演示托管在 Streamlit 社区云上,网址。此版本的应用程序使用 Pathway 托管的文档管道

在您的本地计算机上

  1. 在本地克隆此存储库
  2. 在根文件夹下创建一个 .env 文件来存储您的 OpenAI API 密钥。此演示使用 OpenAI GPT 模型来回答问题。
  3. 您还需要一个用于向量搜索的 Pathway 实例。有关本地部署,请参阅向量存储指南Pathway 部署
  4. 运行 streamlit run ui.py

恭喜!现在,您可以与您的文档聊天,并且由于 Pathway,您的应用程序将实时反映任何文件更新。

总结

在本教程中,您创建并部署了一个实时 RAG 聊天机器人应用程序。您还了解了如何将 Streamlit、LlamaIndex 和 Pathway 结合使用,这要归功于 LlamaIndex 的 Pathway Retriever。最终结果是一个 RAG 应用程序,它始终可以访问您的知识库的最新版本。

来源:blog.streamlit.io/build-a-rea...

相关推荐
我算是程序猿2 小时前
用AI做电子萌宠,快速涨粉变现
人工智能·stable diffusion·aigc
哪 吒3 小时前
吊打ChatGPT4o!大学生如何用上原版O1辅助论文写作(附论文教程)
人工智能·ai·自然语言处理·chatgpt·aigc
AI绘画君6 小时前
Stable Diffusion绘画 | AI 图片智能扩充,超越PS扩图的AI扩图功能(附安装包)
人工智能·ai作画·stable diffusion·aigc·ai绘画·ai扩图
乔代码嘚9 小时前
AI2.0时代,普通小白如何通过AI月入30万
人工智能·stable diffusion·aigc
XiaoLiuLB10 小时前
ChatGPT Canvas:交互式对话编辑器
人工智能·自然语言处理·chatgpt·编辑器·aigc
学习前端的小z2 天前
【AIGC】ChatGPT提示词解析:如何打造个人IP、CSDN爆款技术文案与高效教案设计
人工智能·chatgpt·aigc
wgggfiy2 天前
chatgpt学术科研prompt模板有哪些?chatgpt的学术prompt有哪些?学术gpt,学术科研
论文阅读·人工智能·gpt·chatgpt·prompt·aigc
⊙月2 天前
CMU 10423 Generative AI:lec15(Scaling Laws 大规模语言模型的扩展法则)
人工智能·aigc
贪玩懒悦2 天前
用langchain+streamlit应用RAG实现个人知识库助手搭建
人工智能·ai·语言模型·langchain·aigc
CM莫问3 天前
大语言模型入门(一)——大语言模型智能助手
人工智能·算法·语言模型·自然语言处理·aigc