AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


大语言模型能力的放大器:Function Call
发布日期:2024-04-19 07:27:53 浏览次数: 2102


一、什么是Function Call


您可以提前设置并描述函数,当用户与大模型对话中,如果用户的意图与函数的描述相一致,会让大模型智能地选择输出一个包含参数的 JSON 对象,以调用一个或多个函数。注意:大模型并不会主动调用函数,而是模型会生成一个包含参数的 JSON 对象,您可以在相应的时机用它在代码中调用函数。


二、Function Call的作用


由于大模型的训练数据是有时间期限的,它不能联网也不了解最近发生的事情。所以,如果被问到它不了解的数据信息时,我们可以通过后台的函数调用,拿到后台的返回结果后再给到大模型进行回复。


三、Function Call的流程


具体流程如下图举例:



  1. 用户问大语言模型:斯德哥尔摩今天在下雨吗?

  2. 大模型检测到用户意图与后台API库中提供的某个功能函数服务相一致,于是通知后台你可以使用这个功能函数(比如我们叫天气函数)进行查询,同时把这个功能函数需要的参数以Json格式给到后台;

  3. 后台调用天气函数,将函数返回结果再给到大模型;

  4. 大模型根据用户提问和函数返回的结果给到用户回复。


四、大模型如何知道何时使用函数?


以下面这个函数举例:



这个函数的名字叫做“get_current_weather”,除了名称字段之外,下面还有一个描述字段“给定一个地点拿到目前的天气情况”。这个描述很重要,它让大模型与用户对话时,通过这个描述去匹配用户的意图,从而选择相匹配的函数。如果函数的描述不清楚,就会导致大模型无法准确匹配到用户的意图的函数。所以,目前就很清晰了,大模型通过函数的描述来判断是否匹配用户的意图的。


这个函数的最底部还有一个function call字段,当值为auto时符合以上的调用逻辑。除此之外,还有两个两个值:insert-function-name、none;


  • insert-function-name:当判断用户意图符合函数的描述时,无论大模型是否有能力做出回答,都调用此函数。(此处需要填充具体函数的名称)

  • none:无论任何情况下,都不调用此函数。









五、如何知道使用函数需要哪些信息





还是这个代码示例:我们看到有一个“parameters”字段,这个字段内有一个“properties”字段,这个字段里面就是函数需要的参数信息,我们看到这个例子里面只有一个参数,那就是location(地点),这个字段下面还有一个两个参数,其中一个参数是描述,这个描述指的是location这个参数的描述。


那么,这就比较清晰了,大模型通过函数中的参数描述来判断使用此函数需要的信息,这样在告知后台使用哪个函数时,同时也会把用户提供的信息转移成函数所需要的参数值以Json格式返回给后台。这样后台就可以拿着这些参数信息直接调用函数返回结果了。


同时,我们看到下方还有一个"required"字段,这个字段告知大模型必填字段是哪个。如果用户提供的信息加上大模型掌握的信息不能填满必填字段呢?那么大模型就不会让调用这个函数了。


六、连续Function Call的场景


假如用户问到“斯德哥尔摩比巴黎的天气更阳光吗?”。


这时候我们注意到只查询一次函数,并不能得到最终结果,这样我们如何处理呢?实际需要建立一个与大语言模型对话的循环,调用天气函数先查询斯德哥尔摩的天气,返回结果告诉大语言模型,然后再调用天气的函数查询巴黎的天气,然后返回结果再告诉大语言模型,最终大语言模型结合这些信息给到最终的回复。



那遇到这种需要多次调用函数的情况,我们何时知道哪个节点就不需要调用函数了呢?


在OpenAI的官方文档里有清晰的描述(如下):GPT的每个回复都会带一个finish_reason字段,当此字段为stop时,就意味着我们已经生成最终的结果了。



再多延伸一点,如果可以多次调用函数的话,我们可以做更多事情,比如:帮我把今天北京的天气编成一首七言绝句诗,同时将这首诗转成text格式保存到本地我的文档里。这实际是连续Function Call的另一种场景,就是一个任务下调用不同的函数,只要函数功能是现成的,那么就与多次重复调用同一函数的逻辑没什么区别。但是,有了这个思考,我们是不是就可以无限发散场景了?


七、Function Call的更多应用


如果要求大模型“列举出欧洲最大的的三个城市主要说什么语言,同时让大模型以Json的格式输出”,我们一般会怎么处理呢?我们当然可以直接用Prompt要求大模型直接给出结果,但是有可能它会输出这样的结果:



这不是最终我们想要的。我们可以想象一下,如果我们可以定义一个想要的输出结果的函数,然后利用Function Call的能力,最终输出我们想要的结果,是否可以更好的完成结果呢?函数定义如下:



最终生成的结果如下:



这个例子非常好的达到了我们的预期,同时让我们有更多的启发,对于更多的任务利用Function call的能力来实现也是非常具有想象空间的。




53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询