dify可通过配置文件列表输入、迭代提取、两两配对及文本对比节点实现多文档自动结构化差异分析。需依次完成:设置documents文件列表变量并开启上传开关;用迭代节点并行提取文本;通过python代码或列表操作生成对比对;调用token_based中文分词对比算法输出json差异;最后聚合结果生成markdown综合报告。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Dify自动比对多份文档(比如3份合同、5份技术方案或10份审批表),并输出结构化差异结论,而不是手动打开每两份文件逐个对比。
准备多文档输入入口
在Dify工作流编辑页点击“开始节点”,打开变量配置面板→点击“+添加字段”→选择“文件列表”类型→字段名设为documents→勾选支持格式:.pdf、.docx、.txt、.md→设置最大上传数量为10。
这一步必须做,否则后续节点无法批量接收文件;若漏选.docx,Word文档将被拒绝上传,流程直接中断。
开启“文件上传开关”,否则前端界面不显示上传区域。
批量提取文档文本内容
从左侧节点库拖入“迭代”节点,连接至开始节点→在迭代节点配置中,输入变量选择documents→启用“并行执行”(勾选)。
在迭代框内依次添加两个节点:先拖入“文档提取器”,输入绑定为迭代项→再拖入“大模型”节点,输入绑定为文档提取器的输出文本。
大模型节点需关闭“流式响应”,否则文本截断会导致后续对比失真;提示词末尾加一句:“请严格保留原文标点、数字、编号和换行,不做任何改写。”
构建文档两两对比矩阵
方法一:用Python代码节点生成所有组合对
拖入“代码”节点,输入变量为上一步聚合的全部文本列表(变量名假设为all_texts),粘贴以下代码:
```python
import itertools
texts = all_texts # 假设是[{"name": "a.docx", "text": "..."}, ...]
pairs = list(itertools.combinations(texts, 2))
result = []
for i, (a, b) in enumerate(pairs):
result.append({
"pair_id": i + 1,
"file_a": a["name"],
"file_b": b["name"],
"text_a": a["text"],
"text_b": b["text"]
})
return result
```
方法二:用列表操作节点手动配对(适合≤4份文档)
拖入“列表操作”节点→选择“组合”功能→源列表选all_texts→组合方式选“两两配对”→输出字段映射为comparison_pairs。
【注意】配对总数会呈指数级增长:5份文档产生10组对比,8份文档产生28组——超过10份建议改用方法一并限制最大处理量。】
执行逐对文本差异分析
第一步:拖入“文本对比”节点,输入绑定为comparison_pairs中的单个元素。
第二步:在节点配置中设置:
• algorithm: token_based(中文分词比对,抗空格/换行干扰)
• language: zh-cn
• similarity_threshold: 0.75(法律/合同类文档建议调至0.85)
• output_format: json(便于后续解析)
第三步:勾选“高亮差异位置”,该选项会额外输出diff-style字符串,供前端渲染红绿底色标记。
这一步不能跳过预处理——若直接喂原始PDF提取文本,含表格或扫描件OCR错字的文档会导致分词失效,对比结果全乱。
聚合对比结果并生成综合报告
① 拖入“代码”节点,输入为全部对比结果(变量名假设为all_comparisons)。
② 粘贴聚合逻辑:
```python
def summarize(comparisons):
total = len(comparisons)
identical = sum(1 for c in comparisons if c.get("status_info") == "两份文档内容一致")
summary = {
"总对比组数": total,
"完全一致组数": identical,
"存在差异组数": total - identical,
"高频差异类型": ["条款编号不一致", "金额数值不同", "签字页缺失"] # 示例占位
}
# 提取所有差异详情
details = [c.get("diff_output", {}) for c in comparisons]
return {"summary": summary, "details": details}
return summarize(all_comparisons)
```
③ 接入“模板转换”节点,选择Markdown模板,将summary和details注入变量,生成可读报告。
④ 最后接“结束节点”,输出变量设为final_report。










