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
相关推荐
sp_fyf_20242 分钟前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-05
人工智能·深度学习·神经网络·算法·机器学习·语言模型·自然语言处理
EterNity_TiMe_2 分钟前
【机器学习】智驭未来:探索机器学习在食品生产中的革新之路
人工智能·python·机器学习·性能优化·学习方法
知来者逆3 分钟前
探索大型语言模型在文化常识方面的理解能力与局限性
人工智能·gpt·深度学习·语言模型·自然语言处理·chatgpt·llm
alfiy9 分钟前
Elasticsearch学习笔记(六)使用集群令牌将新加点加入集群
笔记·学习·elasticsearch
爱学的小涛19 分钟前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
爱学的小涛21 分钟前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
Python极客之家40 分钟前
基于深度学习的乳腺癌分类识别与诊断系统
人工智能·深度学习·分类
JavaGPT1 小时前
prometheus学习笔记之PromQL
笔记·学习·prometheus
mftang1 小时前
TMR传感器的实现原理和特性介绍
人工智能
害羞的白菜1 小时前
Nginx基础详解5(nginx集群、四七层的负载均衡、Jmeter工具的使用、实验验证集群的性能与单节点的性能)
linux·运维·笔记·jmeter·nginx·centos·负载均衡