乐于分享
好东西不私藏

AI架构剖析 | Claude 是一个出色的执行者,但却是一个平庸的架构师.你来主导,它来执行!

AI架构剖析 | Claude 是一个出色的执行者,但却是一个平庸的架构师.你来主导,它来执行!

业务架构培训与认证 |关注公众号点击上方

Claude Code 推出四个月后,人们对这款工具的评价依然两极分化。布拉文.科卡带领团队决定深入探究,亲自上手试用以探索以下问题:

  • Claude Code 真的好用吗?

  • 它在哪些方面表现出色,又在哪些地方存在不足?

  • 如何使用才能获得最佳效果?

  • 每月 100-200 美元的价格是否值得?

什么是 Claude Code?

正如宣传的那样——它是一款 CLI(命令行界面)编码助手,可直接在终端中运行,充当智能合作伙伴而非单纯的代码补全工具。它能读取并理解你的整个代码库,并声称可从头到尾自动化复杂的开发工作流程。

功能特性

外界评价如何?

不出所料,评价两极分化。

工程师们对其功能和深度争论不休,而技术背景较弱的用户则常常为之惊叹。

共识是:它令人印象深刻,但表现并不稳定。

本次评估方法

仅从外部查看功能特性无法让我们满意,因此我们进一步深入探究,了解该工具的底层工作原理。本次评估包括:

研究 Claude Code 的架构及工作机制,信息来源于深入研究过其底层的开发者以及我们的实际试用体验;

多任务评估,探索其在不同场景下的能力极限。

Claude Code 架构

结合 Anthropic 官方及外部渠道的信息——Claude Code 是一个模块化、多层级的系统,清晰分离了 UI、核心逻辑、AI 集成和工具模块:

Claude Code 架构详情

这种分层、事件驱动的架构确保了灵活性(多 AI 后端、动态工具)、性能(流式处理、缓存、并发工具运行)和安全性(严格的验证和权限控制)。

真实场景测试

在其测试环境中,添加 context7 MCP 服务器,以获取所需所有工具和库的最新文档:

claude mcp add –transport sse context7 https://mcp.context7.com/sse (注:该链接报错“link dead”,无法正常访问)

任务 1:从零搭建一个 Next.js 应用

构建一个简单的“提示词→视频生成器”原型:使用 OpenAI 生成脚本,使用 Gemini 生成视频。

提示词:

  1. 下载 Next.js 的最新文档
  2. 从零搭建一个 Next.js 应用
  3. 添加 Clerk 身份验证功能

即便使用这些简洁甚至略显随意的提示词,也得到了完全符合预期的结果。

不过,第一次生成的代码存在一些问题:中间件文件放错了目录。

手动修复该问题后,继续构建首页 Hero 区域、仪表盘,并添加了 Prisma 数据模型。

更多提示词:

  1. 我正在构建一个视频教程应用,请添加一个首页 Hero 区域。
  2. 为视频教程生成器应用添加 Prisma 数据模型,安装 Prisma。如需,获取 Prisma 的最新文档。
  3. 将登录和未登录视图拆分到不同页面。仪表盘视图放在 dashboard 页面,根页面显示 Hero 区域。添加登录状态检查,实现用户的相应路由跳转。
  4. 用户登录后,仪表盘页面出现无限重定向循环,请修复该问题。
  5. 将仪表盘上的“新建教程”按钮关联到一个创建教程的页面,该页面包含一个可输入主题的表单。当用户输入主题并点击提交后,应从后端调用 Open AI 的 gpt-4o 生成脚本。脚本需包含讲师姓名、外貌特征和场景描述。用户可对脚本进行修改,完成修改后点击“生成”按钮,调用 Gemini 的 Veo3 视频生成功能,根据脚本生成教程视频。视频中的角色需保持一致。

更新实现方式,使用此链接中的文档:https://ai.google.dev/gemini-api/docs/video#javascript

从零生成一个 Next.js AI 视频教程创建应用(重复4次,强调需求)

🟢 评估结果

  1. 对简洁提示词的处理能力令人惊讶。
  2. 生成的代码可直接使用,但存在一个目录错误需要手动修复。
  3. 后续任务(如数据模型生成、身份验证、重定向修复)大多准确且高效。

