从程序员到ai Expert
- [1 设定目标](#1 设定目标)
- [2 自定义function,3个](#2 自定义function,3个)
- [3 接口。自定义function--->ChatGPT](#3 接口。自定义function--->ChatGPT)
- [4 define function to call ChatGPT](#4 define function to call ChatGPT)
- [5 发起首次请求,告诉gpt要做什么,已经有哪些函数可以调动](#5 发起首次请求,告诉gpt要做什么,已经有哪些函数可以调动)
- [6 大结局](#6 大结局)
- [7 参考资料](#7 参考资料)
上一篇解决了调用一个函数的问题。这一篇扩展为调用3个。n个自行脑补。
1 设定目标
python
#1.设定目标
what_i_want_to_know = [{"role": "user", "content": f"汇总3个function的aiXpert的结果"}]
2 自定义function,3个
python
#2.自定义function,3个
def search_baidu(keyword):
return f"{keyword}是一个技术博主"
def search_google(keyword):
return f"{keyword}是一个后端工程师"
def search_bing(keyword):
return f"{keyword}是一个Python爱好者"
3 接口。自定义function--->ChatGPT
采用Tool的标准写法:
python
tools = [
{
"type": "function",
"function": {
"name": "search_baidu",
"parameters": {
"type": "object",
"properties": {
"keyword": {
"type": "string",
}
},
"required": ["keyword"],
},
}
},
{
"type": "function",
"function": {
"name": "search_google",
"parameters": {
"type": "object",
"properties": {
"keyword": {
"type": "string",
}
},
"required": ["keyword"],
},
}
},
{
"type": "function",
"function": {
"name": "search_bing",
"parameters": {
"type": "object",
"properties": {
"keyword": {
"type": "string",
}
},
"required": ["keyword"],
},
}
}
]
available_functions = { "search_baidu": search_baidu, "search_google": search_google, "search_bing": search_bing }
4 define function to call ChatGPT
python
def run_chat(messages):
response = openai.chat.completions.create(
model ="gpt-3.5-turbo-1106",
messages=messages,
tools =tools,
tool_choice="auto",
)
return response.choices[0].message
5 发起首次请求,告诉gpt要做什么,已经有哪些函数可以调动
python
first_response = run_chat(what_i_want_to_know)
tool_calls = first_response.tool_calls
6 大结局
python
# 检查是否需要调用函数
if tool_calls:
# 解析所有需要调用的函数及参数
what_i_want_to_know.append(first_response) # 注意这里要将openai的回复也拼接到消息列表里
# 将所有函数调用的结果拼接到消息列表里
for tool_call in tool_calls:
function_name = tool_call.function.name
function_to_call = available_functions[function_name]
function_args = json.loads(tool_call.function.arguments)
function_response = function_to_call(**function_args)
what_i_want_to_know.append(
{
"tool_call_id": tool_call.id,
"role": "tool",
"name": function_name,
"content": function_response,
}
)
print(run_chat(what_i_want_to_know))