实战演练:Dify + RAGFlow 强强联合,打造企业级“合同智能审查官

0 阅读9分钟

导读:在AI落地的深水区,单一的“聊天机器人”已无法满足企业需求。面对复杂的法律合同、财务报表和技术手册,通用大模型往往因“读不懂表格”和“幻觉严重”而折戟。

本文将带你从零开始,通过Dify(最强工作流编排)与RAGFlow(最强深度文档解析)的黄金组合,构建一个能精准解读百页合同、自动识别风险条款的 “合同智能审查官” 。这不仅是一次技术实操,更是企业级AI应用的标准范式。


一、为什么选择“Dify + RAGFlow”这对黄金搭档?

在之前的选型分析中,我们提到:

  • Dify 胜在 “脑”与“手” :拥有强大的可视化工作流编排(Workflow)、多模型路由、逻辑判断及API发布能力,但原生知识库对复杂PDF(含表格、多栏排版)的解析精度有限。
  • RAGFlow 胜在 “眼”与“库” :独有的DeepDoc引擎能完美还原文档布局(Layout Analysis),精准提取表格、公式和跨页内容,检索召回率极高,但缺乏复杂业务逻辑编排能力。

🎯 实战目标: 利用 RAGFlow 作为“高精度知识底座”,处理复杂的《供应商采购合同.pdf》;利用 Dify 作为“智能调度中枢”,编排“意图识别→风险检索→条款比对→报告生成”的完整工作流。


二、环境准备与部署(5分钟快速起步)

1. 部署 RAGFlow (知识底座)

推荐配置:8核CPU / 32G内存 / 50G SSD(因涉及OCR和深度学习模型)

# 克隆仓库
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
​
# 启动服务 (首次运行需下载镜像,约10-15分钟)
docker compose up -d
​
# 访问后台:http://<你的IP>:9380
# 默认账号:admin / admin

💡 关键点:RAGFlow内置了Elasticsearch和Infinity向量库,无需额外配置。启动后,请在系统设置中配置好你的大模型API Key(推荐使用DeepSeek-V3或Qwen2.5,性价比高且中文能力强)。

2. 部署 Dify (编排中枢)

推荐配置:4核CPU / 8G内存

# 克隆仓库
git clone https://github.com/langgenius/dify.git
cd dify/docker
​
# 复制环境变量并启动
cp .env.example .env
docker compose up -d
​
# 访问后台:http://<你的IP>:3000
# 初始化管理员账号

三、第一步:在 RAGFlow 中构建“高精尖”知识库

传统RAG会将PDF切成碎块,导致表格错乱。我们要利用RAGFlow的DeepDoc特性保留结构。

1. 创建知识库

  1. 登录 RAGFlow 后台,点击 “知识库” (Knowledge Base) -> “创建”

  2. 命名:Legal_Contract_HighPrec

  3. 核心步骤:在解析方法(Parser Method)中,务必选择 LayoutManual 模式(不要选Naive)。

    • 原理Layout 模式会调用视觉模型识别文档的标题、段落、表格和图片区域,按语义块而非字符数切分。

2. 上传并解析复杂文档

  1. 上传一份真实的《供应商采购合同.pdf》(建议包含:价格阶梯表、违约责任矩阵、多栏排版)。

  2. 点击 “解析” (Parse)

  3. 见证奇迹:解析完成后,点击预览。你会发现:

    • 表格完整:原本跨页的价格表被完整保留为一个单元,没有断裂。
    • 结构清晰:条款编号(如 5.2.1)与内容紧密绑定。
    • 溯源精准:每个切片都标记了原始页码和坐标。

3. 获取 API 密钥

  1. 进入 “设置” (Settings) -> “API Keys”
  2. 创建一个新的 Key,命名为 dify_integration_key
  3. 记下 API KeyKnowledge Base ID,稍后在 Dify 中使用。

四、第二步:在 Dify 中编排“智能审查”工作流

