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-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