claude code源码解析1-api
理解claude code的最重要的一个前提,那就是知道api有哪些组成:
代码位置:
``` typescript
query.ts: deps.callModel()
claude.ts: queryModel()
```
场景设计:
你输入:"帮我分析 D:\logs\server.log,找出所有 ERROR 级别的日志,按时间排序,生成一份 HTML 报告。"
┌─────────────────────────────────────────────────────────┐
│ 你的一句自然语言 │
│ "帮我分析日志文件,生成 HTML 报告" │
│ ↓ │
│ Claude Code 将它 + 上下文 + 工具 + 控制参数 │
│ 打包成下面这个 JSON,发给 Anthropic API │
└─────────────────────────────────────────────────────────┘
// ========== Anthropic Messages API 请求体 ==========
{
// 1️⃣ 模型标识 — "用哪个大脑干活"
model: "claude-sonnet-4-20250514",
// 对应你设置里的 model,经过 normalizeModelStringForAPI 标准化
// 2️⃣ 系统提示词 — "你是谁 + 你当前在什么环境"
system: [
// 官方人设:你是一个 AI 编程助手,行为准则...
{ type: "text", text: "You are Claude, an AI assistant... 用中文回答... 代码风格偏 React..." },
// 环境上下文:自动注入的 git 状态、操作系统、当前目录等
{ type: "text", text: "<environment>OS: Windows 10, PWD: D:\\logs, Git: main branch...</environment>" },
// 还有日期、用户角色(你是某9研究生)等
],
// 3️⃣ 对话历史 — "我们刚刚聊了什么"
messages: [
// 用户上下文块(临时注入,不持久化到历史)
{ role: "user", content: [{ type: "text", text: "当前日期 2026-06-04,用户是某9研究生..." }] },
// 正式对话历史
{ role: "user", content: [{ type: "text", text: "帮我分析 D:\\logs\\server.log,找出 ERROR 日志,生成 HTML 报告"
}] },
// ↑ 这就是你刚才说的那句话,进入了 messages 数组
],
// 4️⃣ 工具定义 — "你可以用哪些工具"
tools: [
{ name: "Read", description: "读取文件内容", input_schema: { properties: { file_path: "string" } } },
{ name: "Write", description: "写入文件", input_schema: { properties: { file_path: "string", content: "string" } }
},
{ name: "Bash", description: "执行终端命令", input_schema: {...} },
{ name: "Grep", description: "正则搜索文件内容", input_schema: {...} },
// ... 总共 20+ 个工具:Glob、Edit、Agent、WebSearch 等
],
// Claude 会从这些工具里选着用——比如先 Read 日志,再 Grep 搜 ERROR,最后 Write 生成 HTML
// 5️⃣ 输出控制 — "最多说多少话 + 要不要思考"
max_tokens: 8192, // 模型最多输出 8192 个 token
thinking: {
type: "adaptive", // 让模型自己判断:这个问题要不要深思
budget_tokens: 10000 // 如果要思考,最多用 10000 token 来想
},
// 对于"分析日志"这种有明显步骤的任务,模型会自动启用 extended thinking
// 6️⃣ Beta 功能头 — "开启哪些实验功能"
betas: [
"prompt-caching-2024-07-31", // 提示词缓存:system prompt 不变,下次调用直接复用,省 token
"context-management-2025-04-01", // 上下文管理:可以主动清理 thinking 等不再需要的内容
"fast-mode-2025-05-14", // 快速模式:生成速度更快
],
// 7️⃣ 可选参数 — "行为微调"
tool_choice: { type: "auto" }, // 模型自己决定何时调用工具
temperature: 1, // 默认温度为 1(thinking 模式下固定)
// 8️⃣ 元数据 — "谁在调用"
metadata: {
user_id: "uuid-abc-123", // 标识是你这个用户
session_id: "session-xyz-456" // 标识这次会话
},
// 用于 Anthropic 侧的用量统计与安全审计
// 9️⃣ 输出配置 — "干活预算"
output_config: {
effort: "high", // 告诉模型:认真干,不求快
task_budget: { total: 500000 } // 整个任务最多花 500K token(含多轮交互)
},
// 对于"分析日志→生成 HTML"这种多步任务,给足预算让它循环 Read → Grep → Write
// 🔟 上下文管理 — "该扔的东西趁早扔"
context_management: {
clear_types: ["thinking"], // 每轮结束后可以清除 thinking 内容
clear_all_thinking: false // 不强制清空所有 thinking
}
// 好处:thinking 内容很长但用完就没用了,清除后腾出空间给真正的对话
}
## 一、**角色相关(Who you are / Who the user is)**
这些信息用于让模型知道“对话双方是谁”,建立身份认知和上下文。
- `system` 中的部分内容:
- `"You are Claude, an AI assistant... 用中文回答..."`:这是 Claude 的官方人设。
- `<environment>OS: Windows 10, PWD: D:\\logs...</environment>`:包含用户当前的操作环境(间接反映用户身份和上下文)。
- “用户是某9研究生”:明确用户角色(出现在 `messages` 的临时上下文块中)。
✅ **作用**:让模型以合适的身份(AI 编程助手)与特定角色(如研究生)交互,并适配其技术背景和需求语气。
------
## 二、**写代码/任务执行相关(What to do / How to help)**
这些是直接驱动模型完成具体编程或自动化任务的核心要素。
- **`messages` 中的用户输入**:
- `"帮我分析 D:\\logs\\server.log,找出 ERROR 日志,生成 HTML 报告"`:这是用户的**核心指令**,定义了任务目标。
- **`tools` 列表**:
- `Read`, `Grep`, `Write`, `Bash` 等工具定义:告诉模型“你可以调用哪些能力来完成任务”。
- **`tool_choice: { type: "auto" }`**:
- 允许模型自主决定何时使用工具,是实现自动化流程的关键。
- **`output_config.effort = "high"` 和 `task_budget`**:
- 明确任务复杂度高,需认真处理,允许多轮工具调用。
✅ **作用**:构成“任务执行引擎”的骨架——模型据此规划步骤(如:读文件 → 过滤 ERROR → 生成 HTML → 写入),并调用工具链完成。
------
## 三、**Claude 模型能力相关(How the model thinks / behaves)**
这些参数控制模型自身的推理方式、输出风格和资源使用。
- **`model` 字段**:
- 指定使用 `claude-sonnet-4-20250514`,决定了基础能力(速度、智能程度、上下文长度等)。
- **`thinking` 配置**:
- `type: "adaptive"`, `budget_tokens: 10000`:启用**扩展推理**(extended thinking),让模型在复杂任务中“先想清楚再干”。
- **`max_tokens: 8192`**:
- 控制单次响应的最大长度,影响能否完整输出代码或报告。
- **`temperature: 1`**:
- 虽然通常 temperature=0 更确定,但在 thinking 模式下固定为 1,允许探索性推理。
✅ **作用**:激活和约束 Claude 的**高级推理能力**,使其能处理多步骤、有状态的任务(如日志分析 + 报告生成),而不仅是简单问答。
------
## 四、**Claude 识别/路由/优化相关(How the system routes and optimizes)**
这些是底层系统用于提升效率、安全性和可维护性的元信息。
- **`betas` 列表**:
- `prompt-caching-2024-07-31`:缓存 system prompt,减少重复 token 消耗。
- `context-management-2025-04-01`:支持动态清理上下文(如清除 thinking 内容)。
- `fast-mode-2025-05-14`:启用更快的推理路径。
- **`metadata`**:
- `user_id`, `session_id`:用于用量统计、审计、调试。
- **`context_management`**:
- `clear_types: ["thinking"]`:任务完成后自动清理中间思考内容,节省上下文窗口。
✅ **作用**:**不直接影响任务逻辑**,但极大提升系统性能、降低成本、保障安全,属于“幕后基础设施”。
更多推荐




所有评论(0)