函数调用功能(function calling)
POST
https://api.minimax.chat/v1/text/chatcompletion_pro4.4.1 功能说明
该功能可触发调用用户自有函数(如客户自有的会议记录查询函数),得到自有函数的参考内容 ,辅助大模型生成结果。可以帮助模型获取用户希望模型获取的相应信息,以使得模型返回更符合用户个人实际情况的回复。特别是在一些需要基于客户自有信息知识的问题回答上,并且该构建了该信息知识的API,那么用户可以考虑使用function calling功能,使用场景示例如下:
- query:“在会议ID:12345的会议上,A同学有没有提到大模型如何应用的事情?”
- 用户自有函数:
- 函数功能:可基于会议ID和参会人检索原始的会议记录
- 参考内容:“会议号:12345,参会人:A同学,发言内容:我们要在MM智能助理app中全面拥抱大模型,将其强大的自然语言处理能力和广泛的应用场景深入融合到app的各个功能模块,充分发挥大模型所带来的技术优势,进一步提升用户体验,提高工作效率,为更多用户提供智能化、便捷化的服务。”
- 大模型生成结果:“A同学在会议ID:12345的会议上提到了大模型如何应用的事情。他说要在MM智能助理app中全面拥抱大模型,将其强大的自然语言处理能力和广泛的应用场景深入融合到app的各个功能模块,充分发挥大模型所带来的技术优势,进一步提升用户体验,提高工作效率,为更多用户提供智能化、便捷化的服务。”
以上,如果仅靠大模型来回答query时无法得到符合预期的回复,因此在这时就需要使用function calling功能。
4.4.2 请求体(request)参数
4.4.6 整体请求示例
import requests
import json
group_id="请填写您的group_id"
api_key="请填写您的api_key"
# 1. 定义自己的function实现
def mention_something(meeting_id:str,participants:str) -> str:
# 用户自主补充调用自由函数的具体代码,如从数据库中获取会议搜索记录,使用json返回格式给到参考内容让模型回复即可
return """
{
"status": "success",
"message": "以下是会议记录的查询结果:",
"data":
{
"meetingid": "12345",
"participants": "A同学",
"contents": "我们要在MM智能助理app中全面拥抱大模型,将其强大的自然语言处理能力和广泛的应用场景深入融合到app的各个功能模块,充分发挥大模型所带来的技术优势,进一步提升用户体验,提高工作效率,为更多用户提供智能化、便捷化的服务。",
}
}
"""
# 2. 使用functions选项调用ccp接口
url = f"https://api.minimax.chat/v1/text/chatcompletion_pro?GroupId={group_id}"
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
"bot_setting": [
{
"bot_name": "MM智能助理",
"content": "MM智能助理是一款由MiniMax自研的,没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司,一直致力于进行大模型相关的研究。",
}
],
"reply_constraints": {"sender_type": "BOT", "sender_name": "MM智能助理"},
"plugins": [],
"functions": [
{
"name": "mention_something",
"description": "搜索给定聊天记录,总结并返回相关结果",
"parameters": {
"type": "object",
"properties": {"meeting_id": {"type": "string", "description": "会议id"},
"participants": {"type": "string", "description": "参会人"}},
"required": ["meeting_id","participants"],
},
}
],
"sample_messages": [],
"messages": [
{"sender_type": "USER", "sender_name": "用户",
"text": "在会议ID:12345的会议上,A同学有没有提到大模型如何应用的事情?"}
],
"model": "abab5.5-chat",
"tokens_to_generate": 1000,
"temperature": 0.01,
"top_p": 0.95,
"stream": False,
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.text)
# 3. 解析ccp接口的响应,并调用自己的function
assert response.status_code == 200
json_resp = response.json()
assert json_resp["base_resp"]["status_code"] == 0
assert json_resp["function_call"]["name"] == "mention_something"
assert json_resp["function_call"]["arguments"] != ""
arguments = json.loads(json_resp["function_call"]["arguments"])
print(arguments)
func_resp = mention_something(arguments["meeting_id"],["participants"])
print(func_resp)
# 4. 将自己的function的响应结果返回给ccp接口得到回复
payload["messages"].extend(json_resp["choices"][0]["messages"])
payload["messages"].append(
{"sender_type": "FUNCTION", "sender_name": "MM智能助理", "text": func_resp}
)
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.text)
4.4.7 整体返回参考
{"created":1697458106,"model":"abab5.5-chat","reply":"","choices":[{"finish_reason":"stop","messages":[{"sender_type":"BOT","sender_name":"MM智能助理","text":"","function_call":{"name":"mention_something","arguments":"{\"meeting_id\": \"12345\", \"participants\": \"A同学\"}"}}]}],"usage":{"total_tokens":460,"tokens_with_added_plugin":0},"input_sensitive":false,"output_sensitive":false,"id":"017c5ab84c200e9ca72302bd3770ba6a","function_call":{"name":"mention_something","arguments":"{\"meeting_id\": \"12345\", \"participants\": \"A同学\"}"},"base_resp":{"status_code":0,"status_msg":""}}
{'meeting_id': '12345', 'participants': 'A同学'}
{
"status": "success",
"message": "以下是会议记录的查询结果:",
"data":
{
"meetingid": "12345",
"participants": "A同学",
"contents": "我们要在MM智能助理app中全面拥抱大模型,将其强大的自然语言处理能力和广泛的应用场景深入融合到app的各个功能模块,充分发挥大模型所带来的技术优势,进一步提升用户体验,提高工作效率,为更多用户提供智能化、便捷化的服务。",
}
}
200
{"created":1697458108,"model":"abab5.5-chat","reply":"A同学提到了大模型如何应用的事情,他说要在MM智能助理app中全面拥抱大模型,将其强大的自然语言处理能力和广泛的应用场景深入融合到app的各个功能模块,充分发挥大模型所带来的技术优势,进一步提升用户体验,提高工作效率,为更多用户提供智能化、便捷化的服务。","choices":[{"finish_reason":"stop","messages":[{"sender_type":"BOT","sender_name":"MM智能助理","text":"A同学提到了大模型如何应用的事情,他说要在MM智能助理app中全面拥抱大模型,将其强大的自然语言处理能力和广泛的应用场景深入融合到app的各个功能模块,充分发挥大模型所带来的技术优势,进一步提升用户体验,提高工作效率,为更多用户提供智能化、便捷化的服务。"}]}],"usage":{"total_tokens":880},"input_sensitive":false,"output_sensitive":false,"id":"017c5aba33ef6091c9510356aae8d42e","base_resp":{"status_code":0,"status_msg":""}}
请求参数
模型可以为其生成 JSON 输入的函数列表 支持多个函数,当出现多个函数时尽量将函数命名和描述区分开,如果2个函数在命名和功能说明上过于相似的话,会造成交叉调用的问题
需要满足 [a-zA-Z0-9-]{1,64} 格式并且不能以 plugin 开头 因为模型会根据query和函数命名以及功能说明匹配,所以函数命名一定要尽可能贴合query场景。上述使用场景示例中,函数命名可以定义为“mention_something”。
务必在说明里明确函数的功能,会作为模型是否调用function的参考 因为模型会根据query和函数命名以及功能说明匹配,所以函数功能说明一定要尽可能贴合query场景。上述使用场景示例中,函数功能说明可以定义为“当问到会议中提及事项时,用于根据会议号和发言人进行历史会议记录的检索”。
包括properties以及required,properties包括参数及每个参数的类型type和描述,required代表必须要返回的参数 对每个参数的命名和参数说明也需要描述精确,才能更好的生成。比如: "parameters": { "type": "object", "properties": { "meeting_id": { "type": "string", "description": "会议id" }, "participants": { "type": "string", "description": "参会人" } }, "required": [ "meetingid", "participants" ] }
指定 functions 的使用模式 支持多种函数调用模式,用户可选择自动、强制和none模式。
functions 使用模式,有三个枚举值可选: auto:模型自动选择使用哪个 function specific:用户指定使用哪个 function none:不使用 function,同时忽略 functions 字段的输入 auto模式是相对通用的功能,大模型会结合query和functions的定义自主判断是否给出function call返回; specific模式会在每次请求时,大模型都会强制给出function call返回,因此用户在注入自有function输出得到大模型生成结果时,一定要关闭该模式,否则会再次给出function call返回; none模式则是会让大模型忽略functions的定义,直面query进行回答。
{
"model": "abab5.5-chat",
"stream": false,
"messages": [
{
"sender_type": "USER",
"sender_name": "用户",
"text": "在会议ID:12345的会议上,A同学有没有提到大模型如何应用的事情?"
}
],
"bot_setting": [
{
"bot_name": "MM助手",
"content": "MM智能助理是MiniMax自主研发的大型语言模型,回答问题简洁有条理,没有调用其他产品接口。MiniMax是一家中国科技公司,致力于大模型相关的研究。"
}
],
"reply_constraints": {
"sender_type": "BOT",
"sender_name": "MM助手"
},
"functions": [
{
"name": "mention_something",
"description": "当问到会议中提及事项时,用于根据会议号和参会人进行历史会议记录的检索",
"parameters": {
"type": "object",
"properties": {
"meeting_id": {
"type": "string",
"description": "会议id"
},
"participants": {
"type": "string",
"description": "参会人"
}
},
"required": [
"meetingid",
"participants"
]
}
}
]
"function_call":{
"type":"auto"
},
}
示例代码
返回响应
根据query内容生成的functions接口name和arguments,functions为请求中定义的函数
function名称
调用该function时应传入的参数
{
"created": 1689748978,
"model": "abab5.5-chat",
"reply": "",
"choices": [
{
"finish_reason": "stop",
"messages": [
{
"sender_type": "BOT",
"sender_name": "MM助手",
"text": "",
"function_call": {
"name": "mention_something",
"arguments": "{\"meeting_id\": \"12345\",\"participants\": \"A同学\"}"
}
}
]
}
],
"usage": {
"total_tokens": 474,
"tokens_with_added_plugin": 0
},
"input_sensitive": false,
"output_sensitive": false,
"id": "0106b8ed7728402ccda8ee3832cfce81",
"function_call": {
"name": "mention_something",
"arguments": "{\"meeting_id\": \"12345\",\"participants\": \"A同学\"}"
},
"base_resp": {
"status_code": 0,
"status_msg": ""
}
}