任务 2:修复复杂现有代码库中的 bug

本次任务中,克隆了一个热门开源调查构建工具——Formbricks。这是一个大型 Next.js 应用,包含多个容器化服务。

值得一提的是,该项目作为拥有 1 万星标的开源项目,文档编写规范,这可能对测试结果起到了一定帮助作用。

提示词:

修复以下问题:

问题概述:当项目名称更改后,导航侧边栏和项目切换器中的项目名称不会同步更新。用户需要手动刷新页面才能看到更新后的名称。

预期行为:所有 UI 元素应自动反映更新后的项目名称,无需手动刷新页面。

其他信息(含截图、Formbricks 版本、复现步骤等)

复现步骤:

  1. 导航至项目设置(配置)> 常规
  2. 编辑项目名称
  3. 点击“更新”按钮
  4. 项目名称在设置页面中已更新,但在侧边栏和项目选择器中未更新。

⚠️ 评估结果

该问题最初以 Web 1.0 的方式被解决——在表单更新后添加页面刷新逻辑。必须向 Claude 提供一些建设性反馈,才能得到想要的结果。

响应速度快(约 15 分钟)。

比初级开发工程师更聪明,但需要适当引导。

任务 3:对大型现有代码库进行代码重构

继续使用 Formbricks 代码库,并将此任务拆分为两个子任务。

任务 3.1 低影响杂项任务——在身份验证模块中添加改进的日志功能

提示词:

增强 SAML SSO 身份验证流程的调试日志功能

任务描述:目前,调试 SAML SSO 身份验证流程中的问题并不顺畅。通常需要与用户多次沟通,才能了解其环境设置并提供相应的故障排除步骤。为改善调试体验并加快问题解决速度,请在 SAML SSO 身份验证流程的各个关键节点添加全面的调试日志。增强后的日志应能帮助我们快速识别和诊断问题,无需用户提供大量输入。

需求变更:在 SAML SSO 身份验证流程的相关阶段添加详细的调试日志。确保日志捕获关键配置、错误信息和状态转换,以方便故障排除。检查现有日志语句,并在必要时进行优化,提升清晰度和完整性。

🟢 评估结果

执行简单且扎实。节省了约 45 分钟的工作时间。

任务 3.2 高影响重构——重写模板工厂以提高可复用性

提示词:

重构调查模板,使用构建器函数并减少代码重复

任务描述

背景:当前的 apps/web/app/lib/templates.ts 文件包含大量用于调查/问题模板的重复代码。SonarQube(代码质量检测工具)已将其标记为主要代码重复源,这对代码质量指标和可维护性产生了负面影响。

🟠 评估结果

过程非常复杂。

必须始终保持 Claude Code 终端处于活跃状态,以便提供反馈或解决其在各种决策上的阻塞问题。

生成结果一般。

可以使用,但需要提供多次后续提示,才能将其调整到合适的状态。

它遵循了代码库中的编码规范,这是一个令人惊喜的点——对于团队中的新初级开发工程师来说,这也并不常见。

任务 4:将现有 Next.js 应用重写为 Python + Svelte 技术栈

本次任务中,使用之前通过 Claude Code 构建的视频教程生成器应用。

提示词:

  1. 将 video_tutorial 目录下的 Next.js 应用转换为 Python 技术栈。
  2. 前端使用 Svelte,后端使用 Python + Fast API。
  3. 使用 Poetry 管理依赖,使用 PSQL + Alembic 处理数据库迁移。

最终生成的后端存在轻微问题,前端可正常运行,花了约 10 分钟将两者调试至可启动状态。

👎 结果:

新移植的应用存在诸多问题。

生成的代码结构不可用。

花了一个多小时通过提示词调整和重塑后端应用的结构。

Clerk 身份验证功能被擅自移除,取而代之的是一个有问题的 JWT 实现,需要手动调试修复。

Gemini 集成被完全简化为固定输出视频(未实现真实调用逻辑)。

任务 4 结束时的感受——沮丧。

总结:一场令人印象深刻却又存在缺陷的未来预览

