五、OpenAi之函数调用(Function Calling)(二)

本文介绍了如何在聊天补全模型中使用工具参数调用预定义的函数,如获取天气和数据库信息,以及如何结合GPT-3.5-turboAPI与SQLite数据库执行SQL查询。通过示例展示了如何生成函数参数并实际调用这些函数以实现功能扩展。

在这里插入图片描述


聊天补全模型调用函数


这个笔记包含怎样使用聊天补全API结合外部的函数调用来扩展GPT模型的能力

tools在聊天补全API中是一个可选的参数,可以定义指定的函数调用。目的是能使模型生成遵循指定规范的函数参数。请注意:API实际上不执行任何的函数调用。由开发者使用模型输出时执行函数调用。

在tools参数内部,如果提供了functions参数,那么在默认情况下,模型来决定何时使用其中一个适合的函数。API可通过设置tool_choice参数{“name”: “”},强制调用一个指定的函数。也可以设置tool_choice参数为none,强制不调用任何函数。如果使用了函数,则输出将在响应中包含"finish_reason": “function_call”,以及包含函数名称和生成的函数参数的tool_choice对象。

1. 概述

这个笔记包含下面两部分:

  • 怎样生成函数参数 指定一组函数并使用模型API生成函数参数。
  • 怎样使用模型生成的参数调用函数 通过实际执行带有模型生成参数的函数来关闭循环。

1.1 怎样生成函数参数

安装依赖包

pip install scipy  -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tenacity
pip install tiktoken
pip install termcolor 
pip install openai
# 导入依赖库
import json
from tenacity import retry, wait_random_exponential, stop_after_attempt
from termcolor import colored 
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv

# 加载 .env 文件中定义的环境变量
_ = load_dotenv(find_dotenv())

GPT_MODEL = "gpt-3.5-turbo-0613"
# 初始化 OpenAI 客户端
client = OpenAI()  # 默认使用环境变量中的 OPENAI_API_KEY 和 OPENAI_BASE_URL

1.2 实用函数

首先定义几个公用的函数,以调用聊天补全API,维护和保持对话记录状态。

@retry(wait=wait_random_exponential(multiplier=1, max=40), stop=stop_after_attempt(3))
def chat_completion_request(messages, tools=None, tool_choice=None, model=GPT_MODEL):
	"""封装OpenAI API调用"""
    try:
        response = client.chat.completions.create(
            model=model,
            messages=messages,
            tools=tools,
            tool_choice=tool_choice,
        )
        return response
    except Exception as e:
        print("Unable to generate ChatCompletion response")
        print(f"Exception: {
     
     e}")
        return e
def pretty_print_conversation(messages):
	"""格式化控制台输出"""
    role_to_color = {
   
   
        "system": "red",
        "user": "green",
        "assistant": "blue",
        "function": "magenta",
    }
    
    for message in messages:
        if message["role"] == "system":
            print(colored(f"system: {
     
     message['content']}\n", role_to_color[message["role"]]))
        elif message["role"] == "user":
            print(colored(f"user: {
     
     message['content']}\n", role_to_color[message["role"]]))
        elif message["role"] == "assistant" and message.get("function_call"):
            print(colored(f"assistant: {
     
     message['function_call'
### OpenAI Function Calling 功能概述 Function CallingOpenAI 提供的一项功能,允许开发者定义一组函数并让模型生成符合这些函数规范的参数。这一机制的核心在于通过 `functions` 参数向 Chat Completions API 提供 JSON Schema 描述的函数列表[^4]。 当启用该功能时,模型会分析输入内容,并决定是否需要调用某个特定函数来完成任务。如果确实需要,则返回一个包含所需参数的对象;否则继续正常对话流程[^3]。 #### 配置与实现步骤说明 以下是关于如何配置以及使用此特性的具体指南: 1. **准备阶段** 开发者需先创建好目标应用程序所需的各个业务逻辑对应的 JavaScript 或 TypeScript 函数原型描述文件(JSON Schemas),并将它们上传至指定位置或者集成到自己的服务端代码里作为工具集的一部分[^2]。 2. **请求构建** 构建发送给 GPT 的 HTTP 请求体时,在常规的消息数组之外还需额外加入一个新的字段——即上述提到过的 “tools” 数组形式表示的支持操作集合。 下面给出了一段 Python 示例代码展示整个过程: ```python import os from typing import Any, Dict import requests def call_openai_function(api_key: str, messages: list[Dict[str, Any]], functions: list[dict]) -> dict: url = "https://api.openai.com/v1/chat/completions" headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {api_key}' } data = { "model": "gpt-3.5-turbo", "messages": messages, "functions": functions, "function_call": {"name": "get_current_weather"} } response = requests.post(url=url, json=data, headers=headers) if response.status_code != 200: raise Exception(f"Request failed with status code {response.status_code}: {response.text}") return response.json() ``` 在此基础上还可以进一步扩展其他自定义行为比如错误处理等等[^1]。 #### 输出解释 一旦成功触发了某项预设动作之后,服务器端将会收到一段结构化的数据包,其中包含了所选方法名称及其关联的具体数值信息等内容待我们去解析利用即可。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值