颜力刚Ligang Yan

基于 Claude 的软件架构

过去三十年,软件都是把变动的需求由人翻译成确定的代码。当 Claude Code 这类运行时足够强大,更高效的做法是把两类需求分开:确定的逻辑沉淀为数据层、函数层和 Skill 方法论,不确定的需求交给运行时实时理解和呈现。附 quant-researcher 作为实例。

aiarchitectureclaude-codeagent

English version: A Claude-centric software architecture

摘要

过去三十年,软件始终遵循同一种模式:用户操作前端界面,前端调用后端服务,由后端完成业务并返回结果。当用户需求发生变化时,团队需要同时修改前端与后端代码以承接新需求。本质上,代码是现实需求在某一时刻的映射;需求改变,代码就必须不断改变。随着 Claude Code 这类智能体运行时的成熟,这一结构正在被重新定义。

本文提出一种以 Claude 为中心的软件架构:Claude Code 作为运行时与统一调用者,连接数据库、缓存、函数、Skill 等关键组件。用户通过自然语言与 Claude 交互,得到实时生成的多媒体结果,网页、文本、语音、视频等。

一、传统范式的结构性低效

在传统软件架构范式下,满足用户多变的需求是低效的。代码本质上是需求在某一时刻的映射;需求持续变化,映射随之过期,团队便不断回头重写。软件维护的实质,是以人力反复地将变动的需求重新翻译为确定的代码。当需求模糊、个性化、千人千面时,将其强行塞入僵硬的代码结构(层层筛选与条件分支),既昂贵又脆弱。

以电商搜索为例。亚马逊这类传统网站为用户提供了大量输入框、选择框与按钮,用户经由这些固定的交互组件提交查询。但当现有的筛选维度无法覆盖某类个性化需求时,平台需要先将该需求提交给产品经理调研、设计新的界面入口,再安排研发与发布,短则数周,长则数月。这种围绕“界面到后端”的固定映射,正是传统软件开发低效的根源。

二、基于 Claude 的软件架构的优越性

基于 Claude 的软件架构,其优越性集中体现在调度方式的变化上。

Claude 作为 AI Agent 与运行时基座承担了统一的调度角色。当用户输入一段需求时,Claude 负责分析意图,并将其拆解为若干子任务;随后,它会在自身可调用的连接器(MCP 等)与 Skill 中查找解决方案,必要时通过实时网络搜索补全信息,并最终以图片、视频、音频或文本等多种形式将结果生成并返回给用户。

在这一范式下,前端工程师不再需要为每一种个性化需求新增界面或交互组件,绝大多数呈现由运行时按需生成。需求响应的速度由“周、月”压缩至“秒、分钟”。

三、架构构成

运行时:Claude Code

运行时无需自行搭建,即 Claude Code。它提供智能体循环、文件系统、代码执行、外部连接器与 Skill 机制。其中最根本的变化在于调用关系:底层能力不再由代码相互调用,而是由 Claude 统一调用,而 Claude 由用户的自然语言驱动。调用的起点,从代码转移到了语言。

Skill 层

Skill 承载的是业务方法论,而非代码本身。它由一组说明(方法与流程)与暴露给运行时的关键词构成;当用户的自然语言命中相应关键词时,运行时即唤起对应 Skill 并按其方法执行。其角色近似于传统架构中的“功能模块”,区别仅在于触发方式由代码调用转为语言唤起。

Skill 层在结构上一般对应传统软件中的某项业务流程。以“个股深度调研”为例,该流程通常依次涉及基本面数据、估值数据、技术面数据与财报数据等多个环节;其执行顺序、判断逻辑与编排方式,统一在 Skill 中以自然语言描述,由运行时按需调用。

Skill 在技术上可捆绑脚本;本架构刻意将其保持为纯方法论,并将可执行逻辑下沉至数据层与函数层,以获得更清晰的边界。

数据层

本架构仍然需要代码,但代码的定位已经改变:后端不再负责界面,而是演进为纯粹的数据与操作服务,提供数据、暴露操作,经由 MCP 或其他协议接入运行时。

数据层在逻辑上对应传统软件中的 CRUD 层,提供基础数据的查询、写入、修改、删除等操作,也包括对外部数据库、第三方 API 的访问接口。其上游消费者是 Skill 层与运行时。

设计要点:该层应以一组小而可组合的原语、置于稳定契约之后的形式对外暴露,而非封装为端到端的黑箱。让运行时自行编排这些原语,每一步均可见、可信、可审计;若仅提供一个“一键完成”的总接口,则等同于把判断权交还给固化的代码,重回旧有路径。

函数层

函数层包含高度原子化、几乎不会因业务需求变化而修改的纯函数。典型例子是 DCF 估值的计算逻辑,它属于事实层面上长期正确的逻辑,而非业务编排的产物。

函数层与数据层的区别在于:数据层解决“数据从哪里来、存到哪里去”,函数层解决“如何在数据之上做确定性的计算”。两者共同构成“确定逻辑”的承载平面,是运行时可以放心调用的稳定地基。

呈现层

界面不再是软件的重点,且不限于单一形态:可以是即时渲染的图表或网页,也可以是语音应答、视频或纯文本。前端或许仍需少量代码(如品牌主题、固定容器),但绝大多数呈现由运行时按需生成、用后即弃。

用户也可以直接向 Claude 表达呈现偏好,是要语音、图片、视频还是纯文本,由运行时据此实时输出。随着生成速度与质量的持续提升,界面将日趋轻量,不再值得被预先固化与长期维护。软件真正需要精心设计的,是它提供哪些数据与能力。

