Funcall功能使用最佳实践
本文将说明如何使用Function Calling的功能
一、Function Calling功能介绍
1、基础功能
Function Calling(函数调用),大模型不直接输出内容进行播报,而是让 AI「学会调用自定义的工具」。具体实现以下基础功能:
- 对用户问题的分析进行意图识别命中预定义函数
- 按需提取函数自定义参数
- 生成待补全参数的提示语引导用户进行多轮补全
- 必要参数补全完毕后回调给用户侧(回调给用户的方式有SDK、API方式)完成当前函数服务端的调用行为
- 被调方可以通过应答执行一些操作(支持指定消息的播报、执行query+prompt的模型处理播报、音乐播放等)
- 新版本v2功能支持同一函数会话期间(多次补全和提示)和闲聊插话、当前函数话题拉回等能力
1 基础功能示例:
2
3 用户:帮我订张机票。
4 助手:好的,请问您想从哪个城市出发呢?
5
6 用户:北京
7 助手:好的,那您打算去哪个城市呢?
8
9 用户:上海
10 助手:好的,那出发日期是今天还是明天呢?
11
12 用户:后天
13 助手:[F]:{"session_id":"1794387448882","content":"{\"function_name\":\"flight\",\"parameter_list\":[{\"date\":\"2026-11-13\"},{\"arrival_city\":\"上海\"},{\"departure_city\":\"北京\"}]}","query":"帮我订张机票。"}
2、扩展功能
- 快速匹配短语功能
- 支持函数级别开启确认机制
- 支持函数开启定时执行
- HTTP回调方式支持透传参数
- 函数中支持使用动态变量功能进行参数动态替换
- 函数中支持使用rag执行器功能进行执行中参数替换
- 函数中支持使用http执行器功能进行执行中参数替换
二、Function Calling的使用流程
1、控制台配置Function基础功能
控制台配置Function页面使用指南:模版&模版内函数填写
注意:控制台配置funcall时请参考Function撰写最佳实践来规范函数模版中函数用途、函数数量以及函数内相关配置项(函数定义、函数描述、函数例句、参数定义、参数描述、提取示例等)。函数功能的合理的使用才能提高意图命中率、参数提取成功率、tips提示准确率等。
2、扩展功能的配置&使用
2.1 快速匹配短语功能
当匹配所配置的短语时,将直接命中该Function,无需大模型做意图判断,节省了意图阶段的时间。

2.2 支持函数级别开启确认机制
通过控制台开启/关闭确认功能,将在必要参数提取完毕进行确认反问,待用户进一步确认后执行

1开启后的例子:
2
3用户:“给我订一张明天下午四点上海去北京的机票”
4
5模型:“将为您订一下2026年5月9日16:00,出发地为上海,目的地为北京的机票,请问确认吗?“
6
7用户:”确认“
8
9模型:[F]:{"session_id":"1778240977638","content":"{"function_name":"book_flight","parameter_list":[{"date":"2026-05-09"},{"time":"16:00"},{"departure":"上海"},{"destination":"北京"}]}","query":"给我订一张明天下午四点上海去北京的机票"}
2.3 支持函数开启定时执行
开启了定时执行,会使用类似云端定时任务的能力进行定时触发

