CCA-F 练习题库· Tool Design & MCP Integration
某个 MCP 工具在找不到论文时返回 {"isError": false, "results": []}。另一个工具在发生连接故障时返回 {"isError": true, "message": "Database timeout"}。一位同事提议把两者统一为 {"status": "no_results"}。为什么这样做有问题?
- AisError 是每个 MCP tool result 的必填成员,省略它就不符合规范,统一后的结构非法。
- Bagent 遇到 isError 为 true 时总会重试,统一后会让 coordinator 在空结果上陷入无谓的重试循环。
- C把访问失败和合法的空结果混为一谈,会让 coordinator 无从判断是否该重试 —— 从而摧毁恢复逻辑。
- Dstatus 字段不属于被认可的 MCP 响应格式,按规范校验 tool 输出的客户端会拒绝它。
正确答案:C
解析
- C正确。在 MCP 中,isError:true 表示“工具无法完成此次查询”(例如 “Database timeout” 这类连接/访问故障),而 isError:false 加上 results:[] 表示“查询成功执行且没有找到任何结果”。这两者要求 coordinator 做出相反的反应:访问失败应当重试或升级,而合法的空结果则应被接受,让 agent 转向替代方案继续推进。把两者都塌缩成 {"status":"no_results"} 会使它们无法区分,从而摧毁了重试/恢复逻辑所依赖的信号。各干扰项都是错的。
- A与事实不符(isError 是可选字段,默认为 false,并非必填)。
- B过于绝对(“总是在 isError:true 时重试”)且错误地刻画了危害。
- D则不在点子上,因为 tool 输出可以携带任意结构化字段 —— 真正的缺陷是语义上的混淆,而不是格式合规问题。
延伸阅读
本题为本站自有原创练习题,非任何官方考试内容;解析对照 Anthropic 公开文档撰写, 如与最新文档不符请以官方为准。想在限时环境下检验水平,可参加 模拟考(题目与本页题库不重叠)。