ChatGPT API教程

创建Chat Completions

Chat Completion对象

请求 URL

bash
POST https://api.openai.com/v1/chat/completions

功能

为给定的聊天对话生成模型的响应。

请求体

messages (数组)

必填

一个包含对话内容的消息列表。

示例 Python 代码

from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
  ]
)

print(completion.choices[0].message)
curl:
curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "Hello!"
      }
    ]
  }'

响应:
{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "model": "gpt-3.5-turbo-0125",
  "system_fingerprint": "fp_44709d6fcb",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?",
    },
    "logprobs": null,
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}


消息类型

系统消息

属性

属性名类型是否必填描述
contentstring必填系统消息的内容。
rolestring必填消息作者的角色(此处为 system)。
namestring可选用于区分相同角色的参与者。

用户消息

属性

属性名类型是否必填描述
contentstring 或 array必填用户消息的内容。
rolestring必填消息作者的角色(此处为 user)。
namestring可选用于区分相同角色的参与者。

助手消息

属性

属性名类型是否必填描述
contentstring 或 null可选助手消息的内容(若未指定 tool_callsfunction_call 则必填)。
rolestring必填消息作者的角色(此处为 assistant)。
namestring可选用于区分相同角色的参与者。
tool_callsarray可选模型生成的工具调用,例如函数调用。

工具消息

属性

属性名类型是否必填描述
rolestring必填消息作者的角色(此处为 tool)。
contentstring必填工具消息的内容。
tool_call_idstring必填工具调用的响应。

函数消息(已弃用)

属性

属性名类型是否必填描述
rolestring必填消息作者的角色(此处为 function)。
contentstring 或 null必填函数消息的内容。
namestring必填要调用的函数名称。

其他参数

model (string)

必填

使用的模型的 ID,也就是模型名。例如:gpt-4o

frequency_penalty (number 或 null)

可选

默认值:0

用于控制模型重复现有文本的概率,值的范围为 -2.02.0。正值会减少模型逐字重复的可能性。

logit_bias (map)

可选

默认值:null

修改特定标记出现的可能性。接受一个 JSON 对象,将标记(由标记器中的标记 ID 指定)映射到与之关联的偏差值,范围为 -100100。负值减少选择的可能性,正值增加选择的可能性。

logprobs (boolean 或 null)

可选

默认值:false

是否返回输出标记的日志概率。若为 true,将返回内容中每个输出标记的日志概率。

top_logprobs (integer 或 null)

可选

一个介于 020 之间的整数,指定在每个标记位置返回的最可能标记的数量,每个标记都有一个关联的日志概率。需设置 logprobstrue 才能使用此参数。

max_tokens (integer 或 null)

可选

最大生成标记数。

输入标记和生成标记的总长度受模型的上下文长度限制。计数标记的示例 Python 代码。

n (integer 或 null)

可选

默认值:1

为每条输入消息生成的聊天完成选项数量。注意,你将按生成的标记数收费。将 n 设置为 1 以最小化成本。

presence_penalty (number 或 null)

可选

默认值:0

用于控制模型谈论新主题的可能性,值的范围为 -2.02.0。正值会增加模型谈论新主题的可能性。

response_format (object)

可选

指定模型必须输出的格式。兼容 GPT-4 Turbo 和所有更新版本的 GPT-3.5 Turbo 模型。

设置 { "type": "json_object" } 启用 JSON 模式,确保模型生成有效的 JSON。

重要:使用 JSON 模式时,必须通过系统或用户消息指示模型生成 JSON。否则,模型可能会生成大量空白,直到达到令牌限制,导致请求长时间运行。还要注意,如果 finish_reason="length" 表示生成超过 max_tokens 或对话超过最大上下文长度,消息内容可能会部分被截断。

seed (integer 或 null)

可选

此功能为 Beta 版。如果指定了 seed,系统将尽力确定性采样,使得相同参数和种子下的请求返回相同的结果。确定性不保证,你应监控 system_fingerprint 响应参数以检测后端更改。

service_tier (string 或 null)

可选

默认值:null

指定用于处理请求的延迟级别。适用于订阅规模服务的客户:

  • auto:系统将使用规模服务积分,直到耗尽。
  • default:请求将使用默认服务级别处理,无高 SLA 和无延迟保证。 设置此参数时,响应主体将包含所用的服务级别。