架构示意

用户(自然语言)


┌───────────────────────────────────────────────┐
│  运行时 · Claude Code                          │
│  智能体循环 · 文件系统 · 代码执行 · 连接器      │
│                                               │
│  ┌──────────────┐   按关键词唤起                │
│  │  Skill 层     │  业务方法论,纯自然语言        │
│  └──────┬───────┘                               │
│         │ 编排调用                              │
│  ┌──────┴───────┐  ┌──────────────┐            │
│  │  数据层       │  │  函数层       │            │
│  │  CRUD · 外部  │  │  确定性计算   │  ← 确定逻辑 │
│  │  API · MCP    │  │  纯函数       │            │
│  └──────────────┘  └──────────────┘            │
└───────────────────────┬───────────────────────┘

              呈现层:按需生成,用后即弃
              网页 · 图表 · 文本 · 语音 · 视频

四、应用场景

在线服务:电商

设想未来的交互方式:用户直接以自然语言表达,“预算 8000 以内,外观好看、内存大,帮我挑一台手机。”

电商服务方经由 MCP 等协议接入,但可能完全不提供前端,仅提供数据服务:商品信息、库存信息、订单接口与各类操作 API。“外观好”“内存大”“适合我”这类个性化、模糊、需要判断的需求,不再被实现为固定的筛选规则,而由运行时解析意图、调用相应接口完成查询、筛选与排序,并即时生成呈现,乃至直接下单。

其商业含义值得强调:平台方只需成为高质量的数据与操作提供方,而“理解用户”这一最具差异化的环节,上移至运行时承担。这将重新划分软件价值链上的分工与价值归属。

本地工具:以 quant-researcher 为例

quant-researcher 是按本架构构建的开源美股研究系统。用户以自然语言与 Claude Code 交互(“深入研究 NVDA”“我的组合表现如何”“筛选低估的优质复利公司”),由其在底层驱动数据仓库、筛选、估值、回测与决策台账,综合输出结论,全程无需接触命令行。

其分层与上文严格对应:

  • 数据层:名为 qr 的命令行工具承担取数、落库与基础查询,向运行时暴露一组小原语;每条命令只输出一个结构固定的 JSON 信封,从不解释意图、不生成叙述。
  • 函数层:DCF、PEG 与相对估值等确定逻辑均位于此层;每次运行即快照存档,不重复生成。
  • Skill 层(方法论):以 CLAUDE.md 及按目录自动加载的规则文件承载,不含代码,沉淀的是“自然语言到编排”的方法。
  • 运行时:Claude Code 读取该手册,将请求拆解为一系列 qr 调用并链式执行,叙述、判断与结论均由其产出。
  • 呈现层:默认为即时生成的文字结论;需要留存的深度报告,则生成为 HTML 文件归档。

值得注意的是,该系统同时解决了“可复现性”这一常见顾虑:数据层与函数层均为时点正确。财务数据按可获得日期标注,杜绝前视偏差;每项结果附带 as_of 与代码版本,每笔决策均快照其依据数据,可供事后复盘与评估。这表明:将“确定的部分”做扎实,正是放心把“不确定的部分”交给智能体的前提

五、商业价值

  • 能力即资产、即护城河:长期沉淀的是数据层与函数层中累积的能力与数据,而非易逝的界面。竞争壁垒从“做了多少界面”转向“沉淀了多少能力”。
  • 更低的维护成本:呈现层不再是需要持续维护的代码资产,前端版本迭代、A/B 测试、风格更新等开销大幅下降;研发投入得以集中于稳定的能力层。
  • 可审计、可复现:确定逻辑(数据层 + 函数层)被设计为时点正确、可快照,使智能体的判断可被追溯与评估,契合合规与风控要求。
  • 价值链重构:服务方专注于成为数据与操作提供方,差异化的“理解用户”环节由运行时承担,为平台与应用方带来新的分工与定价空间。

六、适用边界与权衡

任何架构都有代价,须如实评估:

  • 延迟与成本:每次交互均需运行智能体循环、解析需求并生成呈现,相较固化应用更慢、消耗更高。对延迟极度敏感的高频操作不宜实时处理。
  • 可复现性:呈现层由运行时实时生成,本身具有不确定性。需要审计、合规或高度一致的场景,须以数据层与函数层中的确定逻辑作为支撑。
  • 权限与安全:运行时可执行代码、访问文件并连接账户与支付,权限控制与沙箱隔离是前提,尤其在涉及真实资金与订单时。
  • 关键路径的确定性护栏:自由解析适用于“检索与判断”;涉及不可逆操作(真实下单、转账)的最终环节,应经由数据层中确定的服务接口完成,而非由运行时即时生成代码执行。
  • 适用对象:最适合单人或小团队、面向自身或专业用户、需求高度多样而难以预先穷举的工具型软件,以及愿意专注于数据与操作服务的平台方。面向海量普通用户、追求高度一致体验的大众产品,传统范式仍更为稳妥。

结语

软件行业以人力反复将变动的需求翻译为代码,已逾数十年。当 Claude Code 这类运行时足够强大,更高效的做法是把两类需求分离:确定的逻辑沉淀为数据层、函数层与 Skill 方法论;不确定的需求交由运行时实时理解、映射与呈现。

据此,团队真正需要长期维护的,不再是界面,而是不变的能力与数据。这既是工程选择,也是商业选择。

English version.