OpenAI GPT-3 新功能:编辑和插入
我们发布了新版本的 GPT-3 和 Codex ,它们可以编辑内容或将内容插入现有文本,而不仅仅是完成现有文本。这些新功能使得使用 OpenAI API 修改现有内容变得切实可行,例如重写一段文本或重构代码。这解锁了新的用例并改进了现有的用例;例如,插入已经在 GitHub Copilot中进行了试点 ,早期结果很有希望。
/**___
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
return n in memo ? memo[n] : (memo[n] = n <= 1 ? 1 : fib(n-1, memo) + fib(n-2, memo));
})(n, memo);
}
GPT-3 和 Codex 传统上会根据之前的文本在现有内容的末尾添加文本。无论是处理文本还是代码,编写都不仅仅是附加——它是一个迭代过程,其中修改现有文本。GPT-3 和 Codex 现在可以编辑文本,更改当前存在的内容或将文本添加到内容中间。
插入到文本中间
新的 插入 功能 在现有内容中间添加上下文相关的文本。为模型提供未来的上下文可以提高应用程序的完成质量,例如编写长文本、段落之间的转换、遵循大纲或引导模型走向结局。
今天是个大日子!祝贺我们所有的高中毕业生!
我们希望你喜欢你的毕业典礼,并祝你在未来的努力中好运。
在上面的示例中,希望在大纲的两个节标题之间填充文本。如果没有未来部分的上下文,模型会生成与第二部分无关的完成。当考虑到未来部分的上下文时,模型会生成一个将两个部分联系在一起的完成。
import os
def get_files(path: str, size: int):
"""Yields files in the path tree of min size"""
def prune(dirp, files):
for file in files:
file = os.path.join(dirp, file)
if os.path.getsize(file) > size:
yield file
for (dirp, _, files) in os.walk(path):
yield from prune(dirp, files)
插入对于编写代码特别有用。事实上,Codex 是我们开发此功能的最初动机,因为在软件开发中,我们通常将代码添加到现有文件的中间,代码在完成前后存在。在上面的示例中,模型成功完成了缺失的功能 prune
,同时连接到已编写的代码。我们还添加了一个文档字符串和缺少的导入,如果不知道后面的代码,这是不可能的。在 GitHub Copilot 中,Insert 目前正在试验中,并取得了早期有希望的结果。
作为完成端点的一部分并通过Playground 中的新界面 ,今天的 API 中提供了插入功能的 beta 版 。该功能可用于最新版本的 GPT-3 和 Codex, text-davinci-002
以及 code-davinci-002
. 定价 与之前版本的 Davinci 相同。
编辑现有文本
编写文本和代码的一个有意义的部分是花在编辑现有内容上。我们在测试版中发布了一个名为 编辑的新端点 ,它通过指令更改现有文本,而不是完成它。
通过将现有文本指定为提示和有关如何修改它的说明来进行编辑。edits 端点可用于更改文本的语气或结构,或进行有针对性的更改,如修复拼写。我们还观察到编辑在空提示上运行良好,从而使文本生成类似于 完成端点。在上面的示例中,我们使用编辑来 (1) 添加一首诗,(2) 将诗更改为第一人称,(3) 将诗转换为带有适当称呼和签名的信件。
The three US cities with the worst traffic are:
1. Boston, MA (164 hours)
2. Washington, DC (155 hours)
3. Chicago, IL (138 hours)
edits 端点对于编写代码特别有用。它适用于重构、添加文档、编程语言之间的转换以及更改编码风格等任务。上面的示例以包含按人口排名的城市的 JSON 输入开始。在我们的第一次编辑中,Codex 从 JSON 中删除了排名字段,并将州缩写更改为全名。第二次编辑将 JSON 文件转换为从函数返回的 YAML。
编辑可以作为 API 中的专用端点使用,也可以通过Playground 中的新界面使用 。它受模型 text-davinci-edit-001
和 支持code-davinci-edit-001
。edits 端点目前可以 免费使用 ,并作为测试版公开提供。