目前主流的大语言模型都支持函数调用(Function Calling)功能,比如 gpt-4o-mini
,claude-4-0-sonnet
,deepseek-chat
, gpt-5-nano
等。 GeekAI 也支持用户在管理后台添加自己的函数插件和实现。本文主要介绍如何添加一个函数,以及实现一个完整的函数调用。
添加函数
参数说明
下面我们具体解释下参数怎么填写。函数名称,函数描述就不用说了,意思很明显。
函数标签: 当前函数被调用的时候,前端页面显示的名称,比如下面这个:
函数参数: 代表你这个函数要调用的需要传入哪些参数,GPT 会自动从用户输入的提示词中提取参数你所需要的函数参数,比如你定义一个获取天气的函数
get_weather
,并且你定义了 2 个参数, "时间"和"地点"。那么当用户输入"今天深圳的天气怎样?",GPT 会自动从提问当中提取"今天"和"深圳"这 2 个参数作为你函数的调用入参。API 地址: 为了方便大家扩展,我们这里设置都是远程函数,API 具体调用的时候是通过 JSONRPC 的方式调用。因此你需要填写你 API 调用的远程地址。
API Token: 这个是在 RPC 调用的时候授权用的。这个 Token 参数会通过
Authorization
头信息传递到你的函数实现的 API 地址。如果你的服务端没有做鉴权(不推荐),那么可以不填。消耗算力: 调用这个函数需要消耗多少算力,这个算力值会从用户的算力余额中扣除。
因为我们的微博热搜
,今日早报
,以及 Dalle3
的函数服务是内置的,也就是说是就是 GeekAI 内部实现的,故而可以通过本系统一键生成。但如果你的函数是另一个系统实现,那么你就需要在那个系统生成一个 Token 填入此处。
举例
假设你用 PHP 写了一个抓取网页的函数,给 GPT 扩展上网的功能,那么此时 API 地址就要填写那个 PHP 系统的 API 地址,Token 也要通过那个 PHP 系统生成。
GPT 函数调用的官方文档在这里:https://openai.com/blog/function-calling-and-other-api-updates
注意:
我们这个实现跟官方的推荐实现方式有区别,我们没有进行第三步把 API 返回的数据在提交给 GPT 调用重组, 默认函数返回什么我们就把返回内容直接显示在前端聊天记录中了,所以你的 API 函数实现端需要组装好内容再返回过来,而不是返回结构化的数据。你可以返回纯文本和 Markdown 以及 HTML 代码。
错误处理
一、调用函数出现 Token 签名错误
在调用微博热搜,dalle3 绘图函数的时候报类似下面的错误:
error with parse auth token: token signature is invalid: signature is invalid
这是因为导入数据库中的函数调用 token 是我本地生成的,本地的密钥跟你线上的密钥肯定不一样的,所以你需要在管理后台重新生成函数的 token。
你只需到管理后台 => "编辑函数",然后重新生成 Token 就好了。
二、配置好了函数,但是对话的时候没有调用
检查你选择的模型是否支持函数调用功能,目前只有
gpt-4o-mini
,claude-4-0-sonnet
,deepseek-chat
,gpt-5-nano
等模型支持函数调用功能。有些开源的小模型,已经推理模型比如 DeepSeek-R1 这些模型都不支持函数调用功能。检查你在发送对话的时候是否勾选了 "函数调用" 选项。比如你想要调用“微博热搜”函数,那么你就要在发送对话的时候勾选“微博热搜”选项。也可以全部勾选,让模型自己决定调用哪些函数。