实现 Function Call 主要有以下几种方式和要点:
此外,OpenAI 发布函数调用及其他 API 更新,开发人员可向 gpt-4-0613 和 gpt-3.5-turbo-0613 描述函数,让模型智能输出包含调用函数所需参数的 JSON 对象,这是连接 GPT 能力与外部工具和 API 的新方法。例如在本地写函数执行查询,根据 GPT 返回的函数名和参数来操作,也可将函数改为更灵活的 SQL 查询。在实际业务中,可根据需求选择函数查询或 SQL 查询。另外,LangChain 内置的 openapi-function call 也可用于相关开发,实际业务中可能需结合内置业务流程,如判断用户问题是否相关、引导式提问等。
上面讲到了4种实现Function Calling的方式:Json Output:通过Prompt的方式让模型输出JSON格式内容优劣势:Prompt麻烦,输出不稳定,串业务成本高Json Mode:官方Josn Output,1106与Tools同期推出优劣势:JSON格式稳定,但实际上它与Tools的适用场景是不同的,JSON mode是为了输出JSON存在的,而Tools是为了Call API存在的Function Calling和Tools就不再赘述但是从可控的角度来说,还是会推荐Function Calling和Tools来实现。1、放弃JSON mode:随着模型能力提升,模型能够准确地输出JSON,但是它还是会出错,不能保证100%正确;模型厂家对Function Calling是有微调优化的,也有说法是专门的MOE专家,但是无从验证;2、降低System prompt依赖,化繁为简S yste m prompt里面写的东西太多了,你不能保证模型能很好地遵循它;能在Tools里面去写的东西,尽量写在Tools里面3、API Response增强Prompt:其实所有输入给模型的内容,都可以算作是Pormpt。同理,Tools调用的结果也就是API Response也会被返回给到模型。可以在这一步增加一些给大模型的约束和提示,这里的准确率非常高,毛估估95%以上。4、尽量让模型做选择,而不是填空把确定的答案做成选项给到模型,比如用Enum的方式。一方面减少token的输出,提高速度;另一方面,准确率高5、利用Tools来做Route,构建Multi Agent一个不行就上两,两个不行就上四。术业有专攻,Agent的世界也一样。
可以发现为了让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查询,值得一试![heading2]SQL分析示例[content]注:以下SQL分析的数据均是在数据库中伪造的数据,仅供测试。分析每种图表的使用情况分析图表类型是柱状图的创建时间和数量
运行LLM的代理。我们需要运行LLM的代理,让用户可以与之进行交互,将LLM的代理部署到不同的平台和渠道,例如Web、微信、Telegram等,并提供统一的接口和方法,让用户可以方便地与LLM的代理进行交互。餐饮生活助手本文直接通过Langchain内置的openapi-function call来实现,代码仅作为演示,实际业务情况可能得结合代码内置业务流程来实现。比如通过function call解析用户问题之前还需要判断用户的问题是否与餐厅咨询相关,当解析到的查询维度太少时,需要引导式提问等等。