У меня есть 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.
@ADyson Спасибо, я попытаюсь закодировать всю полезную нагрузку, как бы я ни пытался кодировать и декодировать текст перед отправкой его API, и это не удается также с JS и PHP.
Из этого описания неясно, что именно вы пытались, но да, вам нужно JSON-кодировать все это из объекта PHP, что сделает его намного более надежным с точки зрения создания действительного JSON.
Как указано на официальном сайте OpenAI:
В зависимости от используемой модели запросы могут использовать до
4097
общих токенов. между подсказкой и завершением. Если ваша подсказка — токены4000
, ваш завершение может быть максимум97
токенов.Ограничение в настоящее время является техническим ограничением, но часто творческие способы решения проблем в рамках лимита, т.е. сгущение вашего подсказка, разбивка текста на более мелкие части и т. д.
Переключите text-davinci-001
для модели GPT-3, потому что лимиты токенов выше.
Модели ГПТ-3:
Я думаю, вы не понимаете, как работают токены: 500 слов — это больше, чем 500 токенов. Используйте Tokenizer для расчета количества токенов.
Вы можете избежать двойных кавычек в 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 слов. Как вы думаете, есть ли другая лучшая конечная точка для использования?
You can escape double quotes in JSON by using \ in front of double quotes
...можно, но для начала не стоит генерировать JSON вручную - см. мой первый комментарий в основной ветке под вопросом.
@MostafaEzzat Я отредактировал свой ответ. Вам нужно установить параметр max_tokens
выше.
@ADyson ADyson Вы правы, я отредактирую свой ответ. :)
«Я думаю, вы не понимаете, как работают токены: 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.
Я понял, извините, но текст довольно короткий
В Tokenizer написано 163 токена, но в результате API тысячи. Могу я спросить, как лучше всего отправлять текст кусками?
Я еще раз отредактировал свой ответ. Просто разделите его, скажем, на 5 частей. Дайте мне знать, если это решит вашу проблему.
Могу я спросить напоследок, как лучше всего отправлять текст кусками в API? например, использует разбиение текста на каждые 3-4 новые строки?
Хм, я не уверен, что разбиение текста на каждые 3-4 строки будет лучшим вариантом. Вместо этого попробуйте разбить текст на 3-4 предложения. Сделайте тест и посмотрите, что работает лучше всего.
when the text sometimes have some double quotes OR single quotes it messes with the JSON format
... решение такого рода вещей: не создавайте свой JSON вручную вот так. Создайте объект / массив PHP с правильной структурой, а затем используйтеjson_encode()
, чтобы превратить его в действительный JSON, он автоматически обработает любое экранирование и т. д., которое необходимо, и вы также можете использовать параметры для настройки определенных параметров вывода — проверьте Документация по PHP.