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

news2026/4/3 3:10:40
在上一篇“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官方账号一手资讯抢先了解喜欢就点击一下在看吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2477487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…