Patch Steering via Prompted Tool Selection

Nikola Balic (@nibzard)· best-practice

问题

拥有多种补丁或重构工具(如apply_patchAST-refactorercodemod)访问权限的代码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成为工具调用代理,你必须在提示词中将这一功能设定为默认行为。”

来源摘要

正在获取来源并生成中文摘要…

来源: https://www.youtube.com/watch?v=Xkwok_XXQgw

← 返回社区