在使用openai 调用 tools 的时候,会报错:
openai.BadRequestError: Error code: 400 -
{'error': {'code': 'invalid_parameter_error', 'param': None, 'message': 'messages with role "tool" must be a response to a preceeding message with "tool_calls".', 'type': 'invalid_request_error'},
输入的messages 类似下面,“tool” role 直接在 “user” 之后,而没有 “tool_calls”。
[{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '海淀区天气怎么样'},
{'role': 'tool', 'name': 'get_current_weather', 'content': '北京市海淀区--sunny--28'},
{'role': 'user', 'content': '朝阳区天气怎么样'}]
DEBUG
messages 中应该append openai接口返回的message,也就是 tool_calls 信息, 然后再加上 “tool”返回的message。这样就能连续提问了。
# messages
[{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '海淀区天气怎么样'},
#接口返回message
{'content': '', 'role': 'assistant', 'function_call': None, 'tool_calls': [{'id': 'call_d55670dfg34567a4', 'function': {'arguments': '{"location": "北京市海淀区", "format": "celsius"}', 'name': 'get_current_weather'}, 'type': 'function', 'index': 0}]},
#调用tool结果
{'role': 'tool', 'name': 'get_current_weather', 'content': '北京市海淀区--sunny--28'},
#继续提问
{'role': 'user', 'content': '朝阳区呢'},
#接口返回message
{'content': '', 'role': 'assistant', 'function_call': None, 'tool_calls': [{'id': 'call_9f623dfh56ga80e', 'function': {'arguments': '{"location": "北京市朝阳区", "format": "celsius"}', 'name': 'get_current_weather'}, 'type': 'function', 'index': 0}]},
#调用tool结果
{'role': 'tool', 'name': 'get_current_weather', 'content': '北京市朝阳区--sunny--28'}]