OpenAI GPT-3 API错误:”此模型的最大上下文长度为2049个标记”

我有两个与OpenAI完成结果相关的问题。

当我提供500字的内容并提示“修正语法错误”时,以下结果并未返回完整的文本(是标记问题吗?)

Enter image description here

第二个问题是当文本中有时出现双引号单引号时,会干扰JSON格式。因此,我从内容中删除了任何类型的引号(我不确定这是不是最佳解决方案,但我可能更倾向于在JavaScript中而不是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。”


回答:

关于标记限制

首先,我认为您不了解标记的工作原理:500个单词超过500个标记。使用标记器来计算标记数量。

正如官方OpenAI文章中所述:

根据使用的模型,请求可以使用最多4097个标记,共享在提示和完成之间。如果您的提示是4000个标记,那么您的完成最多可以是97个标记。

目前的限制是一个技术限制,但在限制内通常有创造性的解决问题的方法,例如压缩您的提示,将文本分成更小的部分等。

text-davinci-001切换为GPT-3模型,因为其标记限制更高。

GPT-3模型

表格

关于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": "此模型的最大上下文长度为4097个标记,但您请求了6450个标记(您的提示中有1450个;完成需要5000个)。请减少您的提示或完成长度。"}

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注