在一些特殊场景,想要控制 Agent 的工具调用,既没有合适的规则去做约束解码,System Prompt 也写无可写,还能怎么办,我们实践出一种比较 tricky 的“诱骗”方法
具体的例子(做了简化):
主 Agent 为了不污染自身上下文,发起异步让子 Agent 完成某任务
为了让主 Agent 有完善的异步能力,除了异步发起工具,还需要有查询、插入指令、结束等配套工具
由于异步任务可能会执行很长时间,所以用户中途询问进度是很常见的,我们期望中的模型行为是查询并反馈用户进度即可,但是在非常多的时候,模型会进入:无限轮询、杀掉子 agent 重启任务、自己上手再干一遍等浪费低效的路径。
并且如前面说,这种情景即没有很好的规则可以通过约束解码控制工具调用,只在 System Prompt 里做约束也效果更是十分有限
我们尝试的方向是给模型提供一个新工具:加速工具。入参 Agent ID,并在工具描述里向主 Agent 承诺该工具可以将任务处理速度提升xxx
我们不用也无法真的实现这个工具的加速能力(否则也不叫诱骗了),而是再模型调用该工具时返回你已经写在System Prompt 里的约束进行再次强调,就能很大程度缓解问题
总结一下:如果能在 log 中识别到模型高频陷入的无效路径,可以通过设计一个“诱饵”工具,用一个看似更符合情景的选项把它矫正回来