P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01

前言

你有没有遇到过这种情况?

你花了整整一个周末,给项目写了CLAUDE.md,拆了八条rule,挂了三个MCP,还配了两个skill。结果Agent该犯的错照样犯,定下的规矩当没看见。

这时候你盯着屏幕,感觉像养了只猫。你贴了一墙"禁止抓沙发"的告示,猫看了一眼,转身把沙发抓成了流苏款。

问题出在哪?不是你不努力,是你把四件事当成一件事干了。

写了规矩不等于听了规矩

很多人以为,知识库配好了,Agent就会自动遵守。这就像你以为把钥匙挂在门边,室友就会记得锁门。

实际上,从"你写了文件"到"Agent照做",中间隔着四道关:

关联 ≠ 加载 ≠ 读到 ≠ 遵守
任意一环断掉,结果都是"规矩没生效"。但断在哪一环,排查方式完全不同。

这四件事,就像你点外卖。商家接单了≠骑手取餐了≠送到你手上了≠你吃了觉得好吃。每一环都能出问题,而且出的问题还不一样。

知识库是怎么接进来的

Claude Code和Codex各有一套机制,大体上能一一对上。但别看它们名字差不多,进上下文的方式可差远了。

CLAUDE.md / AGENTS.md:那个32KB的遗嘱

这是最主要的入口。Claude Code叫CLAUDE.md,Codex叫AGENTS.md。

官方文档说得很客气:这是context,不是enforced configuration。翻译成人话就是:你写的是建议书,不是圣旨。

更坑的是,Codex的AGENTS.md有个32KB上限,代码里叫AGENTS_MD_MAX_BYTES。超了直接截断,不是警告,是直接砍。你写了一本《如何当好Agent》的巨著,Agent只读了封面和目录,正文全被扔了。

这就像你给女朋友写了三千字道歉信,结果她只看了前一百字,后面全被微信折叠了。你问她看了吗?她说看了。但你那些掏心窝子的话,她一个字没见到。

.claude/rules/:按路径触发的暗号

这个机制更精细。你可以按文件路径写规则,比如"只要改src目录下的文件,就遵守这套规范"。

但问题是,如果这次会话Agent根本没碰那个目录,这条规则就一直在冷宫里待着。你写了十条路径规则,Agent只用了两条,剩下八条等于没写。

这就像你在公司不同部门贴了不同的规章制度。结果今天来的实习生只在财务部待着,你贴在技术部的"禁止穿拖鞋"对他毫无约束力。不是规矩错了,是人没来。

skill:相亲先看简历

skill的设计很省token。开机只进元数据——名字加description。正文要等被触发才加载。

这意味着什么?意味着你的description就是相亲简历。写不好,Agent连正眼都不瞧,正文一个字都进不去。

你skill正文写得再好,description里没写清楚"什么时候用",Agent就觉得"这跟我没关系"。就像你简历里没写会Python,HR直接把你筛了,哪怕你其实是Python大神。

而且description加when_to_use合起来超过1536字符会被截断。又是截断。AI世界怎么到处都是截断?

MCP:请了一堆外援占座位

MCP是外部工具和数据源。工具定义开机就进上下文,但每个工具都要占token。

你挂了十个MCP,每个MCP有二十个工具,光是介绍这些工具就占了几千token。Agent还没开始干活,先交了一大笔"座位费"。

这就像你请了一堆专家来开会,结果会议前两小时全在介绍专家头衔。真正讨论问题的时间被压缩了,而且有些专家你根本用不上。

四道关,道道要人命

第一关:关联

文件放进了.claude/或AGENTS.md该在的位置。但这只是"关联"上了。

放错目录、压根没被发现——放了≠会进窗口。就像你把简历投错了邮箱,投得再准也白搭。

第二关:加载

这次会话真把它拼进了上下文窗口。但加载也有坑。

子目录懒加载没碰到、AGENTS.md超32KB被截、skill只进了元数据。就像快递到了驿站,但驿站没给你发短信,你根本不知道它到了。

第三关:读到

模型在当前这一步真的把它纳入了判断。但读到也有读到的问题。

skill的description没把它路由进来,正文一字没用上。Agent看了,但看了个寂寞。就像你上课带了书,但老师讲的是另一本。

第四关:遵守

模型照着它做了。但context是建议不是强制,写"务必/绝不"也可能不听。

这就像你跟朋友说"务必别迟到",朋友嘴上答应,第二天还是迟到。不是没听见,是听见了但觉得"这次情况特殊"。

怎么确认它真读到了

说了这么多,怎么排查?分两层:静态看进没进上下文,动态看实际跑了什么。

静态检查:/context是你的快递单号

Claude Code里有/context命令,能看当前上下文里到底装了什么。System prompt占多少、Memory files占多少、Skills占多少,一目了然。

这就像查快递单号。你买了东西,不知道到哪了,查一下就知道卡在哪个中转站。

Context Usage
Opus 4.8  153k/1m tokens (15%)

System prompt: 4.4k (0.4%)
Memory files:  18.9k (1.9%)
Skills:        11.1k (1.1%)
Messages:      110.5k (11.1%)
Free space:    813.9k (81.4%)

动态检查:权限和hook是硬约束

前三关都是软约束——你把规矩送进上下文,指望模型自觉照做。但想要确定性,得用第四关的硬约束。

权限(deny/ask/allow)和PreToolUse hook,是在工具真正执行前拦截,不经过模型的意愿。这就像给熊孩子装了个智能门锁,不管他想不想,就是出不去。

所以记住:CLAUDE.md里的话是给模型看的建议;权限和hook是替你拦动作的闸。想要"一定",得用后者。

最后说句人话

别再以为写个CLAUDE.md就万事大吉了。Agent不是故意不听话,是它可能根本没收到、没读懂、或者收到了但觉得"这次例外"。

你要做的,不是写更多规矩,而是确保规矩真的进了它的脑子,而且进了之后出不来。软的不行来硬的,建议不行上权限。

毕竟,养猫的人都知道:贴告示没用,装门禁才有用。

P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