Patch Steering via Prompted Tool Selection
Nikola Balic (@nibzard)· best-practice
问题
拥有多种补丁或重构工具(如apply_patch、AST-refactorer、codemod)访问权限的代码Agent,若未得到明确引导,可能会选择非最优工具,进而引发以下问题:
- 不必要的复杂度:Agent可能会使用通用文本替换工具,而非专用的AST感知重构工具。
- 结果不一致:若没有明确指令,Agent的工具选择会出现不可预测的差异,影响可复现性。
方案
通过prompt中的显式自然语言指令来引导Agent的工具选择与补丁实施方法。相关技术包括:
1. 直接调用工具
- 示例前置指令:"使用
apply_patch工具在auth_service.py中插入新函数validate_input。" - Agent会识别
apply_patch为首选补丁机制。
2. 工具使用教学
- 在context中提供微型操作手册:
"我们的`ASTRefactor`工具接收用于描述节点编辑操作的JSON: {"file": 字符串, "pattern": 字符串, "replacement": 字符串}。 请使用该工具执行安全重构,而非直接使用原生`sed`命令。" - 这会引导Agent在修改函数签名或重命名类时,选用更安全的高层级重构工具。
3. 隐式简写约定
- 引入领域专属缩写规则:"当需要重命名变量时,使用
renameVar(旧变量名, 新变量名);Agent会在底层自动将其映射至ASTRefactor工具。"
4. 促思型表述
- 添加此类表述:"在选择补丁工具前,请思考类型安全性问题。"
- 推动Agent进行更深层次的推理,避免仅执行表层文本替换操作。
如何使用
- 工具注册表:在Agent的初始化context中暴露工具元数据(名称、使用示例、输入schema)。
- 提示词模板:创建包含占位符的可复用模板,例如:
"任务:{task_description}。首选工具:{tool_name}。 使用示例:{tool_usage_snippet}。" - 回退处理:若Agent忽略指令并使用了错误工具,需添加如下指令:“如果ASTRefactor执行失败,回退至apply_patch。”
权衡
- 优点:
- 可预测的行为: 减少同一任务下工具使用的差异性。
- 更高的代码质量: 确保Agent优先使用语义安全的工具(如基于AST的工具),而非基于字符串的替换工具。
- 缺点/注意事项:
- Prompt长度: Prompt中过多的工具文档会消耗宝贵的Token。
- 维护: 随着新的补丁工具问世,模板和工具注册表需要定期更新。
参考文献
关键词:
聚焦大模型工具调用的提示词配置方法,涉及Claude代码最佳实践的相关内容,以及设定工具调用代理默认行为的关键提示词要求。
- 改编自Claude代码最佳实践中的《通过提示词引导工具调用》一文。
- Will Brown的笔记内容:“若要让AI成为工具调用代理,你必须在提示词中将这一功能设定为默认行为。”
来源摘要
正在获取来源并生成中文摘要…