赞
踩
Function Calling 完整的官方接口文档:https://platform.openai.com/docs/guides/function-calling
接口里的 tools
,最初版本叫 functions
。
# 定义function def get_completion(messages, model="gpt-3.5-turbo"): response = client.chat.completions.create( model=model, messages=messages, temperature=0, # 模型输出的随机性,0 表示随机性最小 tools=[{ # 用 JSON 描述函数。可以定义多个。由大模型决定调用谁。也可能都不调用 "type": "function", "function": { "name": "sum", "description": "只能用来计算加法,计算一组数的和", "parameters": { "type": "object", "properties": { "numbers": { "type": "array", "items": { "type": "number" } } } } } }], ) return response.choices[0].message
方法中的get_completion方法可以查看之前的文章prompt工程那篇
#prompt = "Tell me the sum of 1, 2, 3, 4, 5, 6, 7, 8, 9, 10." prompt = "桌上有 2 个苹果,四个桃子和 3 本书,一共有几个水果?" #prompt = "1+2+3...+99+100" #prompt = "1024 乘以 1024 是多少?" # Tools 里没有定义乘法,会怎样? #prompt = "太阳从哪边升起?" # 不需要算加法,会怎样? messages = [ {"role": "system", "content": "你是一个数学家"}, {"role": "user", "content": prompt} ] response = get_completion(messages) # 把大模型的回复加入到对话历史中 messages.append(response) print("=====GPT回复=====") print_json(response) # 如果返回的是函数调用结果,则打印出来 if (response.tool_calls is not None): # 是否要调用 sum tool_call = response.tool_calls[0] if (tool_call.function.name == "sum"): # 调用 sum args = json.loads(tool_call.function.arguments) result = sum(args["numbers"]) print("=====函数返回=====") print(result) # 把函数调用结果加入到对话历史中 messages.append( { "tool_call_id": tool_call.id, # 用于标识函数调用的 ID "role": "tool", "name": "sum", "content": str(result) # 数值 result 必须转成字符串 } ) # 再次调用大模型 print("=====最终回复=====") print(get_completion(messages).content)
发现问题:
大家可以试一下问他1024乘以1024等于多次,会发现OpenAI将乘以也识别成了sum的函数,得出的结果是2048。我尝试了很多种prompt,都没能解决这个问题。最终我又创建了一个tools用来计算乘法,这时候OpenAI就能识别乘法了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。