stop (string / array / null)

可选

默认值:null

最多 4 个序列,API 在生成这些序列时将停止生成更多标记。

stream (boolean 或 null)

可选

默认值:false

流式输出开关。如果设置,部分消息增量将作为数据发送,类似于 ChatGPT。标记将作为数据事件发送,直到终止标记 data: [DONE] 消息。例如 Python 代码。

stream_options (object 或 null)

可选

默认值:null

用于流响应的选项,仅在设置 stream: true 时设置。

include_usage (boolean)

可选

如果设置,在 data: [DONE] 消息前将发送一个额外的数据块。使用字段将显示整个请求的标记使用情况,并且 choices 字段始终为空数组。所有其他块也将包含使用字段,但值为 null

temperature (number 或 null)

可选

默认值:1

用于控制生成内容的随机性,范围为 02。较高的值(如 0.8)生成更随机的内容,较低的值(如 0.2)生成更聚焦的内容。

通常建议调整 temperaturetop_p,但不要同时调整两者。

top_p (number 或 null)

可选

默认值:1

使用核采样作为 temperature 的替代方法,模型考虑概率质量最高的标记结果。例如 0.1 表示仅考虑概率质量最高的前 10% 标记。

通常建议调整 temperaturetop_p,但不要同时调整两者。

tools (array)

可选

模型可以调用的工具列表。目前只支持函数作为工具。最多支持 128 个函数。

属性

属性名类型是否必填描述
typestring必填工具的类型。目前只支持 function
functionobject必填工具调用的函数。

function_call (已弃用) (string 或 object)

可选

已弃用,改用 tools

控制是否调用函数。none 表示模型不会调用任何函数,而是生成消息。auto 表示模型可以在生成消息和调用函数之间进行选择。通过 {"name": "my_function"} 指定特定函数可强制模型调用该函数。

functions (已弃用) (array)

可选

已弃用,改用 tools

模型可能生成 JSON 输入的函数列表。

属性

属性名类型是否必填描述
descriptionstring可选函数的描述,用于模型选择何时和如何调用函数。
namestring必填要调用的函数名称。必须是 a-z, A-Z, 0-9 或包含下划线和短划线,长度最大为 64
parametersobject可选函数接受的参数,描述为 JSON Schema 对象。

返回值

返回聊天完成对象,或如果请求流式传输,则返回流式聊天完成块对象序列。


更多示例:

1、输入图片:

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4-turbo",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "What's in this image?"},
                {
                    "type": "image_url",
                    "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
                },
            ],
        }
    ],
    max_tokens=300,
)

print(response.choices[0])
响应:
{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "model": "gpt-3.5-turbo-0125",
  "system_fingerprint": "fp_44709d6fcb",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nThis image shows a wooden boardwalk extending through a lush green marshland.",
    },
    "logprobs": null,
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

2、流式输出(Streaming):

from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
  ],
  stream=True
)

for chunk in completion:
  print(chunk.choices[0].delta)

响应:

{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-3.5-turbo-0125", "system_fingerprint": "fp_44709d6fcb", "choices":[{"index":0,"delta":{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}]}

{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-3.5-turbo-0125", "system_fingerprint": "fp_44709d6fcb", "choices":[{"index":0,"delta":{"content":"Hello"},"logprobs":null,"finish_reason":null}]}

....

{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-3.5-turbo-0125", "system_fingerprint": "fp_44709d6fcb", "choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}]}


3、函数调用(Functions):

from openai import OpenAI
client = OpenAI()

tools = [
  {
    "type": "function",
    "function": {
      "name": "get_current_weather",
      "description": "Get the current weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA",
          },
          "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
        },
        "required": ["location"],
      },
    }
  }
]
messages = [{"role": "user", "content": "What's the weather like in Boston today?"}]
completion = client.chat.completions.create(
  model="gpt-4o",
  messages=messages,
  tools=tools,
  tool_choice="auto"
)

print(completion)

响应:

{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1699896916,
  "model": "gpt-3.5-turbo-0125",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_abc123",
            "type": "function",
            "function": {
              "name": "get_current_weather",
              "arguments": "{\n\"location\": \"Boston, MA\"\n}"
            }
          }
        ]
      },
      "logprobs": null,
      "finish_reason": "tool_calls"
    }
  ],
  "usage": {
    "prompt_tokens": 82,
    "completion_tokens": 17,
    "total_tokens": 99
  }
}

