Skip to content

Генерация текста ​

Научитесь создавать текст из начального запроса. OpenAI предоставляет простые API, позволяющие использовать большие языковые модели для генерации текста из запроса, как в случае с ChatGPT. Эти модели обучены на огромных объемах данных и способны понимать мультимедийные вводы и инструкции на естественном языке. Благодаря таким запросам модели могут создавать почти любой вид текстового ответа, от кода и математических уравнений до структурированных данных в формате JSON и текста, похожего на человеческую прозу.

Быстрый старт ​

Для генерации текста можно использовать конечную точку завершения чата в REST API, как показано в приведенных ниже примерах. Вы можете воспользоваться REST API из любого HTTP-клиента по вашему выбору или выбрать один из официальных SDK от OpenAI для предпочитаемого языка программирования.

Создание человекоподобного ответа на запрос ​

js
import OpenAI from "openai";
const openai = new OpenAI();

const completion = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: [
        { role: "system", content: "Вы — полезный помощник." },
        {
            role: "user",
            content: "Напишите хайку о рекурсии в программировании.",
        },
    ],
});

console.log(completion.choices[0].message);

Описание содержимого изображения ​

js
import OpenAI from "openai";
const openai = new OpenAI();

const completion = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: [
        {
            role: "user",
            content: [
                { type: "text", text: "Что на этом изображении?" },
                {
                    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(completion.choices[0].message);

Генерация JSON данных на основе JSON схемы ​

js
import OpenAI from "openai";
const openai = new OpenAI();

const completion = await openai.chat.completions.create({
    model: "gpt-4o-2024-08-06",
    messages: [
        { role: "system", content: "Вы извлекаете адреса электронной почты в JSON данные." },
        {
            role: "user",
            content: "Застряли? Отправьте сообщение на [email protected].",
        },
    ],
    response_format: {
        // См. /docs/guides/structured-outputs
        type: "json_schema",
        json_schema: {
            name: "email_schema",
            schema: {
                type: "object",
                properties: {
                    email: {
                        description: "Адрес электронной почты, указанный во входных данных",
                        type: "string"
                    }
                },
                additionalProperties: false
            }
        }
    }
});

console.log(completion.choices[0].message.content);

Выбор модели ​

При составлении запроса на генерацию текста первым параметром, который следует настроить, является модель, которую вы хотите использовать для получения ответа. Выбор модели может значительно повлиять на результат, а также на стоимость каждого запроса на генерацию. Для детального сравнения характеристик смотрите каталог моделей и страницу GPT-5.2.

  • Крупная модель, такая как gpt-4o, обеспечит высокий уровень интеллекта и сильные возможности, но с более высокой стоимостью за токен.
  • Меньшая модель, такая как gpt-4o-mini, имеет интеллект ниже уровня большой модели, но работает быстрее и дешевле в пересчёте на токен.
  • Логическая модель, такая как семейство моделей o1, медленнее возвращает результаты и использует больше токенов для "размышлений", однако способна выполнять сложные логические задачи, кодирование и многошаговое планирование.

Экспериментируйте с разными моделями в Playground, чтобы определить, какая лучше всего подходит для ваших запросов! Дополнительную информацию о выборе модели можно найти здесь.

Создание запросов ​

Процесс создания запросов для получения желаемого результата от модели называется инженерией запросов. Путём передачи модели точных инструкций, примеров и необходимой информации (например, частной или специализированной, не включённой в обучающие данные модели) можно улучшить качество и точность выходных данных модели. Здесь мы рассмотрим некоторые общее руководство по созданию запросов, но вам может быть полезно ознакомиться с руководством по инженерии запросов.

В API завершения чата вы создаёте запросы, предоставляя массив сообщений, содержащих инструкции для модели. Каждое сообщение может иметь разную роль, что влияет на то, как модель может интерпретировать ввод.

Пользовательские сообщения ​

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

Пример запроса для пользователя, который просит модель gpt-4o сгенерировать хайку о программировании:

js
const response = await openai.chat.completions.create({
  model: "gpt-4o",
  messages: [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Напишите хайку о программировании."
        }
      ]
    }
  ]
});

Системные сообщения ​

Сообщения с системной ролью выступают в качестве высокоуровневых инструкций для модели и обычно описывают, что модель должна делать и как она должна в общем случае себя вести и отвечать.

Пример системного сообщения, которое изменяет поведение модели при генерации ответа на пользовательское сообщение:

js
const response = await openai.chat.completions.create({
  model: "gpt-4o",
  messages: [
    {
      "role": "system",
      "content": [
        {
          "type": "text",
          "text": `
            Вы являетесь полезным помощником, который отвечает на вопросы по программированию
            в стиле южной леди из юго-востока США.
          `
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Обязательны ли точки с запятой в JavaScript?"
        }
      ]
    }
  ]
});

Ответ на этот запрос возвращает текст в заданном риторическом стиле:

Что ж, милая, это прекрасный вопрос, который ты задала! Теперь, в мире 
В JavaScript точки с запятой действительно немного похожи на жемчужины на ожерелье – вы
могли бы обойтись без них, но, несомненно, с ними вы выглядите более изысканно. 

Технически, в JavaScript есть такая штука, как "автоматическая
вставка точки с запятой", когда он любезно добавляет точки с запятой там, где, по его мнению, они
должны быть. Однако, это не всегда идеально, благослови его Господь. Иногда это
может привести к некоторой путанице и вызвать всевозможные неожиданные действия.

Сообщения помощника ​

Сообщения с ролью помощника предполагаются как сгенерированные моделью, возможно, в предыдущем запросе на генерацию (см. раздел "Разговоры" ниже). Их также можно использовать для предоставления примеров модели, как следует отвечать на текущий запрос, — это техника, известная как обучение на небольшом количестве примеров.

Пример использования сообщения помощника для фиксации результатов предыдущего результата генерации текста и составления нового запроса на этой основе:

js
const response = await openai.chat.completions.create({
  model: "gpt-4o",
  messages: [
    {
      "role": "user",
      "content": [{ "type": "text", "text": "knock knock." }]
    },
    {
      "role": "assistant",
      "content": [{ "type": "text", "text": "Who's there?" }]
    },
    {
      "role": "user",
      "content": [{ "type": "text", "text": "Orange." }]
    }
  ]
});

Предоставление модели дополнительных данных для генерации ​

Типы сообщений, описанные выше, также можно использовать для предоставления модели дополнительной информации, которая может быть за пределами её обучающих данных. Возможно, вы захотите включить результаты запроса к базе данных, текстовый документ или другие ресурсы для помощи модели в генерации релевантного ответа. Эта техника часто называется генерацией с учётом извлечения информации, или RAG. Узнайте больше о техниках RAG здесь.

Разговоры и контекст ​

Хотя каждый запрос на генерацию текста является независимым и не имеет состояния (если вы не используете помощников), вы всё равно можете реализовать многократные беседы, предоставляя дополнительные сообщения в качестве параметров для вашего запроса на генерацию текста. Рассмотрим пример шутки "knock knock", представленный выше:

js
const response = await openai.chat.completions.create({
  model: "gpt-4o",
  messages: [
    {
      "role": "user",
      "content": [{ "type": "text", "text": "knock knock." }]
    },
    {
      "role": "assistant",
      "content": [{ "type": "text", "text": "Who's there?" }]
    },
    {
      "role": "user",
      "content": [{ "type": "text", "text": "Orange." }]
    }
  ]
});

Используя чередующиеся сообщения пользователя и помощника, вы можете зафиксировать предыдущее состояние беседы в одном запросе к модели.

Управление контекстом для генерации текста ​

По мере усложнения ваших входных данных или увеличения количества обращений в беседе вам нужно будет учитывать как лимиты на выходные токены, так и лимиты окна контекста. Входные данные модели и её выходы измеряются в токенах, которые извлекаются из входных данных для анализа их содержания и намерения и собираются для выдачи логических выходов. У моделей есть ограничения на количество токенов, которые могут быть использованы во время жизненного цикла запроса на генерацию текста.

  • Выходные токены — это токены, которые генерирует модель в ответ на запрос. Каждая модель имеет свои ограничения по выходным токенам, задокументированным здесь. Например, gpt-4o-2024-08-06 может генерировать максимум 16,384 выходных токена.
  • Окно контекста описывает общее количество токенов, которые можно использовать как для входных, так и для выходных токенов (а для некоторых моделей и для логических токенов), задокументированное здесь. Например, у gpt-4o-2024-08-06 общее окно контекста составляет 128k токенов.

Если вы создаёте очень большой запрос (как правило, с добавлением большого количества контекста беседы или дополнительных данных/примеров для модели), это может привести к превышению выделенного окна контекста для модели, что может привести к обрезанным выходам.

Вы можете использовать инструмент токенизирования (который использует библиотеку tiktoken), чтобы увидеть, сколько токенов присутствует в строке текста.

Оптимизация выходов модели ​

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

ЦельДоступные техники
ТочностьОбеспечьте, чтобы модель давала точные и полезные ответы на ваши запросы. Точные ответы требуют, чтобы модель имела всю необходимую информацию для генерации ответа и понимала, как его создать (от интерпретации ввода до форматирования и стилизации). Часто это будет требовать комбинации инженерии запросов, RAG и тонкой настройки модели. Узнайте о оптимизации для точности.
СтоимостьСнижайте общую стоимость использования модели, уменьшая количество используемых токенов и выбирая более дешевые модели, когда это возможно. Чтобы контролировать затраты, попробуйте использовать меньше токенов или более маленькие и дешевые модели. Узнайте больше о оптимизации для снижения стоимости.
ЗадержкаУменьшайте время, необходимое для генерации ответов на ваши запросы. Оптимизация задержки — это многофакторный процесс, включающий инженерию запросов, параллелизм в вашем собственном коде и другие техники.

Создано при поддержке AITUNNEL