← 返回信息流
Agent SkillLINUX DO · AI·2 小时前

企业AI架构与Claude Code对比分析

原标题:分享一个企业AI架构与claudecode架构的对比。

速览

本文从主循环、能力扩展点等视角对比了企业自研AI中台julian-biz-ai与Claude Code的架构差异。julian-biz-ai采用编排优先的图状态机,适合企业可控场景;Claude Code以模型优先的自主循环,适合编程助手。两者在Skill策略与Tool对象等扩展点上有本质不同,分别对应企业服务与开发者工具的取舍。

AI 深度解读

背景

在企业级AI应用开发领域,架构设计是决定系统可维护性、扩展性和业务适配度的关键。随着大模型能力逐渐成熟,越来越多的企业开始构建自己的AI中台,将LLM编排能力与现有业务系统集成。与此同时,以Claude Code为代表的通用编程Agent运行时也在开发者社区兴起,其设计思路与企业级方案存在显著差异。本文作者接手了一个基于Java 17、Spring Boot 3、Spring AI Alibaba Graph以及AgentScope框架的企业级AI中台业务服务(项目代号julian-biz-ai),并拿到了Claude Code源码(Claude Code CLI提取的TypeScript实现),从“做agent开发”这一视角对两者进行了对比分析,揭示了两种完全不同设计哲学的取舍——面向业务的托管式AI服务 vs. 面向开发者的自主编程Agent引擎。

核心内容

原文从六个维度对julian-biz-ai(企业级AI中台)与Claude Code(通用编程Agent运行时)进行了架构对比:

0. 一句话定性

  • julian-biz-ai:面向业务的托管式AI服务。它将“查询/报表/邮件回复/知识检索”等企业能力包装成可被LLM编排调用的Skill。多租户企业用户通过Web管理台、钉钉、企业微信等消费。agent的边界是一次HTTP/SSE会话=一次编排,agent是服务里的一个节点。框架依赖AgentScope + Spring AI Alibaba Graph,自己写业务编排层。复杂度集中在“如何把企业能力接进agent、如何把过程渲染给业务前端”。
  • Claude Code:面向开发者的自主编程Agent引擎。它将“读写文件/执行命令/搜索/派生子agent”等通用能力交给模型自主循环。单个开发者在本地终端驱动。一个常驻REPL进程=一个agent,agent就是整个程序。自建全套原语(循环/工具/权限/记忆),不依赖外部agent框架。复杂度集中在“如何让一个通用循环安全、高效、可扩展地自主运行”。

1. 主循环(Agent Loop)

  • julian-biz-ai:编排器节点(OrchestratorNode)+ Graph状态机(Spring AI Alibaba Graph的OverAllState)+ AgentScope ReAct。每轮编排开始,系统侧统一召回技能,将召回到的能力装载进单次AgentScope ReActAgent执行。跨步骤状态通过图节点流转。还有一套自研的ReAct抽象(ReActAgent.java: reasoning()/acting()maxIterations等)。循环被包在服务端的一次请求处理里,由编排器驱动,终止条件是编排完成或达到maxIterations
  • Claude Code:核心是query.ts里的queryLoop——一个AsyncGeneratorwhile(true)。循环逻辑:组装消息 → 按需压缩 → 流式调LLM → 收集tool_use → 并发执行工具 → tool_result追加回消息数组 → 再循环。唯一续循环信号是“本轮assistant是否含tool_use”,不再产生tool_use即return {reason:'completed'}。工具执行与token生成重叠(StreamingToolExecutor)。外层QueryEngine.submitMessage()= 一个user turn。
  • 差异解读:julian-biz-ai是“编排优先”(系统先收窄可选能力,再让模型在小范围内ReAct),可控、可审计,适合企业;Claude Code是“模型优先”(把全部工具摆上,让模型自己决定循环多少轮),自主、通用,适合编程助手。

2. 能力扩展点:Skill 策略 vs. Tool 对象

  • julian-biz-ai:能力单元是Skill,用策略模式实现:SkillStrategy接口 → SkillFactory.getStrategy(SkillEnum)strategy.execute(OverAllState)。新增一个skill = 写一个XxxStrategy implements SkillStrategy,按SkillEnum注册进工厂。Skill是重业务的:一个策略内部可能自己拼SQL、调Dify、生成ECharts、走RAG,它是“一段被LLM触发的业务流程”,execute拿到的是OverAllState全局状态,而非一个干净的入参对象。
  • Claude Code:能力单元是Tool,一个大interface(Tool.ts:362-695),用Zod描述输入schema。一个工具同时负责:给模型的动态描述description()、输入schema inputSchema、执行call()、权限判定checkPermissions()、终端UI渲染renderToolResultMessage()、大结果落盘阈值等。新增工具 = buildTool(def)自动补默认值,静态注册进getAllBaseTools()。工具是通用原语(Read/Write/Bash/Grep…),业务无关。
  • 差异解读:julian-biz-ai的Skill偏重“业务编排”,一个skill就是一条产品功能线;Claude Code的Tool偏重“能力原子化+自治”,把权限和UI都塞进工具本身,换来“新增工具零散耦合、一致性强”。企业若想让skill更易插拔,可借鉴Tool的“自带schema+自带权限”思路,把OverAllState依赖收敛成显式入参。

3. 工具与 MCP

  • julian-biz-ai:除Skill外也有独立tool/mcp/(如文档RAG、McpServerController对外暴露MCP server)。它既是MCP的消费方也是提供方——把自身能力作为MCP server输出给别的系统。工具经AgentScope Toolkit装载进ReActAgent。
  • Claude Code:MCP是主要的外部集成途径,支持stdio/sse/http/ws等transport,MCP工具经assembleToolPool()mcp__server__tool命名并入工具池;agent还能在自己的frontmatter声明专属MCP server。
  • 共识点:两者都用MCP打通外部系统。区别是julian-biz-ai把“暴露自己”也纳入了(服务化思维),Claude Code侧重“接入别人”(客户端思维)。

4. 拦截与增强:Hook

  • julian-biz-aiagent/hook/IntentHook(继承HookBase)职责是“桥接AgentScope Hook事件与前端协议事件,把推理、工具调用和最终回复统一转换为Manus前端可消费的流式消息”。还有SkillUseHookGatekeeperHookCommonHookEmailSmartReplyProcessHook等。Hook在这里是“运行时事件→业务/前端语义”的适配层。
  • Claude Code:Hook(如PreToolUse)介入权限决策链(可allow/deny),以及stop hooks参与终止。偏“治理/安全切面”。
  • 差异:同名“Hook”,julian-biz-ai主要用来把内部过程翻译成前端能渲染的东西(表现层适配);Claude Code主要用来管住agent的行为(安全/生命周期)。

5. 流式协议

  • julian-biz-ai:20+种语义化SSE帧的富协议。manus/chatProtocol/protocol/下有一整套帧类型:ThinkingToolUse(含TableData/TableList/CsvDataHandler/JsonArrayHandler等多种结果渲染)、LoadingMarkdownPlanDynamicFormStaticFormIframeKnowLedgeSuggestActionDoneTab等。前端是一个能渲染表格/表单/图表/内嵌应用/多标签窗口的工作台,后端要把agent每一步都翻译成对应帧。
  • Claude Code:SSE直连模型流,UI在本地React-Ink渲染。底层就是Anthropic SDK的SSE流,模型产出边流边yield。“渲染”由每个Tool的renderToolResultMessage()在终端里用Ink组件完成——渲染逻辑下沉到工具,没有独立的协议层。
  • 差异解读:jul
查看原文 →linux.do