如何读取结果

输入“查询订单000123,不取消订单”,首先看查询目标与禁止取消的约束。只有显式配置Schema并选择orderId后,才额外提取字符串编号。

下面是阅读摘要,不是精简版API响应。真实结果保留所有必返字段,见完整响应结构。

你关心的问题读取位置本例应表达的含义
用户要做什么effective.intents及其children中的goal查询订单000123
有什么限制effective.constraints和各意图constraints禁止取消订单;同时考虑父级与全局作用域
提取了哪些参数对应意图的inputs选择orderId后保留字符串"000123"
参数能否使用fieldResults找到对应container、intentId和path的状态
需要问用户什么issues的message、questions、candidates按具体问题补充信息,不自行选一个候选
哪些是推断inferences检查推断对象、依据及可选candidate,不当作用户确认
这轮改了什么turn.kind、intentIds、changes关联本轮目标;changes不是业务执行指令

先读目标,再决定是否使用参数

先核对 effective 中的目标、全局和局部约束,再读 issues;只有需要业务参数时才继续按归属读取字段。没有结果时,先区分程序抛错与正常返回但没有操作意图,见失败分流。

按归属读取字段

下面是应用中的辅助函数,不是SDK新增API。它返回本轮已经检查且确定的字段;未出现本轮报告的继承值需要单独按业务规则处理。

function readOrderIds(result) {
  const nodes = new Map();
  function visit(items) {
    for (const node of items) {nodes.set(node.id, node); visit(node.children);}
  }
  visit(result.effective.intents);
  return result.fieldResults
    .filter(field => field.container === 'inputs' && field.path === '/orderId' && field.status === 'present')
    .map(field => ({intentId: field.intentId, orderId: nodes.get(field.intentId)?.inputs.orderId}));
}

多个订单要按intentId区分,不能把所有编号写到第一个目标。合法的false、0、空字符串不等于缺失;explicit_null表示明确且Schema允许的null。unknown、invalid、invalidated等状态不提供可直接使用的确定值,详见字段状态。

事实、歧义和失败

  • “订单编号是000123”是陈述。选中orderId时,值在turn.facts,fieldResults的container为facts、intentId为null;没有查询意图可供执行。
  • “处理这个订单”但没有对象材料时,读取issues并向用户澄清。下一轮显式传相关Context;不凭空查找历史。
  • status=complete表示当前意图理解的完整度,不保证所有字段齐全或合法,也不表示授权或已执行业务。status=partial仍可能含可确定部分。
  • 技术失败通过IntentError或MCP错误信封返回。保存之前的结果与原消息,按错误与恢复处理,不用空结果覆盖状态。

根据结果决定下一步

观察到什么如何处理不应得出的结论
complete,所需字段本轮 present/explicit_null按归属读取确定值;结合业务要求决定后续不等于获授权或已经执行
complete,但某个字段 invalid/invalidated不使用该字段;按相关 issues 修正或补充,再识别不能仅检查根 status 就使用所有参数
partial,含歧义或未解决对象使用已确定部分展示理解,按 questions 澄清不自行选候选、不丢弃其余明确限制
没有意图,有 turn.facts保存或展示所选事实;后续显式续传不凭事实新增查询或设置动作
有 inferences把候选与已确认信息区分,必要时澄清推断不是默认值或用户承诺
抛异常/MCP isError=true按错误码恢复;保留此前状态不是空成功结果,也不应盲目重复调用
修改或撤回核对 effect 和 scope/coverage,更新对应意图快照changes 不是可直接执行的业务 patch

“补充材料”与“修复配置”是两条路径:用户没给订单号时应澄清;选择 orderId 却没配 Schema 时应修复实例配置。完整前后结果见场景下载。

接下一轮

把本次effective作为baseline可保留目标与身份;事实、问题、候选按需放到context。应用负责结果存储、并发顺序、授权和业务动作,见多轮对话。