使用 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 小时前
豆包 1.5 · 深度思考模型上线边缘大模型网关,百万 Tokens 免费领
llm·aigc·边缘计算
量子位2 小时前
飞猪 AI 意外出圈!邀请码被黄牛倒卖,分分钟搞定机酒预订,堪比专业定制团队
人工智能·llm·aigc
量子位2 小时前
趣丸科技贾朔:AI 音乐迎来应用元年,五年内将重构产业格局|中国 AIGC 产业峰会
人工智能·aigc
量子位2 小时前
粉笔 CTO:大模型打破教育「不可能三角」,因材施教真正成为可能|中国 AIGC 产业峰会
人工智能·aigc
墨风如雪8 小时前
AI圈炸锅!OpenAI发布o3和o4-mini:不止聪明,更能“看图思考”和自主干活了?
aigc
win4r8 小时前
🚀OpenAI首发轻量级AI编程智能体-OpenAI Codex CLI,编程能力能否超越cursor?Codex编程智能体实战,打破编程瓶颈,自动化开发
aigc·openai·cursor
Sherlock Ma9 小时前
基于LightRAG进行本地RAG部署(包括单卡多卡本地模型部署、调用阿里云或DeepSeekAPI的部署方法、RAG使用方法)
人工智能·阿里云·大模型·aigc·检索增强·rag·deepseek
Goboy10 小时前
基于BERT的中文自动摘要实践指南
llm·aigc·ai编程
哪吒编程19 小时前
o3、o4-mini重磅发布,多模态+深度思考,再次登顶最强模型
aigc·openai
berryyan1 天前
ComfyUI 问题解决指南:FFmpeg6报错 和 Git 错误全面解决方案
aigc