导读:在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. 创建知识库
-
登录 RAGFlow 后台,点击 “知识库” (Knowledge Base) -> “创建” 。
-
命名:
Legal_Contract_HighPrec。 -
核心步骤:在解析方法(Parser Method)中,务必选择
Layout或Manual模式(不要选Naive)。- 原理:
Layout模式会调用视觉模型识别文档的标题、段落、表格和图片区域,按语义块而非字符数切分。
- 原理:
2. 上传并解析复杂文档
-
上传一份真实的《供应商采购合同.pdf》(建议包含:价格阶梯表、违约责任矩阵、多栏排版)。
-
点击 “解析” (Parse) 。
-
见证奇迹:解析完成后,点击预览。你会发现:
- ✅ 表格完整:原本跨页的价格表被完整保留为一个单元,没有断裂。
- ✅ 结构清晰:条款编号(如 5.2.1)与内容紧密绑定。
- ✅ 溯源精准:每个切片都标记了原始页码和坐标。
3. 获取 API 密钥
- 进入 “设置” (Settings) -> “API Keys” 。
- 创建一个新的 Key,命名为
dify_integration_key。 - 记下
API Key和Knowledge Base ID,稍后在 Dify 中使用。
四、第二步:在 Dify 中编排“智能审查”工作流
我们将创建一个 Chatflow (对话工作流) ,实现以下逻辑:
- 用户提问:“合同中关于逾期付款的违约金比例是多少?是否有上限?”
- 意图识别:判断是否为合同查询类问题。
- 外部检索:调用 RAGFlow API 进行高精度检索。
- 逻辑增强:若检索结果置信度低,触发“二次追问”或“人工介入”。
- 报告生成:输出带引用来源的结构化回答。
1. 创建应用
- 登录 Dify,点击 “创建应用” -> 选择 “聊天助手 (Chatflow)” 。
- 命名:
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_result为False。- 路径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 组合的表现:
-
检索阶段:RAGFlow 精准定位到“不可抗力”章节的完整段落(包含台风示例),并完整提取了“阶梯定价表”中
>10000的那一行数据。 -
生成阶段:Dify 的工作流将结构化数据喂给 LLM。
-
最终回答:
“根据合同第 8.2 条规定,若因台风等自然灾害(属于不可抗力范畴)导致交货延迟,供应商无需支付违约金,但需在 24 小时内提供气象证明。(参见合同第 12 页)
关于单价,根据价格附表,当采购量超过 1 万件时,执行阶梯优惠单价:¥45.50/件。(参见合同第 5 页表格)”
💡 效果分析:
- 准确率:100% 基于文档,无幻觉。
- 可解释性:每一句话都有明确的页码溯源。
- 表格处理:完美解决了传统RAG搞不定表格的痛点。
六、进阶优化:让智能体更“聪明”
为了让这个系统真正落地生产,我们可以继续扩展工作流:
-
增加“风险预警”节点:
- 在 LLM 生成回答前,增加一个代码节点,正则匹配检索内容中的“无限责任”、“单方解除权”等高危词汇。若命中,直接在回答头部插入🔴 高风险提示。
-
多轮对话记忆:
- 开启 Dify 的“会话记忆”功能,让用户可以追问:“那如果是暴雨呢?”系统能结合上一轮的“不可抗力”定义进行推理。
-
对接企业微信/钉钉:
- 利用 Dify 自带的“发布”功能,一键生成 API 或 Web SDK,嵌入到企业的 OA 系统中。法务人员只需在钉钉群里 @机器人 即可查合同。
-
人机协作 (Human-in-the-loop) :
- 在 Dify 工作流中增加“人工审核”节点。当置信度低于 0.7 时,暂停流程,发送通知给法务专员,待人工确认后再回复用户。
七、总结与展望
通过本次 Dify + RAGFlow 的实战,我们成功构建了一个超越普通聊天机器人的企业级智能体。
-
技术价值:证明了“专业工具做专业事”的架构优势。RAGFlow 解决了“读得准”的问题,Dify 解决了“用得活”的问题。
-
业务价值:将合同审查时间从小时级缩短至秒级,且大幅降低了因人为疏忽导致的法律风险。
-
未来演进:
- 多Agent协作:未来可引入第二个 Agent 扮演“乙方律师”,与“甲方审查官”进行对抗性辩论,找出合同漏洞。
- 全自动签署:结合 n8n,审查通过后自动调用电子签章 API 完成签约。
🚀 行动建议: 不要等待完美的 AI,现在就开始动手。
- 下载 Docker 部署 RAGFlow 和 Dify。
- 找一份你们公司最复杂的 PDF 文档。
- 按照本文步骤,花 1 小时搭建你的第一个“深度知识智能体”。
在 AI 2.0 时代, “工作流编排 + 深度检索” 将是每个企业的标配。谁先掌握这套组合拳,谁就能在智能化转型的浪潮中抢占先机!
欢迎关注的我的公众号《码上未来》,一起交流AI前沿技术!
扫码二维码加我微信进群聊AI