ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code源码之核心架构拆解:从启动到运行,全流程手把手看懂

Claude Code源码之核心架构拆解:从启动到运行,全流程手把手看懂 1. 从 CLI 敲下回车那一刻Claude Code 到底做了什么很多人第一次用 Claude Code感觉就是「终端里多了个会写代码的对话框」。但如果你把它的启动链路拆开看会发现它更像一个小型操作系统入口负责解析参数配置层负责把用户偏好、项目规则、模型通道拼装成运行时上下文会话层负责维护消息历史与工具调用状态工具层则把文件读写、终端执行、网页抓取这些能力封装成可被模型调度的函数。这篇就按「启动 → 初始化 → 会话编排 → 工具调用 → 请求验证」的顺序把 Claude Code 的核心架构走一遍。你会看到main.tsx入口如何并行预加载、settings.json如何决定模型走哪条通道、query循环如何把一次用户输入变成多轮工具调用以及怎么用 TaoToken 的统一 Key 把 API 通道配好让本地复现时请求链路是通的。适合谁看已经装过 Claude Code 但没搞懂它内部怎么跑的人想自己写一个类似 Agent CLI 的开发者以及需要把模型通道统一管理、不想在每个工具里重复填 Key 的团队。下面所有配置都可以直接复制改掉 Key 就能跑。2. 前置准备TaoToken 统一 Key 与 API 通道Claude Code 这类工具的核心依赖是模型 API。默认情况下它走 Anthropic 官方通道但实际开发中我们经常需要统一管理 Key、切换模型、看调用量。TaoToken 提供的就是这样一个统一入口一个 Key 覆盖多种模型通道控制台里能看请求记录接入文档里给了各工具的配置方式。先做三件事第一注册并拿到 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 进控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 列表在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。第二确认 API 基地址。TaoToken 的 API 入口是 https://taotoken.net/api 注意这个地址不加 UTM 参数配置里直接写它。第三想清楚你要用哪种模式。如果只是验证模型能不能通用模型对话页面最快https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。如果是长期编码、跑 Agent 任务建议看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 它更适合按周期使用而不是按次调用。注意Key 只存在本地配置文件或环境变量里不要提交到 Git。下面示例里用sk-xxxx占位你替换成自己的。3. 可复制配置settings.json 骨架与启动参数Claude Code 的配置分两层全局配置和项目级配置。全局配置放在用户目录下项目级配置放在项目根目录的.claude/settings.json。项目级优先级更高适合给不同仓库配不同模型通道。先看一份最小可用的settings.json骨架{ model: claude-sonnet-4-20250514, apiProvider: custom, apiBaseUrl: https://taotoken.net/api, apiKey: sk-xxxx, maxTokens: 8192, temperature: 0.2, tools: { bash: true, fileRead: true, fileWrite: true, webFetch: true }, permissions: { allowFileWrite: true, allowBashExec: true, sandboxMode: workspace } }几个关键字段说明apiProvider设为custom时Claude Code 不会走默认官方通道而是用你给的apiBaseUrl。apiBaseUrl填https://taotoken.net/api不要带结尾斜杠。apiKey就是你在控制台创建的那串。tools这一段决定哪些工具对模型可见。如果你在做安全敏感的项目可以先把bash关掉只留文件读写等验证通了再开。permissions.sandboxMode设为workspace表示终端命令只在当前工作目录内生效这是比较稳妥的默认值。如果你不想把 Key 写进文件可以用环境变量覆盖export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-xxxx然后在settings.json里把apiKey留空Claude Code 启动时会优先读环境变量。这样配置文件可以进版本库Key 留在本地 shell 里。启动命令本身很简单claude但如果你想看启动过程加--debugclaude --debug这会打印出配置加载顺序、模型通道选择、工具注册数量。下面一节我们看实际日志。4. 启动日志与请求链路验证配好之后第一次启动建议在空目录里跑避免项目规则干扰。执行mkdir claude-arch-demo cd claude-arch-demo claude --debug你会看到类似这样的输出关键行已标注[debug] loading global config from ~/.claude/settings.json [debug] loading project config from ./.claude/settings.json [debug] apiProvidercustom baseUrlhttps://taotoken.net/api [debug] registering tools: bash, fileRead, fileWrite, webFetch [debug] tool count4 sandboxModeworkspace [debug] session initialized, entering REPL这几行对应了架构里的三个模块配置加载层合并了全局和项目配置工具注册层根据tools字段决定注册哪些工具会话层初始化完成后进入 REPL 循环。接下来验证请求链路。在 REPL 里输入一句简单指令读取当前目录下的文件列表并告诉我有几个文件Claude Code 会先调用bash工具执行ls把结果作为工具返回值塞回消息历史再让模型基于结果生成回答。你在--debug模式下能看到工具调用记录[debug] tool_call: bash { command: ls -la } [debug] tool_result: total 0 ... [debug] sending request to https://taotoken.net/api/v1/messages [debug] response status200 tokens_in312 tokens_out48看到status200就说明 TaoToken 通道是通的。如果这里报 401说明 Key 不对报 404检查apiBaseUrl是不是写成了带/v1的地址TaoToken 的基地址就是https://taotoken.net/api路径由客户端自己拼。想单独验证模型通道而不启动完整 CLI可以用模型对话页面发一条测试消息https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。这样能把「Key 问题」和「CLI 配置问题」分开排查。5. 本篇常见错排查报错一apiKey is missing原因通常是settings.json里apiKey为空同时环境变量也没设。检查顺序先看项目级.claude/settings.json再看全局~/.claude/settings.json最后看 shell 里有没有ANTHROPIC_API_KEY。三者优先级是项目级 全局 环境变量但环境变量只在配置文件里 Key 为空时才生效。报错二401 UnauthorizedKey 本身无效或已删除。去控制台 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 确认 Key 状态重新复制一次。注意复制时不要带空格。报错三404 Not FoundapiBaseUrl写错了。正确值是https://taotoken.net/api不要写成https://taotoken.net/api/v1或带结尾斜杠。客户端会自己在后面拼/v1/messages。报错四工具调用不执行检查tools字段里对应工具是不是false以及permissions里allowBashExec或allowFileWrite有没有开。有些版本还需要在启动时加--allow-tools参数。报错五启动卡在loading project config项目目录下.claude/settings.json格式不合法。用python -m json.tool .claude/settings.json验证一下 JSON 语法常见问题是多了逗号或少了引号。报错六请求超时先确认网络能访问https://taotoken.net/api可以用curl -I https://taotoken.net/api看返回码。如果返回 200 或 405 都说明通道可达超时多半是本地网络策略问题不是配置问题。6. 把通道配好再去看架构Claude Code 的架构拆解到最后你会发现它所有模块都围绕一个核心把用户输入变成模型可理解的上下文再把模型输出变成可执行的工具调用。启动流程负责准备这个上下文配置层决定模型走哪条通道会话层维护多轮状态工具层提供执行能力。而通道这一层恰恰是最容易被忽略、又最容易出问题的地方。我试过在几个项目里分别填不同的 Key后来统一换成 TaoToken 的一个 Key 之后配置文件和排查路径都简单了很多。如果你要长期跑编码任务建议直接看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 它比按次调用更适合 Agent 这种高频场景。接入细节在文档里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。配好之后再回头看main.tsx的并行预加载、query的循环逻辑、tools/目录下的工具注册你会发现它们其实都在做同一件事让模型能安全、可控地操作你的开发环境。看懂这一层你自己写一个 Agent CLI 也就不远了。
返回列表