Function Calling
一、Function Calling
1.1 Function Calling是什么
Function calling是可以让我们用自己的函数当作调用chatgpt的参数,在函数中我们可以做任何事情,例如获取网络上的数据,查询自己的数据库等。
1.2 为什么要有 Function Calling
ChatGPT是一个通用的大语言模型,当面对某些个性化的用户需求,比如“当前的天气情况”“某数据库的查询”“未来15天的天气预报”等,对于这些问题的解答,ChatGPT是无法回答的。其实Function Calling就是为了解决上述特定需求而产生的,当通用大语言模型完成上述的问题时,可以考虑借助外部的接口和服务,将它们看作大语言模型的基础接口使用就可以了。这样当用户需要询问当前天气时,ChatGPT自行考虑是否需要调用外部接口就可以了。
1.3 Function Calling 的机制
Function Calling 技术可以把大模型和业务系统连接,实现更丰富的功能。

Function Calling 完整的官方接口文档:https://platform.openai.com/docs/guides/function-calling
二、Function Calling使用
以下代码使用阿里通义千问大模型与使用ChatGPT差不多,文档:https://help.aliyun.com/zh/dashscope/developer-reference/api-details?spm=a2c4g.11186623.0.0.1b3e5f84Jrc9KM
示例 1:调用本地函数
需求:实现一个回答问题的 AI。题目中如果有加法,必须能精确计算。
1 | |
1 | |
示例 2:多 Function 调用
需求:查询某个地点附近的酒店、餐厅、景点等信息。即,查询某个 POI 附近的 POI。
1 | |
1 | |
示例 3:通过 Function Calling 查询数据库
需求:从订单表中查询各种信息,比如某个用户的订单数量、某个商品的销量、某个用户的消费总额等等。
1 | |
1 | |
示例 4:用 Function Calling 实现多表查询
把多表的描述给进去就好了。
1 | |
输出:
1 | |
示例 5:Stream 模式
Qwen流式(stream)输出默认每次输出为当前生成的整个序列,最后一次输出为最终全部生成结果(incremental_output设置为True时,将开启增量输出模式,后面输出不会包含已经输出的内容,您需要自行拼接整体输出,暂时无法和tools参数同时使用。)
ChatGPT流式(stream)输出不会一次返回完整 JSON 结构,所以需要拼接后再使用。
1 | |
1 | |
三、支持 Function Calling 的国产大模型
- 国产大模型基本都支持 Function Calling 了
百度文心大模型
官方文档:https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html
百度文心 ERNIE-Bot 系列大模型都支持 Function Calling,参数大体和 OpenAI 一致,支持 examples。
MiniMax
官方文档:https://api.minimax.chat/document/guides/chat-pro?id=64b79fa3e74cddc5215939f4
- 强的大模型,尤其角色扮演能力
- 应该是最早支持 Function Calling 的国产大模型
- V2 版 Function Calling 的 API 和 OpenAI 完全一样,但其它 API 有很大的特色
ChatGLM3-6B
官方文档:https://github.com/THUDM/ChatGLM3/tree/main/tools_using_demo
- 最著名的国产开源大模型,生态最好
- 早就使用
tools而不是function来做参数,其它和 OpenAI 1106 版之前完全一样
讯飞星火 3.0
官方文档:https://www.xfyun.cn/doc/spark/Web.html#_2-function-call%E8%AF%B4%E6%98%8E
和 OpenAI 1106 版之前完全一样
通义千问
官方文档:https://help.aliyun.com/zh/dashscope/developer-reference/api-details#86ef4d304bwsb
和 OpenAI 接口完全一样。
四、如何尽量减少幻觉的影响,参考以下资料:
- 自然语言生成中关于幻觉研究的综述:https://arxiv.org/abs/2202.03629
- 语言模型出现的幻觉是如何滚雪球的:https://arxiv.org/abs/2305.13534
- ChatGPT 在推理、幻觉和交互性上的评估:https://arxiv.org/abs/2302.04023
- 对比学习减少对话中的幻觉:https://arxiv.org/abs/2212.10400
- 自洽性提高了语言模型的思维链推理能力:https://arxiv.org/abs/2203.11171
- 生成式大型语言模型的黑盒幻觉检测:https://arxiv.org/abs/2303.08896