这段时间的工作重要一直在折腾智能创作、workflow、agent相关的东西。今天看了anthropic的https://www.anthropic.com/research/building-effective-agents文章有点想法。文章里面给出的那几种流程都太熟悉了。
从最开始做rag,做客户问答,当时的基本框架就类似于这两个图片:用户query进来之后,一个意图识别,分支到不同的数据检索引擎,获取到检索数据之后再合并到LLM得出最终的答案。
workflow是通过预定义代码路径编排LLM和工具的系统,目前我在dify上面搭建的创作workflow已经有上百个节点了,看着头疼,里面的每一个流程、每一个节点都是预先设定好了,比如说先根据用户想要创作的话题来提取一些搜索关键词,利用搜索关键词来进行资讯搜索、数据api的搜索,最后把这些信息和其他的一些必要的信息合并组成提示词给模型来生成文章。这种方式一定程度上是可以解决问题,但总觉得不太智能。类似于这一种:
然后workflow也折腾的差不多了,最近开始折腾agent,agent的核心我觉得最重要的还是两点,足够聪明的模型和接口定义描述足够清晰的工具。
为什么说工具的接口定义描述要足够清晰,就如anthropic文章提到的,假如你自己来使用自己定义的工具,你看到那些模棱两可或者说相似的工具你是否能够准确的使用工具,就比如我前文说到,两个搜索工具,本身其实是一个数据查询api、一个是资讯查询api,如果简单的定义成搜索工具的话,模型是分不清的。然后给模型的提示词应该也要准确,对于这两个搜索接口来说,如果只是让他在创作的文章里面补充xxx的数据,模型其实也可能分不太清楚到底该用哪个工具。
设身处地为模型着想。根据描述和参数,使用这个工具是否显而易见,还是需要仔细思考?如果是这样,那么对模型来说也是如此。一个好的工具定义通常包括示例用法、边缘情况、输入格式要求以及与其他工具的明确界限。
如何更改参数名称或描述以使事情更明显?可以将其视为为团队中的初级开发人员编写一个出色的文档字符串。当使用许多相似工具时,这一点尤为重要。
测试模型如何使用您的工具:在工作台中运行许多示例输入,查看模型犯了哪些错误,并进行迭代。
对您的工具进行防错设计。更改参数,使其更难出错。
最后对于模型返回结果的格式化控制,我本人是很喜欢让模型返回json的,但是如果模型不够“聪明”的话,有时候会在数据里面出现未转义的双引号,导致后续流程出现json解析问题,有时候也挺麻烦的。
今天先这样吧,有什么欢迎评论区留言讨论,后续我还是会接着搞智能创作的agent,也欢迎大家关注我的公众号~