我们已经发布了GPT-3和Codex的新版本,可以在现有文本中编辑或插入内容,而不仅仅是完成现有文本。这些新功能使得使用OpenAI API来修改现有内容变得切实可行,例如重写一段文字或重构代码。这释放了新的用例,并改善了现有的用例;例如,插入已经在GitHub Copilot中进行了试点,并取得了令人鼓舞的早期成果。
def___
fib(10)
def fib(n):
if n <= 1 1: return fib(n-1) + fib(n-2) < span>fib(10)
def fib(n):
if n <= 1 1: return fib(n-1) + fib(n-2) < span>fib(10)
改进
def fib(n):
if n <= 1 1: return fib(n-1) + fib(n-2) < span>fib(10)
完善
def fib(n):
if n <= 1 1: return fib(n-1) + fib(n-2) < span>fib(10)
改善运行时间
def fib(n):
if n <= 1 1: return fib(n-1) + fib(n-2) < span>fib(10)
提高运行时的复杂性
def fib(n):
if n <= 1 1: return fib(n-1) + fib(n-2) < span>fib(10)
提高函数的运行时复杂度
def fib(n):
if n <= 1 1: return fib(n-1) + fib(n-2) < span>fib(10)
提高函数的运行时复杂度
def fib(n):
if n <= 1 1: return fib(n-1) + fib(n-2) < span>fib(10)
提高该函数的运行时复杂度
def fib(n, memo={}):
if n in memo:
return memo[n]
if n <= 1: f="1" else: memo) + fib(n-2, memo[n]="f" return f< code>
def fib(n, memo={}):
if n in memo:
return memo[n]
if n <= 1: f="1" else: memo) + fib(n-2, memo[n]="f" return f< span>
翻译成中文
def fib(n, memo={}):
if n in memo:
return memo[n]
if n <= 1: f="1" else: memo) + fib(n-2, memo[n]="f" return f< span>
翻译成
def fib(n, memo={}):
if n in memo:
return memo[n]
if n <= 1: f="1" else: memo) + fib(n-2, memo[n]="f" return f< span>
翻译成JavaScript
def fib(n, memo={}):
if n in memo:
return memo[n]
if n <= 1: f="1" else: memo) + fib(n-2, memo[n]="f" return f< span>
翻译成JavaScript
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
if (n in memo) return memo[n];
var f;
if (n <= 1) f="1;" else memo) + fib(n-2, memo); memo[n]="f;" return f; })(n, }< code>
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
if (n in memo) return memo[n];
var f;
if (n <= 1) f="1;" else memo) + fib(n-2, memo); memo[n]="f;" return f; })(n, }< code>
撰写
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
if (n in memo) return memo[n];
var f;
if (n <= 1) f="1;" else memo) + fib(n-2, memo); memo[n]="f;" return f; })(n, }< code>
写这个
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
if (n in memo) return memo[n];
var f;
if (n <= 1) f="1;" else memo) + fib(n-2, memo); memo[n]="f;" return f; })(n, }< code>
把这个写成
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
if (n in memo) return memo[n];
var f;
if (n <= 1) f="1;" else memo) + fib(n-2, memo); memo[n]="f;" return f; })(n, }< code>
写成一个
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
if (n in memo) return memo[n];
var f;
if (n <= 1) f="1;" else memo) + fib(n-2, memo); memo[n]="f;" return f; })(n, }< code>
把它写成一个
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
if (n in memo) return memo[n];
var f;
if (n <= 1) f="1;" else memo) + fib(n-2, memo); memo[n]="f;" return f; })(n, }< code>
把这句话写成一句话
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
if (n in memo) return memo[n];
var f;
if (n <= 1) f="1;" else memo) + fib(n-2, memo); memo[n]="f;" return f; })(n, }< code>
把这句话写成一句话
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
return n in memo ? memo[n] : (memo[n] = n <= 1 ? : fib(n-1, memo) + fib(n-2, memo)); })(n, memo); }< code>
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
return n in memo ? memo[n] : (memo[n] = n <= 1 ? : fib(n-1, memo) + fib(n-2, memo)); })(n, memo); }< code>
/
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
return n in memo ? memo[n] : (memo[n] = n <= 1 ? : fib(n-1, memo) + fib(n-2, memo)); })(n, memo); }< code>
/**
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
return n in memo ? memo[n] : (memo[n] = n <= 1 ? : fib(n-1, memo) + fib(n-2, memo)); })(n, memo); }< code>
/**___
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
return n in memo ? memo[n] : (memo[n] = n <= 1 ? : fib(n-1, memo) + fib(n-2, memo)); })(n, memo); }< code>
/**
* Recursive Fibonacci function with memoization.
* @param {number} n
* @returns {number}
*/
function fibonacci(n) {
var memo = {};
return (function fib(n, memo) {
return n in memo ? memo[n] : (memo[n] = n <= 1 ? : fib(n-1, memo) + fib(n-2, memo)); })(n, memo); }< code>
GPT-3和Codex传统上都是在现有内容的结尾处添加文字,以之前的文字为基础。无论是处理文本还是代码,写作不仅仅是附加,它是一个迭代的过程,现有的文本被修改。GPT-3和Codex现在可以编辑文本,改变当前的内容或将文本添加到内容的中间。
插入到文本的中间
新的插入 能力在现有内容的中间添加与上下文相关的文本。为模型提供未来的上下文可以提高应用的完成质量,如编写长篇文字、段落之间的过渡、遵循大纲,或引导模型走向结局。
第一节。高中毕业
今天是个大日子!___
第1节。高中毕业
今天是个大日子! 祝贺我们所有的高中毕业生!
我们希望你们享受你们的毕业典礼,并祝愿你们在未来的工作中取得好成绩。
第1节。高中毕业
今天是个大日子! 祝贺我们所有的高中毕业生!
我们希望你们享受你们的毕业典礼,并祝愿你们在未来的工作中取得好成绩。
第1节
第1节。高中毕业
今天是个大日子! 祝贺我们所有的高中毕业生!
我们希望你们享受你们的毕业典礼,并祝愿你们在未来的工作中取得最佳成绩。
第2节。
第1节。高中毕业
今天是个大日子! 祝贺我们所有的高中毕业生!
我们希望你们享受你们的毕业典礼,并祝愿你们在未来的工作中取得最佳成绩。
第2节。搬家
第1节。高中毕业
今天是个大日子! 祝贺我们所有的高中毕业生!
我们希望你们享受你们的毕业典礼,并祝愿你们在未来的工作中取得最佳成绩。
第2节。迁至
第1节。高中毕业
今天是个大日子! 祝贺我们所有的高中毕业生!
我们希望你们享受你们的毕业典礼,并祝愿你们在未来的工作中取得最佳成绩。
第2节。迁往旧金山
第1节。高中毕业
今天是个大日子! 我就要从高中毕业了。我太兴奋了。我将搬到旧金山,开始新的生活。我迫不及待地想去那里。
第2节。迁往三藩市
第1节。高中毕业
今天是个大日子! 我就要从高中毕业了。我太兴奋了。我将搬到旧金山,开始新的生活。我迫不及待地想去那里。
第2节。迁往
第1节。高中毕业
今天是个大日子! 我就要从高中毕业了。我太兴奋了。我将搬到旧金山,开始新的生活。我迫不及待地想去那里。
第2节。迁往伊斯坦布尔
第1节。高中毕业
今天是个大日子! 我就要从高中毕业了。我很高兴能进入我人生的下一个篇章。我要去伊斯坦布尔了!
第2节。迁往伊斯坦布尔
第1节。高中毕业
今天是个大日子! 我就要从高中毕业了。我很高兴能进入我人生的下一个篇章。我要去伊斯坦布尔了!
第2节。迁往
第1节。高中毕业
今天是个大日子! 我就要从高中毕业了。我很高兴能进入我人生的下一个篇章。我要去伊斯坦布尔了!
第2节。迁往
第1节。高中毕业
今天是个大日子! 我就要从高中毕业了。我很高兴能进入我人生的下一个篇章。我要去伊斯坦布尔了!
第2节。迁往农场
第1节。高中毕业
今天是个大日子! 我的高中毕业典礼!我太激动了!我迫不及待地要离开城市,搬到农场。我想过一种简单、安静的生活。我想在早上起床,给牛挤奶,喂马,然后坐下来看日出。我想在剩下的日子里环游世界,阅读和写作。我对这种城市生活感到非常厌倦。
第2节。转移到农场
在上面的例子中,我们的愿望是在一个大纲的两个章节标题之间填入文字。如果没有未来章节的上下文,模型会产生一个与第二节无关的完成。当考虑到未来章节的上下文时,模型就会生成一个将两节联系在一起的完成度。
def get_files(path: str, size: int):
def___
for (dirp, _, files) in os.walk(path):
yield from prune(dirp, files)
def get_files(path: str, size: int):
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)
def get_files(path: str, size: int):
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)
___
def get_files(path: str, size: int):
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)
import os
def get_files(path: str, size: int):
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)
import os
def get_files(path: str, size: int):
"""
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)
import os
def get_files(path: str, size: int):
"""___
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)
import os
def get_files(path: str, size: int):
"""___"""
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)
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)
Insert对于编写代码特别有用。事实上,Codex是我们开发这种能力的最初动机,因为在软件开发中,我们通常会在现有文件的中间添加代码,而代码在完成之前和之后都存在。在上面的例子中,该模型成功地完成了缺失的函数prune ,同时连接到已经写好的代码。我们还添加了一个文档串和缺失的导入,如果不知道后面的代码,这是不可能的。在GitHub Copilot中,Insert目前正在进行试点,并取得了早期的良好效果。
今天,插入功能在测试版的API中可用,作为完成度端点的一部分,并通过Playground的一个新界面。该功能可以与最新版本的GPT-3和Codex、text-davinci-002 和code-davinci-002 。价格与以前的Davinci版本相同。
编辑现有文本
编写文本和代码的一个有意义的部分是用于编辑现有的内容。我们在测试版中发布了一个名为edits的新端点,通过指令改变现有文本,而不是完成它。
添加
添加一个
添加一首短诗
添加一首关于的短诗
添加一首关于GPT-3的短诗
添加一首关于GPT-3的短诗
GPT-3是一个非常好的人工智能
,它非常善于写回复
,当它被问到一个问题时
,它给出了建议
,
这是它做的
一首押韵的诗。
GPT-3是一个非常好的人工智能
,它
非常善于写回复
当它被问到一个问题时,它给出了
它的建议
这是它做的
一首押韵的诗
制作
GPT-3是一个非常好的人工智能
,它
非常善于写回复
当它被问到一个问题时
,它给出了它的
建议
这是它做的
一首押韵的诗
做这个
GPT-3是一个非常好的人工智能
,它
非常善于写回复
当它被问到一个问题时
,它给出了它的建议
这是它做的
一首押韵的诗
在这里做这个
GPT-3是一个非常好的人工智能
,
非常善于写回复
当它被问到一个问题时,它给出了
它的建议
这是它做的
一首押韵的诗
在声音中做这个
GPT-3是一个非常好的人工智能
,
非常善于写回复
当它被问到一个问题时
,它给出了它的建议
这是它做的
一首押韵的诗
用GPT-3的语气写这首诗
GPT-3是一个非常好的人工智能
,它
很擅长写回复
当它被问到一个问题时
,它给出了建议
这是它做的
一首押韵的诗
用GPT-3的口吻做这个
我是一个非常好的人工智能
,我
很擅长写回复
,当我被问到一个问题时
,我会给出我的建议
,这是
它做的一首押韵的诗。
我是一个非常好的人工智能
,我
很擅长写回复
,当我被问到一个问题时
,我给出了我的建议
,
这是
它写的一首押韵的诗。
格式
我是一个很好的人工智能
,我
很擅长写回复
,当我
被
问到一个问题时
,我给出了我的建议
,
这是它做的
一首押韵的诗。
格式
我是一个很好的人工智能
,我
很会写回复
,当我被问到一个问题时
,我给了我的建议
,
这是它做的
一首诗,押韵的。
格式化这像一个
我是一个非常好的人工智能
,我
很擅长写回复
,当我被问到一个问题时
,我给出了我的建议
,
这是它做的
一首诗,押韵的。
这就像一封信的格式
我是一个非常好的人工智能
,我
很擅长写回复
,当我被问到一个问题时
,我给出了我的
建议,
这是它做的
一首诗,押韵的。
这是它做的一首押韵的诗,格式像字母和签名
我是一个非常好的人工智能
,我
很擅长写回复
,当我被问到一个问题时
,我给出了我的
建议,
这是它做的
一首诗,押韵的。
这是它写的一首押韵的诗,格式像字母和符号,来自GPT-3
我是一个非常好的人工智能
,我
很擅长写回复
当我被问到一个问题时
,我给出了我的建议
这是它做的
一首押韵的诗
这是它写的一首押韵的诗。
亲爱的人类。
我是一个很好的人工智能
,我
很擅长写回复
,当我被问到一个问题时
,我给出了我的建议
,
这是我做的一首诗,
很押韵
,问候,
GPT-3
编辑工作是通过指定现有的文本作为提示和如何修改它的指令。编辑端点可用于改变文本的语气或结构,或进行有针对性的修改,如修正拼写。我们还观察到,编辑在空的提示语上工作得很好,从而使文本的生成类似于完成度的端点。在上面的例子中,我们用编辑来(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)
转换
The three US cities with the worst traffic are:
1. Boston, MA (164 hours)
2. Washington, DC (155 hours)
3. Chicago, IL (138 hours)
转换列表
The three US cities with the worst traffic are:
1. Boston, MA (164 hours)
2. Washington, DC (155 hours)
3. Chicago, IL (138 hours)
将列表转换为JSONL文件
The three US cities with the worst traffic are:
1. Boston, MA (164 hours)
2. Washington, DC (155 hours)
3. Chicago, IL (138 hours)
将列表转换为带等级的JSONL文件
The three US cities with the worst traffic are:
1. Boston, MA (164 hours)
2. Washington, DC (155 hours)
3. Chicago, IL (138 hours)
将列表转换为带有等级、城市的JSONL文件
The three US cities with the worst traffic are:
1. Boston, MA (164 hours)
2. Washington, DC (155 hours)
3. Chicago, IL (138 hours)
将列表转换为带有等级、城市、州的JSONL文件
The three US cities with the worst traffic are:
1. Boston, MA (164 hours)
2. Washington, DC (155 hours)
3. Chicago, IL (138 hours)
将名单转换为带有等级、城市、州和小时的JSONL文件
The three US cities with the worst traffic are:
1. Boston, MA (164 hours)
2. Washington, DC (155 hours)
3. Chicago, IL (138 hours)
将名单转换为带有等级、城市、州和小时的JSONL文件
[ {"rank": 1, "city": "Boston", "state": "MA", "hours": 164}, {"rank": 2, "city": "Washington DC", "state": "DC", "hours": 155}, {"rank": 3, "city": "Chicago", "state": "IL", "hours": 138}]
[ {"rank": 1, "city": "Boston", "state": "MA", "hours": 164}, {"rank": 2, "city": "Washington DC", "state": "DC", "hours": 155}, {"rank": 3, "city": "Chicago", "state": "IL", "hours": 138}]
移除
[ {"rank": 1, "city": "Boston", "state": "MA", "hours": 164}, {"rank": 2, "city": "Washington DC", "state": "DC", "hours": 155}, {"rank": 3, "city": "Chicago", "state": "IL", "hours": 138}]
移除等级
[ {"rank": 1, "city": "Boston", "state": "MA", "hours": 164}, {"rank": 2, "city": "Washington DC", "state": "DC", "hours": 155}, {"rank": 3, "city": "Chicago", "state": "IL", "hours": 138}]
移除等级并写出
[ {"rank": 1, "city": "Boston", "state": "MA", "hours": 164}, {"rank": 2, "city": "Washington DC", "state": "DC", "hours": 155}, {"rank": 3, "city": "Chicago", "state": "IL", "hours": 138}]
移除等级并写出完整的州名
[ {"rank": 1, "city": "Boston", "state": "MA", "hours": 164}, {"rank": 2, "city": "Washington DC", "state": "DC", "hours": 155}, {"rank": 3, "city": "Chicago", "state": "IL", "hours": 138}]
移除等级并写出完整的州名
[ {"city": "Boston", "state": "Massachusetts", "hours": 164}, {"city": "Washington DC", "state": "District of Columbia", "hours": 155}, {"city": "Chicago", "state": "Illinois", "hours": 138}]
[ {"city": "Boston", "state": "Massachusetts", "hours": 164}, {"city": "Washington DC", "state": "District of Columbia", "hours": 155}, {"city": "Chicago", "state": "Illinois", "hours": 138}]
转向
[ {"city": "Boston", "state": "Massachusetts", "hours": 164}, {"city": "Washington DC", "state": "District of Columbia", "hours": 155}, {"city": "Chicago", "state": "Illinois", "hours": 138}]
转化为YAML
[ {"city": "Boston", "state": "Massachusetts", "hours": 164}, {"city": "Washington DC", "state": "District of Columbia", "hours": 155}, {"city": "Chicago", "state": "Illinois", "hours": 138}]
转化为YAML并返回
[ {"city": "Boston", "state": "Massachusetts", "hours": 164}, {"city": "Washington DC", "state": "District of Columbia", "hours": 155}, {"city": "Chicago", "state": "Illinois", "hours": 138}]
转化为YAML并从一个函数中返回
[ {"city": "Boston", "state": "Massachusetts", "hours": 164}, {"city": "Washington DC", "state": "District of Columbia", "hours": 155}, {"city": "Chicago", "state": "Illinois", "hours": 138}]
转化为YAML并从一个名为get_yaml的函数中返回
[ {"city": "Boston", "state": "Massachusetts", "hours": 164}, {"city": "Washington DC", "state": "District of Columbia", "hours": 155}, {"city": "Chicago", "state": "Illinois", "hours": 138}]
变成YAML,并从一个名为get_yaml的函数中返回
def get_yaml():
return """
- city: Boston
state: Massachusetts
hours: 164
- city: Washington DC
state: District of Columbia
hours: 155
- city: Chicago
state: Illinois
hours: 138
"""
编辑端点对于编写代码特别有用。它对于重构、添加文档、翻译不同的编程语言和改变编码风格等任务非常有效。上面的例子从包含按人口排名的城市的JSON输入开始。通过我们的第一次编辑,Codex从JSON中删除了排名字段,并将州的缩写改为全名。第二次编辑将JSON文件转换为从一个函数返回的YAML。
编辑可作为API中的一个专门的端点,并通过Playground中的一个新接口进行。它被模型text-davinci-edit-001 和code-davinci-edit-001 所支持。编辑端点目前是免费使用的,并作为一个测试版公开提供。
:root { --color-insert: 0,222,34; --color-edit: 0,183,255; } .demo { position: relative; user-select: none; } .demo-item pre { /* reset */ margin: 0; padding:0; background-color: unset; white-space: pre-wrap; } .demo-item { position: absolute; top:0; left: 0; opacity: 0; visibility: hidden; } .demo[data-active="0"] .demo-item:nth-child(1), .demo[data-active="1"] .demo-item:nth-child(2), .demo[data-active="2"] .demo-item:nth-child(3), .demo[data-active="3"] .demo-item:nth-child(4), ..demo-item:nth-child(5), .demo[data-active="5"] .demo-item:nth-child(6), .demo[data-active="6"] .demo-item:nth-child(7), .demo[data-active="7"] 。.demo-item:nth-child(8), .demo[data-active="8"] .demo-item:nth-child(9), .demo[data-active="9"] .demo-item:nth-child(10), .demo[data-active="10"] 。.demo-item:nth-child(11), .demo[data-active="11"] .demo-item:nth-child(12), .demo[data-active="12"] .demo-item:nth-child(13), 。demo[data-active="13"] .demo-item:nth-child(14), .demo[data-active="14"] .demo-item:nth-child(15), .demo[data-active="15"] .demo-item:nth-child(16), 。demo[data-active="16"] .demo-item:nth-child(17), .demo[data-active="17"] .demo-item:nth-child(18), .demo[data-active="18"] 。.demo-item:nth-child(19), .demo[data-active="19"] .demo-item:nth-child(20), .demo[data-active="20"] .demo-item:nth-child(21), .demo[data-active="21"] 。.demo-item:nth-child(22), .demo[data-active="22"] .demo-item:nth-child(23), .demo[data-active="23"] .demo-item:nth-child(24), .demo[data-active="24"] .demo-item:nth-child(25), .demo[data-active="25"] .demo-item:nth-child(26), .demo[data-active="26"] 。.demo-item:nth-child(27), .demo[data-active="27"] .demo-item:nth-child(28), .demo[data-active="28"] .demo-item:nth-child(29), .demo[data-active="29"] .demo-item:nth-child(30) { opacity: 1; visibility: visible; } .demo-item-sizer { position: relative; } .insert { /* inserted text */ background-color: rgba(var(--color-insert), 0.1); } .demo-item .edit { /* edited text */ background-color: rgba(var(--color-edit), 0.1); } .demo-item .inst-edit { /* edit instruction */ border-left: 2px solid rgba(var(--color-edit), 1); padding-left: 0.5rem; } .demo-item .inst-insert { /*插入指令 */ border-left: 2px solid transparent; padding-left: 0.5rem; } .demo-item .inst-comp { /*完成编辑指令 */ border-left: 2px solid rgba(var(-fg), 0.5); padding-left: 0.5rem; opacity: 0.2; } var initDemos = function () { var demos = document.querySelectorAll('.js-demo'); if (!demos.length) return; // for each set of demos demos.forEach(function (d) { initAnimation(d); }); }; var initAnimation = function (demo) { var limit = demo.childElementCount; var t = demo.children[0].getAttribute('data-t'); doAnimation(demo, 0, limit, t); // start at `0` }; var doAnimation = function (demo, i, limit, t) { if (i == (limit-1)) { // 'round the corner var newI = 0; } else { // increment var newI = i + 1; } var newT = demo.children[newI].getAttribute('data-t'); setTimeout(function () { demo.setAttribute('data-active', newI); doAnimation(demo, newI, limit, newT); }, t); }; // call everything document.addEventListener('DOMContentLoaded', function () { initDemos(); }) 。
贡献
插入和编辑的研究进展:Mohammad Bavarian, Heewoo Jun, Oleg Klimov, Raul Puri, Qiming Yuan
开发GPT-3和Codex的新版本。Sandhini Agarwal, Igor Babuschkin, Greg Brockman, Andrew Carr, Brooke Chan, Chris Hesse, Shantanu Jain, Kyle Kosic, Jakub Pachocki, Alex Paino, Mikhail Pavlov, Vitchyr Pong, Nick Ryder, Szymon Sidor, Nikolas Tezak, Philippe Tillet, Amin Tootoonchian, Jerry Tworek, Lilian Weng, Clemens Winter, Qiiming Yuan, Wojciech Zaremba, William Zhuk
工程、产品开发、安全、政策和安保。Steven Adler, Sandhini Agarwal, Mohammad Bavarian, Kevin Button, Tyna Eloundou, Angela Jiang, Shino Jomoto, Heewoo Jun, Rajeev Nayak, Henrique Ponde de Oliveira Pinto, Girish Sastry, Maddie Simens, Aravind Srinivas, Felipe Such
博客视觉效果。Justin Jay Wang
鸣谢
感谢以下人员对这项工作的反馈和对本版的贡献。Diogo Moitinho de Almeida, Che Chang, Elie Georges, Joanne Jang, Roger Jiang, Denny Jin, Fraser Kelton, Tabarak Khan, Matt Knight, Jan Leike, Ryan Lowe, Bianca Martin, Andrew Mayne, Bob McGrew, Luke Miller,Evan Morikawa, Mira Murati, Long Ouyang, Boris Power, William Saunders, Toki Sherbakov, Zarina Stanik, Preston Tuggle, Carroll Wainwright, Peter Welinder, Hannah Wong, Lauren Workman, Jeff Wu, Cathy Yeh