93、【Agent】【OpenCode】edit 工具提示词(二)

93、【Agent】【OpenCode】edit 工具提示词(二) 【声明】本博客所有内容均为个人业余时间创作所述技术案例均来自公开开源项目如GithubApache基金会不涉及任何企业机密或未公开技术如有侵权请联系删除背景上篇 blog【Agent】【OpenCode】edit 工具提示词继续分析了 Edit 工具提示词其中提到冒号和空格之后的内容才是文件里真实存在的东西AI 在进行字符串匹配时须完全无视前缀提取空格之后的内容并且不能在编辑的文件里带上类似1:这样的行号前缀格式Edit 工具检测到会直接报错然后举了个 Python 文件的例子可能有三种情况错误的 oldString带了行号前缀半吊子的 oldString去掉了冒号后面的所有空格完美的 oldString只去掉了冒号和后面的一个空格完美保留后面的原始缩进。然后介绍了 oldString 和 newString 的区别其中 oldString 是原本要替换的旧代码newString 是即将要换上去的新代码下面继续分析OpenCode下面继续看剩下的提示词最小化破坏优先编辑现有文件保护项目架构完整性AI 在生成代码时有时候很容易因为图省事儿而直接创建一个新文件而不是去修改现有的模块这不仅会导致代码库中出现大量冗余碎片化的文件还会破坏原本清晰的目录结构这里强制 AI 必须先去理解现有代码的逻辑进行增量更新而不是盲目地另起炉灶保持纯净除非明确要求否则禁用 EmojiAI 模型在训练时接触了大量的社交媒体有时会在注释或打印语句中自动加入类似 、✨、 等表情符号这在严肃的工程代码中不仅显得极不专业还可能导致源文件编码报错或者让后续的代码解析工具崩溃精准匹配机制唯一的锚点才能定位Edit 工具需要精确字符串匹配这里不是模糊搜索也不是语义替换而是需要像 Ctrl F 一样每个字符都去比对包括空格换行符缩进等只要 AI 提交的 oldString 和文件里的内容有一个标点符号对不上操作就会立刻终止所以第一个规则强调了AI 必须先用 Read 工具拿到最新快照再进行提取避免记忆偏差找到多个匹配项会失败这是为了防止误伤如果 AI 提供的 oldString 太短或缺乏特征比如只提供了一个通用的return;文件里可能有几十个地方都符合条件Edit 工具为了避免改错地方会直接拒绝执行并抛出错误这其实也是在逼迫 AI 扩大上下文范围用户必须把目标代码的前后几行也包含进 oldString 里形成一个独一无二的指纹这样工具才能精准锁定唯一的那个位置当然提示词这里最后也提供了批量处理策略全局替换当 AI 需要重命名一个变量比如把userId改成user_id或者统一修改某个函数名时可以用replaceAll这个参数进行全局替换该参数会绕过唯一性校验的限制直接在当前文件中把所有匹配的 oldString 一次性全部替换成 newString可以极大提升重构效率避免 AI 为了改名而反复调用十几次普通 Edit 工具的笨拙行为OK下面来看 Edit 工具的参数内容filePath目标文件的绝对路径在复杂的工程环境中相对路径非常容易因为当前工作目录CWD的切换而失效强制要求绝对路径相当于给提供了绝对坐标防止编辑到错误文件同时filePath也是必填项没有明确的目标文件就什么也编辑不了oldString文件里的锚点位置也是必填项上篇 blog 里已经简单介绍过这里要被替换的字符串需要满足两个条件剥离了行号前缀的真实代码包含足够的上下文缩进确保在文件中是唯一匹配的如果oldString提取错误比如带了行号丢了缩进工具会直接报错【oldString not found】而如果写得太短导致多处匹配也同样会报错【Found multiple mathces】OK本篇先到这里如有疑问欢迎评论区留言讨论祝各位功力大涨技术更上一层楼更多内容见下篇 blog【Agent】【OpenCode】edit 工具提示词参数内容