OpenAI ChatGPT-4开发笔记2024-04:Chat之Tool之2:multiple functions


上一篇解决了调用一个函数的问题。这一篇扩展为调用3个。n个自行脑补。

1 定义参数和函数

#1.设定目标
import json
import openai

#1.定义parameters for text completion
ai_prompt = [
    {
        "role": "user", 
        "content": f"汇总3个function的aiXpert的结果"
    }
]

#2.定义self-function,3个
def search_baidu(keyword):
    return f"{keyword}是一个技术博主"

def search_google(keyword):
    return f"{keyword}很牛"

def search_bing(keyword):
    return f"{keyword}喜欢水鱼"

#3.设置参数
ai_function = [
    {
        "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 
def chat_completions(parameter_message):
    response = openai.chat.completions.create(
        model   ="gpt-3.5-turbo-1106",
        messages=parameter_message,
        tools   =ai_function,
        tool_choice="auto", 
    )
    return response.choices[0].message

2 第一轮chatgpt

#5.发起首次请求,告诉gpt要做什么,已经有哪些函数可以调动
first_response = chat_completions(ai_prompt)
tool_calls = first_response.tool_calls

3 第一轮结果和function定义全部加入prompt再喂给chatgpt

# 第一轮chat completions的结果加入prompt,再把function参数加入prompt,然后一起喂给chatgpt

if tool_calls:
    ai_prompt.append(first_response)  # 第一轮chat completions的结果加入prompt,
    # 将所有函数调用的结果拼接到消息列表里
    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)
        ai_prompt.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "name": function_name,
                "content": function_response,
            }
        ) 
    print(chat_completions(ai_prompt))

4 大结局

ChatCompletionMessage(
	content='根据三个搜索引擎的结果,
	"AIxPert" 是一个技术博主,非常牛,也喜欢水鱼。', 
	role='assistant', 
	function_call=None, 
	tool_calls=None)

在这里插入图片描述

7 参考资料

  1. OpenAI的多函数调用(Multiple Function Calling)简介
  2. OpenAI API
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值