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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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