【实战】Dify从0到100进阶--文档解读(8)文档列表节点
文档提取器节点(Document Extractor)
定义
文档提取器节点负责将上传的文档文件解析成可读的文本,供下游 LLM 节点或其他节点使用。它填补了 LLM 无法直接读取文件内容的空白。
输入变量
- File:单一文件
- Array[File]:文件数组
支持格式:TXT、Markdown、PDF、HTML、DOCX 等文本文档;不支持:图片、音频、视频等二进制多媒体格式。
输出变量
- text:
- 当输入为
File
时,输出类型为string
,包含整个文档的文本内容。 - 当输入为
Array[File]
时,输出类型为array[string]
,每个元素对应一个文件的提取文本。
- 当输入为
核心流程
- 上传文件 → “开始”节点产生 File/Array[File] 变量
- 文档提取器 读取文件、抽取文本 → 输出
text
- 后续节点(如 LLM、列表操作)使用
text
变量进行处理或问答
应用场景
- ChatPDF/ChatWord:用户上传 PDF 或 Word,系统自动提取后进行对话问答。
- 批量文档审核:上传多份合同或报告,提取文本后统一进行关键字检查或风险评估。
配置示例
-
开始节点:允许上传单文件或多文件,输出变量命名为
docs
。 -
文档提取器节点:
- 输入:选择
docs
- 输出:自动生成
text
(若多文件,则为texts
数组)
- 输入:选择
-
LLM 节点:在提示中引用
${text}
或遍历${texts}
,实现对文档内容的理解与回答。
列表操作节点(List Operator)
定义
列表操作节点用于对数组类型的变量进行可视化、过滤、映射、拼接等常见操作,简化对 Array[T]
数据的批量处理。
支持功能
-
Filter(过滤)
- 通过条件表达式筛选数组元素
-
Map(映射)
- 对每个元素应用同一个表达式或模板,生成新数组
-
Reduce(汇总)
- 对数组元素进行累积计算(如求和、拼接字符串等)
-
Split / Flatten(拆分/展平)
- 将嵌套数组展平成单层,或按分隔符拆分字符串数组
-
Join(拼接)
- 将数组元素按指定分隔符合并成一个字符串
输入与输出
- 输入变量:任意类型的数组,如
Array[string]
、Array[object]
- 输出变量:新生成的数组或单一变量,名称可自定义(如
filtered
,mapped
,joinedText
等)
核心流程示例
操作类型 | 配置示例 | 作用 |
---|---|---|
过滤 | 条件:item.score > 0.8 | 从知识检索结果中,只保留相似度大于 0.8 的条目 |
映射 | 模板:{{ item.title }}:{{ item.content }} | 将对象数组变成一个文本数组,格式化每条内容 |
汇总 | 初始值:"" ,累加逻辑:acc + item + "\n" | 将文本数组拼接成一个长字符串 |
展平 | 输入:nestedList | 将多维数组 [[a,b],[c,d]] 转为 [a,b,c,d] |
拼接 | 分隔符:"," | 将字符串数组 ["a","b","c"] 合并为 "a,b,c" |
配置示例:知识检索后的流转
-
文档提取器 得到
texts = [doc1, doc2, …]
-
列表操作 – 映射
-
输入:
texts
-
模板:
## 文档{{ loop.index }} {{ item|truncate(200) }}
-
输出:
summaries
(Array[string])
-
-
列表操作 – 拼接
- 输入:
summaries
- 分隔符:
\n\n---\n\n
- 输出:
fullReport
(string)
- 输入:
-
LLM 在提示中使用
${fullReport}
,完成后续对话或生成最终报告