错误与失败恢复
技术失败抛出 IntentError,不把截断候选或设施异常返回为正常成功。字段问题保存在正常结果 issues。
没有结果时先看是否抛错;有结果但缺订单号时先看fieldResults与issues。超时、认证失败和缺少用户信息需要不同的恢复动作;不要统一重试。Codex没有工具或无法启动先查登记与启动,随后再排查识别本身。
完整恢复过程是“确认 code/问题类别 → 修复对应输入或配置 → 显式新调用 → 检查新结果”,不是默认重试所有失败。MCP 外层错误形式见信封。
语义问题包括 AMBIGUOUS_REFERENCE、INTENT_INFORMATION_MISSING、CONSTRAINT_CONFLICT、RELATION_CONFLICT、CONTEXT_CONFLICT、CONTEXT_INCOMPLETE、UNCONFIRMED_INFERENCE。字段码包括 FIELD_REQUIRED_MISSING、FIELD_APPLICABILITY_UNKNOWN、FIELD_CARDINALITY_MISMATCH、FIELD_VALUE_INVALID、FIELD_DEPENDENCY_MISSING、FIELD_VALIDATION_UNDETERMINED、FIELD_INVALIDATED。
按发生位置恢复
先区分正常结果里的issues和技术异常。歧义、缺字段、字段无效通常是识别结果的一部分,不应统一当成网络失败重试。
这些恢复动作属于调用方流程,不会由Runtime自动执行。host的格式纠正仅针对明确反馈;与知识缺失、字段unknown或业务授权分开。
序列化只包含 name/code/message/stage 和安全 details;cause 不枚举。标准技术错误消息稳定为通用英文,不包含用户原文或密钥。MCP 技术错误以 isError=true 与文本 {error: ...} 返回,不附 structuredContent 或 partialResult。
应用保存此前结果与原始消息;失败不会替应用清空状态。技术重试由调用方显式决定。新旧请求乱序由应用 revision 控制。字段未知不触发模型自动补事实。
上例是调用方辅助函数,不是SDK新增方法;Intent生命周期仍由调用方管理。PROCESSING_INCOMPLETE仅出现在技术失败已核实的partialResult中,不表示一份被截断的文本可当作正常结果。默认toJSON不附partialResult,完整结果可能含原始材料;明确需要时再用serialize选项,见IntentError。