【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 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 个空格):
python
def test():
print("hello")
当 AI 调用 Read 工具时,它看到返回的内容是这样的
python
1: def test():
2: print("hello")
此时 AI 必须极其聪明地识别出,第二行的开头 2: 是前缀,而紧接着的 4 个空格才是文件真实的缩进,此时可能有三种情况
- 错误的 oldString(AI 幻觉):AI 把看到的一整行都复制下来
python
2: print(\"hello\")
结果 Edit 工具会报错,因为真实的文件里没有 2:
- 半吊子的 oldString(丢了缩进):AI 去掉了行号,但把缩进也当成前缀的一部分给误删掉了,结果是
python
print(\"hello\")
对于 Python 这种靠缩进识别语法的语言,会导致代码逻辑错误,或者因为匹配不到(如果原文件必须带缩进匹配)而失败
- 完美的 oldString(符合提示词要求):AI 严格按照提示词,只取冒号 + 空格之后的所有内容,并且完美保留了后面的原始缩进
python
print(\"hello\")
注意前面保留了那 4 个空格,所以这里的第二条规则,实际上在教 AI 如何正确解析 Read 工具的返回格式,精准提取出空格之后的真实代码,既不带上多余的行号,也不丢掉必要的缩进
上面提到了 oldString,提示词里还有 newString,这里先简要介绍下
oldString(原本要替换掉的旧代码) :AI 在文件里想要精准定位,并抹除的那段原始代码,oldString相当于一个锚点,Edit 工具会去文件里找到这段一模一样的段落,然后将其替换掉newString(即将要换上去的新代码) :格式完全自由,不需要考虑行号前缀,只需要把 AI 想要生成的最终代码(包括缩进和换行)放进去即可,Edit 工具会直接把oldString所在的位置挖掉,然后把newString填进去
OK,本篇先,到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Agent】【OpenCode】edit 工具提示词(二)