Dify
简体中文
简体中文
  • 入门
    • 欢迎使用 Dify
      • 特性与技术规格
      • 模型供应商列表
    • 云服务
    • 社区版
      • Docker Compose 部署
      • 本地源码启动
      • 宝塔面板部署
      • 单独启动前端 Docker 容器
      • 环境变量说明
      • 常见问题
    • Dify Premium
    • Dify 教育版
  • 手册
    • 接入大模型
      • 增加新供应商
      • 预定义模型接入
      • 自定义模型接入
      • 接口方法
      • 配置规则
      • 负载均衡
    • 构建应用
      • 创建应用
      • 聊天助手
        • 多模型调试
      • Agent
      • 应用工具箱
        • 敏感内容审查
    • 工作流
      • 关键概念
      • 变量
      • 节点说明
        • 开始
        • LLM
        • 知识检索
        • 问题分类
        • 条件分支
        • 代码执行
        • 模板转换
        • 文档提取器
        • 列表操作
        • 变量聚合
        • 变量赋值
        • 迭代
        • 参数提取
        • HTTP 请求
        • Agent
        • 工具
        • 结束
        • 直接回复
        • 循环
      • 快捷键
      • 编排节点
      • 文件上传
      • 异常处理
        • 预定义异常处理逻辑
        • 错误类型
      • 附加功能
      • 预览与调试
        • 预览与运行
        • 单步调试
        • 对话/运行日志
        • 检查清单
        • 运行历史
      • 应用发布
      • 结构化输出
      • 变更公告:图片上传被替换为文件上传
    • 知识库
      • 创建知识库
        • 1. 导入文本数据
          • 1.1 从 Notion 导入数据
          • 1.2 从网页导入数据
        • 2. 指定分段模式
        • 3. 设定索引方法与检索设置
      • 管理知识库
        • 维护知识库内文档
        • 通过 API 维护知识库
      • 元数据
      • 在应用内集成知识库
      • 召回测试/引用归属
      • 知识库请求频率限制
      • 连接外部知识库
      • 外部知识库 API
    • 工具
      • 快速接入工具
      • 高级接入工具
      • 工具配置
        • Google
        • Bing
        • SearchApi
        • StableDiffusion
        • Dall-e
        • Perplexity Search
        • AlphaVantage 股票分析
        • Youtube
        • SearXNG
        • Serper
        • SiliconFlow (支持 Flux 绘图)
        • ComfyUI
    • 发布
      • 发布为公开 Web 站点
        • Web 应用的设置
        • 文本生成型应用
        • 对话型应用
      • 嵌入网站
      • 基于 APIs 开发
      • 基于前端组件再开发
    • 标注
      • 日志与标注
      • 标注回复
    • 监测
      • 集成外部 Ops 工具
        • 集成 LangSmith
        • 集成 Langfuse
        • 集成 Opik
      • 数据分析
    • 扩展
      • API 扩展
        • 使用 Cloudflare Workers 部署 API Tools
        • 敏感内容审查
      • 代码扩展
        • 外部数据工具
        • 敏感内容审查
    • 协同
      • 发现
      • 邀请与管理成员
    • 管理
      • 应用管理
      • 团队成员管理
      • 个人账号管理
      • 订阅管理
      • 版本管理
  • 动手实验室
    • 初级
      • 如何搭建 AI 图片生成应用
      • AI Agent 实战:搭建个人在线旅游助手
    • 中级
      • 使用文件上传搭建文章理解助手
      • 使用知识库搭建智能客服机器人
      • ChatFlow 实战:搭建 Twitter 账号分析助手
  • 社区
    • 寻求支持
    • 成为贡献者
    • 为 Dify 文档做出贡献
  • 插件
    • 功能简介
    • 快速开始
      • 安装与使用插件
      • 插件开发
        • 初始化开发工具
        • Tool 插件
        • Model 插件
          • 创建模型供应商
          • 接入预定义模型
          • 接入自定义模型
        • Agent 策略插件
        • Extension 插件
        • Bundle 插件包
      • 插件调试
    • 插件管理
    • 接口定义
      • Manifest
      • Endpoint
      • Tool
      • Agent
      • Model
        • 模型设计规则
        • 模型接口
      • 通用规范定义
      • 持久化存储
      • 反向调用 Dify 服务
        • App
        • Model
        • Tool
        • Node
    • 最佳实践
      • 开发 Slack Bot 插件
      • Dify MCP 插件指南:一键连接 Zapier 并自动发送邮件
    • 发布插件
      • 自动发布插件
      • 发布至 Dify Marketplace
        • 插件开发者准则
        • 插件隐私政策准则
      • 发布至个人 GitHub 仓库
      • 本地发布与分享
      • 第三方签名验证
    • 常见问题
  • 研发
    • 后端
      • DifySandbox
        • 贡献指南
    • 模型接入
      • 接入 Hugging Face 上的开源模型
      • 接入 Replicate 上的开源模型
      • 接入 Xinference 部署的本地模型
      • 接入 OpenLLM 部署的本地模型
      • 接入 LocalAI 部署的本地模型
      • 接入 Ollama 部署的本地模型
      • 接入 LiteLLM 代理的模型
      • 接入 GPUStack 进行本地模型部署
      • 接入 AWS Bedrock 上的模型(DeepSeek)
    • 迁移
      • 将社区版迁移至 v1.0.0
  • 阅读更多
    • 应用案例
      • DeepSeek 与 Dify 集成指南:打造具备多轮思考的 AI 应用
      • 本地私有化部署 DeepSeek + Dify,构建你的专属私人 AI 助手
      • 如何训练出专属于“你”的问答机器人?
      • 教你十几分钟不用代码创建 Midjourney 提示词机器人
      • 构建一个 Notion AI 助手
      • 如何在几分钟内创建一个带有业务数据的官网 AI 智能客服
      • 使用全套开源工具构建 LLM 应用实战:在 Dify 调用 Baichuan 开源模型能力
      • 手把手教你把 Dify 接入微信生态
      • 使用 Dify 和 Twilio 构建 WhatsApp 机器人
      • 将 Dify 应用与钉钉机器人集成
      • 使用 Dify 和 Azure Bot Framework 构建 Microsoft Teams 机器人
      • 如何让 LLM 应用提供循序渐进的聊天体验?
      • 如何将 Dify Chatbot 集成至 Wix 网站?
      • 如何连接 AWS Bedrock 知识库?
      • 构建 Dify 应用定时任务助手
      • 如何在 Dify 内体验大模型“竞技场”?以 DeepSeek R1 VS o1 为例
      • 在 Dify 云端构建 AI Thesis Slack Bot
      • 将 Dify 快速接入 QQ、微信、飞书、钉钉、Telegram、Discord 等平台
    • 扩展阅读
      • 什么是 LLMOps?
      • 什么是数组变量?
      • 检索增强生成(RAG)
        • 混合检索
        • 重排序
        • 召回模式
      • 提示词编排
      • 如何使用 JSON Schema 让 LLM 输出遵循结构化格式的内容?
    • 常见问题
      • 本地部署
      • LLM 配置与使用
      • 插件
  • 政策
    • 开源许可证
    • 用户协议
      • 服务条款
      • 隐私政策
      • 获取合规报告