我们将创建一个 Chatflow (对话工作流) ,实现以下逻辑:

  1. 用户提问:“合同中关于逾期付款的违约金比例是多少?是否有上限?”
  2. 意图识别:判断是否为合同查询类问题。
  3. 外部检索:调用 RAGFlow API 进行高精度检索。
  4. 逻辑增强:若检索结果置信度低,触发“二次追问”或“人工介入”。
  5. 报告生成:输出带引用来源的结构化回答。

1. 创建应用

  1. 登录 Dify,点击 “创建应用” -> 选择 “聊天助手 (Chatflow)”
  2. 命名:Contract_Auditor_Agent

2. 编排工作流节点 (拖拽式操作)

🟢 节点 A:开始 (Start)

  • 输入变量:query (用户问题), contract_id (可选,用于区分不同合同)。

🔵 节点 B:HTTP 请求 (调用 RAGFlow)

这是核心步骤,让 Dify 借用 RAGFlow 的“眼睛”。

  • 添加节点:选择 “HTTP 请求”

  • 配置请求

    • Method: POST

    • URL: http://<RAGFlow_IP>:9380/api/v1/retrieval (参考RAGFlow文档最新接口)

    • Headers:

      {
        "Authorization": "Bearer <你的RAGFlow_API_Key>",
        "Content-Type": "application/json"
      }
      
    • Body (JSON) :

      {
        "knowledge_base_id": "<你的KB_ID>",
        "query": "{{start.query}}",
        "top_k": 3,
        "score_threshold": 0.6
      }
      
  • 输出变量:将响应结果保存为 rag_result。通常包含 chunks (文本块), score (相似度), source (页码)。

🟣 节点 C:代码执行 (Python) - 数据清洗与格式化

RAGFlow返回的是JSON列表,需要整理成LLM易读的上下文。

  • 添加节点:选择 “代码执行” (语言: Python3)。

  • 输入变量: retrieval_data (来自节点B的输出)。

  • 代码逻辑:

    def main(retrieval_data):
        chunks = retrieval_data.get('data', {}).get('chunks', [])
        context_list = []
        sources = []
        
        for item in chunks:
            text = item.get('content', '')
            page = item.get('position', {}).get('page_number', '?')
            score = item.get('similarity_score', 0)
            
            if score > 0.5: # 过滤低质量片段
                context_list.append(f"[来源: 第{page}页, 相似度:{score:.2f}]\n{text}")
                sources.append(f"第{page}页")
        
        final_context = "\n\n---\n\n".join(context_list)
        source_summary = ",".join(list(set(sources)))
        
        return {
            "context": final_context,
            "sources": source_summary,
            "has_result": len(context_list) > 0
        }
    
  • 输出: context, sources, has_result.

🟠 节点 D:条件分支 (If/Else)

  • 条件: 如果 节点C.has_resultFalse

    • 路径1 (无结果) : 连接到 LLM 节点 (回复未知) -> “抱歉,未在合同中找到相关条款,建议您上传更清晰的版本或联系法务专员。”
    • 路径2 (有结果) : 连接到 LLM 节点 (专业回答)

🤖 节点 E:LLM (大模型生成)

  • 模型选择: DeepSeek-V3 或 Qwen2.5-72B (长文本能力强)。

  • System Prompt (关键) :

    你是一名资深法务合同审查专家。请根据提供的【上下文信息】回答用户问题。
    ​
    【要求】:
    1. 必须严格基于【上下文信息】回答,严禁编造。如果上下文中没有答案,直接说不知道。
    2. 回答中必须标注引用来源,格式为:(参见合同第X页)。
    3. 对于金额、比例、日期等关键数据,请用**加粗**显示。
    4. 语气专业、严谨、客观。
    ​
    【上下文信息】:
    {{节点C.context}}
    ​
    【用户问题】:
    {{start.query}}
    
  • 输出: 最终的回答文本。

🟢 节点 F:结束 (End)

  • 输出变量:answer (来自节点E), reference_pages (来自节点C)。

