相较于聊天文本,文档文件能够承载大量的信息,例如学术报告、法律合同。受限于 LLM 自身仅能够支持文件或图片,难以获取文件内更加丰富的上下文信息,应用的使用者不得不手动复制粘贴大量信息与 LLM 对话,增加了许多不必要的使用成本。
文件上传功能允许将文件以 File variables 的形式在工作流应用中上传、解析、引用、和下载。开发者现可轻松构建能理解和处理图片、音频、视频的复杂工作。
文件上传和知识库都是为 LLM 提供额外上下文信息的方式,但它们在使用场景和功能上有明显区别:
Dify 支持在 ChatFlow 和 WorkFlow 类型应用中上传文件,并通过变量交由 LLM 处理。应用开发者可以参考以下方法为应用开启文件上传功能:
这两种方法为应用提供了灵活的文件上传选项,以满足不同场景的需求。
file variables 和 array[file] variables 支持以下文件类型与格式:
文件类型 | 支持格式 |
---|---|
文档 | TXT, MARKDOWN, PDF, HTML, XLSX, XLS, DOCX, CSV, EML, MSG, PPTX, PPT, XML, EPUB. |
图片 | JPG, JPEG, PNG, GIF, WEBP, SVG. |
音频 | MP3, M4A, WAV, WEBM, AMR. |
视频 | MP4, MOV, MPEG, MPGA. |
其他 | 自定义后缀名支持 |
部分 LLMs(例如 Claude 3.5 Sonnet)已支持直接处理并分析文件内容,因此 LLM 节点的提示词已允许输入文件变量。
为了避免潜在异常,应用开发者在使用该文件变量前需前往 LLM 官网确认 LLM 支持何种文件类型。
具备识别文件的 LLM
点击 Chatflow 应用右上角的 “功能” 按钮即可为应用添加更多功能。
开启此功能后,应用使用者可以在应用对话的过程中随时上传并更新文件。最多支持同时上传 10 个文件,每个文件的大小上限为 15MB。
文件上传功能
开启该功能并不意味着赋予 LLM 直接读取文件的能力,还需要配备文档提取器将文档解析为文本供 LLM 理解。
gpt-4o-audio-preview
等支持多模态输入的模型直接处理音频,无需额外的提取器。sys.files
变量。文件上传工作流
开启后,用户可以在对话框中上传文件并进行对话。但通过此方式, LLM 应用并不具备记忆文件内容的能力,每次对话时需要上传文件。
对话框中的文件上传
若希望 LLM 能够在对话中记忆文件内容,请参考下文。
在应用的”开始”节点内添加输入字段,选择 “单文件” 或 “文件列表” 字段类型的变量。
单文件
仅允许应用使用者上传单个文件。
文件列表
允许应用使用者单词批量上传多个文件。
为了便于操作,将使用单文件变量作为示例。
文件变量的使用方式主要分为两种:
选择哪种方式取决于文件类型和您的具体需求。接下来,我们将详细介绍这两种方法的具体操作步骤。
上传文件后将存储至单文件变量内,LLM 暂不支持直接读取变量中的文件。因此需要先添加 “文档提取器”节点,从已上传的文档文件内提取内容并发送至 LLM 节点完成信息处理。
将”开始”节点内的文件变量作为 “文档提取器” 节点的输入变量。
添加输入变量
将”文档提取器”节点的输出变量填写至 LLM 节点的系统提示词内。
粘贴系统提示词
完成上述设置后,应用的使用者可以在 WebApp 内粘贴文件 URL 或上传本地文件,然后就文档内容与 LLM 展开互动。应用使用者可以在对话过程中随时替换文件,LLM 将获取最新的文件内容。
粘贴 URL 进行对话
在 LLM 节点中引用文件变量
对于某些特定类型的文件(如图片),可以在 LLM 节点中直接使用文件变量。这种方法特别适用于需要视觉分析的场景。以下是具体步骤:
sys.files
变量。下面是一个示例配置:
需要注意的是,直接在 LLM 节点中使用文件变量时,我们需要确保文件变量仅包含图片文件,否则可能会导致错误。如果用户可能上传不同类型的文件,我们需要使用列表操作来进行过滤。
将文件变量放置到 answer 节点或者 end 节点中,当应用运行到该节点都时候将会在会话框中提供文件下载卡片。点击卡片即可下载文件。
若希望应用能够支持上传多种文件,例如允许用户同时上传文档文件、图片和音视频文件,此时需要在 “开始节点” 中添加 “文件列表” 变量,并通过”列表操作”节点针对不同的文件类型进行处理。详细说明请参考列表操作节点。
多种文件类型处理
如需查看更多使用案例,请参考:动手实验室 - 使用文件上传搭建文章理解助手