专题研修

10|Claude Code与Copilot:公开机制、可验证行为与未知内部

专题研修约 3.3 千字1 组分步图解

目标:能比较真实产品的上下文、委派和权限,而不把不同产品面、不同版本混为一谈。证据是2026-10-17读取的官方页面,不代表未来版本保持不变。

本章目录

沿着对象与状态理解本章

公开能力、观察到的行为与不可见内部应分栏记;没有公开证据的实现不补猜。

下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。

动态图解 · F22

把一个Agent任务拆成真正发生的几轮

同一句用户任务,为什么可能调用模型不止一次?

LLM生成下一步提议,宿主执行获准的动作,把结果再交给LLM。这是外层任务循环;每次模型调用内部还要经历逐Token生成。外层的一轮工具行动不等于内部生成一个Token,两种“循环”不能混用。

调用标识把某次工具请求与其结果连接的ID。
工具结果程序实际执行后返回的内容。
上下文本轮明确交给模型的信息,而非整个电脑状态。

输入与适用条件:构造的只读教学任务:文件config.txt含timeout=30。泳道展示职责边界,不声称调用了真实商业API;数据和动作顺序固定。

1 / 8 · 1. 用户任务:读config.txt中的timeout

第1步,共8步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

把一个Agent任务拆成真正发生的几轮:1. 用户任务:读config.txt中的timeout用户宿主LLM文件工具用户任务:读config.txt中的timeout模型请求:任务+read_file工具定义模型输出:call_id=c1,path=config.txt宿主校验后读取文件工具结果:timeout=30下一轮输入:原任务+调用+结果模型回答:配置的timeout为30宿主显示回答;任务结束

模型尚未看到磁盘文件。先区分用户给的任务与环境真实内容。

未读取

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

为什么需要

模型可以借助工具获得新证据,而不把一切都塞入参数。

怎样实现

按请求、校验、执行、结果回填、继续决策组织循环。

可能的代价与误解

忘记回填工具结果会让模型重复请求;把输出文本当执行证明会误报完成。

如何判断是否做对

对照每轮模型输入和工具日志,确认结果与call_id匹配。

1. 比较对象必须先明确

Claude Code CLI、IDE中的聊天、Copilot CLI、GitHub托管编码Agent,并非同一个运行环境。某项工具、Skill、记忆或MCP功能在一个产品面可用,不能自动推到另一个。比较模型能力时,还要控制实际模型、可用工具、网络、仓库索引、权限和执行环境,否则观察到的是整套系统差异。

官方文档公开了Claude Code的循环、上下文构成、自动清理与压缩、子Agent和记忆机制;Copilot CLI自定义Agent文档公开了profile与工具配置。两者并未提供所有内部Prompt和服务实现。对未公开部分,应写“未公开/未测”,而不是根据一次输出猜出固定算法。[N20][N21][N22]

2. 上下文不是只有聊天记录

Claude Code公开说明其上下文包含会话、工具结果、项目指令、记忆和按需加载内容,并存在清理旧工具输出与会话压缩机制。技能可先加载描述、使用时再读取内容。工具定义的发现方式也可能随产品实现变化,不能把一个旧版本的工具Token成本当作恒定值。[N20]

工程上要区分“文件已存在于项目”“工具已经读过”“目前仍在模型上下文”“被保存在外部记忆”四种状态。一个大文件先被读过,经过压缩后可能只剩摘要;后续需要精确代码时,应重新读取原始位置,而不是要求模型凭摘要恢复源码。

对多目录仓库,还应检查规则加载作用域。自动记忆与人工维护的项目指令具有不同生命周期,不能因为名字都含memory就视为同一权威。当前源码和用户明确要求应能纠正过期经验,而不是被历史摘要永久压住。

3. 子Agent不应被笼统描述为“完整继承”或“完全空白”

Claude Code文档描述独立子上下文,也存在fork当前会话的方式;委派模式不同,初始上下文不同。主Agent最终得到什么返回内容、工具调用是否留在子上下文、技能是否预加载,都需要按具体配置核实。[N21]

Copilot CLI的自定义profile包含描述、提示、可选工具列表和MCP配置;文档说明未限定工具时可以访问可用工具集合。但“可用工具”仍受宿主配置、连接和权限影响,不代表系统里任何MCP服务都自动登录可用。[N22]

