diff --git a/README.md b/README.md index 113b0ed..aa590cc 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ Returns merchant ranking by `orderCount`, `successOrderCount`, `totalOrderAmount - `startDate`: custom start date, required when `timePreset=custom`, format `YYYY-MM-DD`. - `endDate`: custom end date, required when `timePreset=custom`, format `YYYY-MM-DD`. - `date`: legacy compatible date range, for example `2026/06/23-2026/06/23`; if provided, it is sent to the upstream order API as-is. -- `status`: order status; defaults to `-1`. +- `status`: order status; defaults to `-1` (all). Values: `0` = pending payment, `1` = completed, `2` = cancelled, `3` = pending verification/use, `4` = refunded. - `keyword`: search keyword, sent to upstream API as `real_name`. - `fieldKey`: upstream `field_key`; defaults to `all`. - `payType`: upstream `pay_type`. diff --git a/docs/AI_INTEGRATION_GUIDE.md b/docs/AI_INTEGRATION_GUIDE.md index 208b3c1..397824c 100644 --- a/docs/AI_INTEGRATION_GUIDE.md +++ b/docs/AI_INTEGRATION_GUIDE.md @@ -204,6 +204,56 @@ AI 默认不要使用 `date`,除非调用平台只能传固定后台日期格 | `type` | string | 订单类型,对应后台 `type` | | `btcId` | integer | 商户分类 ID,对应后台 `btc_id` | +### 7.1 订单状态 `status` 取值 + +| status | 含义 | 用户常见说法 | +| --- | --- | --- | +| `-1` | 全部订单 | 全部、所有订单、不限状态 | +| `0` | 待支付 | 待支付、未付款、未支付订单 | +| `1` | 已完成/成功 | 已完成、成功订单、已支付完成 | +| `2` | 已取消 | 已取消、取消订单 | +| `3` | 待核销/待使用 | 待核销、待使用、未使用 | +| `4` | 已退款 | 已退款、退款订单 | + +AI 选择规则: + +- 用户没有提到订单状态时,必须传 `status=-1`。 +- 用户问“成功订单”“已完成订单”时,传 `status=1`。 +- 用户问“待支付订单”“未付款订单”时,传 `status=0`。 +- 用户问“取消订单”时,传 `status=2`。 +- 用户问“待核销”“待使用”时,传 `status=3`。 +- 用户问“退款订单”时,传 `status=4`。 +- 如果用户说“订单汇总”“今日数据”“最近7天数据”但没有限定状态,传 `status=-1`。 + +示例: + +用户说“今天成功订单有多少?”时调用: + +```json +{ + "timePreset": "today", + "status": 1 +} +``` + +用户说“最近7天退款订单金额是多少?”时调用: + +```json +{ + "timePreset": "last_7_days", + "status": 4 +} +``` + +用户说“本月所有订单汇总”时调用: + +```json +{ + "timePreset": "this_month", + "status": -1 +} +``` + ## 8. 商户排行参数 `/api/merchant-ranking` 额外支持: @@ -356,5 +406,5 @@ Invoke-RestMethod ` ## 13. 推荐给 AI 的简短系统提示词 ```text -你需要通过 Merchant AI HTTP API 分析订单数据。统计接口只能使用 POST。不要直接请求后台订单接口,不要暴露 token。用户提到时间时,优先转换为 timePreset:今天=today,昨天=yesterday,最近7天=last_7_days,最近30天=last_30_days,本周=this_week,上周=last_week,本月=this_month,上月=last_month。只有明确起止日期时使用 custom,并传 startDate/endDate,格式 YYYY-MM-DD。不要把“今天”“昨天”“本月”等自然语言直接作为参数传给接口。如果用户没说时间,默认 timePreset=today。解读接口返回时,必须只使用 JSON 中真实存在的字段和数值,不允许编造订单数、成功订单数、商户数、金额、日均值、趋势或业务结论。可以基于返回字段做简单计算,但必须说明“根据当前返回数据计算”。如果返回 _debug_query.time,可以作为查询时间范围。当前接口 page=1、limit=100,orderCount 表示本次返回并参与统计的订单数量,不要擅自推断后台完整总量。 +你需要通过 Merchant AI HTTP API 分析订单数据。统计接口只能使用 POST。不要直接请求后台订单接口,不要暴露 token。用户提到时间时,优先转换为 timePreset:今天=today,昨天=yesterday,最近7天=last_7_days,最近30天=last_30_days,本周=this_week,上周=last_week,本月=this_month,上月=last_month。只有明确起止日期时使用 custom,并传 startDate/endDate,格式 YYYY-MM-DD。不要把“今天”“昨天”“本月”等自然语言直接作为参数传给接口。如果用户没说时间,默认 timePreset=today。订单状态 status:全部=-1,待支付=0,已完成/成功=1,已取消=2,待核销/待使用=3,已退款=4;如果用户没有限定状态,默认 status=-1。解读接口返回时,必须只使用 JSON 中真实存在的字段和数值,不允许编造订单数、成功订单数、商户数、金额、日均值、趋势或业务结论。可以基于返回字段做简单计算,但必须说明“根据当前返回数据计算”。如果返回 _debug_query.time,可以作为查询时间范围。当前接口 page=1、limit=100,orderCount 表示本次返回并参与统计的订单数量,不要擅自推断后台完整总量。 ``` diff --git a/docs/AI_RESPONSE_INTERPRETATION_GUIDE.md b/docs/AI_RESPONSE_INTERPRETATION_GUIDE.md new file mode 100644 index 0000000..11daeec --- /dev/null +++ b/docs/AI_RESPONSE_INTERPRETATION_GUIDE.md @@ -0,0 +1,318 @@ +# Merchant AI API 返回 JSON 解读说明 + +本文档用于喂给“结果解读 AI”。该 AI 的任务不是调用接口,而是接收已经真实调用接口后得到的 JSON,并把 JSON 解读成用户能看懂的中文结果。 + +## 1. 核心原则 + +AI 必须严格遵守: + +1. 只能基于输入 JSON 中真实存在的字段和数值回答。 +2. 不允许编造、猜测、放大、补全任何订单数、金额、商户数、排行、趋势或业务结论。 +3. 如果 JSON 中没有某个字段,就不能当作事实输出。 +4. 可以做简单计算,但必须基于 JSON 已有字段,并说明“根据当前返回数据计算”。 +5. 如果接口返回失败,必须先说明失败原因,不要继续分析业务数据。 +6. 如果 JSON 中存在 `_debug_query.time`,可以把它作为本次查询时间范围。 +7. 当前接口默认只统计本次返回的订单列表,常见分页为 `page=1`、`limit=100`。不要擅自推断后台完整总量。 + +## 2. 输入数据格式 + +成功响应格式: + +```json +{ + "success": true, + "data": {} +} +``` + +失败响应格式: + +```json +{ + "success": false, + "error": { + "code": "server_error", + "message": "错误信息" + } +} +``` + +## 3. 失败响应解读规则 + +如果 `success=false`,AI 只能说明接口调用失败。 + +示例输入: + +```json +{ + "success": false, + "error": { + "code": "method_not_allowed", + "message": "This endpoint only supports POST." + } +} +``` + +推荐输出: + +```text +接口调用失败,原因是请求方法不正确:This endpoint only supports POST。请使用 POST 方法重新请求该统计接口。 +``` + +禁止输出订单统计、金额分析或商户排行。 + +## 4. 订单汇总 JSON 字段说明 + +接口:`POST /api/order-summary` + +常见返回: + +```json +{ + "success": true, + "data": { + "orderCount": 100, + "activeMerchantCount": 5, + "successOrderCount": 47, + "totalOrderAmount": 882.89, + "totalRealPay": 662.39, + "_debug_query": { + "status": -1, + "field_key": "all", + "page": 1, + "limit": 100, + "time": "2026/06/18-2026/06/24" + } + } +} +``` + +字段含义: + +| 字段 | 含义 | +| --- | --- | +| `orderCount` | 当前返回并参与统计的订单数量 | +| `activeMerchantCount` | 当前返回数据中的活跃商户数量 | +| `successOrderCount` | 当前返回数据中的成功订单数量 | +| `totalOrderAmount` | 当前返回数据中的订单总金额 | +| `totalRealPay` | 当前返回数据中的实付总金额 | +| `_debug_query.time` | 本次查询时间范围 | +| `_debug_query.page` | 后台列表页码 | +| `_debug_query.limit` | 后台列表每页数量 | + +推荐解读模板: + +```text +本次查询时间范围:{_debug_query.time} + +订单汇总如下: +- 订单数:{orderCount} 单 +- 活跃商户数:{activeMerchantCount} 家 +- 成功订单数:{successOrderCount} 单 +- 订单总金额:{totalOrderAmount} +- 实付总金额:{totalRealPay} + +根据当前返回数据计算: +- 成功率:{successOrderCount / orderCount} +- 实付占比:{totalRealPay / totalOrderAmount} + +注意:以上结果基于接口本次返回的数据统计。 +``` + +当 `orderCount=0` 时,不要计算成功率和平均值,应该说明当前范围内没有返回订单数据。 + +## 5. 线下订单分析 JSON 字段说明 + +接口:`POST /api/offline-stats` + +常见返回: + +```json +{ + "success": true, + "data": { + "orderCount": 100, + "statusDistribution": { + "1": 47, + "2": 10 + }, + "payTypeDistribution": { + "wechat": 50, + "balance": 20 + }, + "typeDistribution": { + "offline": 100 + }, + "totalOrderAmount": 882.89, + "totalRealPay": 662.39, + "averageOrderAmount": 8.83, + "averageRealPay": 6.62, + "maxOrderAmount": 99.99, + "_debug_query": { + "time": "2026/06/18-2026/06/24" + } + } +} +``` + +字段含义: + +| 字段 | 含义 | +| --- | --- | +| `orderCount` | 当前返回并参与统计的订单数量 | +| `statusDistribution` | 订单状态分布 | +| `payTypeDistribution` | 支付方式分布 | +| `typeDistribution` | 订单类型分布 | +| `totalOrderAmount` | 订单总金额 | +| `totalRealPay` | 实付总金额 | +| `averageOrderAmount` | 平均订单金额 | +| `averageRealPay` | 平均实付金额 | +| `maxOrderAmount` | 最大订单金额 | + +状态值参考: + +| 状态值 | 含义 | +| --- | --- | +| `-1` | 全部,仅用于请求筛选 | +| `0` | 待支付 | +| `1` | 已完成或成功 | +| `2` | 已取消 | +| `3` | 待核销或待使用 | +| `4` | 已退款 | + +如果分布中的 key 无法确认含义,保持原值输出,不要强行翻译。 + +推荐解读模板: + +```text +本次查询时间范围:{_debug_query.time} + +线下订单分析如下: +- 订单数:{orderCount} 单 +- 订单总金额:{totalOrderAmount} +- 实付总金额:{totalRealPay} +- 平均订单金额:{averageOrderAmount} +- 平均实付金额:{averageRealPay} +- 最大订单金额:{maxOrderAmount} + +状态分布: +- {statusDistribution 中逐项列出} + +支付方式分布: +- {payTypeDistribution 中逐项列出} + +订单类型分布: +- {typeDistribution 中逐项列出} + +注意:以上结果基于接口本次返回的数据统计。 +``` + +## 6. 商户排行榜 JSON 字段说明 + +接口:`POST /api/merchant-ranking` + +常见返回: + +```json +{ + "success": true, + "data": { + "sortBy": "totalRealPay", + "ranking": [ + { + "merchantId": 1, + "merchantName": "示例商户", + "orderCount": 20, + "successOrderCount": 10, + "totalOrderAmount": 200.00, + "totalRealPay": 180.00 + } + ], + "_debug_query": { + "time": "2026/06/18-2026/06/24" + } + } +} +``` + +字段含义: + +| 字段 | 含义 | +| --- | --- | +| `sortBy` | 当前排行榜排序字段 | +| `ranking` | 商户排行列表 | +| `merchantId` | 商户 ID | +| `merchantName` | 商户名称,可能为空 | +| `orderCount` | 该商户当前返回数据中的订单数 | +| `successOrderCount` | 该商户当前返回数据中的成功订单数 | +| `totalOrderAmount` | 该商户当前返回数据中的订单金额 | +| `totalRealPay` | 该商户当前返回数据中的实付金额 | + +推荐解读模板: + +```text +本次查询时间范围:{_debug_query.time} + +商户排行榜如下,排序字段:{sortBy} + +1. {merchantName 或 merchantId} + - 订单数:{orderCount} + - 成功订单数:{successOrderCount} + - 订单金额:{totalOrderAmount} + - 实付金额:{totalRealPay} + +注意:以上排行基于接口本次返回的数据统计。 +``` + +如果 `ranking` 为空,输出: + +```text +当前查询条件下没有返回可排行的商户数据。 +``` + +## 7. 允许的计算 + +AI 可以进行以下简单计算: + +| 指标 | 计算方式 | +| --- | --- | +| 成功率 | `successOrderCount / orderCount * 100%` | +| 实付占比 | `totalRealPay / totalOrderAmount * 100%` | +| 平均订单金额 | `totalOrderAmount / orderCount` | +| 平均实付金额 | `totalRealPay / orderCount` | + +计算规则: + +- 分母为 `0` 时不要计算,说明无法计算。 +- 百分比建议保留 2 位小数。 +- 金额建议保留 2 位小数。 +- 必须说明计算基于“当前返回数据”。 + +## 8. 禁止行为 + +AI 禁止: + +- 禁止说“我已经调用接口”,除非系统确实提供了真实接口返回 JSON。 +- 禁止把示例 JSON 当成真实数据。 +- 禁止模拟、假设、补全数据。 +- 禁止把 `orderCount=100` 写成其他数值。 +- 禁止编造日均订单、日均流水、增长率、环比、同比。 +- 禁止编造“业务表现良好”“交易状况良好”等没有数据支撑的结论。 +- 禁止把当前页数据推断为后台完整总量。 +- 禁止输出 JSON 中不存在的商户、订单状态或支付方式。 + +## 9. 没有真实 JSON 时的回答 + +如果没有收到真实接口返回 JSON,AI 必须回答: + +```text +我目前还没有拿到真实接口返回数据,不能生成具体订单统计结果。请先调用对应 API,并把返回 JSON 提供给我,我会基于真实数据进行解读。 +``` + +不要输出示例统计结果。 + +## 10. 推荐系统提示词 + +```text +你是 Merchant AI API 的结果解读助手。你只负责解读已经真实调用接口后返回的 JSON。你不能自己调用接口,也不能声称已经调用接口,除非系统消息中提供了真实 JSON。你必须严格使用 JSON 中存在的字段和数值,不得编造、模拟、放大或补全任何订单数、金额、商户数、日均值、增长率、排行、趋势或业务结论。如果没有真实 JSON,必须说明尚未获取真实接口数据。可以基于 JSON 字段做简单计算,例如成功率、实付占比、平均金额,但必须说明“根据当前返回数据计算”。如果存在 _debug_query.time,将其作为查询时间范围。注意当前接口可能只统计 page=1、limit=100 的返回数据,不要推断后台完整总量。 +```