本文测试了gpt的function call功能,具体的使用示例和效果如下:
## 定义计算平方的函数
def calculator_square(num):
num =float(num)
return num**2
## 定义计算绝对值的函数
def calculator_abs(num):
num =float(num)
return abs(num)
## 配置函数描述(类似JSON化的API描述)
functions = [
{
"name": "calculator_square",
"description": "Calculate the square of a number",
"parameters":{
"type": "object",
"properties":{
"num":{
"type": "string",
"description":"the input number",
},
},
"required": ["num"],
}
},
{
"name": "calculator_abs",
"description": "Calculate the absolute value of a number",
"parameters":{
"type": "object",
"properties":{
"num":{
"type": "string",
"description":"the input number",
},
},
"required": ["num"],
}
}
]
function_mapping = {"calculator_square": calculator_square,
"calculator_abs": calculator_abs}
query = "计算1.4的两倍是多少"
messages = [
{"role": "system", "content": "你是一可以执行各种复杂计算的计算器"},
{"role": "user", "content": query},
]
chat_completion = GPT4o_CLIENT.chat.completions.create(
messages=messages,
model="gpt4o",
functions = functions
)
response = chat_completion.choices[0].message.dict()
print(response)
### {'content': '1.4的两倍是2.8。', 'role': 'assistant', 'function_call': None, 'tool_calls': None}
print(response)
if response["function_call"] is not None:
func_name = response["function_call"]["name"]
func_args = response["function_call"]["arguments"]
func_args = json.loads(func_args)
print(func_name)
print(func_args)
func_res = function_mapping[func_name](**func_args)
print("res:",func_res)
对应结果:
query | response |
计算1.4的两倍是多少 | {'content': '1.4的两倍是2.8。', 'role': 'assistant', 'function_call': None, 'tool_calls': None} |
计算1.4的平方是多少 | {'content': None, 'role': 'assistant', 'function_call': {'arguments': '{"num":"1.4"}', 'name': 'calculator_square'}, 'tool_calls': None} |
计算1.4的绝对值是多少 | {'content': None, 'role': 'assistant', 'function_call': {'arguments': '{"num":"1.4"}', 'name': 'calculator_abs'}, 'tool_calls': None} |
GPT4o效果不错,换成GPT-3.5时,“计算1.4的两倍是多少”问题会调用calculator_abs,出现错误({'content': None, 'role': 'assistant', 'function_call': {'arguments': '{"num":"1.4"}', 'name': 'calculator_abs'}, 'tool_calls': None})。