当前位置: 首页 > article >正文

Claude Code 源码研究【第二弹】:智能体框架与大模型相互成就

在上一篇“Claude Code 源码研究一个 while(true) 循环让大模型自己干活”之后继续我们的研究——01自然语言引导能保证模型每次都听话吗Claude Code 不靠 if-else 控制模型选哪个工具而是靠 40 份精心撰写的工具说明书做软引导。这立刻引出一个问题软引导靠谱吗模型不听话怎么办答案很直接不能保证。自然语言引导是概率性的不是确定性的。说明书里写了不要用 cat 读文件用 FileRead模型大多数时候会照做但没有任何机制能保证它 100% 遵守。大模型的本质是概率采样概率采样就意味着总有意外的可能。但 Claude Code 的设计者显然不是天真的理想主义者。他们在自然语言引导之外布了三层防线。第一层拦每个工具调用在执行前都必须通过权限检查。危险操作写文件、执行命令会弹窗让用户确认。模型想干什么不重要用户不批准就执行不了。第二层查把 shell 命令解析成抽象语法树识别管道、重定向、子命令嵌套中的危险模式。rm -rf /会被拦住echo hello | rm -rf /也会被拦住。第三层关构建文件系统沙箱在操作系统层面限制 Agent 的活动范围——哪些目录可读、哪些可写、哪些域名可访问全部白名单控制。这是一道物理隔离。劝Prompt提示、拦、查、关四层叠加任何单层都不是 100%。自然语言引导可能失效权限系统可能被用户自己按了全部允许AST 解析可能遇到没见过的命令构造沙箱可能在某些平台上有实现差异。但四层的穿透概率是各层失效概率的乘积趋近于零。这是经典的 Defense in Depth ——纵深防御军事术语也是信息安全的基本原则。不依赖任何单一防线的完美而是通过层层叠加让整体风险降到可接受的水平。就好像你家的安全不是靠一把锁。是门禁 门锁 监控 邻居会报警。每一层都可能失效但小偷要同时突破所有层难度指数级上升。Claude Code 对模型不听话这件事的态度不是努力让它 100% 听话而是假设它一定会不听话然后确保不听话的后果可控。这比盲目信任自然语言引导成熟得多。02如何评估工具执行结果的正确性Agent 调了一个工具工具返回了结果。下一步自然要判断这个结果对不对要不要重试答案出乎意料Claude Code 完全不评估工具执行结果的正确性。代码层面零判断。工具执行完之后结果被原封不动包装成 tool_result塞进消息历史发回给模型。没有检查返回值是否合理的逻辑没有如果结果为空就重试的分支没有任何形式的结果验证。那评估这件事谁来做模型自己做。下一轮循环里模型看到了完整的对话历史——包括自己上一轮请求的工具调用和对应的执行结果。它自己判断结果是否符合预期自己决定下一步做什么如果 grep 搜出来的结果不对模型会换个关键词再搜如果文件编辑之后 npm test 失败了模型会看报错信息、分析原因、修改代码、再跑测试如果一个 API 请求超时了模型会决定是重试还是换个方案……评估不是 Agent Loop 中一个独立的步骤它融入了下一轮循环的决策过程。这其实完全符合人的工作方式。一个工程师在终端里敲了 grep TODO *.py发现结果只有一条他不会启动一个grep 结果正确性评估程序——他直接看一眼觉得不对就换个关键词重来。Claude Code 的设计者抓住了本质——评估和下一步行动是一体的不是两个分离的阶段——对大模型而言理解工具输出并据此决策是它的推理能力的一部分而不是需要额外代码辅助的独立任务。这里面有一个更深的设计哲学不要替模型思考。框架的职责是当好信使——忠实传递请求忠实返回结果——而不是在中间插一脚自作聪明地帮模型理解结果。03用户对结果不满意时如何反馈给 AgentAgent 给出了一个方案用户觉得不对说这不是我要的我要的是 X。这个反馈怎么进入系统有没有专门的反馈处理模块答案是无法反馈。用户的反馈就是一条普通的 user message。走的是和第一次输入完全相同的路径processTextPrompt() → 构建消息 → 进入 Agent Loop。没有反馈模式没有纠错通道没有任何特殊处理。用户说这不对应该用 async/await 而不是 callback这句话被当作一条新的 user message 追加到消息历史的末尾。下一轮 API 调用时模型看到的是完整的对话历史原始需求、自己之前的方案、工具执行的结果、以及用户刚才的这句反馈。模型靠自己的推理能力理解这是一条纠正指令不是一个全新的任务。然后它基于这个理解调整方案继续执行。这意味着纠错能力的上限完全取决于模型的推理能力而不取决于框架的设计。框架不做任何帮助模型理解反馈的事。不会把用户的话标记为这是纠正不会提取其中的关键信息高亮显示给模型不会触发什么反思链路。这个设计一开始让我觉得过于简陋。但想深一步它是对的。原因在于反馈的语义是无限丰富的。 这不对可能是纠正方向加个日志可能是补充需求算了先帮我看另一个文件是话题切换嗯可能只是确认。如果框架试图用代码逻辑去分类和处理这些反馈它要么做得太粗分类错误要么做得太细写不完的规则。那么不如把反馈原样交给模型让模型自己在完整上下文中理解语义。模型是目前最好的自然语言理解引擎没有理由在它前面再套一层更弱的理解层。这跟上一个问题的哲学一脉相承框架不替模型思考。04每次给模型多少上下文用户跳话题怎么办最后一个高频问题Agent Loop 每轮调 API发过去的消息历史有多长如果用户前面在修 bug突然说帮我写个 README——前面那些 bug 相关的上下文还会发过去吗答案简单粗暴全部发过去。每一轮 API 调用Claude Code 把完整的消息历史——从第一条用户消息到最近一次工具执行结果——全部打包发送。不做话题筛选不做相关性过滤不做任何裁剪。这是一个刻意的设计选择。Claude Code 的哲学是宁可让模型在一大堆上下文里自己找到有用的信息也不冒险替模型过滤掉它可能需要的东西。为什么不过滤因为什么是相关的这个判断本身极其困难。用户说帮我写个 README看起来和前面的 bug 修复无关。但如果前面的 bug 修复涉及到项目的核心架构而 README 正好要描述这个架构呢如果框架自作主张把 bug 修复的上下文过滤掉了模型就丢失了关键信息。过滤的风险是不对称的多给了无关信息模型大概率能自己忽略少给了关键信息模型一定会犯错。但这个策略有一个显而易见的问题上下文会撑爆。Claude 的上下文窗口虽然大200K tokens但几轮密集的工具调用之后消息历史可以轻松超过这个限制。一次 FileRead 读一个大文件可能就是几千 tokens十轮循环下来上下文可能已经膨胀到六位数。Claude Code 为此实现了三级压缩机制层层递进第一级Auto-compact主动压缩当上下文接近窗口上限时自动触发。Claude Code 会发起一次额外的模型调用通常用更轻量的 Haiku 模型把之前的对话历史压缩成一份结构化摘要。压缩后的摘要替代原始历史作为后续对话的起点。压缩的 prompt 里有一条特别要求Preserve All user messages——所有用户的原始消息必须保留。因为在所有信息中用户的意图变化是最不能丢的。工具的执行结果可以概括模型的中间推理可以省略但用户说过的每一句话都可能影响后续任务的理解。压缩后消息历史的最前面会加一句This session is being continued from a previous conversation that ran out of context.——告诉模型你看到的不是对话的全部前面有一段被压缩过的历史请据此继续。第二级Reactive compact紧急压缩当 API 直接返回 prompt-too-long 错误时触发。这说明连 auto-compact 都没来得及处理或者压缩后仍然过长需要更激进的压缩策略。第三级Context collapse渐进折叠不是一次性压缩全部历史而是逐步折叠早期的工具执行结果。最近几轮的细节保持完整更早的轮次只保留摘要。有点像人的记忆——昨天的会议你记得细节上个月的会议你只记得结论。三级机制的设计逻辑很清晰先预防auto-compact再应急reactive compact最后兜底context collapse。跟前面讲的安全四层防线一样是同一种工程思维不依赖任何单一机制的完美用多层叠加覆盖各种边界情况。05Agent 框架新范式Claude Code 在框架层面做的事情比大多数人想象的少得多——不评估工具结果不处理用户反馈不筛选上下文甚至不保证自然语言引导的有效性。它做的只是确保信息准确传递、确保安全边界不被突破、确保上下文不会物理溢出。所有智能的部分——理解任务、选择工具、评估结果、解读反馈、忽略无关信息——全部交给模型。这不是偷懒这是一种架构立场在模型能力足够强的前提下框架最大的价值不是替模型做决策而是不妨碍模型做决策。传统软件工程的思维是尽可能用代码控制一切——每个分支、每个判断、每个异常处理都要写在代码里。而 Claude Code 代表的新范式是尽可能少地替 AI 做主——把决策空间完整地交给模型框架只负责基础设施安全、传输、资源管理。这个转变的前提当然是模型足够强。如果模型不靠谱你不得不在框架里加各种护栏、规则引擎、决策树来弥补。但当模型的推理能力越过某个门槛这些精心构建的辅助逻辑反而变成了束缚——它们基于工程师对任务的有限理解而模型可能有更好的判断。这大概是 Claude Code 源码给我们最大的启发好的 AI Agent 框架不是做了了什么而是克制住没做什么。欢迎关注微软智汇AI官方账号一手资讯抢先了解喜欢就点击一下在看吧~

相关文章:

Claude Code 源码研究【第二弹】:智能体框架与大模型相互成就

在上一篇“Claude Code 源码研究:一个 while(true) 循环让大模型自己干活”之后,继续我们的研究——01自然语言引导能保证模型每次都听话吗?Claude Code 不靠 if-else 控制模型选哪个工具,而是靠 40 份精心撰写的"工具说明书…...

智能家庭教育:OpenClaw+Phi-3-vision-128k-instruct批改孩子手写作业

智能家庭教育:OpenClawPhi-3-vision-128k-instruct批改孩子手写作业 1. 为什么需要AI作业批改助手 作为一个经常辅导孩子功课的家长,我深刻体会到批改作业的痛点。每天晚上检查数学题时,既要核对答案正确性,又要分析错误原因&am…...

OpenClaw二次开发:基于Qwen3.5-9B定制个性化技能模块

OpenClaw二次开发:基于Qwen3.5-9B定制个性化技能模块 1. 为什么需要自定义技能模块 去年冬天,我发现自己每天早晨都要手动查询天气来决定穿什么衣服。作为一个技术爱好者,我开始思考:能否让OpenClaw自动完成这个任务&#xff1f…...

WarcraftHelper:让魔兽争霸III重获新生的兼容性优化工具

WarcraftHelper:让魔兽争霸III重获新生的兼容性优化工具 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款免费开源的魔…...

2026年最新codex 第三方 api 配置指南

真正决定 Codex 能不能顺利进入项目的,通常不是 npm 命令有没有跑完,而是 codex 第三方 api 是否配完整。很多人在 openai/codex 安装结束后马上就碰到 401、请求超时、模型不可用,甚至一直过不了认证,这类问题大多都落在 ~/.code…...

SEO_10个提升网站排名的SEO技巧与实战方法

SEO:10个提升网站排名的SEO技巧与实战方法 在当今数字化时代,网站排名不仅关乎网站的曝光率,更影响到业务的发展。因此,提升网站排名(SEO)成为了每一个网站主的首要任务。有哪些SEO技巧能够帮助提升网站的排名呢&…...

07_Cursor之语言支持与扩展生态

关键字:语言支持, VS Code扩展, 跨平台, Electron, Python开发, 扩展生态 07_Cursor之语言支持与扩展生态 Cursor知识体系 Cursor知识体系(续) | -- 生态支持层 | -- 多语言支持 | | -- 通用LLM支持 | | -- 自动语言检测 | | …...

SEO_ 详解SEO优化中内容与外部链接的建设策略

SEO优化中内容与外部链接的建设策略 在当前互联网营销领域,SEO优化(搜索引擎优化)是提升网站流量和品牌知名度的关键手段。其中,内容与外部链接的建设策略是两大核心要素。本文将详解SEO优化中内容与外部链接的建设策略&#xff…...

