Function Calling 是一种将大语言模型(如 ChatGPT)的能力与外部工具和 API 连接起来的新方法。
在 OpenAI 的 0613 版本中更新了此功能。开发人员可以向 gpt-4-0613 和 gpt-3.5-turbo-0613 描述函数,让模型智能地选择输出一个包含调用这些函数所需参数的 JSON 对象。
Function Calling 到来之前,使用 Json Output 存在诸多缺陷,如 JSON 格式非常标准,输出一个错的 token 就会异常;模型上下文短;模型难以在单个请求里完成多个复杂任务;大模型废话多;工程化复杂且维护成本高等。
Function Calling 实现的方式大大降低了所有 LLMs 应用开发的难度,例如降低了 Prompt 维护成本,实现了 System Prompt 和 Function 解耦。本地可以写函数执行特定操作,如 this.app.mysql.select(table,condition),也可以根据 GPT 返回的函数名和参数来查询数据,还可以将函数改为 SQL 查询 this.app.mysql.query(sql),使操作更为灵活。
可以发现为了让ChatGPT返回符合要求的JSON格式,prompt的定制就尤为重要和复杂。好消息是,在当地时间6月13日,OpenAI发布函数调用及其他API更新。现在开发人员可以向gpt-4-0613和gpt-3.5-turbo-0613描述函数,并让模型智能地选择输出一个包含调用这些函数所需参数的JSON对象。这是一种更可靠地将GPT的能力与外部工具和API连接起来的新方法。传送门:[Function calling and other API updates](https://openai.com/blog/function-calling-and-other-api-updates)官网有很详细的例子,这里就不再描述代码了。我用本文案例总结大致流程:有个好处是不需要让ChatGPT生成SQL了,减少SQL注入的风险。本地写一个函数执行this.app.mysql.select(table,condition),根据GPT返回的函数名、参数(字段和where)来查询数据,更为安全。但这个方法又有局限性,事先定义函数查询不如SQL查询来的灵活,所以这里也可以让函数改为SQL查询this.app.mysql.query(sql),GPT的函数调用改为:getSqlQuery(sql:string),函数名getSqlQuery,参数:sql,更为灵活。总结:让GPT与函数调用结合,本地控制返回JSON格式,prompt的定制更为简单,AI的输出更为可控。根据实际业务需求采用函数查询或SQL查询,值得一试!
在OpenAI的Function Calling到来之前,其实很多人都意识到了需要这样一个东西,因为Action是Agent不可或缺的一环。但那会OpenAI还在很努力地做自己的Plugin商店(后来死了),国内模型厂家还在起名字。有些大神也通过这种方式在做一些牛逼的实现Langchain早期Agent的实现,以及它的Output parse;AutoGPT的爆火,Planning & Execute的实现以及后面的Baby AGI;….还有很多但是Json Output天然存在很多缺陷:1、JSON的格式其实是非常标准的,但凡输出一个错的token,就异常了;2、那会模型的上下文还很短,整个窗口才4096,GPT-4是8K和32K,但是太贵啊;3、模型其实是很难在单个请求里去完成多个复杂任务的,即使到今天也很难;4、大模型真的废话很多,你必须不断强调:“不要讲废话”;5、工程化复杂,维护成本高…..还有一箩筐理由下面这个图是AutoGPT当时的Prompt,这句话必不可少在OpenAI的0613版本中,更新了Function Calling的功能。那天晚上,我激动地一晚上没睡,连夜改需求,优雅,实在是太优雅了。Function Calling实现的方式,让所有LLMs应用开发的难度大大降低:1、Prompt维护成本降低,System Prompt和Function解耦;
在OpenAI的Function Calling到来之前,其实很多人都意识到了需要这样一个东西,因为Action是Agent不可或缺的一环。但那会OpenAI还在很努力地做自己的Plugin商店(后来死了),国内模型厂家还在起名字。有些大神也通过这种方式在做一些牛逼的实现Langchain早期Agent的实现,以及它的Output parse;AutoGPT的爆火,Planning & Execute的实现以及后面的Baby AGI;….还有很多但是Json Output天然存在很多缺陷:1、JSON的格式其实是非常标准的,但凡输出一个错的token,就异常了;2、那会模型的上下文还很短,整个窗口才4096,GPT-4是8K和32K,但是太贵啊;3、模型其实是很难在单个请求里去完成多个复杂任务的,即使到今天也很难;4、大模型真的废话很多,你必须不断强调:“不要讲废话”;5、工程化复杂,维护成本高…..还有一箩筐理由下面这个图是AutoGPT当时的Prompt,这句话必不可少在OpenAI的0613版本中,更新了Function Calling的功能。那天晚上,我激动地一晚上没睡,连夜改需求,优雅,实在是太优雅了。Function Calling实现的方式,让所有LLMs应用开发的难度大大降低:1、Prompt维护成本降低,System Prompt和Function解耦;