五、实战测试:见证“深度理解”的力量

场景模拟

用户上传:一份包含复杂“阶梯定价表”和“不可抗力免责条款”的PDF合同。 用户提问

“如果因台风导致交货延迟,供应商需要支付违约金吗?另外,采购量超过1万件时的单价是多少?”

❌ 传统 RAG (仅用 Dify 原生知识库) 的表现:

  • 结果:可能会混淆不同区间的价格,或者因为表格被切分而回答“未找到具体单价”。对于台风条款,可能只匹配到“不可抗力”四个字,忽略了具体的免责细则。
  • 幻觉风险:高。模型可能根据训练数据瞎编一个“5%”的违约金。

✅ Dify + RAGFlow 组合的表现:

  1. 检索阶段:RAGFlow 精准定位到“不可抗力”章节的完整段落(包含台风示例),并完整提取了“阶梯定价表”中 >10000 的那一行数据。

  2. 生成阶段:Dify 的工作流将结构化数据喂给 LLM。

  3. 最终回答

    “根据合同第 8.2 条规定,若因台风等自然灾害(属于不可抗力范畴)导致交货延迟,供应商无需支付违约金,但需在 24 小时内提供气象证明。(参见合同第 12 页)

    关于单价,根据价格附表,当采购量超过 1 万件时,执行阶梯优惠单价:¥45.50/件。(参见合同第 5 页表格)”

💡 效果分析

  • 准确率:100% 基于文档,无幻觉。
  • 可解释性:每一句话都有明确的页码溯源。
  • 表格处理:完美解决了传统RAG搞不定表格的痛点。

六、进阶优化:让智能体更“聪明”

为了让这个系统真正落地生产,我们可以继续扩展工作流:

  1. 增加“风险预警”节点

    • 在 LLM 生成回答前,增加一个代码节点,正则匹配检索内容中的“无限责任”、“单方解除权”等高危词汇。若命中,直接在回答头部插入🔴 高风险提示
  2. 多轮对话记忆

    • 开启 Dify 的“会话记忆”功能,让用户可以追问:“那如果是暴雨呢?”系统能结合上一轮的“不可抗力”定义进行推理。
  3. 对接企业微信/钉钉

    • 利用 Dify 自带的“发布”功能,一键生成 API 或 Web SDK,嵌入到企业的 OA 系统中。法务人员只需在钉钉群里 @机器人 即可查合同。
  4. 人机协作 (Human-in-the-loop)

    • 在 Dify 工作流中增加“人工审核”节点。当置信度低于 0.7 时,暂停流程,发送通知给法务专员,待人工确认后再回复用户。

七、总结与展望

通过本次 Dify + RAGFlow 的实战,我们成功构建了一个超越普通聊天机器人的企业级智能体

  • 技术价值:证明了“专业工具做专业事”的架构优势。RAGFlow 解决了“读得准”的问题,Dify 解决了“用得活”的问题。

  • 业务价值:将合同审查时间从小时级缩短至秒级,且大幅降低了因人为疏忽导致的法律风险。

  • 未来演进

    • 多Agent协作:未来可引入第二个 Agent 扮演“乙方律师”,与“甲方审查官”进行对抗性辩论,找出合同漏洞。
    • 全自动签署:结合 n8n,审查通过后自动调用电子签章 API 完成签约。

🚀 行动建议: 不要等待完美的 AI,现在就开始动手。

  1. 下载 Docker 部署 RAGFlow 和 Dify。
  2. 找一份你们公司最复杂的 PDF 文档。
  3. 按照本文步骤,花 1 小时搭建你的第一个“深度知识智能体”。

在 AI 2.0 时代, “工作流编排 + 深度检索” 将是每个企业的标配。谁先掌握这套组合拳,谁就能在智能化转型的浪潮中抢占先机!


欢迎关注的我的公众号《码上未来》,一起交流AI前沿技术!

码上未来.jpg

扫码二维码加我微信进群聊AI

image.png