一.架构设计
分为四层架构
引擎层:负责调度和思考
关键设计原则:不包含任何的业务逻辑
- 协调:把用户输入,系统提示词,历史对话拼接在一起
- 分发:LLM需要调用工具时,找到对应的工具并执行
- 决策:根据LLM的返回决定时继续循环还是结束对话
该设计的好处是:新增能力只需要新增一个工具,引擎层完全不用改
工具层:能力
工具遵循统一的规范,这个规范强制定义了三个安全属性: 1.工具是只读的还是会改东西的 2.它是否具有破坏性,需要额外确认? 3.能不能和其他工具同时执行
服务层:
所有层共享的基础设施: 调大模型的API,上下文压缩,MCP协议
安全和治理层:
权限系统决定哪些操作需要用户确认,哪些操作可以自动执行; Hook系统允许工具在执行前后插入自定义行为 Bash安全模块会对shell命令做语法级别的分析,检测命令注入,路径逃逸等危险模式
二.Agent工作模式
首先回顾React
Thought->Action->Observation(Loop) 存在的问题:Token太浪费;应用层代码太复杂了;为弱模型设计的(当时的模型推理能力不够,但是现在的模型推理能力已经足够强了)
Claude Code: Tool-Use Loop

没有推理步骤(这是因为Opus自己具有推理能力,这是通过Extended Thinking) 该设计的核心哲学是:信任模型的推理能力,保持应用层框架尽可能简单
| |
优点
1.Extended Thinking让推理在模型内部完成 2.API原生支持tool_use:不需要通过正则表达式从文本中提取[Action].消除了React的格式解析问题 3.end_turn作为天然的终止信号:语义清晰,不需要额外解析
| 维度 | ReAct | Tool-Use Loop |
|---|---|---|
| 推理方式 | 显式 Thought 文本 | 模型内部 Extended Thinking |
| 工具调用 | 解析文本提取 Action | API 原生 tool_use |
| 终止判断 | 检测 「Final Answer」 | API 原生 end_turn |
| Token 开销 | 每轮要输出 Thought | 无额外开销 |
| 编排复杂度 | 高(需要解析 Thought/Action) | 低(只需要 if/else) |
| 适合场景 | 弱模型 + 简单工具 | 强模型 + 复杂工具集 |
Plan Mode
先规划,后执行 并不是一个独立得框架,而是在Tool-Use Loop中通过EnterPlanMode和ExitPlanMode两个工具实现的 分为三步: 第一步:模型自主进入或客户手动触发 模型判断为复杂任务,调用EnterPlanMode工具;或用户自己手动触发
第二步:只读探索+设计方法: 权限将为只读,使用只读工具探索代码库,将生成的plans写入.claude/plans/目录 每5轮对话,模型会warning模型,提示他还在Plan Mode
第三步:用户审批后实施 模型调用ExitPlanMode,此时需要用户确认,批准后,权限恢复
核心设计:工具即能力
PlanMode不是一种特殊的模式切换,而是调用了EnterPlanMode和ExitPlanMode这两个工具
三.System Prompt的构造
非静态文件,由十几个section拼接,且拼接过程做了缓存优化 源码翻译为了中文,保留了关键术语
角色定义与安全红线
| |
安全约束指令
| |
行为准则
挑选:
write before read
| |
关于代码风格:less is more
| |
关于失败处理:
| |
操作安全:
从可逆性和影响范围两个维度来判断风险
| |
| |
工具使用指南:
| |
可审查性:
当模型调用 Read 工具读文件时,UI 会清晰地展示「Agent 正在读取 src/index.ts」。但如果模型执行 cat src/index.ts,用户看到的只是一条 Bash 命令和一大坨输出,完全不知道 Agent 在干什么。
Git安全协议:
| |
输出风格约束:
| |
环境信息注入
| |
分割线和三级缓存
SYSTEM_PROMPT_DYNAMIC_BOUNDARY 三级缓存: 全局缓存(分割线之上,跨组织跨用户共享)->组织缓存(同一组织内跨会话共享)->会话缓存(同一个section在一次会话内只计算一次)
四.记忆系统
记忆分类: user:用户画像 feedback:行为反馈: rules,why,how to apply project:项目动态 必须把相对日期转化为绝对日期
reference:外部指针
排除清单:不会被写入记忆系统的内容 可以从当前代码推导出来的信息,一律不存
存储的方式:索引+独立文件
MEMORY.md文件作为索引被加载到System Prompt中,但是独立记忆文件按需加载 不超过200行(25KB)的轻量目录:通过行数和字节数限制
召回方式:通过sonnet做记忆检索
流程
- 扫描记忆文件的头部信息
- 拼成清单+用户当前输入,发给Sonnet做选择,Sonnet返回选中文件列表
- 加载选中的记忆文件,注入上下文
记忆召回的执行时机: 在用户提交信息之后就立刻开始了(并行召回)
五.上下文窗口管理
压缩策略:分为五种程度 核心理念:压缩必定有信息的损失,进行层级的压缩策略
一.huge tool result存入磁盘
进入message之前,超过50KB的tool result存磁盘,返回预览; 或一条message的总tool result< 200kb,如果超过,选择最大的几个tool result存磁盘
二.砍掉远古消息
移除对话开头的老消息,并插入边界标记显式告知模型
三.裁剪老的tool result
Micro-Compact 核心思想:随时间衰减,可重新获取的 subagent的tool result永远不会被clear
被裁剪的tool result会被占位文本替代
四.读时投影(Read-Time Projection)
在调用API的那一刻,动态计算压缩视图给LLM
五.全量摘要
trigger:设置的阈值 1.生成摘要 2.替换旧消息 3.Post-Compact Restoration(压缩后恢复)
从文件状态缓存(fileStateCache)中找出最近访问过的文件,按最后访问时间排序,挑选最多 5 个、总共不超过 50K Token 的文件内容重新注入。同时恢复活跃的 Skill(不超过 25K Token),如果有进行中的 Plan 也会恢复 Plan 文件
| 层级 | 手段 | 信息损失 | API 开销 | 触发条件 |
|---|---|---|---|---|
| 第 1 层 | 大结果存磁盘 | 几乎为零 | 零 | 工具结果超 50KB |
| 第 2 层 | 砍掉远古消息 | 低 | 零 | 消息过时 |
| 第 3 层 | 清理老工具输出 | 中低 | 零 | 缓存过期/数量超限 |
| 第 4 层 | 读时投影压缩 | 中 | 低 | 上下文达 90% |
| 第 5 层 | 全量摘要 | 高 | 高(一次 API 调用) | 上下文达 ~93% |