Ошибка API OpenAI: «Максимальная длина контекста этой модели составляет 2049 токенов»

У меня есть 2 проблемы, связанные с результатом ответа на завершение OpenAI.

Следующий результат не возвращает полный текст, когда я даю содержимое из 500 слов и предлагаю «Исправить грамматические ошибки» (это проблема с токенами?)

Вторая проблема заключается в том, что иногда в тексте есть двойные ИЛИ одинарные кавычки, которые он путает с форматом JSON. Поэтому я удаляю любые типы кавычек из содержимого (не уверен, что это лучшее решение, но я могу предпочесть сделать это на JS, а не на PHP)

curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n  \"model\": \"text-davinci-001\",\n  \"prompt\": \"" . $open_ai_prompt  . ":nn" . $content_text  . "\",\n  \"temperature\": 0,\n  \"top_p\": 1.0,\n  \"frequency_penalty\": 0.0,\n  \"presence_penalty\": 0.0\n}");

"message": "Нам не удалось разобрать тело вашего запроса в формате JSON. (СОВЕТ: Вероятно, это означает, что вы неправильно используете свою библиотеку HTTP. API OpenAI ожидает полезную нагрузку JSON, но то, что было отправлено, недействительно JSON.

when the text sometimes have some double quotes OR single quotes it messes with the JSON format... решение такого рода вещей: не создавайте свой JSON вручную вот так. Создайте объект / массив PHP с правильной структурой, а затем используйте json_encode(), чтобы превратить его в действительный JSON, он автоматически обработает любое экранирование и т. д., которое необходимо, и вы также можете использовать параметры для настройки определенных параметров вывода — проверьте Документация по PHP.
ADyson 07.02.2023 13:13

@ADyson Спасибо, я попытаюсь закодировать всю полезную нагрузку, как бы я ни пытался кодировать и декодировать текст перед отправкой его API, и это не удается также с JS и PHP.

Mostafa Ezzat 07.02.2023 13:22

Из этого описания неясно, что именно вы пытались, но да, вам нужно JSON-кодировать все это из объекта PHP, что сделает его намного более надежным с точки зрения создания действительного JSON.

ADyson 07.02.2023 13:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
171
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что касается лимитов токенов

Как указано на официальном сайте OpenAI:

В зависимости от используемой модели запросы могут использовать до 4097 общих токенов. между подсказкой и завершением. Если ваша подсказка — токены 4000, ваш завершение может быть максимум 97 токенов.

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

Переключите text-davinci-001 для модели GPT-3, потому что лимиты токенов выше.

Модели ГПТ-3:

Я думаю, вы не понимаете, как работают токены: 500 слов — это больше, чем 500 токенов. Используйте Tokenizer для расчета количества токенов.


Что касается двойных кавычек в JSON

Вы можете избежать двойных кавычек в JSON, используя \ перед двойными кавычками следующим образом:

"This is how you can escape \"double quotes\" in JSON."

Но... Это скорее быстрое решение. Для правильного решения см. Комментарий @ADyson выше:

Не создавайте свой JSON вручную. Сделать объект/массив PHP с правильной структурой, а затем используйте json_encode(), чтобы превратить его в действительный JSON, он автоматически обработает любое экранирование и т. д., которое необходимо, и вы также можете использовать параметры, чтобы настроить некоторые вещи о вывод - проверьте документацию PHP.


РЕДАКТИРОВАТЬ 1

Вам нужно установить параметр max_tokens выше. В противном случае вывод будет короче вашего ввода. Вы не получите обратно весь фиксированный текст, а только его часть.


РЕДАКТИРОВАТЬ 2

Теперь вы установили параметр max_tokens слишком высоким! Если поставить max_tokens = 5000, то это слишком даже для самой мощной модели GPT-3 (т.е. text-davinci-003). Подсказка и завершение вместе могут быть 4097 токенами.

Вы можете понять это, если посмотрите на полученную ошибку:

"error": {"message": "This model's maximum context length is 4097 tokens, however you requested 6450 tokens (1450 in your prompt; 5000 for the completion). Please reduce your prompt; or completion length."}

Я попробовал токены самой высокой модели, и это удалось, идея в том, что даже при успехе статья составляет около 700 слов, а когда я использую, например, fix grammar mistakes, результат не превышает 70 слов. Как вы думаете, есть ли другая лучшая конечная точка для использования?

Mostafa Ezzat 07.02.2023 13:21
You can escape double quotes in JSON by using \ in front of double quotes...можно, но для начала не стоит генерировать JSON вручную - см. мой первый комментарий в основной ветке под вопросом.
ADyson 07.02.2023 13:24

@MostafaEzzat Я отредактировал свой ответ. Вам нужно установить параметр max_tokens выше.

Cervus camelopardalis 07.02.2023 13:26

@ADyson ADyson Вы правы, я отредактирую свой ответ. :)

Cervus camelopardalis 07.02.2023 13:29

«Я думаю, вы не понимаете, как работают токены: 500 слов — это больше, чем 500 токенов. Используйте Tokenizer для подсчета количества токенов». "Вам нужно установить параметр max_tokens выше! В противном случае вывод будет короче, чем вы вводите." - Я добавил поле max tokens с 5000, поэтому я попытался опустить, чтобы выяснить результат, если он завершится, поэтому с max_token: 5000 я понял string(295) "{ "error": {"message": "This model's maximum context length is 4097 tokens, however you requested 6450 tokens (1450 in your prompt; 5000 for the completion). Please reduce your prompt; or completion length.

Mostafa Ezzat 07.02.2023 13:30

Я понял, извините, но текст довольно короткий

Mostafa Ezzat 07.02.2023 13:36

В Tokenizer написано 163 токена, но в результате API тысячи. Могу я спросить, как лучше всего отправлять текст кусками?

Mostafa Ezzat 07.02.2023 13:39

Я еще раз отредактировал свой ответ. Просто разделите его, скажем, на 5 частей. Дайте мне знать, если это решит вашу проблему.

Cervus camelopardalis 07.02.2023 13:41

Могу я спросить напоследок, как лучше всего отправлять текст кусками в API? например, использует разбиение текста на каждые 3-4 новые строки?

Mostafa Ezzat 07.02.2023 13:50

Хм, я не уверен, что разбиение текста на каждые 3-4 строки будет лучшим вариантом. Вместо этого попробуйте разбить текст на 3-4 предложения. Сделайте тест и посмотрите, что работает лучше всего.

Cervus camelopardalis 07.02.2023 14:02

Другие вопросы по теме