4、Logprobs(日志概率)

from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {"role": "user", "content": "Hello!"}
  ],
  logprobs=True,
  top_logprobs=2
)

print(completion.choices[0].message)
print(completion.choices[0].logprobs)

响应:

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1702685778,
  "model": "gpt-3.5-turbo-0125",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! How can I assist you today?"
      },
      "logprobs": {
        "content": [
          {
            "token": "Hello",
            "logprob": -0.31725305,
            "bytes": [72, 101, 108, 108, 111],
            "top_logprobs": [
              {
                "token": "Hello",
                "logprob": -0.31725305,
                "bytes": [72, 101, 108, 108, 111]
              },
              {
                "token": "Hi",
                "logprob": -1.3190403,
                "bytes": [72, 105]
              }
            ]
          },
          {
            "token": "!",
            "logprob": -0.02380986,
            "bytes": [
              33
            ],
            "top_logprobs": [
              {
                "token": "!",
                "logprob": -0.02380986,
                "bytes": [33]
              },
              {
                "token": " there",
                "logprob": -3.787621,
                "bytes": [32, 116, 104, 101, 114, 101]
              }
            ]
          },
          {
            "token": " How",
            "logprob": -0.000054669687,
            "bytes": [32, 72, 111, 119],
            "top_logprobs": [
              {
                "token": " How",
                "logprob": -0.000054669687,
                "bytes": [32, 72, 111, 119]
              },
              {
                "token": "<|end|>",
                "logprob": -10.953937,
                "bytes": null
              }
            ]
          },
          {
            "token": " can",
            "logprob": -0.015801601,
            "bytes": [32, 99, 97, 110],
            "top_logprobs": [
              {
                "token": " can",
                "logprob": -0.015801601,
                "bytes": [32, 99, 97, 110]
              },
              {
                "token": " may",
                "logprob": -4.161023,
                "bytes": [32, 109, 97, 121]
              }
            ]
          },
          {
            "token": " I",
            "logprob": -3.7697225e-6,
            "bytes": [
              32,
              73
            ],
            "top_logprobs": [
              {
                "token": " I",
                "logprob": -3.7697225e-6,
                "bytes": [32, 73]
              },
              {
                "token": " assist",
                "logprob": -13.596657,
                "bytes": [32, 97, 115, 115, 105, 115, 116]
              }
            ]
          },
          {
            "token": " assist",
            "logprob": -0.04571125,
            "bytes": [32, 97, 115, 115, 105, 115, 116],
            "top_logprobs": [
              {
                "token": " assist",
                "logprob": -0.04571125,
                "bytes": [32, 97, 115, 115, 105, 115, 116]
              },
              {
                "token": " help",
                "logprob": -3.1089056,
                "bytes": [32, 104, 101, 108, 112]
              }
            ]
          },
          {
            "token": " you",
            "logprob": -5.4385737e-6,
            "bytes": [32, 121, 111, 117],
            "top_logprobs": [
              {
                "token": " you",
                "logprob": -5.4385737e-6,
                "bytes": [32, 121, 111, 117]
              },
              {
                "token": " today",
                "logprob": -12.807695,
                "bytes": [32, 116, 111, 100, 97, 121]
              }
            ]
          },
          {
            "token": " today",
            "logprob": -0.0040071653,
            "bytes": [32, 116, 111, 100, 97, 121],
            "top_logprobs": [
              {
                "token": " today",
                "logprob": -0.0040071653,
                "bytes": [32, 116, 111, 100, 97, 121]
              },
              {
                "token": "?",
                "logprob": -5.5247097,
                "bytes": [63]
              }
            ]
          },
          {
            "token": "?",
            "logprob": -0.0008108172,
            "bytes": [63],
            "top_logprobs": [
              {
                "token": "?",
                "logprob": -0.0008108172,
                "bytes": [63]
              },
              {
                "token": "?\n",
                "logprob": -7.184561,
                "bytes": [63, 10]
              }
            ]
          }
        ]
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 9,
    "total_tokens": 18
  },
  "system_fingerprint": null
}


Chat Completion对象

Copyright © 程序由MYUCMS提供
Copyright © 2023-2024ChatGPT API技术开发教程 All Rights Reserved