01 修改代码
harness.js模型是固定剧本,你来补上 Harness。
接口速查:ctx 里有哪些数据、能调用哪些工具
- onRefundTimeout(ctx)
- 第一次退款超时,或新实例接手任务时调用。可以调用工具。
- canComplete(ctx) → true / false
- 模型申请完成时调用。返回 true 才告诉客户已退款;否则转人工。这里只做判定,不能调用工具。
- ctx.order → { id, amount }
- 当前订单和退款金额。
- ctx.attempts → [{ idempotencyKey, sentAt, by, result }]
- 发出去的请求记录。result 为 null 表示没有回执。存在进程之外,重启后仍可读取。
- ctx.evidence → [{ at, source, status, refundId }]
- 回执与查询结果。status 为 succeeded / processing / not_found。
- ctx.reason · ctx.model · ctx.now() · ctx.deadline
- 调用原因 timeout / restart;模型的话(完成时 says 是 done);当前模拟时间;180 秒任务期限。
- await ctx.tools.refund(id, amount, { idempotencyKey }?)
- 返回 { status, refundId, idempotencyKey }。同一个键重发只返回原结果,不传键会生成新键。
- await ctx.tools.queryRefund(id)
- 返回 { status, refundId },查询这张订单的真实退款状态。
- await ctx.tools.wait(seconds)
- 推进模拟时钟。不要用 setTimeout;那不会推进时钟。
- await ctx.tools.askHuman(reason)
- 转人工,之后不能再调用工具。
每次调用函数都可能是全新进程。任务期限 180 秒,最多调用工具 40 次。
编辑器快捷键:在代码框内按 ⌘ / Ctrl + Enter 运行全部场景;Tab 缩进;Shift + Tab 移出代码框。
正在载入编辑器…
02 运行反馈
—等待运行
先运行一次,看看哪里出问题
运行后会显示结论、场景和改进建议。
代码已修改。下面是上次运行的结果,请重新运行。
- 先看左侧的两个函数一个处理退款超时,一个决定能否确认完成。
- 运行后,在这里找原因先看结论,再看失败场景和关键事件。
- 改好再运行接口就在代码上方,提示就在问题旁边。
示范不覆盖你的代码,也不计入你的成绩。
执行过程 · 银行与账户为真实状态,Agent 未必知道
Agent→退款接口→到账 0 笔
当前显示最终状态
关键事件 · 按发生顺序
需要一点提示?本场景提示
查看完整日志
银行与账户行是上帝视角;Agent 只能看到回执和查询结果。含任务结束后的到账事件。