装闭 RenoPit 源码解析(11):AI如何进行装修文档交织核查

[复制链接]
发表于 2026-8-16 20:52:29 | 显示全部楼层 |阅读模式

单独审查合同和报价单只能发现各自内部的问题,金额、施工项目和责任条款之间的矛盾需要把多份文档放在一起比较。装闭 RenoPit 的交织核查实现位于 fthux/RenoPit,本篇分析它如何复用已有结果并生成差异清单。

一、交织核查何时触发

Celery 完成逐份文档分析后,假如 doc_results 数目不少于两份,就调用 run_cross_check_sync(project_id)。该函数会再次查询数据库,只选择状态为 completed 且类型为 quotation 或 contract 的 DocumentAnalysis。
真正进入 LLM 前仍要求至少两条有用记录。因此“上传两份文档”并不等于一定核查:它们还需要完身分类和单文档分析。
二、为什么复用 risks_json

交织核查没有再次读取整份合同原文,而是优先使用已经生成的 risks_json。每份摘要包含:

  • doc_type:合同或报价单;
  • source_file:原始文件名;
  • risks_json:单文档风险分析;
  • risks_summary:风险标题和分类;
  • 报价单的金额摘要。
假如某条记录没有风险 JSON,则退回 classifications_json 构造大略摘要。如许交织核查消费的是前一阶段的结构化产物,而不是重复执行同样的文档提取。
三、比对模式如何选择

detect_check_mode() 根据摘要中的 doc_type 返回模式:
  1. if "contract" in doc_types and "quotation" in doc_types:
  2.     return "BILL_vs_CONTRACT"
  3. if supervision_report_count >= 2:
  4.     return "SUPERVISION_TRACKING"
  5. if "general" in doc_types and "quotation" in doc_types:
  6.     return "DESIGN_vs_BILL"
复制代码
辅助模块支持合同与报价单、监理报告追踪、计划阐明与报价单三种模式。当前 run_cross_check_sync() 的自动查询只选择 quotation 和 contract,因此正常项目主链使用的是 BILL_vs_CONTRACT。
四、Prompt 如何装入多份摘要

build_cross_check_user_message() 遍历摘要,为每份文档写入文件名和格式化 JSON。它还会附加单文件分析的摘要、风险数目和预计风险金额,但明确要求模型把重点放在文档差异本身。
系统 Prompt 根据模式规定检查内容,比方:

  • 合同范围是否覆盖报价项目;
  • 报价金额与合同总价是否同等;
  • 材料品牌、规格和数目是否冲突;
  • 付款节点与施工阶段是否匹配;
  • 一份文件承诺的内容是否在另一份文件中缺失。
cross_check_documents() 得到 system 和 user 两段 Prompt 后,复用纯文本 LLM 重试函数完成调用。
五、差异结果如何写回综合分析

模型返回文本先经过 parse_json()。解析乐成后,函数查询近来一条状态为 completed 的 Analysis,复制原有 raw_result_json,再加入新字段:
  1. raw_json = dict(latest_analysis.raw_result_json or {})
  2. raw_json["cross_document_checks"] = result_data
  3. latest_analysis.raw_result_json = raw_json
  4. db.commit()
复制代码
交织核查因此不是一张独立数据表,而是综合分析 JSON 的扩展部分。接口返回时会把这个字段与计划问题和文档结果一起交给前端。
结果通常包含 check_mode、到场比对的文档、discrepancies 差异数组,以及可选的监理问题追踪数据。每条差异记录来源文件、严重程度、风险阐明和建议动作。
六、前端如何显示核查结果

AnalysisPage 检查 cross_document_checks.discrepancies 是否非空,再决定是否显示“跨文档核查”导航。具体内容交给 CrossCheckPanel。
组件把差异类型转换成中文标签和图标,按高、中、低风险展示。每条记录可以睁开检察两份来源、风险后果和处理建议。若结果包含 supervision_tracking,面板还会显示已解决和未解决问题的追踪统计。
七、交织核查调用链小结

RenoPit 的跨文档分析不是把全部原文重新塞给模型,而是先完成单文档结构化,再以风险 JSON 为摘要进行第二阶段推理。最终差异结果合并进综合 Analysis,报告页只需哀求一次 /result 就能得到全部内容。
交织核查的 Prompt、模式选择和持久化代码都可以在 fthux/RenoPit 中检察。下一篇将分析后端如何把这些差别来源的 JSON 统一成前端结构,以及 React 报告页怎样按数据条件渲染各个章节。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表