如何根治 Claude 在编译 C++时自作聪明的问题

4 月 25 日
 xuegy
用的是 GitHub Copilot Claude Sonnet 4.6 ,已经在 copilot-instructions.md 里面写了 please redirect building log to a temporary file instead of using tail or grep.
每次编译的时候,只要因为模版导致报错信息过长,AI 就会无视我的指令,无限的自作聪明重复这个弱智行为:
1. 先 tail 20 行,什么也没看到,然后再编译一次 tail 50 行,还是什么也没看到。
2. 再编译一次,用 grep | err ,真正的错误信息还是被淹没。
3. 最后实在没办法了,才去/tmp 写入临时文件。
我大概能猜到这是跟 agent 内部要缩短上下文的机制冲突了,如何根治?
1971 次点击
所在节点    Claude
5 条回复
hxy100
4 月 25 日
自己写一个脚本函数给它(那脚本内部需要怎么输出和保存日志可以随心所欲了),让他每次都通过调用你这个函数(或脚本)来查找报错日志。

也可以在此基础上,直接把 grep 、tail 这种命令重命名了,比如改成(grep1 、tail1),让它找不到系统命令,强制用你给他的工具函数查找日志。
swaylq
4 月 26 日
这事靠 prompt 基本治不好,得改工具面。直接给它一个固定脚本,比如 `./tools/build_err.sh`,只输出首个 error + 前后文,instructions 里再写死“禁止直接 tail/grep 编译输出”。把可选动作砍掉后会老实很多。
teaguexiao
4 月 26 日
CLAUDE.md 里加一条强硬规则:"NEVER use tail/grep/cat to read build output, ALWAYS use the error capture script",重复三遍效果更好。我这边试过,context window 快满时模型确实会优先忽略 instructions 里的软约束,硬规则加大写 NEVER 能明显减少这种情况。
chengYT
4 月 26 日
我是给项目写了一个 build 的 skill ,这样只要不是压缩上下文把 skill 这个事忘了,模型基本都能正常自己编译。
codehz
4 月 27 日
https://github.com/mksglu/context-mode 这种工具试试呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1208513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX