跳到主要内容

创建向量RAG聊天机器人

本教程演示如何使用Langflow创建一个聊天机器人应用程序,该应用程序使用检索增强生成(RAG)将您的数据作为向量嵌入到向量数据库中,然后与数据进行对话。

前置条件

创建向量RAG流程

  1. 在Langflow中,点击新建流程,然后选择向量存储RAG模板。

    关于向量存储RAG模板

    此模板包含两个流程。

    加载数据流程使用文件中的数据填充向量存储。 这些数据用于响应提交给检索器流程的查询。

    具体来说,加载数据流程从本地文件摄取数据,将数据分割成块,在向量数据库中加载和索引数据,然后为这些块计算嵌入。嵌入也与加载的数据一起存储。此流程仅在需要将数据加载到向量数据库时运行。

    检索器流程接收聊天输入,为输入生成嵌入,然后使用多个组件将块重构为文本,并通过将新嵌入与存储的嵌入进行比较以查找相似数据来生成响应。

  2. 将您的OpenAI API密钥添加到两个OpenAI嵌入组件中。

  3. 可选:将两个Astra DB向量存储组件替换为Chroma DB或其他您选择的向量存储组件。 本教程使用Chroma DB。

    加载数据流程应包含文件分割文本嵌入模型、向量存储(如Chroma DB)和聊天输出组件:

    文件加载器聊天流程

    检索器流程应包含聊天输入嵌入模型、向量存储、解析器提示语言模型聊天输出组件:

    与RAG聊天流程

    这些流程已准备就绪。 继续本教程,学习如何使用加载流程将数据加载到您的向量存储中,然后在聊天机器人应用程序中调用聊天流程。

加载数据并生成嵌入

要加载数据并生成嵌入,您可以使用可视化编辑器或 /v2/files 端点。

可视化编辑器选项更简单,但仅建议创建流程的用户与加载数据到数据库的用户为同一人的场景。

在许多用户加载数据或需要以编程方式加载数据的情况下,请使用 Langflow API 选项。

  1. 在您的 RAG 聊天机器人流程中,点击 File 组件,然后点击 File
  2. 选择要上传的本地文件,然后点击 Open。 文件已加载到您的 Langflow 服务器。
  3. 要将数据加载到您的向量存储中,点击 Vector Store 组件,然后点击 Run component 来运行选定的组件及其所有先前的依赖组件。

当流程运行时,流程会摄取选定的文件,将数据分块,将数据加载到向量存储数据库中,然后为这些块生成嵌入,这些嵌入也存储在向量存储中。

您的数据库现在包含带有向量嵌入的数据,LLM 可以将其用作上下文来响应对查询,如本教程下一节所示。

从JavaScript应用程序与您的流程聊天

要与向量数据库中的数据进行聊天,请创建一个以编程方式运行Retriever Flow的聊天机器人应用程序。

本教程使用JavaScript进行演示。

  1. 要构建聊天机器人,请收集以下信息:

    • LANGFLOW_SERVER_ADDRESS: 您的Langflow服务器的域名。默认值为127.0.0.1:7860。您可以从流程的API访问窗格中的代码片段获取此值。
    • FLOW_ID: 您流程的UUID或自定义端点名称。您可以从流程的API访问窗格中的代码片段获取此值。
    • LANGFLOW_API_KEY: 有效的Langflow API密钥
  2. 将以下脚本Replicate到JavaScript文件中,然后用您在上一步中收集的信息替换占位符:


    _49
    const readline = require('readline');
    _49
    const { LangflowClient } = require('@datastax/langflow-client');
    _49
    _49
    const API_KEY = 'LANGFLOW_API_KEY';
    _49
    const SERVER = 'LANGFLOW_SERVER_ADDRESS';
    _49
    const FLOW_ID = 'FLOW_ID';
    _49
    _49
    const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
    _49
    _49
    // Initialize the Langflow client
    _49
    const client = new LangflowClient({
    _49
    baseUrl: SERVER,
    _49
    apiKey: API_KEY
    _49
    });
    _49
    _49
    async function sendMessage(message) {
    _49
    try {
    _49
    const response = await client.flow(FLOW_ID).run(message, {
    _49
    session_id: 'user_1'
    _49
    });
    _49
    _49
    // Use the convenience method to get the chat output text
    _49
    return response.chatOutputText() || 'No response';
    _49
    } catch (error) {
    _49
    return `Error: ${error.message}`;
    _49
    }
    _49
    }
    _49
    _49
    function chat() {
    _49
    console.log('🤖 Langflow RAG Chatbot (type "quit" to exit)\n');
    _49
    _49
    const ask = () => {
    _49
    rl.question('👤 You: ', async (input) => {
    _49
    if (['quit', 'exit', 'bye'].includes(input.trim().toLowerCase())) {
    _49
    console.log('👋 Goodbye!');
    _49
    rl.close();
    _49
    return;
    _49
    }
    _49
    _49
    const response = await sendMessage(input.trim());
    _49
    console.log(`🤖 Assistant: ${response}\n`);
    _49
    ask();
    _49
    });
    _49
    };
    _49
    _49
    ask();
    _49
    }
    _49
    _49
    chat();

    该脚本创建了一个Node应用程序,与向量数据库中的内容进行聊天,使用chat输入和输出类型与您的流程通信。 聊天会在多条消息中保持持续的对话上下文。如果您使用text类型的输入和输出,则每个请求都是独立的文本字符串。

    提示

    Langflow TypeScript客户端有一个chatOutputText()便捷方法,简化了处理Langflow复杂JSON响应结构的工作。 客户端会自动提取消息文本,并优雅地处理可能未定义的值,而不是使用data.outputs[0].outputs[0].results.message.data.text手动导航多个嵌套对象级别。

  3. 保存并运行脚本以发送请求并测试流程。

    Result

    以下是本教程流程的示例响应。由于LLM的性质和输入的变化,您的响应可能会有所不同。


    _12
    👤 You: Do you have any documents about engines?
    _12
    👤 您:您有任何关于发动机的文件吗?
    _12
    🤖 Assistant: Yes, the provided text contains several warnings and guidelines related to engine installation, maintenance, and selection. It emphasizes the importance of using the correct engine for specific applications, ensuring all components are in good condition, and following safety precautions to prevent fire or explosion. If you need more specific information or details, please let me know!
    _12
    🤖 助手:是的,提供的文本包含几个与发动机安装、维护和选择相关的警告和指导。它强调了对特定应用使用正确发动机的重要性,确保所有组件处于良好状态,并遵循安全预防措施以防止火灾或爆炸。如果您需要更具体的信息或细节,请告诉我!
    _12
    _12
    👤 You: It should be about a Briggs and Stratton engine.
    _12
    👤 您:应该是关于Briggs and Stratton发动机的。
    _12
    🤖 Assistant: The text provides important safety and installation guidelines for Briggs & Stratton engines. It emphasizes that these engines should not be used on 3-wheel All-Terrain Vehicles (ATVs), motor bikes, aircraft products, or vehicles intended for competitive events, as such uses are not approved by Briggs & Stratton.
    _12
    🤖 助手:文本提供了Briggs & Stratton发动机的重要安全和安装指南。它强调这些发动机不应用于三轮全地形车(ATV)、摩托车、航空产品或用于竞赛活动的车辆,因为此类用途未得到Briggs & Stratton的批准。
    _12
    _12
    If you have any specific questions about Briggs & Stratton engines or need further information, feel free to ask!
    _12
    如果您对Briggs & Stratton发动机有任何具体问题或需要更多信息,请随时询问!

下一步

有关构建或扩展本教程的更多信息,请参阅以下内容:

Search