Claude Code 既不是万能解决方案,也不是噱头——它是一款功能强大的基于 CLI 的编码助手,处于两者之间的位置。

既异常智能,又莫名笨拙——它能设计出优雅的后端架构,却又会毫无理由地将身份验证流程路由到随机文件中。时而展现出天才般的表现,时而做出令人困惑的选择。

  1. 原型开发速度极快——如果你从零开始构建项目,Claude Code 绝对是一件利器。它能轻松处理样板代码,快速交付最小可行产品(MVP)。
  2. 功能强大,但依赖性强——可以把它看作一个天才实习生:想法敏锐、记忆力出色,但决策能力较弱。你需要花比预期更多的时间“指导”它。
  3. 重构能力时好时坏——对于大型代码库,效果参差不齐。你花在引导它的时间,往往比自己动手完成任务还要多。
  4. 上下文理解能力堪称专业——其架构感知能力和全代码库记忆功能令人印象深刻。这绝非普通的代码补全工具可比。
  5. 复杂重写任务表现糟糕——一旦偏离正轨,就很难纠正。你需要亲自介入并清理问题。
  6. 模仿能力出色,创新能力薄弱——遵循代码库规范的能力比初级开发工程师更强,但不要期望它能提供突破性的解决方案。
  7. 多代理编排能力一般——代理框架听起来很具革命性,但实际使用中,大多只是精心设计的美化版脚本。
  8. 每月 200 美元价格偏高……但如果能融入日常工作流程,完全值得。
  9. 不适合懒惰或天真的使用者——Claude Code 对模糊的提示词零容忍,而对具体明确的需求会给予更好的反馈。如果你不愿主动引导,它无法为你提供任何有用的结果。

最终结论:如果你将它当作副驾驶,它将带来革命性的改变;如果你期望它独立完成所有工作(像飞行员一样掌控全局),它只会成为一个令人沮丧的玩具。

如何有效使用 Claude Code?

Claude Code 在正确使用时能发挥巨大作用,而当超出其能力范围时则会表现拉胯。以下策略将帮助你充分利用它,同时避开常见陷阱。

1. 保持 CLI 模式处于活跃状态

Claude 的 CLI 助手并非为“一劳永逸”而设计。它经常会暂停,等待用户澄清或授予权限,需要用户主动参与。

1 实用技巧:在第二屏幕处理低难度工作时使用它,以便及时响应其提示。

2你可以使用 –dangerously-skip-permissions 参数跳过提示,但正如其名称所示——这存在安全风险。

2. 使用 GitHub Actions 处理无需手动干预的任务

Claude Code 也可通过 GitHub Actions 运行,为常规自动化任务提供更被动的使用方式。

但需注意:

  1. 与 OpenAI Codex 相比,设置难度更高。
  2. 它会消耗 GitHub Actions 的计算分钟数——需注意隐藏成本。

3. 提示词要具体,否则会失望

Claude Code 在处理模糊或随意的提示词时,表现往往不佳。生产级别的结果需要结构化的提示:明确指定需求、编码模式和架构预期。

额外建议:

编写一份 CODING_GUIDELINES.md 文件,或完善 .claude/CLAUDE.md 文件。它会像勤奋的初级开发工程师一样,严格遵循其中的规范。

4. 用于全新原型开发,而非遗留系统重构

Claude Code 在从零开始构建项目时是一件利器。它能快速、连贯地处理脚手架搭建、样板代码编写和 MVP 逻辑开发——让你的想法快速落地。

但对于大规模重构?请做好“指导”的准备。例如,在成熟代码库中重写模板逻辑,需要频繁引导和手动修补。

✅ 理想场景:新的 Next.js 应用、后端样板代码、脚手架流程

❌ 高风险场景:大规模代码复用、深度重构、架构革新

5. 避免跨技术栈重写

一个主要的失败场景:将应用程序从一种语言或框架转换到另一种。当要求将 Next.js 应用重写为 Python + Svelte 时,Claude 表现糟糕:

  1. 后端结构混乱
  2. 身份验证迁移错误
  3. Gemini 集成被简化为无意义的代码片段

