# 供应商报价核对:可离线运行的企业工作流 PoC 三份完全虚构的供应商报价,输出一张统一口径对照表、一份异常清单和一份模拟复核后的采购选择建议草稿。适合用来讨论“客户需要什么输入、输出、规则与确认人”。不是已交付客户案例,也不是 AI 业务能力评测。 ## 运行 需要 Python 3.11+,沿用上游的 macOS / Linux 运行环境。只使用标准库;解压完整源码包后无需安装依赖、联网或配置模型。未验证 Windows。 在仓库根目录执行: python3 scripts/demo_enterprise_procurement.py --output .work/my-procurement-demo python3 -m unittest tests.test_enterprise_procurement -v 输出目录必须尚不存在;程序拒绝覆盖已有记录。默认不传 --output 时创建新的独立合成演示目录。它不会接触用户的项目账本、全局安装、凭据、真实客户资料或生产网站。 此处“新运行”是重现一个明确的合成 fixture,不是用新账本重置真实任务次数。每个主流程最多运行两轮,第三轮会被实际拒绝。 ## 输入、规则与输出 - 场景:虚构的岚川设备实验厂,采购 2 台虚构规格离心风机。 - 资料:input.json 中的结构化字段;每个异常带 JSON 路径作为来源。 - 金额:Decimal 计算。未税货品金额先按给定税率计算并四舍五入到分,再加已经含税的运费。不自动推断或转换税率、币种和缺失字段。 - 业务检查:数量、材质、风量、交期、有效期、含税口径、运费及原报价总额。 - 模拟复核规则:采购角色先核对;总额大于 20,000.00 元需第二个不同 actor 的财务角色记录。这是本例业务规则,不是适用于所有企业的审批或税务建议。 - 甲:20,500.00 元,可进入人工复核。 - 乙:20,640.00 元,材质不符且交期缺失,拦截。 - 丙:重算 20,200.00 元,原单为 19,900.00 元,拦截。 - 最终输出始终是 DRAFT_ONLY,不创建采购订单或调用企业系统。 主要产物: | 文件 | 用途 | |---|---| | input.json | 原始虚构询价与报价 | | comparison.csv | 业务人员可读的对照表 | | quote-report.json | 计算结果、异常及来源 | | before-report.json | 故意漏算运费的首轮结果 | | first-verification.json / final-verification.json | 实际验证与原失败重放 | | repair/state.json | 原框架记录的路由、两轮执行、验收与审计事件 | | review-pending.json / review-simulated.json | 待复核与预设模拟复核记录 | | purchase-draft.json | 模拟复核后的建议草稿 | | public-demo.json | 适合网页使用的白名单投影,无本机绝对路径 | | summary.json | 演示成功/失败摘要 | 本地原始证据包含工作目录和运行环境信息,不要未经检查直接公开。官网只使用白名单导出及源码包。运行时间、随机证据 ID 和本机路径可以不同;业务结果与全部必需断言应保持一致。原始证据哈希只对应产生它的那次运行。 ## 复用了什么,新增了什么 | 机制 | 实现来源 | 这次实际运行的范围 | |---|---|---| | Worker 选择与能力过滤 | 原 routing.service.Workflow.preview / run | 选择本地规则执行器,排除不具备该能力的格式化 fixture | | 执行与次数账本 | 原命令适配器、reserve/run/review | 真正启动本地 Python 子进程;同一任务两轮;第三轮拒绝 | | 风险分层 | 原 default_policy 与八项特征 | 仅无外部影响、可逆的虚构 fixture 使用 LOW,无模型 Reviewer | | 测试与输入冻结 | 原 Evidence Runtime v2 | 固定输入、测试、参考修复和执行器在首轮前冻结 | | 断言、证据、候选版本与重放 | 原 verify / replay / acceptance gate | 第一轮漏运费失败;预写修复后原失败和回归一起重放 | | 审计与学习边界 | 原 state 与 validate_ledger | synthetic 记录不作为真实模型能力/路由业绩 | | 报价计算与业务异常规则 | 新增 domain.py | 有限字段、有限规则、明确错误与来源 | | 业务模拟复核 | 新增 domain.py | 独立于软件验收;记录绑定结果哈希、角色不齐或结果变更时拒绝导出 | | 网页展示 | 新增静态页面与 public-demo.json | 展示一次实际离线运行记录;切页不是后台实时执行 | 原 routing/ 架构未修改。上游固定版本为 50994cfd97c1ea9aba97a09a193d15d39b44a815: https://github.com/THEBLUEGHOSTSSSS/agent-orchestration-workflow/tree/50994cfd97c1ea9aba97a09a193d15d39b44a815 ## 失败与修复不是模型能力演示 初始 engine.py 故意把运费设为零。原始独立断言检查甲必须为 20,500.00 元,并需要财务复核。验证器返回 REVISE;脚本记录一次明确的模拟 Commander 返工决定;第二轮由离线执行器复制预先编写的正确参考代码。原运行时 replay 必须得到 FIX_VERIFIED。 软件验收记录中的 SCRIPTED DEMO checkpoint 只是演示 runtime 的检查点,不是真正独立 Reviewer 或人类身份。真实开发验收由本次实现者另行检查实际代码、测试与页面,不把该记录当作自证。 八种负面场景:改动冻结测试、跳过必需测试、过期候选验收、第三轮执行、未复核导出、缺财务复核、结果变化后沿用复核、强行复核被拦截供应商。每个结果来自实际运行时或实际业务函数调用,预期拦截未发生时整个演示失败。 ## 能证明什么 - 在固定输入和明示规则下,能计算、复算并产出可追溯的报价对照。 - 固定样本里的异常能被拦截,未完成模拟复核不能导出建议草稿。 - 原框架能关联候选产物、测试、失败与同条件修复,保留检查记录。 - 客户可以看到拟交付物的形态,而不只看技术机制名称。 ## 不能证明什么 - 真实模型能读懂企业文档、正确抽取字段或自主修复问题;本例未调用任何模型。 - 真实身份认证、真实审批、防恶意主机篡改、OS 隔离、生产权限体系或正式采购授权。 - PDF/OCR、邮件接入、ERP 连接、多租户、在线并发或生产可用性。 - 真实客户交付、效率提升、准确率、节省金额或投资回报。 - 合成路由样本不能证明选模型策略更优或更省钱。 ## 如何验证客户实际需求 1. 让一个实际使用岗位带来一小组可授权的脱敏样本,包含正常报价、缺项、规格差异、改价和跨版本资料;由客户决定样本量,不先承诺效果。 2. 先人工标注应放行、应拦截、应追问的项目,以及每条规则由谁负责。保留原文位置,确定金额舍入、税费、运费、审批阈值与例外规则。 3. 双方确认最有用的交付物是对照表、追问清单还是系统内草稿;如果现有表格就能解决,先沿用表格。 4. 用保留的未参与调试样本检查漏拦截、误拦截、人工修订量、证据可追溯性与处理耗时。耗时从现场记录,不能用本机脚本速度代替员工节省时间。 5. 只有客户确认结果有用、接口权限明确且维护责任可承担,才评估模型抽取、认证、ERP 和有限试点。真实对外动作保持人工授权。 项目状态:离线 PoC;并未进行真实客户试点。