OpenClaw家庭相册:Qwen3.5-9B-VL自动识别人物与场景分类

OpenClaw家庭相册:Qwen3.5-9B-VL自动识别人物与场景分类 1. 为什么需要智能相册管理 作为一个摄影爱好者和两个孩子的父亲,我的手机和硬盘里堆积了超过5万张家庭照片。每次想找特定场景(比如"去年夏天在海边的全家福"&#xff09…...

长尾关键词的SEO提交技巧有哪些

长尾关键词的SEO提交技巧有哪些 在当今数字营销的环境中,SEO(搜索引擎优化)是提升网站流量的关键手段之一。而在SEO策略中,长尾关键词(Long-Tail Keywords)的应用尤为重要。长尾关键词通常是由三个或更多的…...

OpenClaw环境隔离方案:Phi-3-vision-128k-instruct多模态任务专用沙箱配置

OpenClaw环境隔离方案:Phi-3-vision-128k-instruct多模态任务专用沙箱配置 1. 为什么需要环境隔离? 去年我在尝试用OpenClaw处理一批包含敏感客户数据的PDF文件时,曾因为一个错误的鼠标操作指令导致系统临时文件被意外删除。那次经历让我意…...

OpenClaw配置文件详解:Qwen3.5-9B高级参数调优手册

OpenClaw配置文件详解:Qwen3.5-9B高级参数调优手册 1. 为什么需要手动调优OpenClaw配置 上周我尝试用OpenClaw自动处理一批技术文档的归档工作,发现同样的任务在不同时段完成速度差异巨大。有时30分钟就能搞定,有时却要卡顿近2小时。这促使…...

Hotkey Detective:定位并解决Windows快捷键冲突的终极方案

Hotkey Detective:定位并解决Windows快捷键冲突的终极方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 一、…...

Ubuntu 20.04下Mathematica 12.3安装全攻略(附Jupyter集成技巧)

Ubuntu 20.04下Mathematica 12.3安装与Jupyter集成实战指南 在科研计算与符号数学领域,Mathematica始终保持着不可替代的地位。对于Ubuntu用户而言,安装特定历史版本(如12.3)往往比最新版本更具挑战性——官方默认提供最新版下载&…...

Python 3.14 JIT性能调优进入倒计时:CPython核心组已宣布v3.15将移除--enable-jit-experimental标志,现在不掌握就永久错过

第一章:Python 3.14 JIT编译器的演进脉络与战略意义Python 3.14 并非官方发布的正式版本——截至 2024 年,CPython 最新稳定版为 3.12,3.13 处于预发布阶段,而 3.14 尚未进入开发路线图。因此,“Python 3.14 JIT 编译器…...

WebPlotDigitizer终极指南:从科研图表到结构化数据的完整解决方案

WebPlotDigitizer终极指南:从科研图表到结构化数据的完整解决方案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 在科研和…...

Android开发者的USB摄像头避坑指南:从设备枚举到SurfaceView预览的完整流程

Android开发者实战:USB摄像头集成全流程与疑难解析 去年接手一个医疗设备项目时,我需要在Android平板上接入工业级USB摄像头。本以为三天能搞定,结果光是解决画面拉伸问题就耗了一周。这份踩坑经验总结,将带你系统掌握从设备枚举到…...

Vue2项目里用Cesium加载天地图标注,保姆级避坑指南(含Token申请)

Vue2项目集成Cesium与天地图标注的工程化实践指南 当WebGIS需求遇上Vue技术栈,如何在老项目中优雅地引入三维地图能力?本文将以工程化视角,系统讲解Vue2项目中集成Cesium加载天地图标注的完整技术路径。不同于基础教程,我们将重点…...

OpenClaw内容审核:Qwen3.5-9B-AWQ-4bit实现图片敏感内容过滤

OpenClaw内容审核:Qwen3.5-9B-AWQ-4bit实现图片敏感内容过滤 1. 为什么需要轻量级内容审核方案 作为一个运营过多个UGC平台的技术人,我深知内容审核的痛点。早期我用过商业审核API,但面临三个问题:一是成本高,每千张…...

《QGIS快速入门与应用基础》256:SVG格式:适合矢量图二次编辑

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

第 6 次执行后,PostgreSQL 执行计划为何突变?

引言 在 PostgreSQL 中,预处理语句通常用于提升性能并防止 SQL 注入。但一个不易察觉的行为是:查询规划器会在执行达到特定次数后自动改变执行计划。 这种变化往往令人困惑——SQL 本身未发生变化,执行计划却突然发生切换,有时甚至…...

别再只跑Demo了!手把手教你用TensorFlow训练自己的谷物分类模型(11类数据集)

从零构建高精度谷物分类模型:TensorFlow实战指南 当你第一次接触深度学习时,可能已经运行过MNIST手写数字识别或CIFAR-10这样的标准Demo。但真正要解决实际问题时,这些玩具数据集远远不够。本文将带你用TensorFlow处理一个真实的11类谷物图像…...

【独家首发】CPython内存管理策略白皮书(基于v3.9–v3.13源码比对):37处关键宏定义、12个GC阈值参数、8类对象内存布局差异

第一章:CPython内存管理策略全景概览CPython 作为 Python 官方解释器,其内存管理机制融合了引用计数、循环垃圾回收(GC)与分代回收策略,形成一套兼顾实时性与鲁棒性的综合体系。理解该机制对诊断内存泄漏、优化对象生命…...

嵌入式系统栈溢出问题分析与防护实践

1. 栈溢出问题现象与初步分析最近在调试一个嵌入式系统时,遇到了一个非常典型的栈溢出问题。现象很简单:一个局部变量status的值莫名其妙地从0x01变成了其他值。最诡异的是,在两次打印status之间,代码并没有直接修改这个变量。简化…...

手把手教你用Copilot插件在Obsidian里免费接入DeepSeek-R1(附硅基流动API密钥获取)

零成本解锁Obsidian智能助手:DeepSeek-R1全流程实战指南 在信息爆炸的时代,如何让个人知识管理工具具备AI思维能力,已成为数字笔记用户的核心诉求。Obsidian作为一款以本地优先为理念的Markdown笔记工具,其插件生态正逐步融入大语…...

STM32串口发送字符串的底层机制与优化实践

1. STM32串口发送字符串的底层机制解析在嵌入式开发中,USART(通用同步异步收发传输器)是最常用的外设之一。当我们需要通过串口发送字符串时,实际上是将数据写入发送数据寄存器(TDR),然后由硬件…...

有源vs无源晶振怎么选?从接法差异到成本对比的5个实战建议

有源与无源晶振选型指南:5个关键决策维度与实战技巧 在硬件设计领域,时钟信号如同系统的心跳,而晶振的选择直接影响着整个电路的稳定性和可靠性。面对市场上琳琅满目的有源和无源晶振,工程师常常陷入选择困境——是追求有源晶振的…...

从零实现Clock页面置换算法:原理、代码与性能调优实战

1. 为什么需要页面置换算法? 想象你正在玩一个大型开放世界游戏,电脑内存就像你的背包空间。当背包装满时,每次捡新道具都需要先扔掉旧道具——这就是操作系统面临的内存管理问题。Clock算法就是那个帮你智能决定"扔哪件道具"的管家…...

OpenClaw故障排查:百川2-13B-4bits模型接口连接问题解决

OpenClaw故障排查:百川2-13B-4bits模型接口连接问题解决 1. 问题背景与现象描述 上周在尝试将本地部署的百川2-13B-4bits量化模型接入OpenClaw时,遇到了典型的Connection refused错误。这个问题困扰了我整整两天时间,期间尝试了各种常见解决…...

Frappe-Gantt 甘特图进阶实战:从核心功能到企业级定制

1. Frappe-Gantt 甘特图在企业级项目中的核心价值 第一次接触Frappe-Gantt是在去年一个跨部门协作的电商大促项目中。当时我们需要一个能直观展示各环节时间节点的工具,试过几个商业软件后,最终选择了这个开源的轻量级解决方案。它最吸引我的地方在于——…...