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 %}
音频
在聊天流程配置中,您可以选择一个语音转文本模块。支持的集成包括:
OpenAI
AssemblyAI
启用此功能后,用户可以直接对着麦克风说话。他们的语音将被转录成文本。


使用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文件上传
您可以将上传的文件即时更新到矢量存储中。要启用文件上传功能,请确保满足以下先决条件:
如果在聊天流程中有多个向量存储,则一次只能为一个向量存储启用文件上传功能。
您必须至少将一个文档加载器节点连接到向量存储的文档输入端。

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


其工作原理如下:
上传文件的元数据会使用chatId进行更新。
这会将文件与chatId相关联。
在查询时,会应用一个**或(OR)**过滤器:
元数据包含
flowise_chatId,其值为当前的聊天会话ID元数据中不包含
flowise_chatId
Pinecone上更新向量嵌入的一个示例:

要使用API完成此操作,请遵循以下两个步骤:
使用带有
formData和chatId的Vector 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中的
uploads和chatId的Prediction 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