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

从程序员到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))

7 参考资料

  1. OpenAI的多函数调用(Multiple Function Calling)简介
  2. OpenAI API
相关推荐
Coovally AI模型快速验证6 分钟前
IDEA研究院发布Rex-Omni:3B参数MLLM重塑目标检测,零样本性能超越DINO
人工智能·深度学习·yolo·目标检测·计算机视觉·目标跟踪
Voyager_41 小时前
算法学习记录03——二叉树学习笔记:从两道题看透后序位置的关键作用
笔记·学习·算法
文火冰糖的硅基工坊1 小时前
[人工智能-大模型-19]:GitHub Copilot:程序员的 AI 编程副驾驶
人工智能·github·copilot
我先去打把游戏先3 小时前
ESP32学习笔记(基于IDF):ESP32连接MQTT服务器
服务器·笔记·单片机·嵌入式硬件·学习·esp32
shuououo3 小时前
YOLOv4 核心内容笔记
人工智能·计算机视觉·目标跟踪
DO_Community7 小时前
普通服务器都能跑:深入了解 Qwen3-Next-80B-A3B-Instruct
人工智能·开源·llm·大语言模型·qwen
WWZZ20257 小时前
快速上手大模型:机器学习3(多元线性回归及梯度、向量化、正规方程)
人工智能·算法·机器学习·机器人·slam·具身感知
deephub7 小时前
深入BERT内核:用数学解密掩码语言模型的工作原理
人工智能·深度学习·语言模型·bert·transformer
PKNLP7 小时前
BERT系列模型
人工智能·深度学习·bert
四谎真好看8 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记