Claude Code
完整执行流程

以"帮我优化这段代码"为例,展示从用户输入到最终回答的完整链路,涵盖上下文组装、queryLoop、工具执行、记忆回写全过程。

用户行为
系统/宿主程序
LLM 调用
工具执行
记忆系统
SYSTEM · 启动

自动读取 CLAUDE.md

启动时扫描三层文件:
~/.claude/CLAUDE.md 全局规则
/项目/CLAUDE.md 项目规则
/子目录/CLAUDE.md 目录规则

并行
加载
SYSTEM · 启动

工具注册表初始化

注册所有可用工具(ReadFile、WriteFile、RunBash、WebSearch 等),生成工具描述列表,准备注入 System Prompt。

SYSTEM · 上下文组装

组装完整上下文消息包

① SYSTEM PROMPT

角色定义
行为规范
工具列表 + Schema
CLAUDE.md 内容

② 记忆注入

用户档案
近期状态摘要
RAG 检索结果
(用户看不到)

③ 历史对话

保留最近 N 轮
早期轮次已压缩
工具结果已摘要

④ 用户本轮输入

"帮我优化
这段代码"

← 用户唯一
可控部分

SYSTEM · prefetchBudget

Token 预算预计算

统计消息包当前 token 总量,预留 LLM 输出空间(按最大值估算),判断是否需要提前压缩。

超限则
压缩
SYSTEM · compact

按需触发压缩(3 级)

  • 微压缩:工具结果摘要化
  • 消息折叠:早期对话裁剪
  • 全量压缩:整体重写上下文
QUERY LOOP · 无限循环,直到满足停止条件
LLM · API CALL

调用 Claude API(流式请求)

模型读取完整上下文包,输出以下两种内容之一:

输出类型 A

自然语言回复
→ 直接返回给用户
→ 本轮循环结束

输出类型 B

tool_use 结构化请求
→ 进入工具执行流程
→ 继续下一步

↓ tool_use 时
SYSTEM · 权限检查

checkPermissions()

校验工具 Schema、参数合法性、是否只读、是否危险、是否需要用户确认。

通过

拒绝
USER · 人工审批

高风险动作弹出确认

删除文件、执行 Shell、写入等危险操作,用户看到确认弹窗,决定是否授权。

↓ 授权通过
TOOL · 真实执行

tool.call() 并发执行

宿主程序真的读文件、跑命令、调 API。最多 10 个工具并发执行。
得到的是真实世界的结果,不是模型脑补。

结果
回填
SYSTEM · backfill

工具结果回填上下文

把执行结果作为 tool_result 加入消息队列,LLM 下一轮能看到真实反馈,再决定下一步。

SYSTEM · 停止检查 stopHooks

判断是否继续循环

继续循环的条件

还有未完成的工具调用
任务未达成
LLM 判断需要更多信息

停止循环的条件

任务完成
Token 预算耗尽
发生不可恢复的错误
用户中止

↓ 循环结束
OUTPUT · 用户可见

最终回答展示

LLM 生成的自然语言回复,通过 Ink/React 渲染层展示在终端界面。流式输出,逐字显示。

同时
触发
MEMORY · 记忆回写

更新长期记忆

若对话中出现值得记住的内容(新规则、用户偏好、重要事件),LLM 主动调用 WriteFile 写入 CLAUDE.md,下次会话自动生效。

SESSION · 会话结束

短期记忆消失,长期记忆持久化

上下文窗口内的所有内容随会话销毁;只有写入 CLAUDE.md 的内容会跨会话保留。

关键认知

整个流程里,LLM 只做两件事:判断 + 输出,从不直接接触真实世界。
真正读文件、跑命令、写数据的,是宿主程序的工具层。
产品能力的天花板 = 你给 LLM 组装了什么上下文 + 注册了哪些工具 + 怎么管理记忆。