采购订单价格分析(Price Analysis)
功能说明
针对 YonBIP 采购订单,自动完成价格审核分析,结合同物料历史已审核采购价格和外部专业网站市场价格,为审核人员提供决策依据。
本 Skill 为只读分析,不执行任何采购订单写操作。
何时使用本 Skill
- "分析一下采购订单 XXX 的价格"
- "采购订单 XXX 价格审核"
- "XXX 价格是否合理"
- "查一下 XXX 订单的历史价格对比"
- "采购订单 XXX 有没有价格异常"
输入参数
| 参数 | 必填 | 说明 |
|---|---|---|
| 采购订单号 | 是 | 如 PO2510310358 |
| 输出文件要求 | 否 | 用户明确要求时输出 PDF/Word |
依赖
本 Skill 已自包含,查询能力内联于 scripts/query_purchaseorder.py,无需外部依赖 Skill。
scripts/query_purchaseorder.py:本 Skill 自带的只读查询模块,提供query_order(order_no):查订单明细query_history(material_code):查该物料"已审核"历史采购订单- 真实接口通过环境变量
YONBIP_API_BASE / YONBIP_APP_KEY / YONBIP_APP_SECRET / YONBIP_TENANT_ID启用;未配置时回退本地示例数据scripts/sample_data.json。 scripts/analyze_order.py:价格分析编排(内联查询 + 历史统计 + 大宗判定),输出结构化 JSON 中间结果,供 Agent 汇总成报告。scripts/history_price.py:历史已审核价格统计辅助(最高/最低/均价/中位数/样本数)。web_search:搜索外部市场价格chart/echarts:可视化图表(使用chart 或echarts 代码块)pdf/docx:仅当用户要求输出文件时生成
> 注:若仍希望对接原 jx-yonbip-scm-pu-purchaseorder-queryv3,可将 scripts/query_purchaseorder.py 替换为该 Skill 的脚本,接口契约保持一致(--order / --history --material)。
执行流程
第1步:解析采购订单号
从用户输入中提取采购订单号。订单号通常由字母 + 数字组成(如 PO2510310358)。
若未能识别到订单号,向用户追问具体订单号。
第2步:查询采购订单明细
调用本 Skill 自带的查询模块 scripts/query_purchaseorder.py:
python scripts/query_purchaseorder.py --order <采购订单号>
(或由 Agent 直接调用 analyze_order.py --order <采购订单号> 获取已编排好的结构结果。)
获取订单全部行明细。所需字段:物料编码、物料名称、物料分类名称、数量、无税单价、含税单价、含税金额、税率、供应商、采购组织、单据日期、单据状态、创建人。
失败处理(接口异常):若脚本返回异常或超时,输出:
> 采购订单查询接口异常,请稍后重试
失败处理(订单不存在):若返回空或无记录,输出:
> 未查询到该采购订单,请核对订单号
第3步:逐行物料分析
对每一行物料执行:
- 提取基础字段(见第2步字段清单)。
- 按物料编码调用本 Skill 查询模块查询系统内已审核历史采购订单,作为历史价格对比对象:
python scripts/query_purchaseorder.py --history --material <物料编码>
仅使用已审核订单;未审核订单不作为历史对比对象。
- 若无可审核历史记录,输出:
> 该物料无已审核历史采购记录,无法做历史价格对比
- 统计历史已审核价格:最高价、最低价、均价、中位数、样本数(使用
scripts/history_price.py计算)。 - 判断是否属于大宗原材料,通过物料名称或物料分类名称关键词匹配,关键词包括:
钢、铁、铜、铝、大豆、白糖、棉花、原油、煤、天然气、橡胶、塑料、纸浆、粮食、矿石、金属、化工。 - 若为大宗原材料:使用
web_search搜索外部市场价格及近期价格趋势。
若为普通物料:使用web_search搜索外部市场参考价格(不做波动趋势分析)。
- 若外部搜索无结果,输出:
> 未检索到该物料外部市场价格,请人工核实 - 生成单物料价格对比图表(柱状图、折线图等),使用
chart 或echarts 代码块。
第4步:生成情况总览
在回复开头输出情况总览表:
| 物料 | 该笔采购订单价格 | 历史均价 | 历史最低 | 外部市场 | 异常等级 |
异常等级判定规则:
| 等级 | 标识 | 判定条件 |
|---|---|---|
| 严重异常 | 🚨 | 价格偏离市场价或历史价过大(偏离 > 50%) |
| 显著偏低/偏高 | ⚠️ | 偏离历史价 20% 以上(含 20%) |
| 正常 | ✅ | 价格在合理区间(偏离 < 20%) |
| 待核实 | ❓ | 数据不足或单位不明 |
第5步:输出订单基础信息
输出采购订单号、单据日期、单据状态、采购组织、供应商、创建人等基础信息,以及订单明细表(含每行物料的编码、名称、分类、数量、无税单价、含税单价、含税金额、税率、供应商)。
第6步:分物料详细分析
每个物料包含:
- 该笔采购订单价格;
- 同物料已审核历史采购价格统计与明细;
- 外部市场价格(含数据来源、时间、价格);
- 若为大宗原材料,补充价格波动趋势分析;
- 可视化图表(
chart /echarts); - 价格判断结论。
第7步:输出审核建议
7.1 按订单行逐一审核建议
表格字段(行数必须与订单行数逐一对应):
| 订单号 | 单据日期 | 供应商 | 物料名称 | 数量 | 含税单价 | 风险点 | 建议动作 |
7.2 整个订单共性问题
独立描述订单层面的问题,如:
- 供应商资质是否匹配;
- 税率是否异常;
- 整单金额是否合理;
- 是否存在拆分订单规避审批嫌疑。
7.3 最终审核结论
给出明确建议:通过 / 暂缓 / 不通过。
输出要求
- 所有用户可见内容使用简体中文;
- 图表使用
chart 或echarts 代码块; - 数据必须来自实时查询或搜索结果,禁止编造;
- 历史采购价格仅使用已审核订单;
- 未审核订单不作为历史对比对象;
- 普通物料不做价格波动趋势分析;
- 用户明确要求输出文件时,才生成 PDF 或 Word 文件;
- 不绑定个人代理,作为通用 Skill 使用。
安全约束
- 本 Skill 为只读分析,不执行任何采购订单写操作;
- 禁止修改、删除、创建采购订单;
- 外部价格搜索仅使用可信来源,优先官方统计数据、行业协会、大型 B2B 平台;
- 数据展示遵循脱敏规则(如供应商全称可保留,联系人/电话/邮箱等敏感字段不展示);
- 仅调用本 Skill 指定的查询脚本和搜索工具。
失败处理汇总
| 场景 | 输出 |
|---|---|
| 订单不存在 | 未查询到该采购订单,请核对订单号 |
| 无历史已审核记录 | 该物料无已审核历史采购记录,无法做历史价格对比 |
| 外部搜索无结果 | 未检索到该物料外部市场价格,请人工核实 |
| 接口异常 | 采购订单查询接口异常,请稍后重试 |
示例
示例1:普通订单价格分析
用户:请分析一下采购订单 PO2510310358 的价格。
输出:
- 情况总览表
- 订单基础信息
- 分物料分析(含历史价、外部价、图表、判断)
- 审核建议表
- 共性问题与最终结论