Перейти к основному содержимому

Чат-комплит

Узнайте, как использовать основной API OpenAI для получения ответов от языковых моделей.

Чтобы использовать одну из этих моделей через API OpenAI, вам нужно отправить запрос в API чат-комплита, содержащий входные данные и ваш API ключ, и получить ответ, содержащий результат работы модели.

Вы можете экспериментировать с различными моделями в RockAPI Chat. Если вы не уверены, какую модель использовать, попробуйте gpt-4o, если вам нужна высокая интеллектуальность, или gpt-4o-mini, если вам нужна максимальная скорость и минимальная стоимость.

Обзор

API чат-комплита поддерживает ввод текста и изображений и может выводить текстовый контент (включая код и JSON).

Он принимает входные данные через параметр messages, который является массивом объектов сообщений.

Роли сообщений

Каждый объект сообщения имеет роль (либо system, user, либо assistant) и содержание.

  • Системное сообщение необязательно и может использоваться для настройки поведения ассистента.
  • Сообщения пользователя предоставляют запросы или комментарии для ответа ассистента.
  • Сообщения ассистента хранят предыдущие ответы ассистента, но также могут быть написаны вами для предоставления примеров желаемого поведения (примеры нескольких попыток).

По умолчанию системное сообщение звучит как "Вы полезный ассистент". Вы можете определить инструкции в сообщении пользователя, но инструкции, установленные в системном сообщении, более эффективны. Вы можете установить только одно системное сообщение за беседу.

Начало работы

Модели чата принимают список сообщений в качестве ввода и возвращают сгенерированное моделью сообщение в качестве вывода. Хотя формат чата разработан для упрощения многоповоротных бесед, он также полезен для одноразовых задач без какого-либо разговора.

Пример вызова API чат-комплита выглядит следующим образом:

from openai import OpenAI

client = OpenAI(
api_key = '$ROCKAPI_API_KEY',
base_url = 'https://api.rockapi.ru/openai/v1'
)

response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)

Чтобы узнать больше, вы можете просмотреть полную справочную документацию по API для API чат-комплита.

Включение истории беседы важно, когда инструкции пользователя ссылаются на предыдущие сообщения. В приведенном выше примере последний вопрос пользователя "Где это было сыграно?" имеет смысл только в контексте предыдущих сообщений о Мировой серии 2020 года. Поскольку модели не запоминают прошлые запросы, вся соответствующая информация должна быть предоставлена в виде истории беседы в каждом запросе. Если беседа не может поместиться в пределы токенов модели, ее необходимо сократить каким-либо образом.

Чтобы имитировать эффект, наблюдаемый в ChatGPT, когда текст возвращается по частям, установите параметр stream в значение true.

from openai import OpenAI

client = OpenAI(
api_key = '$ROCKAPI_API_KEY',
base_url = 'https://api.rockapi.ru/openai/v1'
)

completion = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
],
stream=True
)

for chunk in completion:
if not chunk.choices:
continue

print(chunk.choices[0].delta.content, end="")

Формат ответа чат-комплита

Пример ответа API чат-комплита выглядит следующим образом:

{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "The 2020 World Series was played in Texas at Globe Life Field in Arlington.",
"role": "assistant"
},
"logprobs": null
}
],
"created": 1677664795,
"id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
"model": "gpt-4o-mini",
"object": "chat.completion",
"usage": {
"completion_tokens": 17,
"prompt_tokens": 57,
"total_tokens": 74
}
}

Ответ ассистента можно извлечь следующим образом:

message = completion.choices[0].message.content

Каждый ответ будет включать finish_reason. Возможные значения для finish_reason:

  • stop: API вернуло полное сообщение или сообщение, завершенное одной из последовательностей остановки, предоставленных через параметр stop.
  • length: Неполный вывод модели из-за параметра max_tokens или лимита токенов.
  • function_call: Модель решила вызвать функцию.
  • content_filter: Пропущенный контент из-за флага от наших фильтров контента.
  • null: Ответ API все еще в процессе или неполный.

В зависимости от входных параметров ответ модели может содержать различную информацию.

Следующие шаги