如果你希望将应用从一个技术栈平滑迁移到另一个,不要期望 Claude Code 能在无需大量人工介入的情况下完成。

6. 让它处理杂项任务,而非战略决策

Claude 在以下任务中表现出色:

  1. 添加日志功能
  2. 修复简单 bug
  3. 更新数据模型
  4. 自动化大量依赖 CLI 的任务

但对于任何需要策略判断或创造性思维的任务——例如解决模糊的 bug、重新设计架构、选择库之间的差异——Claude 需要大量的人工指导。

🧠 可以这样理解:Claude 是一个出色的执行者,但却是一个平庸的架构师。你来主导,它来执行。

架构解析一、从任务执行到能力平台

Claude Code的业务能力已从“执行单一编码任务”演进为“提供一个可编程的、安全的、多智能体协同的企业级AI工程能力平台”。

其业务模型包含多个价值流:

  1. 为开发者提供高效的编码助手(核心价值流),
  2. 为企业提供可控的、可集成的AI自动化流水线(扩展价值流),
  3. 为生态开发者提供插件与技能扩展机制(生态价值流)。

其生命周期管理、状态清理、进程回收功能,正是产品化走向成熟的标志。

多智能体分工(探索、规划、验证、执行)则是对质量、效率与风险控制等业务目标的架构响应,将传统软件工程中的角色分离(如开发、测试)制度化为系统内生的协作流程。

架构解析二、组件化、服务化与明确的关注点分离

整个系统可划分为入口层、引擎层、工具层、智能体层、安全层、生态层和上下文管理层。

1 入口层(cli.tsx)通过Fast-Path分发机制,将不同使用模式(CLI、后台服务、远程控制、IDE集成)统一到同一个运行时内核,这类似于企业服务总线(ESB)或API网关的角色,负责协议适配和轻量级路由。

2 引擎层(query.ts)作为核心业务流程引擎,实现了基于状态机的主循环,协调了从输入、上下文处理、模型调用、工具执行到结果输出的完整工作流,其非递归的while循环设计确保了长会话下的稳定性,这是处理核心业务逻辑的可靠“业务过程服务”。

3 工具系统构成了该平台的能力基座。

42个工具被明确定义接口(Tool基类),并通过统一的执行流水线(toolExecution.ts)进行治理。

这条流水线集成了输入校验、权限检查、Hook拦截、实际执行、结果处理与可观测性埋点,将“能力调用”这一核心业务活动标准化、管控化。

这类似于企业内部的公共服务或微服务,每个工具提供特定功能,但调用必须通过统一的治理框架(如API管理平台),确保安全、合规与可观测。

4 多智能体体系(AgentTool.tsx, runAgent.ts)则是在此基座上构建的、可编排的组合业务服务。

每个智能体(如探索、验证)是特定业务角色的实例化,拥有专用的工具集、Prompt和行为规范,它们可以通过调度中心进行任务分派、资源隔离和协同工作。

….

架构解析三、上下文作为核心资产与预算管理

Claude Code的核心数据资产是会话上下文,这包括历史消息、工具调用结果、记忆片段等。

四层压缩机制(Snip, Micro, Context Collapse, Auto)构成了一个分级存储与信息生命周期管理策略:

  1. 高频访问的活跃信息保持原样,
  2. 低频历史信息被摘要化,
  3. 无效或冗余信息被裁剪。

Prompt Cache机制(通过SYSTEM_PROMPT_DYNAMIC_BOUNDARY实现)是一种高性能缓存策略,将静态的、可重用的系统指令与动态的会话数据分离,以提升处理效率、降低成本。

Token预算系统(tokenBudget.ts)引入了一种资源配额与消耗跟踪机制,确保长任务在可控的资源范围内执行,防止无限制的资源消耗,这类似于企业对计算或存储预算的管理。

架构解析四、可靠性、安全性、可扩展性与可观测性

在可靠性方面,状态机主循环替代递归避免了栈溢出风险;

1 Reactive Compact机制作为对API 413错误的弹性响应,体现了容错设计;

