为复杂工作流选择单个代理还是多代理群。
从单个代理加工具开始。仅当任务边界清晰、上下文窗口溢出或每个子任务需要不同模型层级时,才拆分为多个代理。
原因: 多代理增加了延迟、错误表面和编排成本。大多数生产工作负载通过一个装备精良的代理即可成功。
最后审核:2026年5月
CCA-F 考试涉及的架构模式快速参考。从头到尾阅读,或跳转到任意章节。
为复杂工作流选择单个代理还是多代理群。
从单个代理加工具开始。仅当任务边界清晰、上下文窗口溢出或每个子任务需要不同模型层级时,才拆分为多个代理。
原因: 多代理增加了延迟、错误表面和编排成本。大多数生产工作负载通过一个装备精良的代理即可成功。
代理在再次行动前必须对观察结果进行推理。
实现 ReAct(推理 + 行动)循环:模型生成一个想法,选择一个工具,接收结果,并重复直到满足停止条件。
原因: ReAct 使中间推理可见,提高了可调试性,并允许您审查思维链。
代理需要与外部系统(API、数据库、文件系统)交互。
通过 tool_use API 定义工具。模型发出一个 tool_use 块;您的代码执行它并返回一个 tool_result。然后模型继续。
编排器必须分派异构子任务(代码审查、网络搜索、数据分析)。
使用一个主管代理来分解目标,委托给专业的子代理,并聚合结果。每个子代理都有自己的系统提示和工具集。
多个子代理必须在没有直接点对点通信的情况下进行协调。
通过主管路由所有代理间消息。主管决定哪个子代理下一步运行,传递上下文,并强制执行排序约束。
原因: 直接点对点消息会创建循环,使状态难以跟踪。中央主管使执行 DAG 明确。
代理必须在多轮会话中记住上下文。
在 messages 数组中传递完整的对话历史(系统 + 先前的用户/助手轮次)。对于长时间会话,总结旧轮次以保持在上下文窗口内。
代理需要在会话之间或用户之间保持持久性。
将事实存储在外部内存层(向量数据库、键值存储、文件)中。通过 RAG 检索相关记忆,并在每次轮次中注入到系统提示中。
团队默认对每个 LLM 功能都使用代理架构。
当单个提示 + 结构化输出足够时,不要使用代理。代理会增加延迟、成本和故障模式。将代理循环保留给需要迭代或工具使用的任务。
复杂的推理任务在回答之前需要更多的内部思考。
使用 budget_tokens 参数启用扩展思考。模型在响应前使用一个思考块,提高多步骤问题的准确性。
原因: 扩展思考以延迟换取质量。根据任务复杂性设置 budget_tokens;限制它以控制成本。
工具调用返回错误;代理必须优雅地恢复。
将错误作为 tool_result 返回,其中 is_error: true。模型会看到失败,并可以使用修正的参数重试,尝试替代工具,或向用户解释失败。
代理循环期间的瞬态 API 故障(429、529)。
实施带抖动的指数退避。对于 429(速率限制),遵守 retry-after 标头。对于 529(过载),退避更长时间。切勿盲目重试 400 类错误。
衡量代理系统是否随着时间的推移而实际改进。
构建评估套件:定义输入-输出对,运行代理,对输出进行评分(精确匹配、LLM 作为评判者、人工审查)。跟踪每个版本的通过率。
原因: 如果没有评估,提示调整就是猜测。回归检测需要自动化、可重复的评分。
代理在第一次尝试时产生低质量输出。
添加一个反思步骤:在生成答案后,提示模型批判自己的输出并进行修改。使用单独的消息轮次或扩展思考。
代理工作流执行不可逆操作(删除资源、发送电子邮件)。
在破坏性操作之前插入一个检查点。向用户展示计划的操作,等待批准,然后执行。记录决策以供审计。
monorepo 中存在多个 CLAUDE.md 文件;不清楚哪个优先。
三个层级:~/.claude/CLAUDE.md(用户)、项目根目录的 CLAUDE.md(项目)、工作区子目录的 CLAUDE.md(工作区)。所有都被合并;工作区覆盖项目,项目覆盖用户。
团队希望将可重用提示作为 /my-command 调用。
创建一个 .claude/commands/<name>.md 文件,其中包含提示模板。使用 /<name> 调用。使用 $ARGUMENTS 作为用户输入。项目范围的命令存在于仓库中。
在 Claude 编辑文件后自动运行 linter。
在 settings.json 中配置一个 PostToolUse 钩子,使其匹配 Write/Edit 工具。钩子脚本在工具完成后运行;非零退出码会阻止更改。
Claude Code 在每个 shell 命令上都请求权限;这会减慢迭代速度。
在 settings.json 的 permissions.allow 下使用允许列表模式。三种模式:default(每次都提示)、allowlist(自动批准匹配模式)和 yolo(自动批准所有——不建议用于生产环境)。
开发人员希望进行不提交到仓库的个人覆盖。
settings.json 已提交(团队默认设置)。settings.local.json 被 gitignore(个人覆盖设置)。本地设置合并到项目设置之上。
在没有交互式终端的 CI 管道中运行 Claude Code。
在无头模式下使用 `claude -p "prompt" --output-format json`。通过 stdin 管道输入,解析结构化输出。将 ANTHROPIC_API_KEY 设置为 CI 密钥。
Claude Code 需要访问自定义 MCP 服务器(数据库、内部 API)。
在 settings.json 的 mcpServers 中添加服务器,包括 command 和 args。Claude Code 将 MCP 服务器作为子进程启动,并在启动时发现工具。
当您在 main 分支上开发时,Claude Code 在一个功能分支上工作。
使用 git worktrees。Claude Code 在工作树目录中操作;您的 main 分支不受影响。避免索引冲突和暂存区混乱。
Claude Code 生成更改,但您想要干净的原子提交。
Claude Code 跟踪文件更改,并可以创建带有消息的提交。在提交前审查差异。优先暂存特定文件而不是使用 git add -A,以避免泄露秘密。
在 VS Code 或 JetBrains 中使用 Claude Code。
安装 Claude Code 扩展。它将 CLI 作为面板嵌入到 IDE 中,共享相同的 CLAUDE.md、钩子和设置。基于终端和基于 IDE 的会话是可互换的。
包含多个部分的冗长提示;模型混淆了指令和数据。
用 XML 标签封装各部分:<instructions>、<context>、<examples>。Claude 经过训练,能够将 XML 边界视为结构分隔符。
定义所有轮次中持久的行为(语气、约束、角色)。
将不变指令放置在系统提示中。保持简洁:角色、约束、输出格式。用户消息承载每轮上下文;系统承载会话范围的规则。
强制模型以特定前缀开始其响应(例如,JSON 开括号)。
在 messages 数组的末尾添加一个部分助手消息。Claude 会从您离开的地方继续。这对于强制输出格式很有用。
尽管有详细说明,模型输出格式仍不一致。
在实际查询之前添加 2-3 个少样本示例作为用户/助手轮次对。示例比散文指令更可靠地固定格式、语气和推理风格。
模型在多步骤逻辑问题上跳过推理步骤。
提示“一步一步地思考”或使用扩展思考。对于生产环境,使用扩展思考 (budget_tokens) 而不是提示可见的思维链,以保持输出简洁。
在确定性输出和创造性输出之间进行选择。
temperature=0 用于确定性任务(分类、提取)。temperature=0.5-0.7 用于创意写作。temperature=1.0 用于最大多样性。注意:扩展思考需要 temperature=1。
需要模型保证有效的 JSON 输出。
使用所需的 JSON 模式作为 input_schema 来定义工具。将 tool_choice 设置为强制使用该工具。模型会在 tool_use 块中返回结构化 JSON,并根据模式进行验证。
面向用户的应用程序需要较低的首字时间。
在 Messages API 上使用 stream=true。增量处理服务器发送的事件:content_block_start、content_block_delta、message_stop。在令牌到达时显示它们。
处理数千个对延迟不敏感的提示。
使用 Message Batches API。每个批次最多提交 10 万个请求。结果将在 24 小时内送达,成本降低 50%。轮询或使用 webhook 进行完成。
从扫描文档或图像中提取数据。
在用户消息中将图像作为 base64 内容块(类型:image)或 PDF 页面(类型:document)传递。Claude 每个请求最多处理 20 MB。对于文本密集型文档,优先选择原生 PDF 而非屏幕截图。
为工作负载选择 Opus、Sonnet 和 Haiku。
Opus:能力最强,适用于复杂推理、代理任务。Sonnet:性能与成本平衡,适用于一般生产用途。Haiku:最快、最便宜,适用于分类、路由、简单提取。
重复调用共享相同的长系统提示;希望降低成本。
使用 cache_control: { type: "ephemeral" } 标记可缓存内容。缓存的前缀在调用之间重用,最长可达 5 分钟(命中时自动延长)。写入成本增加 25%;读取成本降低 90%。
为 Claude Messages API 定义工具。
每个工具都有 name、description 和 input_schema(JSON Schema)。description 告诉 Claude 何时使用它;schema 验证参数。保持 description 以动作为导向且简洁。
工具执行成功;需要将结果返回给 Claude。
发送一个 role: "user" 的用户消息和一个 tool_result 内容块。包含 tool_use_id 以进行关联。将数据作为文本或结构化内容返回;将有效负载保持在 10 万令牌以下。
代理需要同时从三个独立来源获取数据。
Claude 可以在单个响应中发出多个 tool_use 块。并行执行它们,然后在一个用户消息中返回所有 tool_result 块。减少往返次数。
理解模型上下文协议(Model Context Protocol)组件模型。
三个角色:Host(如 Claude Code 等应用程序)、Client(每个服务器的协议处理程序)、Server(暴露工具/资源/提示)。客户端与服务器保持 1:1 连接。
选择 MCP 客户端如何连接到服务器。
stdio:本地进程,设置最简单。SSE:基于 HTTP,传统方式。Streamable HTTP:远程服务器的当前标准,支持可恢复性和服务器发起的消息。
决定暴露哪些 MCP 原语。
资源(Resources):客户端拉取的只读数据(文件、数据库行)。工具(Tools):模型调用的动作(写入、计算、查询)。提示(Prompts):用户选择的可重用提示模板。工具由模型控制;资源由应用程序控制。
创建自定义 MCP 服务器以暴露内部 API。
使用 MCP SDK(TypeScript 或 Python)。使用输入模式实现工具处理程序。通过 server.tool() 注册。传输方式:本地使用 stdio,远程使用 streamable HTTP。
代理必须与 GUI 应用程序交互(点击、输入、屏幕截图)。
启用计算机使用工具:computer_20250124(屏幕截图 + 鼠标 + 键盘)、text_editor_20250124、bash_20250124。模型接收屏幕截图并发出基于坐标的操作。
模型必须始终调用特定工具,而不是以文本响应。
将 tool_choice 设置为 { type: "tool", name: "my_tool" }。模型被强制调用该工具。使用 type: "any" 要求调用某个工具,或使用 type: "auto"(默认)让模型决定。
应用程序在对话中途达到上下文限制。
Claude 模型支持 20 万个令牌。通过 response.usage 监控使用情况。当接近限制时,总结旧轮次或截断。绝不要静默丢弃消息。
处理一份占据大部分上下文窗口的 150 页文档。
将文档放在提示的开头(系统提示之后)。将问题放在最后。使用提示缓存以避免在后续问题中重新发送。对于多文档任务,使用 RAG 选择相关块。
知识库太大无法适应上下文;模型在查询时需要访问。
在向量存储中嵌入和索引文档。在查询时,检索 top-k 块,注入到用户消息中。在输出中引用源文档以实现可追溯性。
模型自信地陈述不正确的事实。
将响应基于提供的上下文 (RAG)。指示模型在证据不足时说“我不知道”。使用引用。以编程方式根据源文档验证事实主张。
应用程序收到 429(速率限制)或 529(过载)响应。
429:您达到了您的层级速率限制。退避并重试;遵守 retry-after 标头。529:Anthropic API 过载。退避更长时间。两者都是瞬态的。绝不要重试 400 或 401。
每月 API 支出高于预期。
对重复的前缀使用提示缓存(90% 的读取折扣)。将简单任务路由到 Haiku。对异步工作负载使用 Batch API(50% 的折扣)。监控每个端点的令牌使用情况。修剪不必要的上下文。
需要了解每个请求的令牌消耗情况。
每个 Messages API 响应都包含 usage.input_tokens、usage.output_tokens 以及(如果缓存)usage.cache_read_input_tokens。按每次调用记录这些信息,按端点聚合,设置预算警报。