让 AI 查询一笔订单,是企业助手进入业务后台的好起点。
但查询成功以后,新的问题很快会出现:
AI 已经知道订单逾期未发货了,接下来能不能直接帮用户做点什么?
很多团队会立刻想到退款、取消订单或修改状态。可这些动作会直接改变资金、库存和履约关系,第一次接入就从这里开始,往往会把权限、审批、参数漂移、幂等和异常恢复等问题一次性叠在一起。
一个更适合的首个写操作,是创建工单、提交申请或补充跟进记录。
它能让 AI 的输出真正进入业务流程,又通常不会直接替代原来的处理人员和最终业务决定。
本文以“查询订单后创建催发货工单”为例,拆解从会查到会办之间必须补齐的工程边界。
一、为什么“创建工单”适合作为第一项写能力
一项适合首轮验证的写操作,最好具备四个特点。
1. 它会形成真实业务结果
工单不是一段聊天文本。创建成功后,业务系统中会出现编号、状态、责任队列和后续处理过程。
这能证明 AI 已经从“提供建议”进入“推动流程”。
2. 它不会立即完成高后果决定
催发货工单会提醒仓库或客服处理,但通常不会直接划转资金、扣减库存或关闭账号。
原来的业务人员仍然可以核对和处理。
3. 它容易核验
用户可以打开后台确认:
- 工单是否真的存在;
- 关联的订单是否正确;
- 问题描述是否完整;
- 创建人和来源是否清楚;
- 是否出现了重复工单。
4. 它能暴露真实工程问题
虽然创建工单风险低于退款,但它仍会暴露写操作不能回避的基本问题:身份、租户、参数校验、重复执行、不确定结果和审计。
如果连创建一张工单都不能稳定处理这些问题,就不应该急着开放更高风险动作。
二、从一句自然语言到一张工单,中间发生了什么
用户可能只说:
这个订单等三天了还没发货,帮我催一下。
模型可以理解“催一下”可能对应创建催发货工单,但它还缺少很多业务事实:
- “这个订单”具体是哪一笔;
- 当前用户是否有权查看和处理;
- 订单是否已经发货;
- 是否已经存在同类未关闭工单;
- 工单应该进入哪个队列;
- 创建动作是否真的成功。
因此,正确链路不应该是:
用户说“催一下”
-> 模型生成一段 JSON
-> 直接写数据库
而应该是:
用户提出需求
-> 查询订单当前状态
-> 业务系统返回真实结果
-> Agent 形成候选动作
-> 用户确认或策略允许执行
-> 业务系统再次校验身份、租户、订单状态和重复请求
-> 创建工单
-> 返回真实工单编号
-> Agent 告知结果
查询不是多余的一步。它给写操作建立了当前业务上下文,也让用户能在执行前看见 AI 依据的事实。
三、工单接口不能只接收一段“问题描述”
一个过于宽松的接口可能只有:
{
"content": "用户很着急,请尽快发货"
}
这对普通表单也许够用,但对 Agent 写操作并不理想。业务系统无法可靠判断这段话关联哪张订单、谁发起、是否重复,也很难在发生问题后还原原因。
更适合的请求结构至少应包含明确业务字段:
{
"order_id": "ORDER-20260807-001",
"ticket_type": "shipment_delay",
"summary": "订单已付款三天仍未发货,请核查发货进度",
"idempotency_key": "job_7f8c...:after_sales_ticket_create"
}
而下面这些信息不应该由模型随意填写:
tenant_id
operator_user_id
operator_role
approval_result
trusted_request_source
它们应该来自登录系统、网关或 Agent 控制面建立的可信上下文,并由业务系统再次核对。
模型可以写工单摘要,但不能靠写一句“我是管理员”获得管理员身份。
四、先查询,再写入,但不能相信旧查询永远有效
假设 AI 在 10:00 查询到订单状态为“待发货”,用户在 10:02 确认创建催发货工单。
两分钟内,仓库可能已经发货,另一个客服也可能已经创建同类工单。
因此,创建接口不能因为前面查过一次,就跳过执行时校验。
业务系统在写入前仍然应该判断:
订单是否存在
AND 订单是否属于当前租户
AND 当前用户是否有操作权限
AND 订单当前仍满足催发货条件
AND 没有需要阻止重复创建的未关闭工单
这就是业务系统保留最终授权的意义。
Agent 控制面可以限制工具可见范围、绑定可信主体、要求确认并记录过程,但订单的实时状态只在业务系统中最权威。
前面查到的结果是决策依据,不是永久通行证。
五、用户需要确认什么,而不是机械地点一个“同意”
创建普通备注和创建退款工单的风险并不相同,是否要求人工确认可以由企业按动作风险决定。
但如果需要确认,界面应该让用户看懂即将发生什么:
动作:创建催发货工单
订单:ORDER-20260807-001
当前状态:已付款,待发货
问题类型:shipment_delay
工单摘要:订单已付款三天仍未发货,请核查发货进度
不要只显示:
AI 请求调用
after_sales_ticket_create,是否允许?
后者对开发者可能有意义,对客服和运营人员却不够清楚。
人工确认真正应该绑定的是具体动作和具体参数,而不是一个抽象的“允许 AI 操作”。如果确认后模型又更换了订单号或工单类型,原确认就不应继续生效。
对于低风险工单,企业也可以设置为不逐次审批,但仍需要可信身份、参数约束、幂等和完整记录。Human-in-the-loop 不是所有写操作的唯一答案,明确的风险分层才是。
六、为什么幂等是首个写操作必须补的一课
一次创建请求可能遇到:
- 用户连续点击两次;
- 浏览器超时后自动重试;
- Agent 任务恢复后再次调用;
- 业务系统已经写入,但响应在网络中丢失;
- 控制面不知道上一次请求到底成功还是失败。
如果接口每次收到请求都创建新工单,一句“帮我催一下”可能变成三张重复工单。
所以调用方应为同一次逻辑操作生成稳定的幂等键:
Idempotency-Key: job_7f8c...:after_sales_ticket_create
业务系统保存幂等键与结果。相同键再次到达时:
- 参数一致:返回第一次创建的工单结果;
- 参数不同:拒绝复用,提示幂等键冲突;
- 第一次结果仍不确定:返回可查询状态,而不是直接再创建一次。
幂等不是让模型“尽量不要重复调用”,而是让系统在重复请求真正发生时仍能保持业务结果唯一。
七、HTTP 200 也不能代替真实业务结果
Agent 最终应该告诉用户:
已创建催发货工单
TICKET-8921,当前状态为“待处理”。
而不是只说:
已为你处理。
一个可用的写操作响应至少要包含:
{
"ticket_id": "TICKET-8921",
"status": "pending",
"order_id": "ORDER-20260807-001",
"created_at": "2026-08-07T14:30:00+08:00"
}
如果接口采用异步处理,也应返回可查询的任务或工单标识,而不是让聊天端根据一个 202 Accepted 猜测业务已经完成。
还要区分三种结果:
| 状态 | 含义 | Agent 应怎样回答 |
|---|---|---|
| 明确成功 | 工单已创建并返回编号 | 告知真实编号和状态 |
| 明确失败 | 权限、状态或参数校验拒绝 | 说明未创建以及可理解的原因 |
| 结果不确定 | 请求可能已到达,但暂时无法确认结果 | 不自动重复创建,先按幂等键查询 |
“请求发出去了”和“业务结果已经成立”是两回事。
八、一次工单创建,至少要留下哪些证据
后续排查不能只依赖一段聊天记录。
一条有用的执行记录至少应该能回答:
- 谁提出了需求;
- Agent 使用了哪项能力;
- 可信业务主体是谁;
- 最终执行参数是什么;
- 是否经过确认或哪项策略允许执行;
- 业务系统接受、拒绝还是结果不确定;
- 生成了哪个真实工单;
- 是否发生过重试或幂等命中。
应用日志可以记录代码运行情况,业务日志可以记录工单变化,Agent Trace 可以还原模型、工具选择和任务过程。三者可以关联,但不能用一句模型输出代替全部证据。
九、用 BailingHub 跑通“查询订单 + 创建工单”
BailingHub(百灵中枢) 是一个开源、自托管的 Agent-to-Business(A2B)控制面。它可以把查询订单和创建工单作为两项明确的业务能力接入同一条 Agent 运行链路。
在这个场景中,合理分工是:
| 组件 | 负责什么 |
|---|---|
| 商城或 CRM | 提供订单、客户和工单 API,完成最终业务授权与幂等写入 |
| OpenAPI / 工具源 | 描述 Agent 可以发现的查询与创建能力 |
| BailingHub | 组织工具发现、可信上下文、运行控制、任务状态和 Trace |
| 模型 | 理解用户需求、选择候选能力、组织可解释的结果 |
| 原有用户与权限系统 | 证明当前操作者是谁、属于哪个租户、拥有哪些业务权限 |
实际接入不需要先把全部商城接口交给中枢。可以只开放:
order_get
after_sales_ticket_create
然后使用四组请求验证:
- 正常用户查询自己的订单并创建一张工单;
- 尝试查询其他租户订单,必须被拒绝;
- 相同幂等键重复调用,必须返回同一工单;
- 查询后修改订单状态,再执行创建,业务系统必须按新状态重新判断。
这四组验证比“AI 能不能调用接口”更接近生产系统真正关心的问题。
BailingHub 可以帮助维持调用过程中的治理和证据,但不会替商城决定订单是否允许创建售后,也不会替企业承担工单处理结果。
十、什么时候可以继续开放退款、改库存等动作
不要按“模型看起来已经很聪明”判断是否升级。
至少等下面这些条件稳定成立:
- 身份和租户上下文从可信入口传递;
- 查询结果不会被模型凭空补全;
- 首个写操作具备可靠幂等;
- 明确成功、明确失败和结果不确定能够被区分;
- 业务系统每次都做最终状态与权限校验;
- Trace 可以关联到真实业务对象;
- 业务人员知道如何处理失败、重试和人工接管。
然后再逐项增加:
创建工单
-> 提交退款申请
-> 人工审批后执行退款
-> 修改库存或其他高后果动作
每增加一项能力,都重新评估风险、审批、参数绑定、幂等、失败恢复和审计,而不是把第一项工具的配置复制过去。
结语:先让 AI 推动流程,不要一开始就替人做最终决定
企业 AI 助手从“会查”走向“会办”,并不要求第一步就自动退款或修改库存。
创建工单、提交申请和写入跟进记录,已经能让 AI 的输出进入真实业务流程,也能用较低的业务后果检验写操作的基本能力。
真正值得验证的不是模型能否生成一段正确 JSON,而是:
身份可信
-> 查询真实
-> 用户看懂动作
-> 参数受约束
-> 业务系统最终判断
-> 重复执行不重复产生后果
-> 结果和证据可以还原
如果你的 AI 助手已经能查后台,最想让它完成的第一项写操作是什么?
- 创建售后工单;
- 提交补货申请;
- 写入 CRM 跟进记录;
- 还是一个更适合你们业务的低风险动作?