CURL PHP中OpenAI API和JSON有效负载的问题

slsn1g29  于 2023-02-10  发布在  PHP
关注(0)|答案(1)|浏览(618)

我有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库。OpenAI API需要JSON有效载荷,但发送的不是有效的JSON。

q5iwbnjs

q5iwbnjs1#

关于令牌限制

如官方OpenAI website所述:
根据所使用的模型,请求可以使用提示符和完成符之间共享的最多4097令牌。如果您的提示符是4000令牌,则您的完成符最多可以是97令牌。
这个限制目前是一个技术限制,但在这个限制范围内,往往有一些创造性的方法来解决问题,比如压缩你的提示,把文本分成更小的片段等等。
切换text-davinci-001以使用GPT-3型号,因为令牌限制更高。
GPT-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."}

相关问题