【声明】本博客所有内容均为个人业余时间创作所述技术案例均来自公开开源项目如GithubApache基金会不涉及任何企业机密或未公开技术如有侵权请联系删除背景上篇 blog【Agent】【OpenCode】grep 工具提示词参数内容继续分析了 Grep 工具的参数内容其中pattern是唯一必填的参数这里的内容是 regex pattern 正则模式不是普通字符串AI 可以使用强大的正则语法来进行模糊匹配path是可选项圈定了搜索的范围决定了 Grep 工具从哪个文件夹开始向下递归搜索如果没传这个参数工具默认在当前工作目录下全盘扫描include也是可选项允许 AI 在调用 Grep 工具时直接带上一组 Glob 通配符作为过滤器Grep 工具在底层先执行一次快速的 Glob 匹配只在 Glob 匹配出的文件里运行正则搜素排除其他文件的干扰接着开始分析 Edit 工具Edit 工具是 AI 可以调用的文件编辑器并分析了两条规则先读后写行号格式前缀细节下面继续分析OpenCode下面继续分析 Edit 工具提示词上篇 blog 分析到了行号前缀格式细节下面继续冒号和空格之后的所有内容才是文件里真实存在的东西AI 在进行字符串匹配时必须完全无视前缀提取空格之后的内容提示词这里强调绝对不能在要编辑的文件里带上类似1:这样的行号前缀格式Edit 工具检测到会直接报错因为文件的真实内容里是绝对不可能包含这种行号装饰的举个例子假设有个 Python 文件真实内容如下注意第二行前面有 4 个空格deftest():print(hello)当 AI 调用 Read 工具时它看到返回的内容是这样的1:deftest():2:print(hello)此时 AI 必须极其聪明地识别出第二行的开头2:是前缀而紧接着的 4 个空格才是文件真实的缩进此时可能有三种情况错误的 oldStringAI 幻觉AI 把看到的一整行都复制下来2:print(\hello\)结果 Edit 工具会报错因为真实的文件里没有2:半吊子的 oldString丢了缩进AI 去掉了行号但把缩进也当成前缀的一部分给误删掉了结果是print(\hello\)对于 Python 这种靠缩进识别语法的语言会导致代码逻辑错误或者因为匹配不到如果原文件必须带缩进匹配而失败完美的 oldString符合提示词要求AI 严格按照提示词只取冒号 空格之后的所有内容并且完美保留了后面的原始缩进print(\hello\)注意前面保留了那 4 个空格所以这里的第二条规则实际上在教 AI 如何正确解析 Read 工具的返回格式精准提取出空格之后的真实代码既不带上多余的行号也不丢掉必要的缩进上面提到了 oldString提示词里还有 newString这里先简要介绍下oldString原本要替换掉的旧代码AI 在文件里想要精准定位并抹除的那段原始代码oldString相当于一个锚点Edit 工具会去文件里找到这段一模一样的段落然后将其替换掉newString即将要换上去的新代码格式完全自由不需要考虑行号前缀只需要把 AI 想要生成的最终代码包括缩进和换行放进去即可Edit 工具会直接把oldString所在的位置挖掉然后把newString填进去OK本篇先到这里如有疑问欢迎评论区留言讨论祝各位功力大涨技术更上一层楼更多内容见下篇 blog