【声明】本博客所有内容均为个人业余时间创作所述技术案例均来自公开开源项目如GithubApache基金会不涉及任何企业机密或未公开技术如有侵权请联系删除背景上篇 blog【Agent】【OpenCode】edit 工具提示词二分析了 Edit 工具剩下的提示词最小化破坏原则优先编辑现有文件保护项目架构完整性防止代码库中出现大量冗余碎片化的文件破坏原本清晰的目录结构强制 AI 必须先去理解现有代码的逻辑进行增量更新保持纯净除非明确要求否则禁用 Emoji精准匹配机制字符串内所有字符都必须一一对应找到多个匹配项会失败防止误伤如果提供的 oldString 太短或缺乏特征Edit 工具为避免改错地方会直接拒绝执行批量处理策略replaceAll参数项可以进行全局替换接着分析了 Edit 工具的参数内容filePath目标文件的绝对路径oldString文件里的锚点位置等下面继续分析OpenCode继续看 Edit 工具剩下的参数内容newString必选要替换的新内容注意这里进行了防御性校验如果 AI 提交的newString和oldString一模一样说明 AI 产生了幻觉或者在做无用功OpenCode 客户端会直接拦截这种无意义的请求此外newString不需要去匹配原文件的任何东西但仍要保持和代码风格一致AI 在生成newString时必须把该有的缩进tabs/spaces和换行符补齐比如如果oldString前面有 4 个空格如果newString顶格去写替换进去就会导致代码缩进崩坏尤其在 Python 中会直接引发 IndentationErrorreplaceAll全局替换可选正常情况下oldString在文件中必须是唯一的但如果 AI 想要把整个文件里的变量名批量进行重命名此时可以把replaceAll设置为trueEdit 工具就会自动忽略【多匹配报错】直接把文件里所有匹配到的地方一键替换其中replaceAll的默认值为false因为绝大多数的代码修改都是局部精准的OK下面看下一个 Write 工具其提示词路径在opencode/packages/opencode/src/tool/write.txt这个 Write 工具和前面介绍的 Edit 工具很像都是用来编辑把内容存进文件的但在底层的执行逻辑性能消耗以及对代码库的安全性上Write 和 Edit 工具有着很大不同下面来详细看下Edit局部替换该工具的底层逻辑是 diff差分比如 AI 只需告诉告诉系统【把文件中第 10 行的 A 换成 B】OpenCode 就会拿着这个微小的改动精准地将文件里对应位置替换完毕而 AI 不需要知道文件的第 100 行是什么也不关心文件开头有没有变化属于精准打击Write全量重写其底层逻辑是 overwrite全盘覆盖AI 必须把整个文件从头到尾的完整内容重新生成一遍然后把硬盘上原来的那个文件如果存在的话彻底抹除用生成的内容取而代之哪怕用户只想改一个标点符号Write 工具也会把整个几万行的文件重新搬运一遍再对比个 Write 和 Edit 在实际使用最直观的Token 效率与性能对于 Edit 工具来说假如要在一个 1000 行的文件里改两行代码用 Edit 工具AI 只需要输出这两行代码的上下文可能总共才 10 行文本消耗的 Token 极少响应速度飞快而对比 Write 工具同样的场景如果用 Write 工具AI 必须把这 1000 行代码原封不动地生成出来再加上那两行的修改这不仅会瞬间消耗了上千个 Token而且还会让 AI 的生成时间大幅延长甚至可能因输出太长而触发截断报错OK本篇先到这里如有疑问欢迎评论区留言讨论祝各位功力大涨技术更上一层楼更多内容见下篇 blog