2.4 HTTP回调方式支持透传参数
支持用户实例级别将参数透传给funcall通过http回调给用户业务后端(如:透传鉴权参数实现接口鉴权),具体使用方式参考 function http回调中支持透传参数
function calling中常使用的透传参数场景有:
-
实现接口鉴权:直接透传鉴权参数
- 大模型互动服务侧无需根据用户回调接口实现具体的鉴权逻辑
- 需要用户通过透传参数方式在创建互动实例时设置实例级别鉴权参数(例如通过headerMap传入Authorization=Bearer xxx)
-
实现用户业务流程:透传设备、用户标识
- function执行http回调用户业务后端时,业务侧可能依赖设备、C端用户的ID进行业务处理
2.5 函数中支持使用动态变量功能进行参数动态替换
函数相关内容描述中如果有实例级别的变量进行设置可以使用此功能,具体使用方式参考 function中使用动态变量
2.6 函数中支持使用rag执行器功能进行执行中参数替换
同上文动态变量的功能,函数相关内容描述中也支持rag执行器进行变量的设置,具体使用方式参考 function中使用rag执行器
2.7 函数中支持使用http执行器功能进行执行中参数替换
同上文动态变量的功能,函数相关内容描述中也支持http执行器进行变量的设置,具体使用方式参考 function中使用http执行器
3、function回调方式&格式
function在经过一轮或者多轮的交互必要参数提取完毕后,会以sdk或者http的方式进行通知回调,回调给sdk、http接口的核心数据结构是相同的,不同接入方式可能做了对应的封装,请以指定接入方式为主,当前只描述下核心数据包含参数如下:
| 参数名 | 参数描述 | 参数类型 | 备注 |
|---|---|---|---|
| session_id | 当前函数会话ID | String | 某函数在正式回调前一直持有相同的session_id |
| instance_id | 当前互动实例ID | Long | |
| content | 包含函数相关参数序列化为字符串后的值,实际使用的时候可能需要进行反序列化(以实际接入sdk中实现为主) | String | |
| query | 意图进入当前function时的原始问题 | String |
| 参数名 | 参数描述 | 参数类型 | 备注 |
|---|---|---|---|
| function_name | 当前函数名称 | String | |
| parameter_list | 当前函数提取参数列表 | List<Entry<String, Object>> |
SDK回调
- 各个端SDK封装了对应的接口,以android为例参考
- client通过websocket接入时使用原始的信令通过转发以[F]:为前缀的事件,回调格式如下:
1[F]:{"session_id":"1699999999999","content":"{\"function_name\":\"query_weather\",\"parameter_list\":[{\"city\":\"北京\"}]}","query":"北京天气怎么样"}
HTTP回调
function配置了HTTP回调方式后,agent服务端会使用post方式调用用户配置的业务侧接口,接口请求体为:
1{
2 "app_id": "appxxxx",
3 "instance_id": 123456,
4 "session_id": "1699999999999",
5 "content": "{\"function_name\":\"query_weather\",\"parameter_list\":[{\"city\":\"北京\"}]}",
6 "query": "北京天气怎么样"
7}
注意:业务侧实现接口注意接口的耗时,要求尽快返回,大模型互动服务作为http client会有基础的请求超时机制
4、function回调应答
- 一般情况下,function执行sdk/http方式的回调后,需要对应端进行响应才能标记当前function calling session完毕,进入结束状态。
- 我们也在回调应答中提供了后处理的方式,支持函数执行后再执行固定文本播报、音乐播放、文本送入模型处理等方式
sdk、http接口对agent回调的应答核心数据结构是相同的,不同接入方式可能做了对应的封装,请以指定接入方式为主,当前只描述下核心数据包含参数如下:
| 参数名 | 参数描述 | 参数类型 | 是否必须 |
|---|---|---|---|
| session_id | 当前函数会话ID | String | 是 |
| result | 回调成功标记,成功为ok | String | 是 |
| post_function | 自定义函数回调应答后处理 | List | 否 |
| +type | 播报类型,目前支持: text:固定文本TTS播报 prompt:文本送入模型, 并由模型生成回复内容并播报 play_music:文本送音乐模块、并触发相关音乐播放 | String | 是 |
| +content | 固定播报文本,type为text时使用 | String | 否 |
| +query | 待处理文本。type为prompt时,文本送入大模型,由模型生成回复并播报;type为play_music时,文本作为音乐检索/指令送入音乐模块,触发相应音乐播放。 | String | 否 |
| +enableMusicPadTts | 是否启用音乐垫句TTS(播放音乐前先用TTS说一句过渡语)。当play_music与text、prompt组合使用时,需设置为false。 | Boolean | 否 |
- 各个端SDK封装了对应的接口,以android为例参考
- client通过websocket接入时使用原始的信令通过转发以[F]:为前缀的事件,回调格式如下:
1[F]:{"session_id":"1754555833139","result":"ok","post_function":[{"type":"text","content":"祝你生日快乐"},{"type":"play_music","query":"播放生日快乐歌","enableMusicPadTts":false}]}
2
3[F]:{"session_id":"1754555833139","result":"ok","post_function":[{"type":"prompt","query":"祝你生日快乐"}]}
评价此篇文章
