21 道工具设计与 MCP 集成练习题及答案
Claude 认证架构师(基础级)考试练习的全部工具设计与 MCP 集成练习题,附正确答案和简短解析。
开始练习测验 →1. 一条多代理研究流水线同时提供 analyze_content 和 analyze_document,两者的描述都只有一句话,都写着"分析所提供的材料"。测试中约有 40% 的网页搜索结果被错误地路由到了 analyze_document。最有效的第一步是什么?
- A.在系统提示中加入规则:网页搜索结果一律路由到 analyze_content,PDF 文档一律路由到 analyze_document。
- B.在模型之前加入一层确定性的关键词路由器,先检查输入的来源特征,再直接调用与之匹配的那个工具。
- C.将两个工具合并为单一的 analyze 工具,新增 source_type 参数,由调用方在每次请求里显式指定。
- D.扩写两个工具的描述,说明各自用途、可接受的输入格式、示例调用,以及何时应当改用另一个工具。✓ 答案
工具描述是模型选择工具时依据的首要信号,两条几乎相同的一句话描述让模型无从区分,靠系统提示反复叮嘱也无法弥补。把描述扩写为用途、输入格式、示例以及与相邻工具的明确边界,才是针对真正根因的修复;关键词路由器和合并成大工具都是与描述缺陷不相称的过度改造。
编号 QB-8EC2QU依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.1 (tool descriptions as the primary tool-selection mechanism)报告此题的问题
2. 你正在审查一个客服代理的工具定义。工具描述中包含哪一组内容,最能提升模型选择工具的可靠性?
- A.版本号、负责维护的团队,以及自上线以来新增或删除过哪些参数的变更记录。
- B.与相似工具的边界、可接受的输入格式、示例查询,以及在什么情况下不应使用该工具。✓ 答案
- C.该工具的实现语言、它在内部所调用的服务,以及一次成功请求在生产环境中的平均延迟。
- D.关于该工具调用成本较高的提示,以及要求模型在决定调用前先仔细思考的说明。
工具描述本质上是写给"看不到实现代码的读者"的提示工程,因此必须回答:这个工具做什么、什么时候用、什么时候不该用、接受什么输入、与相邻工具有何区别。实现细节、归属信息和延迟数据都不会进入模型的选择判断,而含糊的"请谨慎调用"也无法告诉模型哪个工具才匹配当前请求。
编号 QB-QW6V4U依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.1 (effective tool interfaces and boundaries)报告此题的问题
3. 某客服代理的 process_refund 工具把 amount 和 reason 都定义为自由文本字符串。由于模型有时发送 "$50.00"、"50 dollars"、"50.00" 等写法,以及政策引擎无法识别的理由文本,调用经常间歇性失败。对工具接口最好的修改是什么?
- A.两个参数仍用字符串,并在系统提示中要求模型在每次调用前先去掉金额里的货币符号。
- B.把 amount 改为指定币种的数值类型,把 reason 改为退款政策允许的类别枚举。✓ 答案
- C.保持现有签名不变,让工具在第一次解析金额失败时自动清洗数值并重试一次该请求。
- D.新增 validate_refund_input 工具,并要求代理在每次 process_refund 之前先调用它。
好的工具参数应当在结构上就难以填错:把金额定义为指定币种的数值类型,可以彻底消除格式歧义;把理由定义为枚举,则消除了政策引擎无法映射的自由文本。提示指令和工具内部的容错清洗都保留了这个有歧义的接口,且失败率不为零;而单独的校验工具增加了一次本可以由模式定义省掉的调用。
编号 QB-7EZPHT依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.1 (input contracts and parameter design)报告此题的问题
4. 两个工具的描述都已扩写,但只要客户消息中出现"政策"一词,代理仍会对订单状态类问题调用 search_kb。系统提示中有一句"政策类问题一律先检索知识库"。正确的诊断与修复是什么?
- A.系统提示里的关键词写法造成了非预期的工具关联,应把那条指令改写成描述条件的表述。✓ 答案
- B.描述仍然太短,应给这两个工具各再补充几句关于边界情况的说明。
- C.模型缺少示例,应加入少样本对话,展示不查知识库也能回答订单状态问题。
- D.工具集过大,应从该代理移除 search_kb,把所有政策类问题交给协调器处理。
系统提示的文字会与工具描述相互竞争,而一条挂在表层词汇上的指令会让模型对该词本身触发,而不是对用户的真实意图触发,从而压过原本良好的描述。正确做法是检查系统提示中对关键词敏感的措辞,把规则改写成它真正想表达的条件;继续加长描述、补少样本示例或直接删掉工具,都没有动到那条肇事指令。
编号 QB-PWTHXS依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.1 (system prompt wording and unintended tool associations)报告此题的问题
5. 同一个 analyze_document 工具被用于数据抽取、内容摘要和论断核验三种用途,而且每次调用返回的输出结构都不一样。哪一项修改最符合指南的工具设计原则?
- A.调高这个工具调用时的采样温度,让模型在分析时能尝试更多不同的策略。
- B.改为多个用途单一的工具,每个工具的输入与输出契约只覆盖一项工作。✓ 答案
- C.把所需的分析模式拼接到传给这个工具的文档正文里一起发送过去。
- D.在这个工具外面再包一层,重跑一次分析并返回看起来更完整的输出。
一个同时承担三种职责的工具,无法给模型提供稳定的契约去推理,其输出结构对下游消费代码而言也不可预测。把它拆成各自只有一个用途、一份明确输出契约的工具,可以消除选择上的歧义;而把模式塞进文档正文、调整采样行为或重复跑一遍分析,都没有触及被过载的接口本身。
编号 QB-6ENCCS依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.1 (purpose-specific tools with defined I/O contracts)报告此题的问题
6. 一个研究子代理需要上报两种不同情况:重试之后仍然无法访问的数据源,以及成功执行但没有匹配到任何论文的检索。在 MCP 工具响应中应当如何分别表示?
- A.两种情况都返回 isError 为假,因为子代理都完成了本轮,后续由协调器决定。
- B.源不可达时返回 isError 为假并附文字说明;零匹配时返回 isError 为真以触发重试。
- C.两种情况都返回 isError 为真,因为协调器在任一情况下都没拿到可用内容。
- D.源不可达时返回 isError 为真;查询执行成功但无匹配时返回 isError 为假并附空结果集。✓ 答案
源不可达意味着这个问题根本没有得到回答,协调器必须重试或改用其他源;而成功访问后零匹配是一次完成的、有效的回答,综合环节可以直接记录。由于两者要求下游采取完全相反的动作,isError 必须把它们区分开,把二者合并成同一个标志会抹掉协调器恢复所需的信息。
编号 QB-NWF7SR依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.2 (isError semantics vs. empty result sets)报告此题的问题
7. 协调器收到一个子代理的响应,其中 isError 为假,results 数组为空。协调器应当怎么做?
- A.用完全相同的查询把该子代理重跑一次,因为返回空负载通常意味着响应被截断了。
- B.把该源标记为不可用并换用另一个源,因为没有内容说明这次检索没有成功。
- C.把空结果视为一条有效发现,记录该源已检索但无匹配,然后继续进入综合环节。✓ 答案
- D.中止流水线并上报人工,因为协调器无法区分数据缺失与工具故障这两种情况。
isError 为假且结果为空,表示工具确实运行过、成功访问了数据源、并且没有找到匹配项,这是一条关于事实的真实答案,而不是调用失败。用同样的查询重跑一次已经成功的调用只会白白消耗一轮并得到同样的空集,而把该源判为不可用或直接上报人工,则是把一次成功的检索误报成了故障。
编号 QB-5EA27R依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.2 (empty results are a valid answer, not a failure)报告此题的问题
8. 某 MCP 服务器上的所有工具在失败时都返回同一句 "Operation failed",并把 isError 置为真。结果代理对政策违规无限重试,却对瞬时超时直接放弃。最有效的修复是什么?
- A.为每次失败返回错误类别、机器可读的可重试标志和一段可读的说明。✓ 答案
- B.让每个工具直接返回原始堆栈信息,由代理自行读取异常类型再做判断。
- C.把失败处理写进系统提示,逐一列出哪些工具可以重试、哪些不可以。
- D.限制每次工具调用最多重试三次,达到上限后立即结束本轮对话。
统一的错误文本剥夺了代理区分"可恢复的超时"与"绝不该重试的业务规则"所需的唯一信息,恢复策略只能靠猜。结构化的错误元数据——标明失败类别、以机器可读方式说明是否允许重试、并用自然语言解释情况——才能让代理针对每种情况选择正确的恢复动作;重试上限和写在提示里的清单只是掩盖了缺失的信号。
编号 QB-VWXHYZ依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.2 (structured error responses: category, retryability, description)报告此题的问题
9. 一个研究子代理查询了四个数据源:其中一个先超时、重试后成功;另一个连续三次返回服务不可用。子代理应当向协调器返回什么?
- A.已成功取回的结果,外加一条结构化说明,写明无法访问的源以及已尝试过的次数。✓ 答案
- B.返回标记为成功的空结果集,以免综合环节被一个不可用的源整个阻塞住。
- C.向协调器只上报一次失败,由协调器来决定整个研究任务是否需要整体重新跑一遍。
- D.把它执行过的每一次超时和每一次重试都上报,让协调器掌握子代理调用的完整记录。
子代理应当在本地自行从瞬时故障中恢复,只把自己无法解决的部分向上传递,并附带已取得的部分结果和已尝试过的动作记录。只报一次笼统失败会丢掉三个正常的数据源;把空结果标记为成功则隐藏了一处覆盖缺口,综合环节会不知不觉地继承它;而把每次重试都转发上去,只会用协调器无法据以行动的细节淹没其上下文。
编号 QB-CESCDZ依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.2 (local recovery and error propagation with partial results)报告此题的问题
10. 在一次代理循环中,同一个助手轮次里发起的三个工具调用,其中一个在你自己的工具执行代码中抛出了异常。循环必须向模型回传什么?
- A.返回一段助手文字,描述这次异常,使模型把失败当作自身推理的一部分读入。
- B.返回一个 tool_result 块,带上失败那次调用的 tool_use id 并标记为错误,追加进历史。✓ 答案
- C.对该调用什么都不返回,另发一条用户消息重述需求,让模型改选别的工具。
- D.只返回成功那几次调用的结果,让模型自己从缺失的编号里推断出哪一次失败了。
工具调用的契约要求每一个 tool_use id 都必须由对应的 tool_result 来回应,因此失败的工具依然要返回一个标记为错误的结果块,而不能被丢弃。省略这个块会留下一个无人回应的 id 并破坏本轮结构;而把失败写成助手文字或另发一条用户消息,都无法让模型把失败与它发出的那次具体调用对应起来。
编号 QB-XY5RTG依据: Anthropic tool use documentation: tool_result must match every tool_use id; failed tools return is_error results报告此题的问题
11. 某个客服代理挂载了十八个工具,随着工具集变大,选择准确率明显下降。最有效的重构方式是什么?
- A.把十八条描述各自压缩成一行,使整套工具定义占用更少的上下文预算。
- B.把十八个工具按预期调用频率排序,让最常用的排在数组最前面的位置。
- C.十八个工具全部留在同一个代理上,并在系统提示中逐一说明每个工具的选用时机。
- D.按角色拆分成多个代理,每个代理只保留其角色真正需要的四到五个工具。✓ 答案
候选集越大,选择可靠性越低,因此解决办法是缩小单个代理需要在其中挑选的范围,只给每个角色分配其工作真正需要的工具。调整数组顺序并不会减少候选数量;压缩描述反而删掉了让选择变可靠的关键细节;而在系统提示中重述十八个工具,只是与描述互相竞争,并没有缩小选择面。
编号 QB-FGBWDH依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.3 (scoped tool access and least privilege)报告此题的问题
12. 一个结构化抽取服务有时收到的是散文式回答而不是工具调用,导致下游解析器出错。哪种 tool_choice 配置能保证模型一定发出工具调用?
- A.把 tool_choice 设为 "any",强制必须调用某个工具,但由模型自行挑选哪一个。✓ 答案
- B.把 tool_choice 设为 "none",屏蔽工具,让模型以纯文本形式返回抽取出的字段。
- C.把 tool_choice 设为 "auto",模型在觉得不需要用工具的时候可以直接用文字作答。
- D.不设置 tool_choice,沿用服务端默认值,模型既可以调用工具也可以返回文字。
"any" 强制本轮必须包含一次工具调用,同时仍允许模型自行判断哪个工具合适,这正是期待结构化参数的解析器所需要的。"auto" 和不设置时的默认值都允许模型用纯文字作答,而 "none" 会彻底关闭工具,等于把服务退回到最初出问题的自由文本形式。
编号 QB-WYSDNF依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.3 (tool_choice: auto, any, forced tool)报告此题的问题
13. 某富化工作流要求 extract_metadata 必须在任何富化工具之前执行。保证这一顺序最可靠的做法是什么?
- A.在系统提示中写明所需顺序,同时让 tool_choice 保持在宽松的默认取值上。
- B.把 extract_metadata 排在工具数组第一位,使模型先看到它。
- C.把抽取和富化合并成一个工具,使先后顺序固定在实现代码内部。
- D.第一轮用具名强制的方式指定该工具,之后的轮次再让模型在若干富化工具中自行选择。✓ 答案
按名称强制指定某个工具,可以让第一轮的行为完全确定,后续步骤再在随后的轮次中由模型自由选择。工具在数组中的位置并不提供任何顺序保证;在宽松的 tool_choice 下,写在提示里的顺序要求存在不为零的失败率;而把两个阶段合并,则牺牲掉了富化步骤所需要的灵活性。
编号 QB-EGYJ8G依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.3 (forced tool selection to guarantee ordering)报告此题的问题
14. 某代理的工具面已经大到工具定义本身就占用了相当比例的上下文窗口。当工具定义被延迟加载、按需检索时,规则是什么?
- A.可以把定义全部延迟,工具数组留空,完全靠系统提示来完成工具的发现工作。
- B.只有在工具集固定不变时才能延迟加载定义,而且每次请求都要把整套定义重新载入一遍。
- C.可以延迟定义,由检索工具在需要时取回,但必须始终保留至少一个已加载的工具。✓ 答案
- D.可以按对话轮次延迟定义,因此模型在每一轮看到的工具子集都可能不一样。
延迟加载定义,是用"按需查找"换取前期上下文的节省,但模型仍然需要一个已加载的入口来执行这次查找,因此请求中必须至少保留一个工具。工具数组完全为空会让模型没有任何发现机制;而"只允许静态工具集"或"每轮换一批子集"都不是延迟加载的实际工作方式。
编号 QB-ZYUD6K依据: Anthropic tool use documentation: deferred tool definitions with on-demand tool search require at least one loaded tool报告此题的问题
15. 模型在同一个助手轮次中返回了三个 tool_use 块,你的执行框架并发地执行了它们。这些结果必须如何回传给模型?
- A.把三份结果拼接成一个 tool_result 块,只引用第一次调用的那个编号发回去。
- B.放在同一条用户消息里但省略编号,因为结果顺序已经和调用顺序一一对应了。
- C.三个 tool_result 块放在同一条用户消息里,各自带上它所回应的调用编号。✓ 答案
- D.每个 tool_result 各自放在一条用户消息里,按三个工具执行完成的先后顺序发回。
同一个助手轮次产生的所有工具结果都应放在同一条用户消息中,每个块引用它所回应的 tool_use id,因为模型正是这样看到自己的并行调用被一并解决的。把它们拆到多条消息里,会让模型学到并行调用不会被成批回应,从而抑制它今后再发起并行调用;而拼接结果或省略编号则直接破坏了编号匹配的硬性要求。
编号 QB-HG2KRK依据: Anthropic tool use documentation: all tool_result blocks for one assistant turn go in a single user message报告此题的问题
16. 你的代理使用了一个服务端工具,它在服务提供方的基础设施上执行,并在同一条响应中返回结果。调用方代码如何得知这个工具失败了?
- A.失败会作为结果块出现在同一条响应里,调用方需要按结果的形状分支处理。✓ 答案
- B.响应里会缺少那个块,调用方需要把返回块数和请求做比对才能发现这次失败。
- C.调用方必须像对待自托管工具那样,自己为这次失败补发一个 tool_result 结果块。
- D.该请求会抛出 API 错误,调用方捕获异常后把整条消息请求整体重发一次。
服务端工具是在服务提供方的这一轮内部执行的,因此它的结果——包括失败——都会作为同一条响应中的结果块回传,而不是以传输层异常的形式抛出。调用方因此必须检查返回块的形状,而不能指望捕获异常;对于并非由自己执行的工具,调用方也不需要再补发 tool_result。
编号 QB-YYG3ZH依据: Anthropic tool use documentation: server-side (provider-executed) tools report failures as result blocks in the same response报告此题的问题
17. 某团队共用的 Jira MCP 服务器配置写在每位开发者各自的 ~/.claude.json 里。新同事克隆仓库后发现所有 Jira 工具都不可用。正确的修复是什么?
- A.保持配置位置不变,改为在项目根目录的 CLAUDE.md 中写明需要哪些工具。
- B.让每位同事在克隆仓库之后,把同样的配置块复制到自己的 ~/.claude.json 里。
- C.把该服务器条目移到随仓库一起提交的项目级 .mcp.json 中,这样每次克隆都会加载它。✓ 答案
- D.把条目移到仓库的 .claude/settings.json,那是唯一会加载 MCP 服务器的文件。
~/.claude.json 属于用户级配置,只在一台机器上生效,永远不会随代码一起分发,这正是新克隆的仓库看不到 Jira 工具的原因。团队共享的工具配置应当写在随仓库提交的项目级 .mcp.json 中,使每次检出都得到同一套服务器;靠手工复制只会重新引入配置漂移,而只写文档则根本不会完成任何配置。
编号 QB-GGP8KJ依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.4 (project .mcp.json vs. user ~/.claude.json scoping)报告此题的问题
18. 一个项目级 .mcp.json 需要配置一台需要访问令牌的 GitHub MCP 服务器,而该文件会被提交进仓库。正确的做法是什么?
- A.整个服务器条目都不纳入版本控制,改由每位开发者在自己的机器上各自定义。
- B.把令牌写在项目的 CLAUDE.md 里,让代理读取后在每次调用时把它传进去。
- C.在提交的文件里用 ${GITHUB_TOKEN} 引用令牌,由各台机器提供实际取值。✓ 答案
- D.把令牌明文提交到该 .mcp.json 文件里,依靠私有仓库的访问控制来保护它。
环境变量展开让提交进仓库的配置只声明"需要哪个凭据",而从不包含它的取值,于是共享条目可以留在版本控制中,同时各台机器各自提供自己的密钥。把令牌明文提交,无论仓库是否私有都会把一份有效凭据写进历史;把条目移出仓库则失去了共享的意义;而 CLAUDE.md 是会被加载进上下文的内容,并不是存放密钥的地方。
编号 QB-3ZJ3HN依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.4 (environment variable expansion in .mcp.json)报告此题的问题
19. 一个连接到数据库 MCP 服务器的分析代理,在能够回答任何问题之前,要花费大量调用去弄清有哪些表和字段。给该服务器增加什么,最能消除这段探索开销?
- A.提供一个资源,公开数据库的表结构目录,使代理无需额外的探索性调用就能知道有哪些数据。✓ 答案
- B.提供一个提示模板,指导代理先猜测表名,再用一次查询逐个验证是否存在。
- C.提供一个 list_tables 工具,让代理先调用它,每个会话返回一次目录。
- D.另起一台服务器专门做结构查询,使探索流量不与查询负载互相争抢资源。
MCP 把"工具"和"资源"区分开:工具是可执行的动作,资源则是客户端无需调用即可呈现的上下文数据与内容目录。把表结构作为资源发布,代理就能以上下文的形式直接看到有哪些数据,而不必用工具调用去查;list_tables 工具仍然要消耗一次调用,提示模板只是把猜测流程正规化,另起一台服务器则增加了基础设施却没有降低发现成本。
编号 QB-KGR84P依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.4 (MCP primitives: tools, resources, prompts)报告此题的问题
20. 你正在设计一台 MCP 服务器,让代码生成代理能够访问内部文件系统。哪一种设计最符合推荐的安全姿态?
- A.只开放允许清单内的目录,并把返回的文件内容一律当作不可信输入处理。✓ 答案
- B.以只读方式开放整个文件系统,因为只读的服务器不会修改任何东西。
- C.开放整个仓库根目录,用拒绝清单屏蔽 .env 和密钥目录等敏感路径。
- D.开放完整读取权限,靠系统提示约束代理不要去打开不该打开的那些文件。
最小权限意味着服务器只暴露任务真正需要的范围;允许清单在遗漏时是"默认拒绝",而拒绝清单会默默放行所有没人想到要列出的路径,包括日后新增的路径。此外,工具返回的结果是在你控制之外产生的数据,因此文件内容必须当作不可信输入而非指令来处理;只读访问同样会泄露它能读到的密钥。
编号 QB-CXTW2Z依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.4 (least privilege and allowlisting); MCP security guidance on untrusted tool output报告此题的问题
21. 代理需要在一个陌生仓库中找出名为 validateSession 的函数的所有调用点。应当使用哪个内置工具,为什么?
- A.Read,把整个文件内容载入,由代理逐个文件扫描要找的名称。
- B.Glob,按模式匹配文件路径,返回名称符合该模式的那一组文件。
- C.Bash,执行一条 shell 命令,再由代理解析输出里的匹配行。
- D.Grep,按模式检索文件内容,并报告命中该模式的文件及其所在行号。✓ 答案
Grep 与 Glob 的分工在于"内容"与"路径":调用点是文件内部的文本,因此要靠检索内容来找到,而 Glob 只能回答哪些文件的名称匹配某个模式。逐个读取全部文件再扫描,在陌生仓库上无法扩展;而绕到 shell 去执行命令,则重复实现了一个已经能返回结构化文件与行号匹配的内置工具。
编号 QB-UENRFY依据: Anthropic CCA Foundations Exam Guide v1.0, Domain 2, Task 2.5 (Grep searches contents, Glob matches paths)报告此题的问题
本考试的其他主题
练习题依据官方 Claude 认证架构师基础级(CCAR-F)考试指南和 Anthropic 公开文档编写。这是一个独立的学习工具,与 Anthropic 无关联、未获其认可,也不授予任何认证。考试由 Pearson VUE 交付;当前的题量、考试时长、通过分数和费用以 Anthropic 官方 CCAR-F 考试指南公布的为准。 官方认证页面 →