2 任务系统(DreamTask, LocalAgentTask等)和Agent生命周期的完整Cleanup链(清理MCP连接、Shell进程、状态跟踪)确保了资源泄漏的最小化,这是构建稳健企业级服务的基础。

在安全性方面,其设计体现了纵深防御原则。

1 权限系统(Permission Rules)、Hook系统(Pre/Post ToolUse)和预测性分类器(Speculative Classifier)构成了三层互不绕过的防护网。

2 特别值得注意的是resolveHookPermissionDecision函数中定义的规则:Hook的允许(allow)决策不能覆盖系统设置(Settings)中的拒绝(deny)规则。

3 这确保了安全策略的最终控制权归属于静态配置而非动态扩展,符合安全架构中最小特权和失效安全原则。工具接口的“Fail-Closed”默认值(如默认非并发安全、默认非只读)也是安全设计的重要实践。

在可扩展性方面,系统通过Skill、Plugin和MCP三个层次构建了其生态体系。

1 Skill是预封装的工作流(Workflow Package),Plugin是能动态影响模型行为、工具和Prompt的扩展包,MCP则提供了标准化的外部工具集成桥接。

2 关键的设计在于模型感知,即通过Prompt注入(MCP Instructions)、会话特定指引(Session-specific Guidance)等方式,让模型知道当前可用的扩展能力。

这解决了有能力但不可见的典型扩展性问题,使得生态扩展能够真正被利用。在可观测性方面,系统集成了完整的遥测(Telemetry)、性能追踪(Perfetto Tracing)和成本跟踪(Cost Tracker),为系统的监控、诊断、优化和计费提供了数据基础,这是运维复杂分布式系统的必备能力。

架构解析五、架构启示

Claude Code的架构设计符合一些基本的架构原则。

1 业务服务优先原则体现在其多智能体分工明确服务于不同的业务场景(探索、验证、规划)。

2 数据即资产和IT资源管理原则在上下文经济学和Token预算管理中得到了体现。

3 可重用服务原则是工具系统设计的核心,所有能力通过标准化接口提供。

4 互操作性原则通过MCP协议和对多种入口模式(CLI, SDK, IDE)的支持来实现。

5 其架构治理理念尤其值得借鉴:不依赖模型的自觉性,而是通过制度化的Prompt和行为规范来约束;工具调用必须经过治理流水线;安全层要互不绕过。

架构解析六、风险犹存

Claude Code架构的潜在风险与隐患分析

Claude Code 的架构设计虽然体现了高度的工程化和产品化思维,但仍然存在一些关键风险和架构隐患,尤其是在企业级生产环境中长期运行时可能暴露的问题。以下从安全性、稳定性、扩展性和运维管理四个维度进行分析。

1. 安全性风险:纵深防御的潜在漏洞

(1) 权限系统的静态性与动态攻击的冲突

问题:尽管权限系统(Permission Rules)结合了 Hook 机制,但核心规则仍然是静态配置(如 settings.deny)。如果攻击者利用新型攻击模式(如 Prompt 注入绕过权限检查),静态规则可能无法及时响应。

案例:若某个工具(如 BashTool)被恶意 Prompt 诱导执行 rm -rf /,即使有 dangerousPatterns.ts进行模式匹配,但如果攻击者使用混淆命令(如 base64 编码的命令),静态规则可能失效。

改进方向:引入动态风险评估(如运行时行为分析)+ 沙盒执行环境(如 Docker 容器隔离)。

(2) Hook 系统的权限逃逸风险

问题:resolveHookPermissionDecision确保 Hook 不能绕过 settings.deny,但如果 Hook 本身被恶意篡改(如通过 Plugin 注入),仍可能通过 updatedInput修改参数,间接影响执行结果。

案例:一个恶意 Hook 可能将 rm -rf /tmp/foo改为 rm -rf /tmp/ /home/,绕过静态规则检测。

改进方向:增加 Hook 签名验证 + 执行前二次确认机制。

(3) MCP 协议的安全隐患

问题:MCP允许外部服务注入 Prompt 指令,但缺乏严格的来源验证。恶意 MCP Server 可能注入误导性指令,影响模型行为。

