V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuegy
V2EX  ›  Claude

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

  •  
  •   xuegy · 1 天前 via iPad · 807 次点击
    用的是 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 内部要缩短上下文的机制冲突了,如何根治?
    4 条回复    2026-04-26 18:21:14 +08:00
    hxy100
        1
    hxy100  
       23 小时 19 分钟前
    自己写一个脚本函数给它(那脚本内部需要怎么输出和保存日志可以随心所欲了),让他每次都通过调用你这个函数(或脚本)来查找报错日志。

    也可以在此基础上,直接把 grep 、tail 这种命令重命名了,比如改成(grep1 、tail1),让它找不到系统命令,强制用你给他的工具函数查找日志。
    swaylq
        2
    swaylq  
       9 小时 44 分钟前
    这事靠 prompt 基本治不好,得改工具面。直接给它一个固定脚本,比如 `./tools/build_err.sh`,只输出首个 error + 前后文,instructions 里再写死“禁止直接 tail/grep 编译输出”。把可选动作砍掉后会老实很多。
    teaguexiao
        3
    teaguexiao  
       8 小时 42 分钟前
    CLAUDE.md 里加一条强硬规则:"NEVER use tail/grep/cat to read build output, ALWAYS use the error capture script",重复三遍效果更好。我这边试过,context window 快满时模型确实会优先忽略 instructions 里的软约束,硬规则加大写 NEVER 能明显减少这种情况。
    chengYT
        4
    chengYT  
       2 小时 25 分钟前
    我是给项目写了一个 build 的 skill ,这样只要不是压缩上下文把 skill 这个事忘了,模型基本都能正常自己编译。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2847 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 12:46 · PVG 20:46 · LAX 05:46 · JFK 08:46
    ♥ Do have faith in what you're doing.