Чат
При наличии списка сообщений, составляющих диалог, модель вернет ответ. Связанные темы: Завершение работы с чатом
Создание завершения чата
POST
https://api.openai.com/v1/audio/speech
POST запрос https://api.openai.com/v1/chat/completions
создаёт ответ модели для данного чата.
Тело запроса
Параметр | Тип | Описание |
---|---|---|
messages | array | Требуется. Список сообщений, составляющих беседу до этого момента. |
model | string | Обязательный. ID используемой модели . См. таблицу совместимости модели с эндпоинтом, чтобы узнать, какие модели совместимы с Chat API. |
frequency_penalty | number or null | Необязательный. По умолчанию 0. Значение от -2.0 до 2.0. Положительные значения штрафуют появление новых токенов в зависимости от их текущей частоты в тексте, снижая вероятность того, что модель дословно повторит одни и те же строки. |
logit_bias | map | Необязательный. По умолчанию null. Меняет вероятность появления конкретных токенов в завершении. Принимает JSON, отображая токены (по их ID) на связанное значение смещения от -100 до 100. Смещение добавляется к логитам, существующим в модели перед выборкой. Эффект будет варьироваться в зависимости от модели, но значения между -1 и 1 должны уменьшать или увеличивать вероятность выбора; значения -100 или 100 запрещают или делают исключительным выбор соответствующего токена. |
logprobs | boolean or null | Необязательный. По умолчанию false. Возвращает ли логарифмические вероятности токенов контента каждого выходящего сообщения. Параметр недоступен для модели gpt-4-vision-preview . |
top_logprobs | integer or null | Необязательный. Целое от 0 до 5, обозначает количество наиболее вероятных токенов для возврата на каждой позиции токена, каждый с лог. вероятностями. logprobs должен быть true для этого параметра. |
max_tokens | integer or null | Необязательный. Максимальное колич. токенов, которое может быть сгенерировано в завершении чата. |
n | integer or null | Необязательный. По умолчанию 1. Сколько вариантов завершения генерировать для каждого сообщения. Вы будете оплачивать все сгенерированные токены всех вариантов. Оставьте n=1 для минимизации затрат. |
presence_penalty | number или null | Необязательный. По умолчанию 0. Число от -2.0 до 2.0. Положительные значения штрафуют новые токены, если они уже были сказаны до этого, увеличивая вероятность того, что модель перейдет на новую тему. |
response_format | object | Необязательный. Объект, указывающий формат, который должна выводить модель. Совместим с gpt-4-1106-preview и gpt-3.5-turbo-1106. Установка {"type": "json_object"} включает режим JSON, что гарантирует допустимый формат JSON. |
seed | integer или null | Необязательный. (Бета) Если указан, система пытается обеспечить детерминированность, чтобы повторные запросы с теми же параметрами давали аналогичный результат. |
stop | string/array/null | Необязательный. До 4 последовательностей, после которых API перестанет генерировать новые токены. |
stream | boolean или null | Необязательный. По умолчанию false. Если установлено true , возможна отправка частичных изменений как в ChatGPT. Токены отправляются как данные через server-sent events по мере появления, последний из которых отмечен завершением data: [DONE]. |
temperature | number или null | Необязательный. По умолчанию 1. Указывает выбор температуры, между 0 и 2. Более высокие значения, такие как 0.8, делают вывод более случайным, а низкие, такие как 0.2, более сфокусированным и детерминированным. Советуем изменить этот параметр или top_p , но не оба. |
top_p | number или null | Необязательный. По умолчанию 1. Альтернатива температуре выборка - семплирование ядра, где учитываются токены в пределах вероятностной массы top_p . Например, 0.1 означает, что только токены с верхними 10% вероятностями включаются. Также, рекомендуем изменять или этот параметр, или temperature . |
tools | array | Необязательный. Список инструментов для вызова моделью. Поддерживаются только функции. Используйте, чтобы дать список функций для генерации моделью JSON ввода. |
tool_choice | string или object | Необязательный. Контролирует, какую функцию вызывает модель. none - не вызывает функцию, auto - может выбирать между вызовом или продолжением. Указание конкретной функции заставляет модель вызвать её. none по умолчанию в отсутствии функций, auto по умолчанию, если функции присутствуют. |
user | string | Необязательный. Уникальный идентификатор, представляющий конечного пользователя, который поможет OpenAI отслеживать и предотвращать злоупотребления. |
function_call | Deprecated | Устарело в пользу tool_choice. Контролирует использование функции. none - не вызывает функцию, auto - выбор между вызовом функции и генерацией сообщения. Указание конкретной функции приводит к её вызову. |
functions | Устаревшее | Устаревшее в пользу tools. Список функций, для которых модель может генерировать JSON. |
Возвращаемое значение может быть объектом chat completion или потоком объектов chat completion chunk, если запрос потоковый.
Примеры запросов и ответов
Обычный запрос (Default)
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!"
}
]
}'
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)
import OpenAI from "openai";
const openai = new OpenAI();
async function main() {
const completion = await openai.chat.completions.create({
messages: [{ role: "system", content: "You are a helpful assistant." }],
model: "gpt-4o",
});
console.log(completion.choices[0]);
}
main();
Пример ответа:
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"model": "gpt-4o-mini",
"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,
"completion_tokens_details": {
"reasoning_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
}
}
Примеры использования в случаях с изображениями (Image Input)
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": "user",
"content": [
{
"type": "text",
"text": "What'\''s in this image?"
},
{
"type": "image_url",
"image_url": {
"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
}'
import OpenAI from "openai";
const openai = new OpenAI();
async function main() {
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages: [
{
role: "user",
content: [
{ type: "text", text: "What's in this image?" },
{
type: "image_url",
image_url: {
"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",
},
}
],
},
],
});
console.log(response.choices[0]);
}
main();
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "What's in this image?"},
{
"type": "image_url",
"image_url": {
"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])
Потоковые операции (Streaming)
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!"
}
],
"stream": true
}'
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)
import OpenAI from "openai";
const openai = new OpenAI();
async function main() {
const completion = await openai.chat.completions.create({
model: "gpt-4o",
messages: [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
stream: true,
});
for await (const chunk of completion) {
console.log(chunk.choices[0].delta.content);
}
}
main();
Пример ответа:
{
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "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-4o-mini", "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-4o-mini", "system_fingerprint": "fp_44709d6fcb", "choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}]}
Functions в использовании
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": "user",
"content": "What'\''s the weather like in Boston today?"
}
],
"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"]
}
}
}
],
"tool_choice": "auto"
}'
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)
import OpenAI from "openai";
const openai = new OpenAI();
async function main() {
const messages = [{"role": "user", "content": "What's the weather like in Boston today?"}];
const 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"],
},
}
}
];
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages: messages,
tools: tools,
tool_choice: "auto",
});
console.log(response);
}
main();
Пример ответа:
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1699896916,
"model": "gpt-4o-mini",
"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,
"completion_tokens_details": {
"reasoning_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
}
}
В этом тексте показаны различные способы использования API для создания чат-комплетов с функцией потоковой передачи, что позволяет динамично обрабатывать запросы, использовать параметры и функции для работы с изображениями и общения в консольном и веб-средах.
Объект завершения чата
Представляет собой ответ завершения чата, возвращенный моделью на основе предоставленного ввода.
Параметр | Описание |
---|---|
id | Строка - Уникальный идентификатор для завершения чата. |
choices | Массив - Список вариантов завершения чата. Может включать более одного варианта, если n больше 1. |
finish_reason | Строка - Причина, по которой модель прекратила генерировать токены. Возможные причины: stop, length, content_filter, tool_calls, function_call (устарело). |
index | Целое число - Индекс выбора в списке вариантов. |
message | Объект - Сообщение, сгенерированное моделью для завершения чата. |
logprobs | Объект или null - Информация о логарифмических вероятностях для выбора. |
created | Целое число - Временная метка Unix (в секундах) времени создания завершения чата. |
model | Строка - Модель, использованная для завершения чата. |
service_tier | Строка или null - Уровень обслуживания, использованный для обработки запроса. Включается только если параметр service_tier указан в запросе. |
system_fingerprint | Строка - Отпечаток конфигурации бэкенда, на котором работает модель. Может использоваться совместно с параметром seed для понимания изменений, влияющих на детерминизм. |
object | Строка - Тип объекта, всегда равен chat.completion. |
usage | Объект - Статистика использования для запроса на завершение. |
Пример объекта завершения чата
{
"id": "chatcmpl-123456",
"object": "chat.completion",
"created": 1728933352,
"model": "gpt-4o-2024-08-06",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Привет! Чем могу помочь сегодня?",
"refusal": null
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 19,
"completion_tokens": 10,
"total_tokens": 29,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"system_fingerprint": "fp_6b68a8204b"
}
Объект фрагмента завершения чата
Представляет собой потоковый фрагмент ответа на завершение чата, генерируемый моделью на основе предоставленного ввода.
Свойство | Описание | Значение |
---|---|---|
id | Уникальный идентификатор для завершения чата. Каждый фрагмент имеет одинаковый ID. | string |
choices | Список вариантов завершения чата. Может содержать более одного элемента, если n больше 1. Может быть пустым для последнего фрагмента, если вы установили stream_options: {"include_usage": true} . | array |
delta | Объект дельты завершения чата, сгенерированный потоковыми ответами модели. | object |
logprobs | Информация о вероятности логарифма для выбора. | object or null |
finish_reason | Причина, по которой модель прекратила генерировать токены. Возможные значения: stop , length , content_filter , tool_calls , function_call (устарело). | string or null |
index | Индекс выбора в списке вариантов. | integer |
created | Unix-временная метка (в секундах), когда завершение чата было создано. Каждый фрагмент имеет одинаковую метку времени. | integer |
model | Модель для генерации завершения. | string |
service_tier | Уровень обслуживания, используемый для обработки запроса. Будет представлен, если указан параметр service_tier в запросе. | string or null |
system_fingerprint | Отпечаток, представляющий конфигурацию серверной части, с которой работает модель. Может использоваться вместе с параметром seed запроса для понимания изменений в серверной части, которые могут повлиять на детерминизм. | string |
object | Тип объекта, который всегда равен chat.completion.chunk . | string |
usage | Дополнительное поле, которое присутствует только при указании stream_options: {"include_usage": true} в вашем запросе. Если присутствует, имеет значение null, кроме последнего фрагмента, который содержит статистику использования токенов для всего запроса. | object or null |
completion_tokens | Количество токенов в сгенерированном завершении. | integer |
prompt_tokens | Количество токенов в подсказке. | integer |
total_tokens | Общее количество токенов, используемых в запросе (подсказка + завершение). | integer |
Пример данных:
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "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-4o-mini", "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-4o-mini", "system_fingerprint": "fp_44709d6fcb", "choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}]}