← 书系主页
Architect 模拟题
备考总览 ↗
这些题目模拟 Claude Certified Architect – Foundations 的真实考试格式。
每题呈现一个架构情景,要求你选择最佳方案。干扰项通常是真实的反模式。
点击「查看答案」显示正确答案及解析。
建议先独立完成全部 25 题,再逐一核对。全卷共 75 题(3 套 Practice Exam),建议分三次独立计时练习。
Domain 1 · Agentic 架构与编排(6 题)
你正在构建一个客服智能体,它需要反复调用工具查询订单、检查库存、处理退款,直到客户问题解决。
你在代码中实现了一个 while 循环来控制这个流程。
这个循环的最佳终止条件是什么?
A. 达到预设的最大迭代次数(如 10 次)时退出
B. 解析模型的文本回复,检查是否包含 "done" 或 "complete" 等关键词
C. 检查 API 返回的 stop_reason 字段,end_turn 时退出,tool_use 时继续
D. 当模型的文本回复长度超过上一轮回复的 50% 时退出
查看答案 ▼
✅ C — 检查 stop_reason 字段
stop_reason 是 API 提供的结构化信号,专门用于控制流判断。end_turn 表示模型认为任务完成,tool_use 表示模型需要调用工具获取更多信息。这是唯一可靠的循环终止机制。
A:固定迭代上限可能在任务未完成时强制退出,或在任务完成后浪费调用。
B:文本措辞不可控——模型每次的表达方式不同,依赖文本解析极易误判。
D:回复长度与任务完成度毫无关系。
你需要构建一个研究系统:协调者智能体接收用户的研究问题,然后并行查询三个数据源(学术论文库、新闻档案、专利数据库),最后合成一份综合报告。
以下哪种架构最适合这个场景?
A. 扁平架构:所有三个子智能体共享同一个对话上下文,各自查看对方的查询结果
B. Hub-and-spoke:协调者将任务分发给三个独立上下文的子智能体,各自返回结果后协调者合成
C. 链式架构:第一个子智能体查询学术论文 → 结果传给第二个查新闻 → 结果传给第三个查专利
D. 投票架构:三个子智能体独立查询所有数据源,用多数投票法决定每项事实的正确性
查看答案 ▼
✅ B — Hub-and-spoke 架构
Hub-and-spoke 是最适合并行独立研究的架构。协调者接收用户问题,将相关子任务分发给隔离上下文的专业子智能体,各自返回结果后协调者进行信息溯源和合成。关键词:上下文隔离 + 并行执行 + 协调者统一合成。
A:共享上下文会导致干扰和噪声,且全量历史消耗大量 token。子智能体间信息泄露会影响独立性。
C:链式依赖在此场景无必要——三个数据源互不依赖,串行只会浪费时间和成本。
D:多数投票对事实性问题不可靠,且让所有子智能体查所有源失去了专业化分工的意义。
你的客服智能体可以处理退款。业务规则规定:单笔退款不得超过 $500,超过此限额必须转人工审核。
你需要确保这条规则在任何情况下都不会被绕过。
最佳实现方式是什么?
A. 在系统提示词中明确写:"永远不要处理超过 $500 的退款,必须拒绝"
B. 使用 PostToolUse Hook,在退款工具被调用后检查金额,超过 $500 则拦截并重定向
C. 在每次工具调用后让模型自己判断金额是否合规,不合规则让模型纠正
D. 在数据库层面设置 $500 限制,依赖数据库报错来阻止超额退款
查看答案 ▼
✅ B — 使用 PostToolUse Hook 做程序化拦截
Hook 提供确定性、可测试的规则执行。PostToolUse Hook 在工具调用完成后立即检查参数(如退款金额),如果超过阈值,可以阻止执行并触发升级流程。Prompt 是概率性的——模型可能在边界案例中忽略指令。
A:系统提示词是指导性的,不是强制性的。模型可能在某些情况下忽略或绕过。这是最常考的反模式(AP-03)。
C:让模型自审同类错误——不可靠且延迟判断。
D:将业务规则推给数据库层,缺少业务上下文和升级路径。
你的用户提出了一个复杂需求:"分析这个 500 页的技术规范 PDF,找出所有安全相关的要求,按严重程度分类,并为每个高危项生成修复建议。"
最佳的任务分解策略是什么?
A. 将所有 500 页内容一次性放入上下文,让模型在单轮中完成全部分析
B. 分解为子任务:先提取章节结构 → 逐章识别安全要求 → 逐项分类评级 → 逐条生成修复建议
C. 直接让模型一页一页地读并即时输出分析结果,不提前规划章节结构
D. 将任务交给一个单独的通用智能体,让它自行决定如何分解和执行
查看答案 ▼
✅ B — 分层分解:结构提取 → 逐章识别 → 分类评级 → 修复建议
对于大文档分析,应该先建立结构视图(章节、主题),再将工作分解为可管理的块。每个阶段有明确的输入、输出和质量检查点。这避免了上下文超载,并允许每个阶段做专门的优化(如分类阶段可以使用 few-shot)。
A:500 页内容远超合理上下文窗口,且长上下文中模型注意力会下降("lost in the middle")。
C:无结构地顺序处理会丢失全局视图,无法做跨章节关联分析。
D:通用智能体可能选择不合理的分解策略,应该由架构师设计显式的分解逻辑。
客服智能体正在处理一位愤怒客户的咨询。客户语气激烈、频繁使用大写字母,但实际需求很简单:查询一笔已确认的退款状态。
智能体应该怎么做?
A. 检测到负面情绪后立即转人工客服
B. 忽略情绪,直接执行退款查询,同时保持礼貌语气
C. 先表达同理心,然后照常执行查询——不需要仅因情绪升级
D. 用模型自报的置信度分数判断是否需要人工介入
查看答案 ▼
✅ C — 表达同理心 + 照常执行查询,不因情绪升级
升级应基于客观标准:客户明确请求人工、策略缺口(如退款限额)、能力边界(如无法处理的业务类型),而非主观的情绪判断。但智能体应该对情绪做出恰当回应(同理心),同时在能力范围内解决问题。
A:纯情绪升级会导致过度升级——大量可自动解决的问题被推给人工。
B:完全忽略情绪也不专业,但核心问题是升级逻辑不应依赖情绪。
D:模型置信度分数不可靠校准,不能作为升级判据(AP-05)。
一个长时间运行的智能体会话已经处理了 40 轮对话。新请求需要在不同方向进行探索性分析,可能产生大量中间结果。你担心这会污染主会话的上下文。
最佳做法是什么?
A. 在当前会话中继续,依赖 /compact 自动压缩历史
B. 在当前会话中继续,但在提示词中加"忽略之前的对话内容"
C. 使用 fork_session 创建分支会话进行探索,完成后只将结论摘要传回主会话
D. 开启一个全新的会话从头开始
查看答案 ▼
✅ C — fork_session 分支探索,只传回结论摘要
fork_session 允许从当前状态创建独立的探索分支,避免探索噪音污染主会话。探索完成后,只将最重要的结论和行动项以摘要形式传回主会话,保持主上下文的清洁。
A:/compact 是渐进式摘要,可能在压缩中丢失关键信息(AP-16)。且探索噪声仍会进入主会话。
B:"忽略之前内容"的指令不可靠——模型无法真正"忘记"上下文中的内容。
D:从零开始丢失了前面 40 轮对话积累的宝贵上下文。
Domain 2 · 工具设计与 MCP 集成(5 题)
你为代码审查智能体定义了 18 个工具:lint 检查、测试运行、依赖分析、安全扫描、性能基准、覆盖率报告等。在实际使用中,智能体频繁选错工具。
最有效的解决方案是什么?
A. 给每个工具写更长的描述和更多使用示例
B. 切换到更大的模型以提升工具选择准确率
C. 将 18 个工具分配到 4–5 个专用子智能体,每个只负责 3–5 个工具
D. 给每个工具编号,在提示词中让模型通过编号引用工具
查看答案 ▼
✅ C — 将工具分配到专用子智能体,每个最多 4–5 个工具
工具数量超过 5 个后,模型的选择准确率会迅速下降。相似的描述会造成歧义。最佳实践是保持每个智能体 4–5 个工具,将剩余工具分配给专门的子智能体。这是考试中的高频考点(AP-08)。
A:更长的描述可能加剧选择困难——模型需要在更多文本中区分相似工具。
B:换更大模型只是掩盖问题,且增加成本和延迟。
D:编号不解决根本问题——模型仍需在 18 个选项中做选择。
你的智能体需要读取一个 JSON 配置文件的内容,以便根据配置调整后续行为。你有 Read、Write、Edit、Bash、Grep、Glob 等内置工具可用。
读取这个配置文件应该用哪个工具?
A. Bash('cat config.json')
B. Read 工具,直接传入文件路径
C. Grep 工具,搜索 '.*' 匹配全部内容
D. Glob 工具,先找到文件再用其他工具读取
查看答案 ▼
✅ B — 使用 Read 工具
Read 是专门为读取文件设计的内置工具。当内置工具能完成任务时,绝对不要用 Bash 代替——Bash 存在命令注入风险,且缺乏文件读取的专属优化(如行号、编码处理)。
A:绝对不要用 Bash 做文件读取。这是一个必考反模式。
C:Grep 用于搜索模式,不应用于完整文件读取。
D:已知文件路径时不需要 Glob 先定位。
你的团队使用 Claude Code,需要为项目配置一个需要 API 密钥的 MCP 服务器。项目代码托管在 GitHub,团队有 5 个开发者。
正确的 MCP 配置方式是什么?
A. 在 .mcp.json 中直接写入 API 密钥,确保所有团队成员都能使用
B. 在 ~/.claude.json 中配置服务器和密钥,每个人的密钥自己管理
C. 在 .mcp.json 中配置服务器,使用 ${ENV_VAR} 引用环境变量存储密钥
D. 将 API 密钥放在 CLAUDE.md 中,Claude Code 会自动读取
查看答案 ▼
✅ C — .mcp.json + ${ENV_VAR} 环境变量
服务器配置(地址、端口、工具列表)应放在项目级的 .mcp.json 中以便团队共享和版本控制。但密钥绝不能硬编码在配置文件中——应使用 ${ENV_VAR} 语法引用环境变量。每个开发者在自己的环境中设置密钥值。
A:硬编码密钥在配置文件中——一旦提交到 git 就会泄露。这是 Critical 级反模式(AP-09)。
B:~/.claude.json 是用户级配置,仅对个人生效,不能共享团队 MCP 服务器设置。
D:CLAUDE.md 是行为指导文件,不是密钥存储位置。
你的智能体调用了一个外部 API 工具来查询库存。API 返回了 503 错误。你的工具处理函数需要将错误信息返回给智能体,以便它做出正确决策。
最有效的错误响应格式是什么?
A. { "error": "操作失败" }
B. { "isError": true, "errorCategory": "transient", "isRetryable": true, "context": "库存服务返回 503,建议 5 秒后重试" }
C. 返回空库存列表 [],让智能体自然地认为没有库存
D. { "status": 503 }
查看答案 ▼
✅ B — 结构化错误:isError + errorCategory + isRetryable + context
结构化错误让智能体做出正确决策。isRetryable 告诉它可以重试(transient error)而不是换方案或升级。errorCategory 帮助分类(transient vs permanent vs permission)。context 提供人类可读的细节。
A:通用错误消息——智能体无法判断该重试还是放弃。这是 Critical 级反模式(AP-06)。
C:静默返回空结果是 Critical 级反模式(AP-07)——智能体会认为"确实没库存"而非"无法查询"。
D:仅有 HTTP 状态码,缺少上下文和可操作性指引。
你定义了 search_kb 和 search_docs 两个工具,它们在功能上有些重叠。在实际使用中,模型经常在两者之间犹豫,有时选了不合适的那个。
最佳改进方式是什么?
A. 在描述中明确各自的适用场景、输入格式差异和典型用例
B. 合并为一个工具,通过参数区分搜索目标
C. 将其中一个工具分配给子智能体以减少选择面
D. 两个都可以——A 和 B 都是合理的改进方案,取决于具体场景
查看答案 ▼
✅ D — A 和 B 都是合理方案
工具描述应包含:工具的用途(何时用/何时不用)、输入格式、输出格式、边界情况和典型用例。如果两个工具确实重叠严重,合并为一个并通过参数区分也是合理选择。C 虽然能减少工具数量,但与题目场景不完全匹配——题目问的是工具选择困难,而非工具过多。
Domain 3 · Claude Code 配置与工作流(5 题)
你的 8 人开发团队使用 Claude Code。团队有一套统一的编码规范(命名约定、测试要求、提交信息格式)。
同时,你个人偏好使用特定的缩进风格和注释习惯。
这些配置应该分别放在哪里?
A. 团队规范和个人偏好都放在项目 .claude/CLAUDE.md
B. 团队规范放 .claude/CLAUDE.md,个人偏好放 ~/.claude/CLAUDE.md
C. 团队规范和个人偏好都放在 ~/.claude/CLAUDE.md
D. 团队规范放代码注释中,个人偏好放 .claude/CLAUDE.md
查看答案 ▼
✅ B — 团队规范 .claude/CLAUDE.md,个人偏好 ~/.claude/CLAUDE.md
CLAUDE.md 有三级体系:用户级(~/.claude/CLAUDE.md)、项目级(.claude/CLAUDE.md)、目录级。团队规范必须放在项目级以版本控制并共享给所有人。个人偏好放用户级,仅影响自己的行为,不影响团队成员。
A:个人偏好不应强加给团队——这是反模式(AP-10)。
C:用户级配置对团队不可见,无法共享团队规范。
D:代码注释不是配置机制,且无法被 Claude Code 系统级读取。
你的团队需要实现一个「数据库迁移审查」功能,它需要:探索现有 schema、分析迁移脚本的影响、可能产生大量中间输出、只允许使用 Read/Bash/Grep 工具。
应该用 command 还是 skill 来实现?
A. 用 command——它简单直接,可以在当前会话中运行
B. 用 skill——它通过 context: fork 提供上下文隔离,并通过 allowed-tools 限制权限
C. 两者都可以,效果没有区别
D. 都不合适——应该直接在 CLAUDE.md 中写规则
查看答案 ▼
✅ B — 使用 skill 实现上下文隔离和权限控制
Skills 提供 context forking(上下文分叉)和 allowed-tools 限制,非常适合需要隔离的复杂任务。Commands 在当前会话中运行,会把探索噪音和中间输出带入主上下文。对于数据库迁移审查这种需要大量探索且需要权限控制的任务,skill 是正确选择(AP-11)。
A:Command 在当前会话运行,探索噪音会污染主上下文。
C:两者有本质区别——context: fork 和 allowed-tools 是 skill 独有的。
D:CLAUDE.md 中的静态规则无法替代主动执行审查逻辑。
你收到两个任务:(1) 修改按钮的颜色和间距;(2) 重构整个认证模块,涉及 12 个文件的 API 层、中间件和数据库 schema 变更。
Plan Mode 的正确使用策略是什么?
A. 两个任务都用 Plan Mode——确保不遗漏任何细节
B. 两个任务都直接执行——Plan Mode 浪费时间
C. 按钮修改直接执行,认证重构使用 Plan Mode
D. 按钮修改用 Plan Mode,认证重构直接执行
查看答案 ▼
✅ C — 简单修改直接执行,多文件重构使用 Plan Mode
Plan Mode 的设计原则:多文件架构变更用,简单明确定义的修复不用 。Plan Mode 有开销——它需要额外的思考和规划步骤。对于改颜色间距这种 2 行 CSS,Plan Mode 是浪费。对于涉及 12 个文件的重构,Plan Mode 的价值在于:先设计好整体方案再执行,避免返工。
A:永远用 Plan Mode 对简单任务是多余的。
B:永远不用 Plan Mode 对复杂变更是危险的。
D:恰好相反——简单任务不需要计划,复杂任务需要。
你需要在 GitHub Actions 中集成 Claude Code 做自动代码审查。流水线触发后,Claude Code 需要非交互地审查 PR 变更并输出结构化结果。
正确的执行方式是什么?
A. 在 workflow 中直接调用 claude,让它交互式地审查代码
B. 使用 claude -p "review this PR" --output-format json 做非交互审查
C. 用 claude --resume 恢复之前的审查会话继续审查
D. 将 PR diff 通过 stdin 传给 claude 并等待交互式输出
查看答案 ▼
✅ B — -p flag + --output-format json
CI/CD 环境中没有交互终端。-p flag 专为非交互模式设计,接受一个 prompt 并返回结果。--output-format json 确保输出可被流水线工具解析。这两个 flag 组合是 CI/CD 场景的标准用法。
A:CI 环境不支持交互模式,会挂起或失败。
C:--resume 需要已有会话,CI 每次运行应该是独立的新会话。
D:stdin 方式不适用于非交互 CI 场景。
你的团队每天晚上需要对所有当天的代码提交做一次全面的安全审计。审计包含 200+ 个文件的静态分析和模式检测。这个过程不需要实时结果,第二天早上看到报告即可。
最经济有效的处理方式是什么?
A. 使用同步 API 请求逐个文件审计,确保即时得到结果
B. 使用 Message Batches API 提交批量审计任务,利用 50% 成本节省和 24h 处理窗口
C. 在 CI/CD 中为每个提交触发一次同步审计
D. 将所有 200 个文件内容合并为单个请求一次性审计
查看答案 ▼
✅ B — Message Batches API,50% 成本节省 + 24h 异步处理
对于非紧急的批量处理任务,Message Batches API 是正确选择。它提供 50% 的成本节省,处理窗口 24 小时。夜间审计完美符合这个场景——不需要实时响应,结果在第二天早上可用即可。
A:同步请求非紧急任务意味着 2 倍成本且无额外价值。
C:每个提交单独触发是同步模式——成本翻倍,且可能影响 CI 速度。
D:200 个文件合并在一起可能超出上下文窗口,且难以区分每个文件的审计结果。
Domain 4 · Prompt 工程与结构化输出(5 题)
你需要从非结构化合同文档中提取:合同方名称、生效日期、金额、合同类型。提取结果必须能可靠地存入数据库。
确保输出结构可靠的最佳方式是什么?
A. 在提示词中写:"请以 JSON 格式输出"
B. 使用 tool_use + JSON schema + tool_choice 强制指定提取工具
C. 提取后用正则表达式解析文本输出中的 JSON
D. 让模型生成自由文本,然后用另一个模型做后处理转换
查看答案 ▼
✅ B — tool_use + JSON schema + tool_choice
tool_use 配合 JSON schema 是唯一能保证 输出结构合规的机制。tool_choice 可以强制模型必须调用指定的提取工具。它保证字段名、类型和必需字段都符合 schema 定义。
A:裸 JSON 提示只是建议——模型可能输出带 markdown 包裹的 JSON、多余文本或格式错误。
C:正则解析非结构化输出极其脆弱——格式稍有变化就失效。
D:两阶段处理增加了延迟、成本和错误累积。
你的数据提取流水线使用 tool_use 成功返回了符合 JSON schema 的数据。但你注意到提取出的 contract_type 有时是 "永久" 而你的业务系统只接受 "fixed_term" 和 "open_ended"。
这说明什么?应该如何修复?
A. tool_use 保证结构和语义都正确——这不可能发生,检查你的 schema
B. tool_use 只保证结构合法,语义正确性需要额外校验。在重试消息中附上字段名 + 期望值 + 实际值
C. 增加 temperature 参数让模型输出更确定
D. 换一个更大的模型来确保语义正确性
查看答案 ▼
✅ B — tool_use 只保证结构,语义需单独校验 + 具体错误回传
这是考试中最关键的区分之一:tool_use 保证结构合法,不保证语义正确 (AP-14)。"永久" 这个值在结构上是合法的(它是 string),但语义上不在业务允许的枚举值内。你需要额外的业务校验层,并在重试时附上精确的错误信息(哪个字段 + 为什么错 + 期望值),而不是说"有错,重试"(AP-15)。
A:tool_use 不做语义校验——这是最常见的理解错误。
C/D:temperature 和模型大小解决不了业务规则校验问题。
你让 Claude Code 审查一个 PR 的代码质量。你的 prompt 是:"请仔细审查这个 PR,找出所有问题和改进点。"
这个 prompt 有什么问题?
A. 没问题——这是一个清晰的审查请求
B. 指令过于模糊。"所有问题"导致过度标记和误报,应提供明确、可量化的评判标准
C. 应该用英文写 prompt,中文效果不好
D. 缺少代码示例——应该同时提供正确和错误的代码样本
查看答案 ▼
✅ B — 模糊指令导致过度标记和误报,需要明确可量化标准
"找出所有问题"是典型的模糊指令(AP-13)。它会导致模型过度标记、产生大量误报,最终开发者停止信任审查工具。好的 prompt 应该提供明确的评判标准,例如:"检查是否存在:未处理的异常、SQL 注入风险、N+1 查询、缺少输入校验。"
A:这恰恰是一个有问题的 prompt——太模糊,没有给模型提供有效的评判框架。
C:语言不影响 prompt 的质量——清晰度才是关键。
D:few-shot 在某些场景有用,但此处核心问题是缺少明确的评判标准而非缺少示例。
你设计了一个文档分类系统,document_type 枚举包含 4 种值:invoice、contract、report、memo。测试中发现有大量文档不属于这 4 类,模型将它们强行归入某一类。
Schema 应该如何改进?
A. 把 enumeration 扩充到 20 种以覆盖更多类型
B. 增加一个 'other' enum 值 + document_type_detail 字段,配合 2–4 个 few-shot 示例覆盖边界情况
C. 移除 enum 限制,让模型自由输出类型
D. 在 prompt 中告诉模型"如果无法分类就留空"
查看答案 ▼
✅ B — 'other' + detail 字段 + few-shot 示例
刚性枚举没有 escape hatch 时,模型会强制将未知类型错误归类。标准做法:(1) 加 'other' 选项作为兜底;(2) 加 document_type_detail 自由文本字段让模型解释为什么选了 'other';(3) 用 2–4 个 few-shot 示例展示边界情况的处理。这既保持了结构化输出的优势,又不会强制错误分类。
A:扩充枚举只是推迟问题——现实世界的文档类型无穷无尽,总有无法覆盖的。
C:完全放弃 enum 失去了结构化输出的优势。
D:留空处理方式不明确,且丢失了数量信息。
你需要从法律文档中提取"违约责任条款"。有些条款是显式的(标题包含"违约责任"),有些是隐式的(分散在各处,通过引用其他条款构成)。
对于隐式条款的提取,最有效的策略是什么?
A. 在 prompt 中详细描述什么是"隐式违约责任"
B. 提供 2–4 个 few-shot 示例,展示隐式条款的识别模式
C. 不用特别处理——模型能自动理解
D. 从文档中先识别所有条款引用,再逐个判断是否构成违约
查看答案 ▼
✅ B — 2–4 个 few-shot 示例展示隐式条款的识别模式
对于模糊的、需要判断的边界情况,few-shot prompting 比长篇描述更有效。示例可以展示:什么样的引用组合构成隐含的违约责任、如何从分散条款中推断出完整义务。考试中注意:few-shot 最适合模糊判断场景。
A:对模糊概念的长篇描述不如具体示例有效。
C:隐式条款恰恰是模型容易遗漏的,需要专门指导。
D:这是 pipeline 策略,不是 few-shot 策略。两者可以结合,但题目问的是识别策略。
Domain 5 · 上下文管理与可靠性(4 题)
客服智能体已经和一位客户对话了 30 轮。客户的姓名、账号、订单号、退款金额这些信息是在对话初期获得的。
对话越来越长,你使用了渐进式摘要来管理上下文。
如何确保摘要不会丢失关键客户信息?
A. 依赖渐进式摘要自然保留重要信息
B. 在上下文开头放置不可变的 case facts 块,包含姓名、账号、订单号、金额等核心数据
C. 每 5 轮对话后让模型重新总结所有关键信息
D. 将整个对话历史永远保留在上下文中,不做任何压缩
查看答案 ▼
✅ B — 在上下文开头放置不可变的 case facts 块
这是考试高频考点。case facts 块是放在上下文开头的固定信息块,不参与摘要/压缩流程。它确保关键事实(姓名、ID、金额、日期)在任何情况下都不会被渐进式摘要"吞噬"。
A:渐进式摘要每轮都会丢失具体信息——姓名、金额、日期是最容易被丢掉的(AP-16)。
C:重新总结仍然有丢失风险,不如不可变块可靠。
D:无限保留不现实——30 轮后上下文窗口会溢出。
你的多智能体系统中,一个子智能体在查询第三方 API 时失败了。它是一个查询新闻档案的子智能体。协调者需要判断:是没有相关新闻(正常空结果),还是查询本身失败了。
子智能体应该如何向协调者报告?
A. 返回空列表 [],协调者会理解为"没有相关新闻"
B. 静默忽略错误,只报告成功获取到的数据
C. 返回结构化错误报告:明确区分 "访问失败" 和 "结果为空",携带错误类型和上下文
D. 子智能体自己重试直到成功,不向协调者暴露任何错误
查看答案 ▼
✅ C — 区分访问失败与空结果,结构化传回错误上下文
访问失败和空结果是截然不同的信号,必须区分。如果权限问题或 API 宕机时返回空结果,协调者会得出错误结论。结构化错误报告让协调者能做合理决策:重试、切换源、或在报告中注明数据源不可用。
A:静默返回空结果是 Critical 级反模式(AP-07)——掩盖了真实问题。
B:更糟——不仅掩盖了问题,还产生不完整结果。
D:无限制重试可能永无止境。应先上报给协调者,由协调者决定策略。
你的研究智能体综合了来自三个子智能体的结果——学术论文库返回 15 篇论文、新闻档案返回 8 篇报道、专利数据库返回 3 项专利——发现有两条信息互相矛盾。
如何解决这个矛盾?
A. 取多数意见——来自最多源的信息最可靠
B. 追踪信息溯源:每条声明标注来源、置信度、时间戳,基于可靠性而非数量做决策
C. 让模型自行判断哪条信息更可信
D. 平均所有值——取一个折中结果
查看答案 ▼
✅ B — 追踪信息溯源,基于可靠性做决策
在处理来自不同来源的矛盾信息时,正确的做法是维护每项信息的溯源记录(provenance):哪个子智能体从哪个源获取、源的可靠性如何、时间戳、提取方式(精确提取 vs 模型推断)。基于这些元数据做加权判断,而非简单多数投票。还要在最终输出中区分 "well-established" 和 "contested" 的结论。
A:多数投票对事实性判断无效——1 个专利数据库的可靠声明比 10 条新闻报道更可信。
C:让模型自行判断缺少可审计性——溯源才能被验证。
D:平均数值型信息有时可以,但对声明式信息毫无意义。
你在 CI/CD 流水线中用 Claude Code 生成了 500 行代码变更,现在需要对这些变更做质量审查。
正确的审查策略是什么?
A. 在同一个 Claude Code 会话中,让模型审查自己刚生成的代码——它最了解上下文
B. 在单独的会话中进行审查——生成者和审查者在隔离上下文中,防止确认偏差
C. 使用多轮审查:先逐文件审查,再跨文件审查,均在同一个会话中完成
D. 跳过审查——如果模型能生成代码,就不需要额外审查
查看答案 ▼
✅ B — 单独会话审查,隔离生成者和审查者上下文
同一会话中审查自己刚生成的代码是 Critical 级反模式(AP-12)。原因:审查者带着生成者的完整推理上下文,会产生强烈的确认偏差——"它为什么这么写我都知道,看起来没问题"。单独的审查会话不给审查者任何生成历史,迫使它从零开始理解代码,更容易发现不一致、遗漏和逻辑错误。
A:"最了解上下文"正是问题所在——了解得太多了。
C:多轮审查本身是对的,但如果都在同会话中完成,确认偏差依然存在。
D:没有任何代码生成系统可以免于审查。
Practice Exam 2(第 26–50 题)
第二套模拟题,覆盖不同场景。建议做完第一套后间隔至少两天再做本套,检验真实水平。
Domain 1 · Agentic 架构与编排(6 题)
你的智能体在处理支付时需要先验证用户身份,再执行扣款。验证失败时应该阻止扣款工具被调用。
但 PostToolUse Hook 在工具调用之后才执行——此时扣款已经发生了。
应该用哪种 Hook 来阻止未验证的扣款?
A. PostToolUse Hook——它在工具调用后拦截,可以回滚交易
B. PreToolUse Hook——它在工具调用前执行,可以在调用前拦截并阻止
C. 在系统提示词中禁止未验证扣款
D. 不需要 Hook——让扣款工具自己检查验证状态
查看答案 ▼
✅ B — 使用 PreToolUse Hook 在工具调用前拦截
PreToolUse Hook 在工具被执行之前运行。它可以检查前置条件(如用户已验证),条件不满足时直接阻止工具调用并返回错误。PostToolUse 用于调用后的数据校验和日志记录,PreToolUse 用于调用前的权限和前置条件检查。
A:PostToolUse 发生在工具执行之后——扣款已完成,回滚远比阻止复杂且不可靠。
C:Prompt 是概率性的,不能用于关键的安全检查。
D:工具自己检查是最后一道防线,但无法防止模型错误地选择调用该工具。
你的多智能体系统有一个协调者和 5 个子智能体。某天协调者进程崩溃了,但 3 个子智能体已经完成了各自的任务。
你需要从崩溃中恢复。
最佳恢复策略是什么?
A. 从头开始——重新运行协调者和所有 5 个子智能体
B. 维护一个崩溃恢复清单(checkpoint manifest),记录每个子任务的完成状态,恢复时只重跑未完成的
C. 让每个子智能体独立完成,协调者不需要重跑——子智能体结果已经写入数据库
D. 重新运行协调者,让它自行判断哪些任务已完成
查看答案 ▼
✅ B — 使用崩溃恢复清单,只重跑未完成的任务
生产级多智能体系统需要容错能力。维护一个 checkpoint manifest,记录每个子任务的 ID、状态(pending/running/done/failed)和结果摘要。协调者恢复时读取 manifest,跳过已完成的任务,只重跑未完成或失败的任务。这既省成本又省时间。
A:从头跑一遍浪费已完成子智能体的计算和 API 成本。
C:协调者的合成步骤也必须重跑——子智能体结果需要被整合。
D:让模型自行判断不可靠——应该用确定性的状态追踪。
一个用户请求:"帮我整理过去一年的客户反馈邮件,按产品线分类,总结每类的 Top 3 问题和改进建议。"
你的智能体需要设计任务分解策略。
最佳分解方式是什么?
A. 静态分解:先设计固定的流水线(提取邮件 → 分类 → 排序 → 总结)逐一执行
B. 动态自适应分解:先探索数据规模和分布,再根据发现动态调整子任务粒度
C. 把所有邮件一次性交给模型,让它直接在单轮中输出完整报告
D. 随机抽取 100 封邮件做样本分析,外推结论
查看答案 ▼
✅ B — 动态自适应分解:先探索数据规模和分布
当数据规模和分布未知时,动态自适应分解优于静态流水线。先做探索:有多少封邮件?涉及多少产品线?时间分布如何?然后根据发现设计合适的分解粒度——如果只有 50 封和 3 个产品线,策略与 5000 封和 20 个产品线完全不同。
A:静态流水线在数据规模未知时可能选错粒度——太粗或太细。
C:"过去一年的邮件"可能远超上下文窗口。
D:随机抽样对客户反馈不适用——低频但严重的问题可能恰好被抽中。
你的智能体在一次 API 调用中同时请求了 3 个工具:查询订单状态、检查库存、计算运费。
API 返回了 3 个 tool_use 块。
对于多个 tool_use 块,正确的处理方式是什么?
A. 按顺序逐个执行,每执行一个就把结果发回模型再执行下一个
B. 并行执行所有 3 个工具——它们互不依赖——然后将全部结果一起发回
C. 选择第一个 tool_use 块执行,忽略其余两个
D. 只执行模型最确定的那个工具调用
查看答案 ▼
✅ B — 互不依赖的工具应并行执行,结果一起发回
当模型在同一次响应中发出多个互不依赖的 tool_use 调用时,应该并行执行它们,然后把所有结果合并到一个 user 消息中发回。这减少了往返次数、降低延迟,且不会影响结果质量。关键判断:这些工具调用之间有没有数据依赖?没有 → 并行。
A:顺序执行互不依赖的工具浪费了不必要的往返延迟。
C/D:模型选择多个工具意味着它需要所有工具的信息来做决策,不能随意丢弃。
你设计了一个订单处理流水线:验证库存 → 计算优惠 → 处理支付 → 生成运单。其中支付和运单生成都有失败的可能,且失败后需要执行补偿操作(退款、释放库存)。
这种场景最适合哪种工作流模式?
A. 简单的链式调用(prompt chaining)——每步按顺序执行
B. 带补偿事务的链式工作流——每步成功后记录状态,失败时执行对应的补偿操作
C. 路由工作流——根据订单类型路由到不同的处理链
D. 并行工作流——同时执行所有步骤,最后合并结果
查看答案 ▼
✅ B — 带补偿事务的链式工作流
当工作流中包含有副作用的操作(扣款、扣库存)且后续步骤可能失败时,必须设计补偿事务。每步成功后记录状态快照,后续失败时按逆序执行补偿:如果支付后运单生成失败 → 退款 + 释放库存。这和数据库事务的 rollback 逻辑一致。
A:简单链式调用不考虑失败补偿——支付成功后运单失败,钱却扣了。
C:路由解决的是分派问题,不是失败补偿问题。
D:支付和运单有严格的顺序依赖——不能并行。
你的协调者智能体需要将同一个研究问题发给 3 个子智能体,但每个子智能体的指令略有不同(学术源、新闻源、专利源各有特殊的搜索语法)。
协调者应该如何构建每个子智能体的 prompt?
A. 发给所有子智能体相同的 prompt——保持一致性
B. 为每个子智能体定制 prompt,包含该源特有的搜索语法、输出格式和注意事项
C. 让子智能体自行探索如何搜索——它们应该自主学习
D. 在 prompt 中包含所有 3 个源的指令,让子智能体自行决定用哪套
查看答案 ▼
✅ B — 为每个子智能体定制专属 prompt
Hub-and-spoke 架构的精髓在于每个子智能体是专业化的。协调者的职责包括将通用任务翻译成每个子智能体领域的特定指令——不同的搜索语法、输出 schema、注意事项。统一 prompt 等于放弃了专业化的优势。
A:同质化浪费了专业化架构的优势。
C:"自行探索"是不确定的——应该提供明确的领域指令。
D:包含所有指令会让子智能体困惑——它不知道自己是哪个角色。
Domain 2 · 工具设计与 MCP 集成(5 题)
你需要在 Claude Code 中配置一个 MCP 服务器。有两个传输选项:stdio(本地进程通信)和 Streamable HTTP(远程服务)。
这个 MCP 服务器运行在你本机的 Docker 容器中。
应该选择哪种传输方式?
A. stdio——本地进程启动快,无网络开销,适合本机工具
B. Streamable HTTP——更通用,可以随时切换为远程部署
C. 两种都可以,没有区别
D. 必须用 Streamable HTTP——stdio 已被废弃
查看答案 ▼
✅ A — stdio 适合本地进程
stdio 传输通过子进程启动 MCP 服务器,通过标准输入/输出通信。对于本机工具,这是最简单、最快、最安全的方式——无需暴露网络端口,无需身份验证。Streamable HTTP 适合远程服务或需要多客户端共享的服务器。
B:本机容器用 HTTP 增加了不必要的网络层和安全考虑。
C:有实际区别——性能、安全模型、部署复杂度都不同。
D:stdio 仍然是 MCP 规范中的主要传输方式之一。
你的 search_database 工具返回了 500 条匹配记录。全部返回给智能体会淹没上下文。但只返回前几条,智能体可能因为信息不完整而做出错误判断。
应该如何处理工具返回结果?
A. 始终返回全部 500 条记录——完整性比上下文节省更重要
B. 返回前 10 条 + 总数统计 + 关键字段的分布摘要 + 让智能体通过参数缩小范围的能力
C. 随机返回 10 条记录,标注为"随机样本"
D. 只返回总数,让智能体先判断是否需要更多数据
查看答案 ▼
✅ B — 前 N 条 + 统计摘要 + 缩小范围的参数化能力
大结果集的处理需要平衡信息量和上下文消耗。好的做法:返回少量代表样本、提供总数和分布统计、允许智能体通过过滤参数(关键词、日期范围、分类)缩小结果范围。如果智能体需要更多数据,它可以调整参数再次查询。
A:500 条记录会消耗大量上下文,可能超出窗口或稀释关键信息。
C:随机样本可能遗漏智能体真正需要的记录。
D:信息不足——智能体无法判断"是否需要更多数据"。
你的代码智能体有一个 edit_file 工具,接受 file_path、old_string、new_string 三个参数。
某次智能体需要在一个文件中做 8 处不同的修改。
如何处理这 8 处修改?
A. 在单次 tool_use 中发出 8 个 edit_file 调用——模型可以在一次响应中请求多个工具
B. 逐次修改——每改一处就发回结果,等模型确认后再改下一处
C. 用 Write 工具一次性重写整个文件
D. 合并所有修改为一个大的字符串替换
查看答案 ▼
✅ A — 一次响应中发出多个独立的 edit_file 调用
当 8 处修改互不重叠(修改不同的 old_string)时,可以在一次响应中并行调用 8 个 edit_file。这比逐个修改快得多。但前提是 old_string 之间没有重叠——如果修改 A 改变了修改 B 需要匹配的文本,则必须先 A 后 B。
B:8 个往返增加延迟和成本——对于互不重叠的修改没必要。
C:Write 替换整个文件——可能丢失未包含的原有内容。
D:合并为一个大替换难以精确匹配且容易出错。
你的 MCP 服务器提供一个执行 SQL 查询的工具。你需要在工具层面防止 SQL 注入和未授权访问。
最佳安全实践是什么?
A. 在工具描述中警告模型不要生成恶意 SQL
B. 在服务端实现参数化查询 + 查询白名单 + 结果行数限制 + 审计日志
C. 让模型先输出 SQL 给用户确认,用户批准后再执行
D. 限制模型只能使用 SELECT 语句——通过工具描述说明
查看答案 ▼
✅ B — 服务端多层防御:参数化查询 + 白名单 + 行限制 + 审计
安全必须在工具实现层面强制执行,而非依赖 prompt 或模型自觉。参数化查询防止注入,查询白名单限制允许的表和操作,结果行数限制防止数据泄漏,审计日志记录所有查询以便事后审查。
A:工具描述对安全毫无约束力——模型可能被 prompt injection 操控。
C:人工确认破坏自动化流程的价值,且人类也无法实时判断每条 SQL 是否安全。
D:与 A 相同——描述不是强制机制。攻击者可通过 prompt injection 绕过。
你的 Claude Code 智能体需要找到项目中所有引用了 deprecated API 函数 oldAuthenticate() 的文件。
项目有约 500 个源文件。
最佳工具组合是什么?
A. 用 Bash('grep -r "oldAuthenticate" .') 搜索
B. 用 Grep 工具搜索 "oldAuthenticate",匹配到文件后用 Read 检查上下文
C. 用 Glob 工具找到所有 .ts 和 .js 文件,逐个用 Read 打开查找
D. 用 Edit 工具逐个文件替换 oldAuthenticate 为新函数
查看答案 ▼
✅ B — Grep 搜索 + Read 检查上下文
Grep 是专门为代码搜索设计的内置工具,能快速定位模式匹配的位置。搜索到匹配文件后再用 Read 检查上下文来判断是否确实是 deprecated 调用(排除注释、文档中的引用)。这是内置工具链的标准组合用法。
A:Bash grep 可以工作但不是最佳实践——内置工具优先。
C:逐个 Read 500 个文件是不可行的——效率极低。
D:先找到再改——不能跳过查找步骤。且不是所有引用都需要立即替换。
Domain 3 · Claude Code 配置与工作流(5 题)
你的项目 CLAUDE.md 越来越长(300+ 行),包含前端规范、后端规范、测试规范、部署流程、安全规则等多种主题。
团队成员抱怨很难找到自己关心的那部分。
如何优化 CLAUDE.md 的组织?
A. 合并为一个更长的文件,加详细的目录
B. 用 @import 将主题拆分为 .claude/rules/frontend.md、backend.md 等独立文件
C. 删除不常用的规则,只保留最关键的 50 行
D. 把规范移到代码注释中,清空 CLAUDE.md
查看答案 ▼
✅ B — @import 拆分为主题独立文件
CLAUDE.md 支持 @import 语法引入其他文件。将不同主题的规则拆分为 .claude/rules/ 目录下的独立文件,使每个文件聚焦单一主题、易于维护。Claude Code 会递归加载所有导入的规则。
A:更长更难以维护。
C:删除规则会丢失重要的上下文指导。
D:代码注释不是配置机制,无法被系统级读取和遵循。
你为团队开发了一个非常有用的代码审查 skill。你想让团队其他 7 个开发者也能用,并且随着你的改进自动同步更新。
最佳分享方式是什么?
A. 通过 Slack 把 SKILL.md 文件发给每个人,各自放到自己的 ~/.claude/skills/
B. 将 skill 放在项目仓库的 .claude/skills/ 下,随代码一起版本控制
C. 上传到 GitHub Gist,让大家自行下载
D. 写一份详细的 Wiki 文档教大家怎么创建相同的 skill
查看答案 ▼
✅ B — 放入项目仓库 .claude/skills/,版本控制
项目级的 .claude/skills/ 目录会被团队所有成员自动加载。放在这里:(1) 所有人同步获取最新版本;(2) git 管理变更历史;(3) 无额外分发成本。个人 skills 放 ~/.claude/skills/,团队 skills 放项目仓库。
A:手动分发无法自动同步——你改进后别人拿不到更新。
C/D:同样存在同步问题和维护负担。
你的项目中,frontend/ 目录使用 React + TypeScript,backend/ 目录使用 Python + FastAPI。
两者有不同的测试框架(Jest vs pytest)、不同的命名约定、不同的 lint 规则。
如何配置路径特定的规则?
A. 在 CLAUDE.md 中同时列出前端和后端的所有规则,让 Claude Code 自行判断
B. 使用 paths glob 模式的 YAML frontmatter 创建路径特定规则文件
C. 在前端和后端目录各放一个 CLAUDE.md
D. B 和 C 都可以——paths frontmatter 和目录级 CLAUDE.md 都是有效方式
查看答案 ▼
✅ D — paths frontmatter 和目录级 CLAUDE.md 都有效
Claude Code 支持两种路径特定规则:(1) 在规则文件顶部用 YAML frontmatter 指定 paths glob 模式;(2) 在特定目录下放置 CLAUDE.md,该文件仅在该目录下的文件操作时生效。两种方式各有用处——frontmatter 适合跨目录的主题规则,目录级 CLAUDE.md 适合特定子项目的规则。
A:混合所有规则会降低准确性——处理前端文件时后端规则是噪声。
你有一个 MCP 服务器用于连接公司内部的 Jira 实例。所有项目都可能需要查询工单。
你不想在每个项目里重复配置。
应该把 MCP 配置放在哪里?
A. 每个项目的 .mcp.json 中复制相同的配置
B. ~/.claude.json 的用户级 MCP 配置中——全局可用
C. 第一个配置它的项目中的 .mcp.json
D. 环境变量中
查看答案 ▼
✅ B — ~/.claude.json 用户级全局配置
用户级配置 ~/.claude.json 对所有项目生效,适合公司级别的公共服务(Jira、Slack、内部 API)。项目级 .mcp.json 适合项目特定的 MCP 服务器。密钥仍然通过 ${ENV_VAR} 引用,不在配置文件中硬编码。
A:重复配置增加维护负担——配置改了要更新所有项目。
C:只有一个项目有配置——其他项目用不了。
D:环境变量存储的是值,不是 MCP 服务器结构定义。
你需要在 Node.js 后端中集成 Claude,构建一个能调用内部 API 的智能体。
你需要完全控制智能体循环——何时继续、何时退出、如何处理错误。
应该用什么来构建?
A. 用 Claude Code 的 -p flag 在后端进程中调用
B. 使用 Claude Agent SDK——它提供程序化的智能体循环控制
C. 直接调用 Anthropic API 的 /v1/messages 端点,手动实现智能体循环
D. B 和 C 都可以——SDK 封装了循环逻辑,手动实现提供最大灵活性
查看答案 ▼
✅ D — Agent SDK 或手动实现都可以,取决于需要的控制粒度
Agent SDK 封装了智能体循环(检查 stop_reason、执行工具、发回结果),适合标准场景。手动实现循环提供最大灵活性,适合有特殊需求(自定义日志、错误处理、状态管理)的场景。两者都是有效的选择,Claude Code -p flag 适用于一次性任务,而非持续运行的后端服务。
A:Claude Code -p 是为 CLI 一次性任务设计的,不适合作为后端服务组件。
Domain 4 · Prompt 工程与结构化输出(5 题)
你在构建一个客服智能体。你需要设定它的角色、行为边界、回复风格,并给每条客户消息提供当前会话的上下文。
角色设定和上下文信息应该分别放在哪里?
A. 全部放在 system prompt——这是标准的做法
B. 角色设定和持久规则放 system prompt,每条消息的上下文放 user message
C. 全部放在每条的 user message 中——system prompt 不可靠
D. 角色设定放第一条 user message,后续消息只放客户内容
查看答案 ▼
✅ B — 角色/规则放 system prompt,上下文放 user message
System prompt 是设定持久角色、行为边界和全局规则的正确位置——它在整个对话中持续生效。每条消息的具体上下文(如当前对话轮次、客户信息、case facts)应放在 user message 中,因为它是动态变化的。这种分离让持久规则和动态信息各得其所。
A:system prompt 中放动态上下文会越来越长,且 system prompt 不适合频繁变化的内容。
C:system prompt 是可靠的——它是专门为持久行为设置设计的。
D:第一条设为角色设定后,后续消息缺乏上下文信息。
你的智能体需要分析一份复杂的服务协议,判断其中是否存在对用户不利的条款。
直接问"有没有对用户不利的条款"有时会遗漏。
如何提高分析质量?
A. 使用更长的 prompt 详细描述什么是不利条款
B. 引导模型逐步分析:先列出所有条款 → 逐条评估 → 标注风险等级 → 生成总结
C. 换用更大的模型
D. 把协议分成小段,每段分别提问然后合并结果
查看答案 ▼
✅ B — 引导逐步分析:列出 → 评估 → 标注 → 总结
对于需要多步骤推理的复杂分析任务,引导模型按步骤思考(Chain-of-Thought)比直接跳到结论有效得多。结构化的步骤让模型:(1) 不遗漏条款;(2) 每个条款独立评估;(3) 风险等级可追溯;(4) 总结有依据。这比单纯描述"什么是不利条款"效果好得多。
A:更长的描述不如结构化的流程有效。
C:换大模型不解决推理结构的问题。
D:分段分析丢失了跨段落的条款关联。
你的内容审核智能体有时会拒绝分析某些敏感但合法的内容(如医疗报告、法律文件中的敏感描述),
导致审核流程中断。这些内容在公司使用场景中是允许的。
如何减少不必要的拒绝?
A. 修改模型的 safety 设置到最低
B. 在 system prompt 中明确说明内容的使用场景、合法性和审核目的
C. 如果模型拒绝就换一个模型重试
D. 把敏感词替换为占位符后再发送给模型
查看答案 ▼
✅ B — 在 system prompt 中提供使用场景上下文
模型的拒绝通常是因为缺少上下文——它不知道这段敏感内容为什么需要被分析。在 system prompt 中明确说明:你是谁、你在什么合规框架下工作、这些内容用于什么合法目的(医疗审核、法律合规审查),可以显著减少误拒绝。这是 prompt engineering 的标准做法。
A:降低 safety 设置影响整体安全性,不是精准解决方案。
C:换模型不解决根本问题——新模型缺少同样的上下文。
D:替换敏感词改变了内容语义,审核结果不可靠。
你构建了一个多轮对话的数据收集智能体。它需要依次询问用户:姓名 → 年龄 → 地址 → 偏好。
用户在第 3 个问题(地址)时给出了不完整的回答,智能体需要追问。
如何管理多轮对话的状态?
A. 在 system prompt 中维护一个状态机,每次根据当前状态决定下一个问题
B. 在应用层维护对话状态(已收集字段、当前步骤),每次将状态嵌入 user message
C. 完全依赖模型记忆已收集的信息——不需要额外状态管理
D. 每轮对话独立处理,不维护跨轮状态
查看答案 ▼
✅ B — 应用层维护状态,嵌入 user message
多轮对话的状态应由应用层确定性地管理(而非依赖模型记忆)。在每条 user message 中嵌入当前状态:已收集的字段、当前步骤、待收集的字段、上一条回答是否完整。这让模型有明确的上下文做决策——不需要"回忆"前面发生了什么。
A:system prompt 不适合频繁变化的状态——应该在 user message 中传递动态信息。
C:依赖模型记忆不可靠——长对话中可能遗忘或混淆。
D:不维护状态会导致重复询问或遗漏字段。
你需要从简历中提取嵌套结构:个人信息 {姓名, 电话, 邮箱}、工作经历 [{公司, 职位, 起止时间, 职责列表}]、教育背景 [{学校, 学位, 专业, 毕业年份}]。
JSON schema 设计的关键要点是什么?
A. 将所有字段拍平为单层结构——嵌套 schema 容易出错
B. 明确每层的 required 字段、array item 的 schema、嵌套对象的约束
C. 只定义顶层 schema,嵌套部分让模型自由发挥
D. 把嵌套结构拆成多个独立的 tool_use 调用
查看答案 ▼
✅ B — 明确定义每层的 required、array schema、嵌套约束
嵌套 JSON schema 需要逐层精确定义:每层哪些字段是 required、array 内每个 item 的 schema、嵌套对象的约束。例如工作经历数组中每个元素的 {公司, 职位, 起止时间} 必须完整定义。Schema 越精确,tool_use 输出的结构就越可靠。关键:每层都显式定义,不要依赖模型的"理解"。
A:拍平丢失了数据间的逻辑关系——一段工作经历的公司和职位是关联的。
C:不定义嵌套 schema 等于放弃了结构化输出的保证。
D:拆成多个调用可能丢失跨部分的关联信息。
Domain 5 · 上下文管理与可靠性(4 题)
你需要分析一份 80 页的技术规范 PDF。直接放入上下文会超出窗口限制。
你决定用分块策略:每次读 10 页,逐块分析,最后合并结果。
分块分析时需要注意什么?
A. 每块独立分析即可——最后合并自然覆盖所有内容
B. 每块分析时保留前一块的关键发现作为上下文传递,确保跨块的关联不被丢失
C. 随机打乱页码再分析——避免顺序偏见
D. 只分析前 40 页——80 页中最重要的信息通常在文档前半部分
查看答案 ▼
✅ B — 传递前一块的关键发现作为跨块上下文
分块分析的最大风险是丢失跨块关联——第 5 页提到的概念到第 60 页才定义,如果每块独立分析就无法关联。解决方案:每分析完一块,提取关键实体、定义、未解决的引用,作为"running context"传递给下一块。这样后面的分析能关联前面的内容。
A:独立分析丢失跨块关联——这是分块最核心的陷阱。
C:随机打乱破坏了文档的逻辑结构——定义--使用--扩展的顺序是重要的。
D:后半部分可能包含安全要求、实施细节等关键内容。
你的子智能体在隔离上下文中运行,只获取任务相关的信息。
但这次任务确实需要知道一些全局背景(公司的业务领域、产品名称、合规要求),否则子智能体会输出与公司无关的泛泛内容。
如何处理这种"共享上下文"的需求?
A. 给子智能体传入完整的协调者对话历史——这样它什么都知道
B. 提炼一份精简的"共享背景"文档(公司信息、领域术语、合规要求),只把这部分传给子智能体
C. 让子智能体在需要时向协调者查询缺失的背景信息
D. 把全局背景写在子智能体的 system prompt 中
查看答案 ▼
✅ B — 提炼精简共享背景,只传必要信息
上下文隔离不意味着零共享——而是共享"必要的、结构化的、精简的"背景。将公司信息、领域术语、合规要求等提炼为一份短文档(可能只有几十行),作为每个子智能体的固定背景。这比共享完整对话历史高效得多,同时确保子智能体的输出与公司语境相关。
A:完整历史是上下文隔离的反面——包含了大量与子任务无关的噪声。
C:子智能体不知道缺少什么——它可能不会主动查询。
D:system prompt 不便于动态更新(不同任务可能需要不同背景)。
你的生产智能体系统已经运行了一个月。产品经理想知道:(1) 智能体处理了多少请求?(2) 智能体循环平均执行几轮?
(3) 哪些工具调用最频繁?(4) 升级到人工的比例是多少?
应该建立什么样的监控体系?
A. 定期让模型自己总结运行状况
B. 在应用层记录结构化日志:会话 ID、每轮 stop_reason、工具调用、延迟、升级原因
C. 查看 API 使用量账单就足够了
D. 抽样检查 10 个会话,推断整体情况
查看答案 ▼
✅ B — 应用层结构化日志 + 关键指标追踪
生产智能体系统需要和任何生产系统一样的可观测性。结构化日志至少记录:会话 ID、每次 API 调用的 stop_reason、每轮的工具调用名称和参数、延迟、升级触发条件和原因、错误类型。这些数据聚合后可回答产品经理的所有问题,并帮助发现异常(如某个工具突然频繁失败、循环轮次异常增加)。
A:让模型总结自己既不精确也不可审计。
C:账单只看总调用量,无法回答分类问题。
D:10 个样本无法代表一个月的运行状况。
你的研究智能体在合成报告时,声称找到了某项研究的结论,但实际那篇论文并不存在——模型"编造"了一篇论文。
你在 trace 中发现了这个问题。
如何在架构层面减少幻觉的影响?
A. 在 prompt 中加"不要编造信息"的指令
B. 每个事实声明标注来源(出处 + 页码/段落 + 提取时间),区分"原文引用"和"模型推断",输出前校验关键声明
C. 降低 temperature 到 0
D. 只让模型输出它非常确定的内容,不确定的就跳过
查看答案 ▼
✅ B — 来源标注 + 区分引用/推断 + 输出前校验
幻觉不能通过 prompt 消除——它是模型的基本特性。正确的架构策略是:要求每条声明标注来源和出处,明确区分"原文直接引用"和"模型基于多源的推断",对关键声明(如论文标题、统计数据)在输出前做反向校验(用声称的标题去搜索确认是否存在)。
A:prompt 指令不能消除幻觉——模型不知道它在编造。
C:temperature=0 减少但不会消除幻觉,且可能遗漏真实但低概率的信息。
D:模型不知道自己不确定——它可能对编造的内容也有高置信度。
Practice Exam 3(第 51–75 题)
第三套模拟题 · 25 道全新情景 · 覆盖 5 域 · 建议独立计时 50 分钟完成
你设计了一个多智能体系统:Router Agent 负责接收用户请求并分发给 Specialist Agent。
Specialist 完成后将结果返回给 Router,Router 再回复用户。你发现当 Specialist 返回结果后,
Router 有时会重新解释结果(引入错误),而不是直接传递。
如何设计 handoff 协议来减少 Router 重新解释导致的错误?
A. 让 Router 用更强大的模型,提高解释准确性
B. Specialist 将结果包裹在标准化 JSON 中,Router 透传该 JSON 给用户,不做重新解释——仅在 JSON 中添加元数据标记(来源 agent、置信度、时间戳)
C. 删除 Router,让 Specialist 直接面对用户
D. 让 Router 将 Specialist 结果改写为用户更友好的语言
查看答案 ▼
✅ B — 标准化 handoff 协议 + 透传结果 + 元数据标记
handoff 的核心原则:传递结构化结果而非自由文本,下游 agent 透传而非重新生成。标准协议应包括:结果 payload(不可变的原样内容)、来源 agent ID、置信度分数、生成时间戳。Router 只负责路由和透传,不做语义改写——每次改写都是引入错误的入口。
A:更强模型不能消除重新解释引入的误差,根源在流程设计而非模型能力。
C:去掉 Router 会失去多 agent 编排的核心价值——统一入口和路由逻辑。
D:「改写为用户友好语言」正是引入错误的来源——应透传原始结果。
你的客服智能体使用 while 循环处理用户请求:每次迭代调用工具 → 获取结果 → 决定是否继续。
你发现智能体偶尔陷入「无限循环」——反复调用同一工具但每次结果相同,永远不退出。
架构层面,应添加什么机制来防止无限循环?
A. 降低 max_tokens,让模型在超时后自动停止
B. 设置 max_turns 上限 + 连续相同工具调用检测 + 无进展终止条件(三合一防护)
C. 使用 temperature=0 确保输出确定性
D. 移除 while 循环,改为单次工具调用
查看答案 ▼
✅ B — max_turns + 重复调用检测 + 无进展终止
三层防护:① max_turns 作为硬上限(防止无限运行);② 检测连续 N 次是否调用相同的工具+相同的参数(重复检测);③ 比较前后两轮的状态变化——如果关键指标无进展(如未找到新信息、未解决更多子问题),触发终止。这三种机制互补:max_turns 防失控、重复检测防死循环、无进展检测防无效探索。
A:max_tokens 控制的是单次响应的输出长度,不是循环次数。
C:temperature 影响随机性,与循环退出逻辑无关。
D:移除循环会失去多步推理能力——很多复杂任务需要多次工具调用。
你的智能体调用外部 API 工具时偶尔超时(网络波动、第三方服务降级),默认设置下智能体直接报告失败给用户,
导致不必要的重试和差体验。
最佳的重试与超时策略是什么?
A. 将超时时间设为 30 秒,确保每次都能等到响应
B. 失败后立即重试,最多 10 次
C. 指数退避重试(exponential backoff)+ 最大重试次数 + 对不同错误类型区别对待(超时可重试 vs 4xx 不重试)
D. 工具层面静默吞掉所有错误,避免打扰用户
查看答案 ▼
✅ C — 指数退避 + 最大重试 + 错误类型区分
重试策略三要素:① 指数退避(1s → 2s → 4s → 8s...)减轻被调用方压力,避免雪崩;② 最大重试次数(通常 3-5 次)防止无限等待;③ 错误类型区分——网络超时、503 等临时故障可重试,401/403 等认证错误不应重试(重试也不会成功),400 参数错误不应重试(需修正请求)。工具层做完这些后,将最终结果(成功 or 终局失败)返回智能体。
A:固定长超时会让正常用户等待过久,且不能解决根本问题。
B:立即重试 10 次可能在 1 秒内向故障服务发起 10 次请求,加剧问题。
D:吞掉所有错误会让智能体和用户不知道发生了什么,可能导致错误决策。
你构建了一个长期运行的研究智能体,它跨多个会话持续收集和分析信息。
每个会话结束后,智能体的中间发现和推理链都会丢失,下一会话需要从头开始。
如何在架构层面保持跨会话的智能体状态?
A. 使用更长的 context window,让单次会话容纳所有信息
B. 每个会话结束时将「case facts block」写入外部存储;下一会话从存储加载该 block 注入 system prompt 作为起始上下文
C. 让智能体在每次会话中重新执行所有历史步骤
D. 将所有对话记录保存为文件,下个会话直接作为 user message 贴入
查看答案 ▼
✅ B — case facts block 外部持久化 + 下会话注入
跨会话状态保持的最佳实践:① 定义「case facts」结构(已确认的事实、待验证的假设、已排除的方向、当前进度百分比);② 每个会话结束前,智能体将 case facts 写入外部存储(文件、数据库);③ 下一会话启动时,从存储加载 case facts,注入 system prompt(不占用 user message 空间);④ 新会话基于该快照继续工作,无需重做已完成的分析。这种方法比保存全文对话更结构化、更省 context。
A:context window 再大也是有限且成本高的——这是回避问题而非解决问题。
C:重新执行所有步骤浪费时间和算力,且可能产生不一致的结果。
D:把历史对话全量贴入下一会话会迅速耗尽 context window 且信息密度低。
你需要同时运行 3 个子智能体处理一份大型数据分析任务:Agent A 清洗数据,
Agent B 统计分析,Agent C 生成可视化。但 B 依赖 A 的输出,C 依赖 A 和 B 都完成。
如何编排有依赖关系的并行智能体?
A. 让所有 3 个 Agent 同时启动,它们会自动协调依赖关系
B. 串行执行 A → B → C,确保依赖正确
C. 使用 DAG 编排器:定义任务图(A 无依赖先执行,B 依赖 A 的输出,C 依赖 A+B),并行执行所有无依赖的任务,依赖满足后自动触发下游
D. 将所有三个任务合并到一个 Agent 中执行
查看答案 ▼
✅ C — DAG 编排器 + 依赖驱动的并行触发
有依赖的并行任务最佳方案:① 定义任务 DAG(A 无依赖 → B 依赖 A → C 依赖 A 和 B);② 编排器先启动所有无依赖任务(A 立即开始);③ A 完成后,触发 B(依赖满足);④ A 和 B 都完成后,触发 C;⑤ 如果某任务失败,其下游任务自动标记为 blocked 而非静默等待。这样可以最大化并行度同时保证依赖正确。完全串行(B)虽然正确但浪费了 A 和 B 之间潜在的并行机会——实际上 B 的「统计设计」阶段可能不需要 A 的完整输出。
A:同时启动会乱——B 和 C 可能在 A 还没完成时就开始,使用空数据。
B:完全串行虽然正确但低效,且无法扩展到更多任务的场景。
D:合并到一个 Agent 失去了并行性和专业化优势。
你的 CI/CD 智能体需要偶尔执行需要 sudo 权限的操作(如安装系统依赖),
但你不想给它永久的 sudo 权限。
最佳权限控制策略是什么?
A. 给智能体完整的 sudo 权限,但在 prompt 中要求它「谨慎使用」
B. 不允许智能体执行任何需要 sudo 的操作,改为人工手动执行
C. 使用 PreToolUse hook 拦截高风险命令,仅放行预定义的安全操作列表中的命令,其余请求用户逐次确认
D. 创建一个专门的「sudo 子智能体」拥有完整 sudo 权限,主智能体通过它间接执行
查看答案 ▼
✅ C — PreToolUse hook 拦截 + 白名单放行 + 其余逐次确认
权限控制分层策略:① 定义命令白名单(如 apt-get install <已审核的包名>、systemctl restart <特定服务>)——这些可以自动放行;② PreToolUse hook 拦截所有 sudo 命令,在白名单中的自动通过,不在白名单中的触发用户确认;③ hook 记录所有 sudo 调用的完整日志(命令、时间、结果)。这比「完全禁止」(阻碍工作)或「完全信任」(安全风险)更实用。创建另一个有完整 sudo 的子智能体(D)只是转移了问题而非解决问题。
A:prompt 不是安全机制——智能体可能被注入攻击诱导使用 sudo。
B:完全禁止会阻塞必要的自动化操作,降低效率。
D:新建有完整 sudo 的子智能体会创建更大的攻击面,且绕过了权限审查。
你的 tool 返回一个复杂的嵌套 JSON(5 层嵌套、20+ 字段),智能体在后续对话中频繁
错误解析该结构,导致使用了错误的数据。
如何设计 tool response 来减少解析错误?
A. 使用 XML 替代 JSON,模型对 XML 理解更好
B. 扁平化结构(最多 2 层嵌套)+ 每个字段添加简短说明 + 只返回当前任务需要的字段,不返回全量数据
C. 将 JSON 转为自然语言描述返回
D. 在 response 末尾追加一个 JSON Schema 定义
查看答案 ▼
✅ B — 扁平化 + 字段说明 + 按需返回
Tool response 设计三原则:① 扁平化——超过 2 层嵌套的结构应拆分为多个顶层键或通过引用关联;② 每个字段的值旁附简短语义说明(如 "status": "active" // 账户状态:活跃/暂停/关闭),帮助模型理解枚举含义;③ 按需返回——不要 dump 整个数据库记录,只返回智能体当前步骤需要的字段。JSON Schema 定义应放在 tool definition 的 output_schema 中(D),而非每次 response 里。
A:XML 和 JSON 准确率差异不大,关键在于结构复杂度而非格式。
C:自然语言描述会丢失结构化信息的精确性,不利于程序化处理。
D:每次 response 都带 schema 浪费 tokens,schema 应放在 tool definition 中。
你的 MCP Server 需要访问公司的内部 API(需要 API Key)。你在 .mcp.json 中写了
明文的 API Key。安全审计指出这是严重漏洞。
如何安全管理 MCP Server 的凭据?
A. 将 .mcp.json 加入 .gitignore,防止提交到仓库
B. 凭据通过环境变量注入(${API_KEY}),.mcp.json 中只写变量引用;环境变量由系统密钥管理器或 CI/CD secret 提供
C. 将 API Key 硬编码在 MCP Server 代码中
D. 每次启动 MCP Server 时手动输入密码
查看答案 ▼
✅ B — 环境变量注入 + .mcp.json 只存引用
凭据管理黄金法则:凭据绝不进入配置文件。.mcp.json 使用 ${ENV_VAR} 语法引用环境变量;实际凭据由操作系统密钥管理器(macOS Keychain、Linux secret-tool)、CI/CD secret 变量或 vault 服务提供。.gitignore(A)是必要但不充分——即使不提交,明文凭据也可能通过日志、备份、屏幕共享泄露。环境变量注入是 MCP 官方推荐的做法。
A:.gitignore 防止提交但不足以防止其他泄露渠道(日志、调试输出、备份)。
C:硬编码在代码中是最不安全的方式——任何有代码访问权限的人都能看到。
D:手动输入不适用于自动化场景(CI/CD、定时任务、后台服务)。
你正在设计一个「搜索知识库」的 tool。你在纠结 description 应该写多详细——
太简短会让模型误用,太冗长会占用 context。
Tool description 的最佳设计粒度是什么?
A. 一句话描述:"搜索公司知识库"
B. 极其详尽:列出所有可能的搜索场景、边界情况和示例
C. 描述应包含:工具做什么(搜索语义相似文档)+ 何时使用(需要查找事实/政策/流程时)+ 何时不用(不要用于实时数据查询)+ 关键参数说明 + 1 个典型示例
D. 只写参数 schema,不需要文字描述
查看答案 ▼
✅ C — 做什么 + 何时用 + 何时不用 + 参数说明 + 示例
Tool description 最佳实践:① 功能声明(一句话说清工具做什么);② 使用条件(什么场景下应选择此工具);③ 排除条件(什么场景下不应使用——避免误用);④ 关键参数说明(尤其是有歧义的参数);⑤ 一个典型调用示例。这个结构在 150-300 tokens 内提供了模型所需的全部决策信息。「何时不用」是最容易被忽略但最重要的部分——它能避免模型在不合适的场景误调用工具。
A:太简短,模型无法判断何时该用此工具 vs 其他工具。
B:过于冗长的描述占用宝贵 context 且可能让模型在细节中迷失。
D:仅有 schema 没有文字描述,模型不知道工具的设计意图和使用场景。
你的批量操作工具一次处理 100 条记录——95 条成功、5 条失败。当前设计是:
有任何失败就返回整体 error,导致智能体重试整个批次(包括已成功的 95 条)。
最佳的部分失败处理设计是什么?
A. 忽略失败的 5 条,只返回成功的 95 条
B. 返回结构化结果:成功列表 + 失败列表(含每条失败的具体原因和重试建议)+ 汇总状态(partial_success)
C. 降低批次大小到 10 条,减少失败影响面
D. 失败时自动重试整个批次 3 次,3 次后报告最终结果
查看答案 ▼
✅ B — 结构化 partial_success 响应:成功/失败分离 + 原因 + 重试建议
批量操作的部分失败处理模式:① 响应状态为 partial_success(而非简单的 success/error 二元);② 返回三个部分——成功列表(已处理项)、失败列表(每项附 error_code + error_message + 是否可重试)、汇总统计(total/ succeeded/ failed);③ 智能体基于这些信息决定:对可重试的失败项单独重试(而非整个批次),对不可重试的(如数据格式错误)跳过或报告用户。这种设计避免了重复处理已成功项,同时给智能体足够的决策信息。
A:静默忽略失败会让问题消失——用户不知道有 5 条没处理。
C:降低批次大小治标不治本——无论批次多大,部分失败的情况都会出现。
D:整个批次重试会重复处理成功的 95 条,可能产生重复数据或浪费资源。
你需要在 MCP Server 中暴露公司的产品目录数据。产品目录基本不变(每日更新一次),
智能体需要频繁查询产品信息来回答用户问题。
应该将产品目录暴露为 MCP Resource 还是 Tool?
A. Tool——智能体可以按名称、类别、价格范围搜索产品
B. Resource——产品目录是数据,不是操作;Resource 支持 URI 读取和订阅变更通知
C. 同时暴露为 Resource 和 Tool——Resource 用于全量/按 ID 读取 + 变更订阅,Tool 用于复杂搜索查询
D. 将产品目录硬编码在 system prompt 中
查看答案 ▼
✅ C — Resource(读取 + 订阅)+ Tool(搜索)组合
MCP Resource vs Tool 的判断标准:Resource = 暴露数据(文件内容、数据库记录、API 响应),用 URI 标识,支持订阅变更通知;Tool = 暴露操作(执行搜索、修改数据、调用外部服务),有输入参数和返回结果。产品目录场景下的最佳设计:用 Resource 暴露目录的只读视图(mcp://products/catalog),支持按 ID 读取单个产品和订阅每日更新;用 Tool 提供复杂搜索能力(searchProducts 支持多条件筛选)。两者互补而非互斥。
A:只用 Tool 会失去 Resource 的 URI 直接访问和变更订阅能力。
B:只用 Resource 无法高效处理复杂搜索(跨字段组合查询)。
D:硬编码在 system prompt 中无法实时更新且占用宝贵 context。
你的团队维护一个 monorepo,根目录有 CLAUDE.md(团队通用规范),
子项目 frontend/ 和 backend/ 各有自己的 CLAUDE.md(项目特定规范)。
当 Claude 在 frontend/ 目录下工作时,两个 CLAUDE.md 的内容有冲突。
CLAUDE.md 的继承与覆盖规则是什么?
A. 只有最近的 CLAUDE.md 生效,父级被忽略
B. 两处内容合并,冲突时子目录覆盖父目录
C. 两处内容合并,冲突时父目录优先(全局规范不可被覆盖)
D. 由用户手动选择加载哪个 CLAUDE.md
查看答案 ▼
✅ B — 合并 + 子目录覆盖父目录(就近优先)
CLAUDE.md 采用层级合并策略:① Claude 在工作目录及其所有父目录中寻找 CLAUDE.md;② 所有找到的 CLAUDE.md 内容合并加载;③ 当规则冲突时,离工作目录最近的 CLAUDE.md 优先(就近优先原则)——即子目录可覆盖父级设置;④ 子目录可以在 CLAUDE.md 中显式引用父级规则("继承根目录的代码风格规范,补充以下前端特定规则")。这样团队规范提供基线,子项目可按需调整。
A:完全忽略父级会失去团队通用规范的价值——DRY 原则。
C:父级优先会让子项目无法针对自身需求调整——比如前端和后台可能需要不同的 lint 规则。
D:手动选择增加操作负担且不可自动化(CI/CD 场景无法手动选择)。
你为团队设计了自定义 slash command /deploy,它会触发构建、测试和部署流程。
你希望确保该命令在不同项目中行为一致,但允许项目覆盖部署目标环境。
如何设计可共享、可定制的自定义命令?
A. 在每个项目中复制粘贴相同的命令文件
B. 使用用户级命令(~/.claude/commands/)+ 通过环境变量让项目覆盖特定参数
C. 使用项目级命令(.claude/commands/)+ 将通用逻辑抽成共享 Skill,命令文件只写项目特定的参数覆盖
D. 将命令逻辑全部写在 CLAUDE.md 中
查看答案 ▼
✅ C — 共享 Skill 封装通用逻辑 + 项目级命令文件覆盖参数
可组合的命令设计模式:① 将 deploy 的核心流程(构建步骤、测试命令、部署顺序、回滚策略)封装为一个 Skill;② 项目级命令文件(.claude/commands/deploy.md)只写项目特定的配置——目标环境(staging/prod)、项目名、额外的健康检查端点;③ 命令文件通过参数 `$0, $1` 或引用 Skill 来复用通用逻辑。这样团队添加新项目时,只需写一个轻量的命令文件,核心流程由 Skill 统一维护。
A:复制粘贴导致流程漂移——修复一个 bug 需要更新所有副本。
B:用户级命令不在仓库中,无法通过 git 与团队共享。
D:CLAUDE.md 应放持久性规则,命令逻辑更适合放在专门的命令文件中。
你的团队要求所有重大代码变更必须先在 Plan Mode 中出方案、审批通过后才能实施。
但你发现开发者有时跳过 Plan Mode 直接开始写代码。
如何在架构层面强制执行 Plan Mode 流程?
A. 在团队文档中写明「请使用 Plan Mode」,靠自觉
B. 使用 PreToolUse hook 拦截 Edit/Write 操作,检查是否存在已批准的 plan 文件,不存在则阻止并提示先进入 Plan Mode
C. 完全禁用直接编辑功能,强制所有变更通过 Plan Mode
D. 每次编辑前弹出确认对话框
查看答案 ▼
✅ B — PreToolUse hook 检查 plan 文件存在性 + 阻止无计划的编辑
Plan Mode 强制执行的工程化方案:① 在 .claude/hooks/ 中配置 PreToolUse hook,监听 Edit 和 Write 工具调用;② hook 检查工作目录(或指定的 plan 目录)中是否存在已批准的 plan 文件(如 plan-approved.md);③ 如果不存在,hook 返回阻止并提示「请先进入 Plan Mode 并获取方案审批」;④ 紧急修复可以通过特定标记(如 --hotfix)绕过——保留逃生通道;⑤ plan 文件合入后自动清理标记,下一次变更需要新 plan。这是流程保障而非信任依赖。
A:文档靠自觉——在交付压力下会被跳过,不是工程化方案。
C:完全禁用编辑过于极端——紧急修复、小改动不应被阻塞。
D:弹出确认对话框是 UI 层面的提醒,用户可以直接点「确认」绕过。
你的组织有 20+ 个微服务仓库,每个都需要 Claude Code 的团队配置
(CLAUDE.md、skills、commands、hooks)。你不想在每个仓库中复制粘贴相同的配置。
如何高效管理多仓库的 Claude Code 配置?
A. 写一个脚本,将配置复制到所有 20 个仓库
B. 维护一个「配置模板仓库」,各服务仓库使用 git submodule 引用共享配置,并允许仓库级覆盖
C. 将所有配置放在一个中心化服务器上,通过 API 动态加载
D. 只在一个「主仓库」配置 Claude Code,其他仓库不配置
查看答案 ▼
✅ B — 模板仓库 + git submodule + 仓库级覆盖层
多仓库配置管理策略:① 创建 claude-config-templates 仓库,存放团队共享的 CLAUDE.md 基线、通用 skills、标准 hooks;② 各服务仓库通过 git submodule(或 subtree)引用模板仓库;③ 每个仓库保留自己的 .claude/ 目录用于覆盖特定配置——子目录的 CLAUDE.md 优先级更高,自动覆盖模板中的对应规则;④ 模板仓库发版时,各仓库通过更新 submodule 引用来获取最新配置。对比脚本复制(A):submodule 可追溯版本、可回滚、有明确的更新机制。
A:复制脚本无法追溯版本——你不知道每个仓库在用哪个版本,更新靠手动重新运行脚本。
C:中心化 API 动态加载引入网络依赖——离线或 API 故障时所有仓库都受影响。
D:其他仓库没有配置,Claude 无法理解项目特定约定,工作效率大幅下降。
你的团队中有人用 VS Code、有人用 JetBrains、有人直接用终端。
你希望 Claude Code 在所有环境中行为一致。
如何确保跨 IDE 的配置一致性?
A. 为每个 IDE 分别维护一份配置
B. 配置全部放在项目 .claude/ 目录中(CLAUDE.md、commands、skills、hooks),不依赖 IDE 特定机制——所有 IDE 的 Claude Code 扩展都读取同一套项目级配置
C. 要求所有人使用同一个 IDE
D. 配置放在云端,不同 IDE 通过网络同步
查看答案 ▼
✅ B — 项目 .claude/ 目录作为唯一配置来源
跨 IDE 一致性的关键:项目 .claude/ 目录(CLAUDE.md、commands/、skills/、hooks/、agents/)是所有 Claude Code 集成(VS Code 扩展、JetBrains 插件、终端 CLI)的统一配置源。无论用户使用哪种界面,Claude Code 都从同一目录加载相同的规则、技能和钩子。用户级配置(~/.claude/)可用于个人偏好但不应包含项目关键规则。这保证了:团队成员换 IDE 不影响行为、CI/CD 中的 Claude Code 与本地行为一致、新人 onboarding 只需 clone 仓库。
A:多份配置必然漂移——修一个 bug 需要记得同步所有版本。
C:强制统一 IDE 不现实且没必要——Claude Code 的设计目标就是跨界面一致。
D:云端同步引入网络依赖和额外的安全风险——配置应随代码一起版本化。
你的应用需要处理 50 种不同类型的用户查询(退款、换货、投诉、咨询...),
每种需要不同的回复格式。静态 few-shot 示例无法覆盖所有类型。
如何设计动态 few-shot 选择策略?
A. 把所有 50 种类型的示例都放进 system prompt
B. 先对用户查询做轻量分类(用规则或小模型),然后从示例库中按分类标签检索最相关的 2-3 个示例,动态注入到当前请求的 prompt 中
C. 不使用 few-shot,相信模型能自行推理出正确的回复格式
D. 每种查询类型创建一个独立的 Agent
查看答案 ▼
✅ B — 分类 → 检索 → 动态注入相关示例
动态 few-shot 管道:① 维护一个带标签的示例库(每条示例标注:查询类型、难度、所需输出格式);② 收到用户查询后,先用轻量方式分类(关键词匹配或小模型快速分类);③ 根据分类标签从示例库中检索最匹配的 2-3 个示例(用语义相似度或标签精确匹配);④ 将选中的示例动态拼入当前请求的 prompt。这种方法精准、节省 context(只加载相关示例),且示例库可独立迭代(新增类型不需要改 prompt 模板)。
A:50 种类型的全量示例会占用大量 context window,且大多数与当前查询无关。
C:模型在没有示例的情况下难以精确匹配企业特定的回复格式要求。
D:50 个 Agent 的维护成本极高,且很多查询类型之间共享回复结构。
你使用 Claude 生成 JSON 格式的 API 响应。即使使用了 tool_use + JSON Schema,
偶尔还是会收到格式正确但内容不合逻辑的输出(如负数年龄、未来出生日期)。
如何设计输出验证管道?
A. 相信 JSON Schema 已经足够——格式正确就意味着内容正确
B. 在 prompt 中写「确保数据合理」
C. 三层验证管道:Schema 验证(格式)→ 业务规则验证(逻辑)→ 异常检测(统计),任一层失败时触发修正循环
D. 人工审核每一份输出
查看答案 ▼
✅ C — Schema → 业务规则 → 异常检测 三层管道
输出验证三层架构:① Schema 验证——检查 JSON 结构、字段类型、必填项(可用 JSON Schema validator 自动完成);② 业务规则验证——检查内容逻辑:年龄 ≥ 0、日期 ≤ 今天、金额 = 单价 × 数量、状态转换合法等;③ 异常检测——统计层面:单条输出的字段分布是否与历史数据偏离过大。任一层失败时,将具体的失败原因(哪条规则违反了什么约束)反馈给模型,触发修正循环(最多 2-3 次,超过则降级处理)。
A:Schema 只验证结构,不验证内容逻辑——负数年龄在 JSON Schema 中是合法的 number。
B:自然语言指令无法精确约束逻辑——模型可能忽略或理解偏差。
D:人工审核无法规模化——高吞吐量场景下人工是不可行的瓶颈。
你的应用需要 Claude 同时处理一张产品图片和一段文字描述,判断两者是否一致。
如何构建多模态 prompt 以获得最准确的判断?
A. 先让模型描述图片,再与文字对比,分两步完成
B. 在单次请求中,将图片和文字放在同一个 content block 列表中,给出结构化的判断标准和输出格式(tool_use 定义判断结果 schema)
C. 只发图片,让模型自己推断判断标准
D. 将图片转为 base64 后嵌入到文字描述中作为 prompt 前缀
查看答案 ▼
✅ B — 单次请求 + content block 列表 + 结构化判断标准 + tool_use schema
多模态 prompt 最佳实践:① 使用 content block 数组,将图片(image content block)和文字说明(text content block)放在同一个 user message 中;② 给出明确的判断维度(如:产品颜色、形状、标签文字、包装特征),每个维度定义一致/不一致/无法判断三种结果;③ 使用 tool_use 定义输出 schema,确保判断结果结构化(而非自由文本);④ 要求模型标注每个维度判断的依据(「图片中标签显示 X,文字描述为 Y」)。两步法(A)增加延迟且第一步可能丢失关键细节。
A:两步法引入中间环节误差——第一步的描述可能遗漏关键细节,且总延迟翻倍。
C:没有判断标准,模型可能关注错误的维度(如背景而非产品本身)。
D:base64 嵌入到文字中是错误做法——图片应使用 image content block 而非文本拼接。
用户对你的客服应用说:「我上个月买的那个东西不好用,帮我处理一下。」
这个请求极其模糊——不知道是什么产品、什么问题、想要什么处理方式。
Prompt 应如何设计来处理模糊输入?
A. 让模型尽力猜测用户意图,给出最可能的处理方案
B. 要求模型识别信息缺口,列出缺失的关键信息清单,生成友好的追问而非猜测——使用「澄清优先」策略
C. 直接回复:「您的请求不够清晰,请重新描述」
D. 将模糊请求转给人工客服
查看答案 ▼
✅ B — 澄清优先:识别缺口 → 列出缺失信息 → 生成友好追问
「澄清优先(Clarification-First)」策略的 prompt 设计:① 要求模型先做信息缺口分析——列出要处理此请求需要知道但当前缺失的信息(产品名、订单号、具体问题、期望处理方式);② 根据缺口生成结构化的追问,一次问 2-3 个最关键的问题(不要一次问太多);③ 追问要友好且具体——不是「请重新描述」,而是「您提到的产品是哪个?方便提供订单号吗?具体是什么问题呢?」;④ 同时告诉用户「如果您能提供订单号,我可以立刻帮您查询」。这比猜测(可能错误导致后续修复成本更高)或粗暴拒绝(差体验)都要好。
A:猜测可能错误——错误处理比多问一句的成本高得多(退款给错人、发错替换品)。
C:粗暴要求用户重新描述是差体验——用户可能不知道如何「描述得更清晰」。
D:直接转人工失去了自动化的价值——大部分模糊请求通过 1-2 轮追问可以澄清。
你的应用每周迭代 system prompt。某次更新后,核心指标(任务完成率)下降了 15%,
但你不确定是哪处修改导致的——因为一次改了 5 个地方。
如何建立 system prompt 的版本管理与回归检测?
A. 每次修改后人工检查输出质量
B. Prompt 纳入版本控制 + 每次只改一处 + 每个版本跑固定的 eval 基准测试集 + 设置性能阈值(低于阈值自动告警)
C. 不做版本管理——出问题时直接回滚到上一个 git commit
D. 保留所有历史版本在文件夹中,手动对比
查看答案 ▼
✅ B — Git 版本控制 + 单变量修改 + 固定 eval 基准 + 性能阈值告警
System prompt 工程化四要素:① 版本控制——prompt 文件随代码一起用 git 管理,每次修改有 commit message 说明改动原因和预期效果;② 单变量原则——每次只改一处(一段指令、一个示例、一个参数),这样才能归因效果变化;③ 固定 eval 基准——维护 50-100 个测试用例的 eval set,覆盖正常路径、边界情况和错误恢复,每个新版本必须在 eval set 上跑完并对比基线;④ 性能阈值——设定关键指标的最低可接受值(如任务完成率 ≥ 85%、幻觉率 ≤ 5%),低于阈值时 CI 自动告警阻止合并。
A:人工检查不可规模化且不一致——同一个人不同时间可能给出不同判断。
C:回滚到 git commit 解决了回退问题但解决了归因——不知道是 5 处修改中哪处导致的。
D:手动对比多个版本效率低且容易遗漏——应该自动化 eval 对比而非人工 diff。
你的智能体在处理长文档分析任务时,上下文窗口逐渐被中间步骤占满——大量的搜索结果、
草稿、工具输出堆积在上下文里,导致后期步骤缺少足够的空间进行推理。
最佳上下文压缩策略是什么?
A. 不做压缩——升级到更大的 context window 模型
B. 阶段性摘要(checkpoint summary):每完成一个子任务后,将该阶段的中间过程压缩为结构化摘要(已确认事实 + 当前结论 + 下一步计划),丢弃原始中间数据
C. 将所有工具输出截断到 500 字符
D. 只保留用户消息,删除所有工具输出
查看答案 ▼
✅ B — Checkpoint summary:阶段性子任务完成后压缩中间过程
Checkpoint summary 策略:① 在任务分解时标识 checkpoints——每完成一个独立子任务后触发压缩;② 压缩格式:已确认的事实(只保留结论,丢弃原始的搜索/推理过程)、当前总体进度、下一步计划;③ 压缩后的 checkpoint 保留在上下文中(约 200-500 tokens),原始中间数据从上下文中移除;④ 关键原始数据(如重要的引用原文)可通过引用链接保存(存到外部文件,需要时重新读取)。这比升级模型(A)更根本——context 管理是架构问题,不是资源问题。
A:更大的 context window 只是推迟问题——长任务总会超过某个上限。
C:粗暴截断可能丢失关键信息——500 字符的引用不完整可能导致后续推理错误。
D:删除所有工具输出会让智能体失去已获取的信息,等于重新开始。
你的批处理智能体需要连续运行 8 小时处理大量文件。在第 6 小时,
API 返回了一个 5xx 错误,整个会话的状态丢失了——已处理的 600 个文件结果全部丢失。
如何设计可靠的长时间运行会话?
A. 增加 retry 次数,确保单次请求最终成功
B. 将处理进度和中间结果持久化到外部存储(文件/数据库),每个文件处理完立即保存结果;会话崩溃后从持久化的进度恢复,只重做未完成的部分
C. 缩短批次——每次只处理 50 个文件,分多次会话完成
D. 使用更贵的专用服务器保证不崩溃
查看答案 ▼
✅ B — 外部持久化进度 + 增量保存 + 崩溃恢复
长运行会话可靠性三原则:① 增量持久化——每处理一个单元(文件/记录)立即将结果写入外部存储,不依赖内存中的状态;② 进度追踪——维护一个独立的进度文件(如 progress.json),记录「已处理 ID 列表」「处理到第几个」「最后成功时间」;③ 崩溃恢复——会话重新启动时,先读取进度文件,跳过已完成的项,从断点继续。这确保即使会话在第 6 小时崩溃,损失仅限于当前正在处理的那一项(而非 600 项)。
A:retry 只在请求层面有效——如果整个会话/进程崩溃,retry 无法恢复已丢失的内存状态。
C:缩短批次降低了单次失败的影响面,但每次新会话都有冷启动成本,且仍需进度追踪。
D:专用服务器不能消除 API 5xx 错误或网络故障——基础设施永远可能出问题,应用层必须有容错。
你的用户连续多天使用同一个 Project 进行一个复杂的研究项目。
每天新会话开始时,Claude 不记得前一天的讨论内容和结论,用户需要每次重新解释背景。
如何在架构层面实现跨会话记忆?
A. 在 CLAUDE.md 中记录所有历史讨论
B. 使用 Project 的 memory 功能 + 每个会话结束时生成 session summary 写入 Project 知识文件 + 新会话自动加载这些总结作为上下文基础
C. 永远不结束会话,保持一个永不关闭的对话
D. 每次新会话开始时,让用户把上一会话的完整对话记录贴进来
查看答案 ▼
✅ B — Project memory + session summary + 自动加载
跨会话记忆架构:① 利用 Claude Code Project 的 memory 功能(可设置为 persistent),Claude 可以将关键事实写入 memory 文件;② 设计一个「会话结束」流程——当前会话结束前,Claude 生成一份结构化的 session summary(本次讨论的核心主题、已做出的决策、待解决的问题、下一次会话的建议起点),写入 Project 的文件系统中;③ 下一会话启动时,Claude 自动加载 Project 中的所有文件包括上次的 summary,无需用户重新解释背景。这比 CLAUDE.md(A)更适合频繁变化的研究状态——CLAUDE.md 适合持久性规则,memory 文件适合动态进展。
A:CLAUDE.md 适合团队的持久性规范,不适合频繁更新的研究进展——每次改 CLAUDE.md 会产生 git diff 噪音。
C:永不关闭会话不可行——API 有超时、token 限制、服务端可能会话过期。
D:贴完整对话记录会迅速占满 context window 且信息密度低。
你的应用依赖 3 个外部服务(MCP Server、知识库 API、用户数据库)。
当知识库 API 不可用时,当前设计是让整个请求失败。
如何设计优雅降级(graceful degradation)?
A. 所有外部服务都不可用时才报错,单个故障忽略
B. 为每个外部依赖定义降级策略:知识库不可用 → 仅基于已有上下文回答并标注「未查询实时知识库」;数据库只读副本不可用 → 切换到主库或返回缓存数据;MCP Server 不可用 → 告知用户该功能暂时不可用,提供替代方案
C. 增加每个服务的超时时间,等到它们恢复
D. 在 prompt 中告诉模型「如果工具不可用就编造合理的信息」
查看答案 ▼
✅ B — 每个依赖独立降级策略 + 透明告知 + 替代方案
优雅降级设计原则:① 依赖隔离——每个外部服务的故障不应级联影响其他正常服务;② 独立降级策略——每个依赖都有独立的 fallback:知识库不可用用缓存或跳过、数据库故障切换副本、MCP 不可用禁用相关功能;③ 透明告知——降级时必须明确告诉用户哪些信息/功能因外部服务不可用而受限(如「以下回答未查询实时知识库,基于已有信息生成」);④ 替代方案——尽可能给用户其他选择(如「您可以稍后重试,或通过以下方式手动查询」)。编造信息(D)是绝对不能接受的——宁可承认能力受限也不能提供虚假信息。
A:单个故障可能影响答案质量——知识库不可用时回答可能不准确,应告知用户。
C:增加超时让用户等待更久但外部服务仍不可用——不解决根本问题。
D:让模型编造信息是危险的反模式——用户信任基于诚实,不是看似完整的回答。
自我评分
D1
Q1–6, 26–31, 51–56
24% · 18 题
D2
Q7–11, 32–36, 57–61
20% · 15 题
D3
Q12–16, 37–41, 62–66
20% · 15 题
D4
Q17–21, 42–46, 67–71
20% · 15 题
D5
Q22–25, 47–50, 72–75
16% · 12 题
共 75 题,建议每题平均 1 分钟,每套 Practice Exam(25 题)独立计时 30 分钟完成。
Practice Exam 1(Q1–25)、Practice Exam 2(Q26–50)、Practice Exam 3(Q51–75)各覆盖全部 5 个域。
如果某个域正确率明显偏低,建议回到 12 周学习计划 ,重点补强该域的对应周。
← 12 周学习计划
备考总览 →