使用 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...

相关推荐
夏沫的梦1 小时前
生成式AI对产业的影响与冲击
人工智能·aigc
敲上瘾8 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
想成为高手49912 小时前
生成式AI在教育技术中的应用:变革与创新
人工智能·aigc
z千鑫1 天前
【人工智能】PyTorch、TensorFlow 和 Keras 全面解析与对比:深度学习框架的终极指南
人工智能·pytorch·深度学习·aigc·tensorflow·keras·codemoss
程序员X小鹿1 天前
AI视频自动剪辑神器!点赞上万的影视剧片段,一键全自动剪辑,效率提升80%!(附保姆级教程)
aigc
学习前端的小z1 天前
【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成
人工智能·gpt·chatgpt·aigc
刘悦的技术博客2 天前
MagicQuill,AI动态图像元素修改,AI绘图,需要40G的本地硬盘空间,12G显存可玩,Win11本地部署
ai·aigc·python3.11
xindoo2 天前
如何用GPT-4o解读视频
aigc·gpt-3·音视频
起名字真南2 天前
【C++】深入理解 C++ 中的继承进阶:多继承、菱形继承及其解决方案
java·jvm·c++·chatgpt·aigc
Jartto2 天前
2025年AI革命:斯坦福李飞飞教授揭秘多模态智能体的未来
aigc