Powered by GitBook
On this page
  • 应用场景
  • 文件上传与知识库的区别
  • 快速开始:搭建具备文件上传功能的工作流应用
  • 进阶使用
  1. 手册
  2. 工作流

文件上传

作者:Steven, Allen, Evan

相较于聊天文本,文档文件能够承载大量的信息,例如学术报告、法律合同。受限于 LLM 自身仅能够支持文件或图片,难以获取文件内更加丰富的上下文信息,应用的使用者不得不手动复制粘贴大量信息与 LLM 对话,增加了许多不必要的使用成本。

文件上传功能允许将文件以 File variables 的形式在工作流应用中上传、解析、引用、和下载。开发者现可轻松构建能理解和处理图片、音频、视频的复杂工作。

应用场景

  1. 文档分析: 上传学术研究报告文件,LLM 可以快速总结要点,根据文件内容回答相关问题。

  2. 代码审查: 开发者上传代码文件,获得优化建议与 bug 检测。

  3. 学习辅导: 学生上传作业或学习资料,获得个性化的解释和指导。

  4. 法律援助: 上传完整的合同文本,由 LLM 协助审查条款,指出潜在风险。

文件上传与知识库的区别

文件上传和知识库都是为 LLM 提供额外上下文信息的方式,但它们在使用场景和功能上有明显区别:

  1. 信息来源:

    • 文件上传:允许终端用户在对话过程中动态上传文件,提供即时的、个性化的上下文信息。

    • 知识库:由应用开发者预先设置和管理,包含相对固定的信息集合。

  2. 使用灵活性:

    • 文件上传:更加灵活,用户可以根据具体需求上传不同类型的文件。

    • 知识库:内容相对固定,但可以被多个会话重复利用。

  3. 信息处理:

    • 文件上传:需要通过文档提取器或其他工具将文件内容转换为 LLM 可理解的文本。

    • 知识库:通常已经过预处理和索引,可以直接进行检索。

  4. 应用场景:

    • 文件上传:适用于需要处理用户特定文档的场景,如文档分析、个性化学习辅导等。

    • 知识库:适用于需要访问大量预设信息的场景,如客户服务、产品咨询等。

  5. 数据持久性:

    • 文件上传:通常为临时使用,不会长期存储在系统中。

    • 知识库:作为应用的一部分长期存在,可以持续更新和维护。

