工具颗粒度设计
在设计工具函数时,每个函数的职能需要适当把控,如果工具写得很碎,分成了很多个函数,Agent在使用时就需要调用很多次工具,每个都单独调用,轮次会变多,成本也高。如果很多个都写在一起,比如一个工具一次返回几百个字段,Agent 又很难读懂重点。 最好的方式是按照需求去写,如果是项目要求,就直接针对模块设计就好,如果是做的通用工具,就需要想好一般用到工具时的思路便可,也就是说,关键是在于将工具函数封装为Agent容易理解和选择的单元,这也符合"工具"的设计初衷,适合、好用的才是最好的。
工具函数的提示词
虽然工具函数由代码构成,很多人喜欢像写注释一样把其描述形式往自己理解的方向靠,但是事实上,工具描述的最好是写成:这个工具能做什么,什么时候要调用,参数填写说明,返回什么类型的信息等,需要比较详细,全面的说明,目的也是为了让Agent能够容易理解该工具的作用
提示词边界
agent的提示词确实给agent提供了方向,所写的功能和逻辑思路可以告诉agent应该怎么去解决对应的问题,同时,我们也可以在提示词里加入言语来避免agent的幻觉行为。事实上,这是一个很有必要的做法,因为我们无法保证是否可以百分百把所有的用户问题都考虑进来,这个时候,结合集合的思想,反过来让agent不要去做某些事情,既能节省token,又能避免答案出错进入过多不必要的轮次
缓存处理
在调用搜索工具时、网页抓取类工具时,可能会遇到因为api或者网络波动问题导致响应有延迟,甚至即便做了并发处理也还是会有堵塞现象的发生,这个时候就可以做缓存处理,比如把最近十次或者一百次的查询作为缓存存储,遇到相同的查询内容短时间内就走缓存,这样用户在使用时,就不会频繁遇到波动导致体验不佳