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
相关推荐
不加辣椒1 小时前
第7章 边界与约束技术:确保输出的准确性与安全性
人工智能
AI悦创Python辅导1 小时前
Claude Code 越用越乱?Sub-Agents 才是上下文污染的解法
人工智能
Bigfish_coding2 小时前
前端转agent-【python】-07 长期记忆进阶:用 ChromaDB + 语义搜索给 Agent 装上真正的长期记忆
人工智能
阿黎梨梨2 小时前
AI Loop:告别“人肉写提示词”,让代码替你“鞭策”AI
javascript·人工智能
甲维斯3 小时前
坦克大战测试全翻车了!豆包,DeepSeek,Qwen,GPT,Claude
前端·人工智能·游戏开发
若丶相见3 小时前
AI 大模型零基础知识扫盲
人工智能
猿人谷4 小时前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
说了很好5 小时前
PyTorch从零搭建DDPM:时间嵌入+UNet网络+扩散调度完整复现
人工智能
Bigfish_coding5 小时前
前端转agent-【python】-06 长期记忆(向量数据库 + 嵌入)
人工智能
小林ixn5 小时前
别再手写Prompt了!用AI Loop实现自动化自我迭代,效率提升10倍
人工智能·自动化运维