快速开始:搭建具备文件上传功能的工作流应用

  • 在 Workflow 应用中:

  • 在 ChatFlow 应用中:

    • 注意:这两种方法可以同时配置,它们是彼此独立的。附加功能中的文件上传设置(包括上传方式和数量限制)不会影响开始节点中的文件变量。例如只想通过开始节点创建文件变量,则无需开启附加功能中的文件上传功能。

这两种方法为应用提供了灵活的文件上传选项,以满足不同场景的需求。

File Types

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.

其他

自定义后缀名支持

方法一:使用具备识别文件的 LLM

为了避免潜在异常,应用开发者在使用该文件变量前需前往 LLM 官网确认 LLM 支持何种文件类型。

  1. 点击创建 Chatflow / Workflow 应用。

  2. 添加 LLM 节点,选择具备文件分析能力的 LLM。

  3. 在开始节点添加文件变量

  4. 在 LLM 的系统提示词内输入文件变量。

  5. 完成创建。

方法二:在应用聊天框中开启文件上传(仅适用于 Chatflow)

  1. 点击 Chatflow 应用右上角的 “功能” 按钮即可为应用添加更多功能。

    开启此功能后,应用使用者可以在应用对话的过程中随时上传并更新文件。最多支持同时上传 10 个文件,每个文件的大小上限为 15MB。

  • 对于音频文件,可以使用 gpt-4o-audio-preview 等支持多模态输入的模型直接处理音频,无需额外的提取器。

  1. 添加 LLM 节点,在系统提示词中选中文档提取器节点的输出变量。

  2. 在末尾添加 “直接回复” 节点,填写 LLM 节点的输出变量。

开启后,用户可以在对话框中上传文件并进行对话。但通过此方式, LLM 应用并不具备记忆文件内容的能力,每次对话时需要上传文件。

若希望 LLM 能够在对话中记忆文件内容,请参考下文。

方法三:通过添加文件变量开启文件上传功能

1. 在“开始”节点添加文件变量

  • 单文件

    仅允许应用使用者上传单个文件。

  • 文件列表

    允许应用使用者单次批量上传多个文件。

为了便于操作,将使用单文件变量作为示例。

文件解析

