Uploads

Flowise允许您从聊天中上传图片、音频和其他文件。在本节中,您将学习如何启用和使用这些功能。

图片

某些聊天模型允许输入图像。请务必查阅大型语言模型(LLM)的官方文档,以确认该模型是否支持图像输入。

{% 提示样式="警告" %} 在Chatflow中,图像处理仅适用于特定的流程链/智能体。

LLMChain对话链ReAct智能体会话智能体工具智能体 {% 结束提示 %}

如果您启用允许上传图片,则可以从聊天界面上传图片。

使用API上传图片:

选项卡

python 导入requests库 API_URL = "http://localhost:3000/api/v1/prediction/"

定义查询函数(query): response = requests.post(API_URL, json=payload) 返回响应的JSON格式数据

输出 = 查询({ “问题”:“你能描述一下这张图片吗?”, "uploads": [ { "data": "data:image/png;base64,iVBORw0KGgdM2uN0", # base64字符串或URL "type": "file", # 文件 | 网址 "name": "Flowise.png",, "mime": "image/png" } ] })

{% endtab %}

{% tab title="Javascript" %}
```javascript

/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
异步函数 query(data) {
    const response = await fetch(
        "http://localhost:3000/api/v1/prediction/<chatflowid>",
        {
            方法:"POST",
            headers: {
                "Content-Type": "application/json"
            },
            正文:JSON.stringify(数据)
        }
    );
    const result = await response.json();;
    返回结果;
}

查询({
    “问题”:“你能描述一下这张图片吗?”,
    "uploads": [
        {
            "data": "data:image/png;base64,iVBORw0KGgdM2uN0", //base64字符串或URL
            "type": "file", // 文件 | 网址
            "name": "Flowise.png",,
            "mime": "image/png"
        }
    ]
}).then((response) => {
    控制台输出(console.log)响应内容;
});

{% endtab %} {% endtabs %}

音频

在聊天流程配置中,您可以选择一个语音转文本模块。支持的集成包括:

启用此功能后,用户可以直接对着麦克风说话。他们的语音将被转录成文本。

使用API上传音频:

{% 标签 %} {% tab title="Python" %} python 导入requests库 API_URL = "http://localhost:3000/api/v1/prediction/"

定义查询函数(payload): response = requests.post(API_URL, json=payload) 返回响应的JSON格式数据

输出 = 查询({ "uploads": [ { "data": "data:audio/webm;codecs=opus;base64,GkXf", # base64字符串 "type": "音频",, "name": "audio.wav",, "mime": "audio/webm" } ] })


</div>

<div data-gb-custom-block data-tag="tab" data-title='Javascript'>

```javascript

/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
异步函数 query(data) {
    const response = await fetch(
        "http://localhost:3000/api/v1/prediction/<chatflowid>",
        {
            方法:"POST",
            headers: {
                "Content-Type": "application/json"
            },
            正文:JSON.stringify(数据)
        }
    );
    const result = await response.json();;
    返回结果;
}

查询({
    "uploads": [
        {
            "data": "data:audio/webm;codecs=opus;base64,GkXf", // base64字符串
            "type": "音频",,
            "name": "audio.wav",,
            "mime": "audio/webm"
        }
    ]
}).then((response) => {
    控制台输出(console.log)响应内容;
});

文件

您可以通过两种方式上传文件:

  • 检索增强生成(RAG)文件上传

  • 完整文件上传

当两个选项都启用时,完整文件上传将优先进行。

RAG文件上传

您可以将上传的文件即时更新到矢量存储中。要启用文件上传功能,请确保满足以下先决条件:

您可以在聊天中上传一个或多个文件:

其工作原理如下:

  1. 上传文件的元数据会使用chatId进行更新。

  2. 这会将文件与chatId相关联。

  3. 在查询时,会应用一个**或(OR)**过滤器:

  • 元数据包含flowise_chatId,其值为当前的聊天会话ID

  • 元数据中不包含flowise_chatId

Pinecone上更新向量嵌入的一个示例:

要使用API完成此操作,请遵循以下两个步骤:

  1. 使用带有formDatachatIdVector Upsert API

选项卡

python 导入requests库

API_URL = "http://localhost:3000/api/v1/vector/upsert/"

使用表单数据上传文件

表单数据 = { "files": ("state_of_the_union.txt", open("state_of_the_union.txt", "rb")) }

body_data = { "chatId": "某个会话ID" }

定义一个函数query,接收表单数据form_data作为参数: response = requests.post(API_URL, files=form_data, data=body_data) 打印(响应) 返回响应的JSON格式数据

输出 = 查询(表单数据) 输出结果打印

{% endtab %}

{% tab title="Javascript" %}
```javascript

/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
// 使用FormData来上传文件
让 formData 成为一个新的 FormData 对象;
formData.append("files", input.files[0]);;
formData.append("chatId", "某个会话ID");;

异步函数 query(formData) {
    const response = await fetch(
        "http://localhost:3000/api/v1/vector/upsert/<chatflowid>",
        {
            方法:"POST",
            正文:表单数据
        }
    );
    const result = await response.json();;
    返回结果;
}

对表单数据进行查询后,若响应成功,则执行以下操作:
    控制台输出响应内容;
});

{% endtab %} {% endtabs %}

  1. 使用带有步骤1中的uploadschatIdPrediction API

选项卡 {% tab title="Python" %} python 导入requests库 API_URL = "http://localhost:3000/api/v1/prediction/"

定义查询函数(payload): response = requests.post(API_URL, json=payload) 返回响应的JSON格式数据

输出 = 查询({ “问题”:“演讲的主题是什么?”, "chatId": "步骤1中的同一会话ID",, "uploads": [ { "data": "data:text/plain;base64,TWFkYWwcy4=", "type": "file:rag",, "name": "state_of_the_union.txt",, "mime": "text/plain" } ] })


</div>

<div data-gb-custom-block data-tag="tab" data-title='Javascript'>

```javascript

/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
异步函数 query(data) {
    const response = await fetch(
        “http://localhost:3000/api/v1/prediction/<chatflowid>”,
        {
            方法:"POST",
            headers: {
                "Content-Type": "application/json"
            },
            正文:JSON.stringify(数据)
        }
    );
    const result = await response.json();;
    返回结果;
}

查询({
    “问题”:“演讲的主题是什么?”,
    "chatId": "步骤1中的同一会话ID",,
    "uploads": [
        {
            "data": "data:text/plain;base64,TWFkYWwcy4=",
            "type": "file:rag",,
            "name": "state_of_the_union.txt",,
            "mime": "text/plain"
        }
    ]
}).then((response) => {
    控制台输出(console.log)响应内容;
});

完整文件上传

在使用RAG文件上传时,您无法处理电子表格或表格等结构化数据,并且由于缺乏完整的上下文,您无法进行完整的摘要。在某些情况下,您可能希望将所有文件内容直接包含在大型语言模型(LLM)的提示中,尤其是对于像Gemini和Claude这样具有更长上下文窗口的模型。这篇研究论文是众多将RAG与更长上下文窗口进行比较的论文之一。

要启用完整文件上传功能,请前往Chatflow配置,打开文件上传选项卡,并点击开关:

您可以在聊天界面中看到文件附件按钮,通过该按钮,您可以上传一个或多个文件。在后台,文件加载器会处理每个文件并将其转换为文本。

请注意,如果您的聊天流程使用了“聊天提示模板”节点,则必须从“格式化提示值”中创建一个输入来传递文件数据。指定的输入名称(例如{file})应包含在“人工消息”字段中。

使用API上传文件:

选项卡

python 导入requests库 API_URL = "http://localhost:3000/api/v1/prediction/"

定义查询函数(query function):

def query(payload):
response = requests.post(API_URL, json=payload)
返回响应的JSON格式数据

输出 = 查询({ “问题”:“这些数据是关于什么的?”, "chatId": "某个会话ID",, "uploads": [ { "data": "data:text/plain;base64,TWFkYWwcy4=", "type": "file:full",, "name": "state_of_the_union.txt",, "mime": "text/plain" } ] })

{% endtab %}

{% tab title="Javascript" %}

javascript

/// 译文内容:

根据上面的信息,执行如下指令: 缺失译文,请检查输入 异步函数 query(data) { const response = await fetch( “http://localhost:3000/api/v1/prediction/”, { 方法:"POST", headers: { "Content-Type": "application/json" }, 正文:JSON.stringify(数据) } ); const result = await response.json();; 返回结果; }

查询({ “问题”:“这些数据是关于什么的?”, "chatId": "某个会话ID",, "uploads": [ { "data": "data:text/plain;base64,TWFkYWwcy4=", "type": "文件:完整",, "name": "国情咨文.txt",, "mime": "text/plain" } ] }).then((response) => { 控制台输出(console.log)响应内容; });


</div>

</div>

如示例所示,上传操作需要使用base64字符串。若要获取文件的base64字符串,请使用[创建附件API](../api-reference/attachments.md)。

### 完整上传与RAG上传的区别

完整文件上传和RAG(检索增强生成)文件上传各有其不同的用途。

* **完整文件上传**:此方法将整个文件解析为字符串,并将其发送至大型语言模型(LLM)。此方法对于文档摘要或关键信息提取非常有益。然而,对于非常大的文件,由于标记(token)限制,模型可能会产生不准确的结果或“幻觉”。
* **RAG文件上传**:如果您希望通过不将全部文本发送给大型语言模型(LLM)来降低令牌成本,那么推荐使用此方法。此方法适用于文档的问答任务,但由于缺乏完整的文档上下文,因此不适合用于摘要任务。由于更新(upsert)过程,此方法可能需要更长的时间。

Last updated