从工程角度可拆成三层:工具发现决定看见哪些名称,Agent配置决定允许请求哪些工具,执行权限决定一次具体调用能否成功。模型选中工具是第四层。只修其中一层不能保证最终调用发生。

4. 一套低成本、可复查的宿主行为探针

本书没有在用户本机运行Codex、Claude或Copilot。下面是读者可自行执行的实验设计,不能当成已测结果:建立无秘密的样例仓库,根目录和子目录分别放一条无害、可辨认的规则;用同一简单任务在不同cwd启动;记录版本、加载提示与输出。然后显式调用一个只读自定义Agent,比较它能看到的工具和规则。

探针不应让模型仅回答“我已经加载了技能”。应设置必须使用该规则才能满足的可验证结果,例如生成一个规定键名的JSON,但同时避免把该键名直接泄露到用户任务中。即使结果符合,也只能作为间接证据;若宿主支持加载日志或上下文显示,应结合更直接证据。

压缩探针可以在长任务早期设置明确约束,中间加入正常工作记录,触发受支持的压缩,再让Agent继续一个依赖该约束的任务。还要保留未压缩对照、不同位置与重复试验。单次回忆成功不等于任何长任务都安全。

5. 权限与检查点的误区

一些工具提供文件编辑回退或会话恢复,但不应推断它能撤销外部邮件、远程部署或数据库写入。文件checkpoint、会话历史、执行日志与远程世界是不同状态空间。第08章的unknown状态在真实产品里同样需要考虑。

配置“只读审查”也要检查工具能力。如果审查Agent能执行任意Shell,实际权限可能超过文字描述。应由执行器限制,而不是只写一句“不修改文件”。另一方面,不必对每次正常读文件都要求人工批准;用边界清晰的沙箱可以减少审批疲劳。

6. 面向rd-skills这类扩展层的最佳取舍

扩展层应该增加宿主欠缺的专业知识与准确路由,而不是重复实现宿主已有的会话、工具、持久化和权限系统。先确认具体失败发生在skill描述、加载边界、专业内容、返回证据还是宿主自身。若正确技能已可见但内容泛泛,继续优化router不会解决专业质量问题。

一个高价值改动的例子:某技能在明确不相关任务误加载,添加适用边界及反例,并在误加载与必须加载任务上共同验证。一个低价值改动的例子:因为担心任何任务遗漏,默认加载所有专业资料,再额外建立多个路由Agent审查。后者同时增加上下文、延迟与冲突,必须有非常明确的实测收益才能成立。

7. 比较结论应该如何书写

严谨结论应写成:“在某版本CLI、某仓库、某权限与工具配置下,任务集X观察到Y;未测试托管版或其他模型。”不能写成“Claude总是这样、Copilot永远那样”。产品行为会变,可信工程知识要能区分稳定原理和版本事实。

本章验收:能够为一次技能未生效列出至少三个相互竞争的解释,并设计最少额外调用来区分它们。优先获取可观察配置和运行证据,避免通过模型自述或不断增加规则来猜原因。

运行示例 · S10

黑箱产品实验:只改一项指令来源

输入与条件。准备同一仓库同一任务,A运行在仓库指令缺失时,B只新增只读规则文件,其余工具权限与模型配置不变。

步骤与对象内部动作中间结果 / 新状态
1记录输入条件版本、表面、规则位置和发现日志保证能解释差异。
2执行A/B观察是否读取规则以及是否提出写动作不只看最终答复是否客气。
3加入执行边界工具权限始终只读避免为了测试而实际产生越权副作用。
4解释结果B提出写动作减少只能说明这组条件下行为变化,不揭示闭源内部Prompt全文。
5重复相同任务多次与相邻任务对比区分偶然采样和稳定影响。

把过程连起来。公开文档与黑箱行为实验可以互补,但不能由一次行为推断全部内部实现。

边界与反例。这是实验设计而非已执行的商业产品测试,没有虚构胜率。

依据与适用范围:[CLAUDE] [COPILOT] [EVALS]。示例输入和场景由本书明确设定。

记录保存在本机浏览器。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。