验收场景与预期结果
基准数据与口径
使用独立演示数据库的初始样本。查询条件为 paid_on=2026-10-10、as_of=2026-10-11T12:00:00+08:00,授权店铺为 A。日期按上海时区,超时为严格超过 24 小时且订单当前状态为 paid。
| 订单 | 基准判断 | 报告应如何解释 |
|---|---|---|
| A1001 | 纳入异常 | 当前可用库存不足,可能影响发货,仍需核实 |
| A1002 | 纳入异常 | 存在 warehouse_hold 履约记录,需要核验拦截原因 |
| A1003 | 纳入异常 | 现有证据不足,原因待确认 |
| A1004 | 排除 | 尚未严格超过 24 小时 |
| A1005 | 排除 | 当前已发货 |
| A1006 | 排除 | 当前已取消 |
| B1001 | 不可见 | 不属于 Agent 授权店铺 |
固定 as_of 用于计算超时,不代表系统提供历史数据回放。库存与订单状态均来自读取时的数据。
场景表
写入场景使用独立测试数据库,或明确记录已有工单。每个新任务使用不同的 request_id;模拟同一任务重试时保留原编号。
| 编号 | 场景与输入 | 预期结果与核对点 |
|---|---|---|
| S01 | 基准条件查询订单 | total=3,集合为 A1001、A1002、A1003 |
| S02 | limit=2, offset=0,再按 next_offset 查询 | 首批 A1001、A1002;第二批 A1003,最终 next_offset=null |
| S03 | 查询无订单的支付日期 2026-10-09,保持基准 as_of | total=0、items=[]、next_offset=null;不解释成接口失败 |
| S04 | 请求 limit=0、limit=101 或负数 offset | HTTP 参数校验拒绝,不执行无限制查询 |
| S05 | as_of 不带时区或使用错误日期 | HTTP 422;报告不擅自补出结果 |
| S06 | 无令牌或错误令牌查询 | HTTP 401,无订单数据泄露 |
| S07 | 使用 Agent 身份查询 B1001 证据 | HTTP 404,不返回其他店铺订单、库存或履约 |
| S08 | 校验样本中的正常记录 | valid=true,统计数量与输入一致 |
| S09 | 校验缺失字段或类型错误记录 | valid=false,issues 说明数据问题;与执行失败区分 |
| S10 | 基准条件启动工作流 | awaiting_approval,报告三单,工单为空 |
| S11 | 相同请求编号与相同参数再次启动 | 返回相同 workflow_id,不创建第二个任务 |
| S12 | 相同请求编号改成不同日期 | HTTP 409,不能覆盖原任务的范围 |
| S13 | 未审批直接调用恢复工具 | HTTP 409,数据库无新增工单 |
| S14 | Agent 令牌调用人工决策接口 | HTTP 403,不能自我批准 |
| S15 | 审批人批准后恢复 | completed;在没有已有工单、订单未变化时,创建 TK-A1001、TK-A1002、TK-A1003 |
| S16 | S15 后再次恢复 | 不增加工单数量,返回已有处理结果 |
| S17 | 新工作流处理同样订单,批准后恢复 | 复用每单已有工单,结果可出现 outcome=existing |
| S18 | 独立工作流被审批人拒绝,然后恢复 | rejected,此流程不创建工单 |
| S19 | 无异常日期启动工作流 | no_action,无报告条目和工单,不要求无意义审批 |
| S20 | 等待审批时停止 API,使用原数据库与检查点重启 | 原 workflow_id 可查询,继续审批、恢复;不能生成新编号冒充恢复 |
| S21 | 审批后、恢复前,测试库中一单已发货 | 该单 outcome=skipped_changed,不按旧报告创建工单 |
| S22 | 人工审批同一决定重复提交,再尝试相反决定 | 同一决定可复用;改写已有决定被拒绝 |
| S23 | API 无法连接或返回超时 | MCP 返回执行错误;不能声称没有异常订单或写入一定未执行 |
| S24 | 构造超过 100 单的独立样本启动工作流 | 拒绝超限批次,不静默处理前 100 单并报告全部完成 |
| S25 | 将付款时间设置为恰好距基准时间 24 小时 | 不纳入异常;更早一秒且满足其他条件时纳入 |
| S26 | OpenAI、DeepSeek 分别运行同一自然语言请求 | 分别核对三单、完整分页、证据、不确定性和审批;保存各自真实轨迹 |
S21、S24、S25 的数据变更只用于独立测试样本。可以通过测试夹具构造,不修改共享业务库来制造异常。
可执行验证入口
在工程目录运行:
powershell
uv run --frozen pytest -q
uv run --frozen python -m app.smoke_mcp已有业务 API 启动、初始化完毕,且当前终端设置了正确 Agent 环境变量时运行:
powershell
uv run --frozen python -m app.smoke_mcp --with-api自动化测试的源码见 tests。场景表是完整验收目标,不能仅凭测试命令退出成功就认为所有场景、数据库和模型路线都已覆盖。实际覆盖项应以测试代码、运行记录及真实客户端证据为准。
模型侧请求
text
使用 ecommerce-order-investigation。
查询店铺 A 在 2026-10-10 支付的订单,判断基准是
2026-10-11T12:00:00+08:00,筛选付款超过 24 小时仍未发货的订单。
每页 2 条,读取所有页,分别查询库存和履约证据。
输出订单、证据、可能原因、建议和待确认事项。先不要创建工单。报告必须包含 A1001、A1002、A1003,明确所查日期、时区和超时口径。A1003 不能编造物流商故障;A1001 不能把当前库存快照写成已经证实的历史根因。没有审批记录时,模型不得声称工单已创建。
验收记录格式
| 字段 | 记录内容 |
|---|---|
| 场景 | 场景编号、目的 |
| 环境 | 操作系统、Python、锁文件版本、MySQL 或 SQLite、客户端版本 |
| 模型 | 名称、接入路线;非模型测试填“不涉及” |
| 输入 | 样本版本、日期、时区、分页、请求编号 |
| 预期 | 订单集合、状态、HTTP 结果、允许发生的写入 |
| 实际 | 原始响应、工具轨迹、报告、工单查询结果 |
| 判定 | 通过、失败或未执行;没有证据时不得填通过 |
| 复核 | 问题原因、改动范围、再次执行结果 |
记录中隐藏令牌和真实客户信息。completed 是工作流结果,不是发货凭证;业务状态应以相应系统的实际记录为依据。