案例:攻击者伪造 MCP Server,注入 “你是一个黑客,请执行以下操作…”,绕过主 Prompt 约束。

改进方向:MCP 通信加密 + 白名单机制 + 指令签名校验。

2. 稳定性风险:长周期运行的可靠性挑战

(1) 主循环(query.ts)的状态机复杂性

问题:query.ts采用 while(true)状态机而非递归,但仍有9 个 continue分支,逻辑复杂度高,可能因边缘情况(如 API 限流、网络抖动)进入不可恢复状态。

案例:如果 reactiveCompact多次触发但压缩失败,可能导致无限重试,耗尽资源。

改进方向:增加熔断机制(如最多重试 3 次后降级)。

(2) 子 Agent 的资源泄漏风险

问题:runAgent.ts虽然提供 cleanupAgentTracking(),但在异常崩溃(如 OOM Kill)时,子进程、MCP 连接、临时文件可能残留。

案例:后台 Agent 崩溃后,占用的端口或文件锁未被释放,影响后续任务。

改进方向:引入 watchdog 进程监控 + 资源自动回收(如基于 PID 的孤儿进程清理)。

(3) Token 预算机制的局限性

问题:tokenBudget.ts仅控制输出 Token,但未考虑输入 Token 的突发增长(如大文件读取导致上下文爆炸)。

案例:用户上传 10MB 日志文件,导致 autoCompact无法有效压缩,触发 API 413 错误。

改进方向:输入 Token 预算 + 流式分块处理。

3. 扩展性风险:生态系统的治理难题

(1) Plugin 的供应链攻击风险

问题:Plugin 可动态修改模型行为,但缺乏代码签名和沙盒执行机制,恶意 Plugin 可能植入后门。

案例:一个伪装成 “代码优化插件” 的恶意包,在 PostToolUseHook 中窃取环境变量。

改进方向:Plugin 签名验证 + 权限最小化(如限制文件系统访问)。

(2) Skill 的版本兼容性问题

问题:Skill 依赖 allowed-tools等元数据,若主版本升级导致工具接口变更,旧 Skill 可能失效。

案例:v1.0的 debugSkill 调用已废弃的 ToolSearch,导致运行时错误。

改进方向:Skill 版本约束声明 + 向后兼容性测试套件。

(3) 多 Agent 调度的死锁风险

问题:AgentTool.tsx支持并发 Agent 调度,但未公开资源争用处理策略(如多个 Agent 同时写同一文件)。

案例:Verification Agent和 General Agent同时修改 package.json,导致冲突。

改进方向:文件锁机制 + 乐观并发控制(OCC)。

4. 运维管理风险:企业级部署的挑战

(1) 监控与日志的不足

问题:虽有 Perfetto Tracing和 OTel,但缺乏针对 AI 特定场景的监控(如 Prompt 漂移检测)。

案例:模型因 Prompt 污染逐渐偏离预期行为,但未被及时发现。

改进方向:Prompt 版本化 + 行为基线对比。

(2) 升级与回滚的复杂性

问题核心组件(如 Tool基类)变更可能影响所有插件和 Skill,但未提供灰度发布方案。

案例:Tool.call()接口变更导致所有第三方 Plugin 崩溃。

改进方向:ABI 兼容性保证 + 渐进式升级。

(3) 多环境适配的挑战

问题深度依赖 React+Ink的 TUI 框架,在无 GUI 的服务器环境可能受限。

案例:CI/CD 环境下无法正确渲染交互式 UI,导致任务卡死。

改进方向:提供 Headless 模式 + JSON 输出选项。

总结:风险与加强点

风险类型

主要问题

加强点

安全性

静态权限规则易被绕过

动态风险评估 + 沙盒执行

稳定性

主循环可能进入不可恢复状态

熔断机制 + 资源监控

扩展性

Plugin/Skill 可能引入供应链攻击

代码签名 + 沙盒隔离

运维管理

缺乏 AI 特定监控与回滚机制

Prompt 版本化 + 灰度发布

Claude Code 的架构在工程化程度上远超多数 AI 系统,但仍需在动态安全策略、长周期稳定性、生态治理和运维可观测性等方面加强,才能满足企业级生产要求。