使用 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 小时前
Turnitin系统查英文AI率多少为正常?报告显示星号*%怎么办?
人工智能·经验分享·aigc·毕业论文·英文专业·turnitin系统·英文查重
树獭叔叔2 小时前
一种上下文工程的范式-Letta(MemGPT)项目拆解
aigc·openai·cursor
般若Neo2 小时前
【AI通识】生成式人工智能通识
人工智能·aigc·生成式ai
Cathyqiii3 小时前
Diff-MTS: Temporal-Augmented ConditionalDiffusion-Based AIGC
深度学习·aigc
herosunly3 小时前
大模型文档神器:合合信息大模型加速器
大模型·aigc·合合信息·文档神器·合合信息大模型加速器
chataipaper0024 小时前
10款免费降ai率工具合集,轻松搞定论文降AIGC!【2025学姐亲测】
人工智能·深度学习·aigc·降ai·论文ai率
程序边界4 小时前
AIGC与医学统计学的完美融合:打造智能医疗新时代
aigc
stjiejieto4 小时前
AI 生成内容(AIGC)版权归属引争议:创作者、平台、AI 公司,谁该拥有 “作品权”?
人工智能·aigc
网安入门学习4 小时前
2025年AIGC人才需求报告:从招聘数据看行业趋势与技能要求
人工智能·windows·ai作画·stable diffusion·aigc
undsky5 小时前
【n8n教程】:n8n扩展和性能优化指南
aigc·ai编程·工作流引擎