文件变量的使用方式主要分为两种:

  1. 使用工具节点转换文件内容:

    • 对于文档类型的文件,可以使用"文档提取器"节点将文件内容转换为文本形式。

    • 这种方法适用于需要将文件内容解析为模型可理解的格式(如 string、array[string] 等)的情况。

  2. 直接在 LLM 节点中使用文件变量:

    • 对于某些特定类型的文件(如图片),可以在 LLM 节点中直接使用文件变量。

    • 例如,对于图片类型的 file variables,可以在 LLM 节点中启用 vision 功能,然后在变量选择器中直接引用对应的文件变量。

选择哪种方式取决于文件类型和你的具体需求。接下来,我们将详细介绍这两种方法的具体操作步骤。

2. 添加文档提取器节点

将“开始”节点内的文件变量作为 “文档提取器” 节点的输入变量。

将“文档提取器”节点的输出变量填写至 LLM 节点的系统提示词内。

完成上述设置后,应用的使用者可以在 WebApp 内粘贴文件 URL 或上传本地文件,然后就文档内容与 LLM 展开互动。应用使用者可以在对话过程中随时替换文件,LLM 将获取最新的文件内容。

在 LLM 节点中引用文件变量

对于某些特定类型的文件(如图片),可以在 LLM 节点中直接使用文件变量。这种方法特别适用于需要视觉分析的场景。以下是具体步骤:

  1. 在 LLM 节点中,启用 vision 功能。这允许模型处理图像输入(模型需要支持 vision)。

  2. 在 LLM 节点的变量选择器中,直接引用之前创建的文件变量如果是通过附加功能开启的文件上传,则选择 sys.files 变量。

  3. 在系统提示词中,指导模型如何处理图像输入。例如,你可以要求模型描述图像内容或回答关于图像的问题。

下面是一个示例配置:

需要注意的是,直接在 LLM 节点中使用文件变量时,我们需要确保文件变量仅包含图片文件,否则可能会导致错误。如果用户可能上传不同类型的文件,我们需要使用列表操作节点过滤不同类型的文件。

文件下载

将文件变量放置到 answer 节点或者 end 节点中,当应用运行到该节点都时候将会在会话框中提供文件下载卡片。点击卡片即可下载文件。

进阶使用

Previous编排节点Next异常处理

Last updated 5 months ago

Dify 支持在 和 类型应用中上传文件,并通过交由 LLM 处理。应用开发者可以参考以下方法为应用开启文件上传功能:

在 添加文件变量

在 中开启文件上传,允许在聊天窗中直接上传文件

在 添加文件变量

部分 LLMs(例如 )已支持直接处理并分析文件内容,因此 LLM 节点的提示词已允许输入文件变量。

开启该功能并不意味着赋予 LLM 直接读取文件的能力,还需要配备将文档解析为文本供 LLM 理解。

对于视频和其他文件类型,暂无对应的提取器,需要应用开发者接入进行处理

添加节点,在输入变量中选中 sys.files 变量。

在应用的节点内添加输入字段,选择 “单文件” 或 “文件列表” 字段类型的变量。

上传文件后将存储至单文件变量内,LLM 暂不支持直接读取变量中的文件。因此需要先添加 节点,从已上传的文档文件内提取内容并发送至 LLM 节点完成信息处理。

若希望应用能够支持上传多种文件,例如允许用户同时上传文档文件、图片和音视频文件,此时需要在 “开始节点” 中添加 “文件列表” 变量,并通过“列表操作”节点针对不同的文件类型进行处理。详细说明请参考节点。

如需查看更多使用案例,请参考:

ChatFlow
WorkFlow
变量
"开始节点"
"附加功能"
"开始节点"
Claude 3.5 Sonnet
文档提取器
外部工具
文档提取器
“开始”
“文档提取器”
列表操作
动手实验室 - 使用文件上传搭建文章理解助手
文件上传功能
粘贴系统提示词
粘贴 URL 进行对话
添加输入变量
在LLM节点中直接使用文件变量
文件下载