我有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。
1条答案
按热度按时间q5iwbnjs1#
关于令牌限制
如官方OpenAI website所述:
根据所使用的模型,请求可以使用提示符和完成符之间共享的最多
4097
令牌。如果您的提示符是4000
令牌,则您的完成符最多可以是97
令牌。这个限制目前是一个技术限制,但在这个限制范围内,往往有一些创造性的方法来解决问题,比如压缩你的提示,把文本分成更小的片段等等。
切换
text-davinci-001
以使用GPT-3型号,因为令牌限制更高。GPT-3型号:
我想你不明白代币是怎么运作的* * 500个单词大于500个标记**。使用Tokenizer计算标记数。
关于JSON中的双引号
您可以在JSON中的双引号前面使用
\
来转义双引号,如下所示:但是......这更多的是一种权宜之计,要想找到合适的解决方案,请看上面@ADyson的评论:
不要像这样手工构建JSON。用正确的结构创建一个PHP对象/数组,然后使用
json_encode()
将其转换为有效的JSON,它会自动处理任何需要的转义等,您也可以使用选项来调整输出的某些内容-查看PHP文档。您需要将
max_tokens
参数设置得更高。否则,输出将比输入短。您将无法恢复整个固定文本,而只能恢复其中的一部分。现在您将
max_tokens
参数设置得太高了!如果您设置max_tokens = 5000
,即使对于功能最强大的GPT-3模型(即text-davinci-003
),这也太高了。提示符和完成一起可以是4097
令牌。如果你看一下你得到的错误,你就可以弄清楚这一点: