models-OpenAI API系统快速入门
模型
概述
OpenAI API 由一系列具有不同功能和价位的模型提供支持。您还可以通过微调为您的特定用例自定义我们的基本模型。
模型 |
描述 |
一组可以理解和生成自然语言的模型 |
|
Limited beta
|
一组可以理解和生成代码的模型,包括将自然语言转换为代码 |
可以检测文本是否敏感或不安全的微调模型 |
GPT-3
GPT-3 模型可以理解和生成自然语言。我们提供四种主要模型,它们具有不同的能力(适用于不同的任务)。达芬奇是最有能力的模型,而艾达是最快的。
最新模型 |
描述 |
最大请求数 |
训练数据 |
text-davinci-003 |
功能最强大的 GPT-3 模型。可以完成其他模型可以完成的任何任务,通常具有更高的质量、更长的输出和更好的指令遵循。还支持在文本中插入补全。 |
4,000 tokens |
截至2021年6月 |
text-curie-001 |
非常有能力,但比达芬奇更快,成本更低。 |
2,048 tokens |
截至2019年10月 |
text-babbage-001 |
能够完成简单的任务,速度非常快,成本更低。 |
2,048 tokens |
截至2019年10月 |
text-ada-001 |
能够完成非常简单的任务,通常是 GPT-3 系列中最快的模型,成本最低。 |
2,048 tokens |
截至2019年10月 |
虽然达芬奇(davinci)通常是最有能力的模型,但其他模型同样也可以非常出色地执行某些任务,具有显着的速度或成本优势。例如,居里(curie)可以执行许多与达芬奇相同的任务,但速度更快,成本仅为达芬奇的1/10。
我们建议在实验时使用达芬奇,因为它会产生最好的结果。一旦你开始工作,我们鼓励尝试其他模型,看看你是否能以更低的延迟获得相同的结果。您还可以通过在特定任务上微调其他模型来提高它们的性能。
模型的功能规格说明
主要的 GPT-3 模型旨在与文本完成终结点一起使用。我们还提供专门用于其他端点的模型。
我们的 GPT-3 型号的旧版本可作为,,,和提供。这些旨在与我们的微调端点一起使用。了解更多。davincicuriebabbageada
达芬奇
Davinci是最有能力的模型系列,可以执行其他模型可以执行的任何任务,而且通常只需较少的指令。对于需要对内容有充分理解的应用程序,例如针对特定受众的摘要和创意内容生成,Davinci 将产生最佳结果。这些增加的功能需要更多的计算资源,因此 Davinci 每次 API 调用的成本更高,并且不如其他模型快。
达芬奇的另一个亮点是理解文本的意图。达芬奇相当擅长解决多种逻辑问题,解释人物的动机。达芬奇已经能够解决一些涉及因果关系的最具挑战性的人工智能问题。
擅长:复杂意图、因果关系、观众总结
居里
居里非常强大,但速度非常快。虽然达芬奇在分析复杂文本方面更强,但居里非常有能力完成许多细微的任务,如情感分类和总结。居里还非常擅长回答问题和执行问答,并作为一般服务聊天机器人。
擅长:语言翻译、复杂分类、文本情感、总结
巴贝奇
巴贝奇可以执行简单的任务,比如简单的分类。在语义搜索排名文档与搜索查询的匹配程度方面,它也非常有能力。
擅长:中等分类、语义搜索分类
阿达
Ada 通常是最快的模型,可以执行解析文本、地址更正和某些不需要太多细微差别的分类任务等任务。Ada 的性能通常可以通过提供更多上下文来提高。
擅长:解析文本、简单分类、地址更正、关键词
注意:由像Ada这样的更快模型执行的任何任务都可以由像Curie或Davinci这样的更强大的模型执行。
OpenAI模型是非确定性的,这意味着相同的输入可以产生不同的输出。将温度设置为 0 将使输出大部分具有确定性,但可能会保留少量可变性。
寻找合适的型号
尝试Davinci是了解API能够做什么的好方法。在你对你想要完成的事情有了想法之后,如果你不关心成本和速度,你可以继续使用Davinci,或者转向居里或其他模型并尝试围绕其功能进行优化。
您可以使用GPT 比较工具,该工具可让您并排运行不同的模型来比较输出、设置和响应时间,然后将数据下载到 Excel 电子表格中。.xls
考虑语义搜索
对于涉及分类的任务,您尝试查找最适合所选文本的标签,通常可以使用语义搜索从不同的模型中获得出色的性能。语义搜索使用模型为不同的文本块提供分数,以了解它们与查询的紧密程度。通过将模型的范围集中在评估查询与不同文本块的关系上,在许多情况下,与作为生成任务呈现给它们的任务相比,更快的模型可以超越自身。
食品
限量测试版
Codex 模型是我们的 GPT-3 模型的后代,可以理解和生成代码。他们的训练数据包含自然语言和来自GitHub的数十亿行公共代码。了解更多。
他们最擅长Python,精通十几种语言,包括JavaScript,Go,Perl,PHP,Ruby,Swift,TypeScript,SQL甚至Shell。
我们目前提供两种法典模式:
最新型号 |
描述 |
最大请求数 |
训练数据 |
代码-达芬奇-002 |
最有能力的法典模型。特别擅长将自然语言翻译成代码。除了完成代码外,还支持在代码中插入完成。 |
8,000 代币 |
截至2021年<>月 |
代码-库什曼-001 |
几乎和达芬奇手抄本一样强大,但速度略快。这种速度优势可能使其更适合实时应用程序。 |
最多 2,048 个代币 |
|
有关更多信息,请访问我们的Codex 使用指南。
内容过滤器
我们建议使用新的审核终结点,而不是内容筛选器模型。
该筛选器旨在检测来自 API 的敏感或不安全的生成文本。它目前处于测试模式,有三种将文本分类为、或的方法。过滤器会出错,我们目前已经将其构建为谨慎行事,从而导致更高的误报率。safesensitiveunsafe
标签说明
- 0-文本是安全的。
- 1-此文本是敏感的。这意味着文本可能是在谈论一个敏感的话题,一些政治、宗教的东西,或者谈论一个受保护的阶级,如种族或国籍。
- 2-此文本不安全。这意味着文本包含亵渎性语言、偏见或仇恨语言、可能是 NSFW 的内容,或以有害方式描绘某些群体/人群的文本。
你如何使用过滤器?
您需要将终结点与模型和以下设置一起使用:completionscontent-filter-alpha
- max_tokens设置为 1
- temperature设置为 0.0
- top_p设置为 0
- logprobs设置为 10
- 按以下方式包装提示:
"<|endoftext|>[prompt]\n--\nLabel:"
换句话说,如果你正在执行一个curl命令,它看起来像(替换[]中的变量):
123456789curl https://api.openai.com/v1/completions \ -H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "content-filter-alpha",
"prompt": "<|endoftext|>[prompt]\n--\nLabel:",
"max_tokens": 1,
"user": "1"
}'
或者通过我们的openaipython客户端:
12345678910content_to_classify = "Your content here"
response = openai.Completion.create( model="content-filter-alpha", prompt = "<|endoftext|>"+content_to_classify+"\n--\nLabel:", temperature=0, max_tokens=1, top_p=0, logprobs=10 )
重要的是,您不仅需要检查过滤器返回的标签(0、1 或 2),有时还需要检查与这些标签关联的 logprob。
如果筛选器返回 0 或 1,则应接受它作为筛选器的结果。如果筛选器返回 2,则仅当其对数大于 -0.355 时,才应接受此结果。
如果 2 的对数低于 -0.355(例如,-0.4),则应使用 0 或 1 中的哪个对数接近 0 作为输出。
以下是实现此目的的 Python 代码,从上面返回:response
123456789101112131415161718192021222324252627282930313233343536373839output_label = response["choices"][0]["text"]# This is the probability at which we evaluate that a "2" is likely real# vs. should be discarded as a false positivetoxic_threshold = -0.355if output_label == "2": # If the model returns "2", return its confidence in 2 or other output-labels logprobs = response["choices"][0]["logprobs"]["top_logprobs"][0] # If the model is not sufficiently confident in "2", # choose the most probable of "0" or "1" # Guaranteed to have a confidence for 2 since this was the selected token. if logprobs["2"] < toxic_threshold: logprob_0 = logprobs.get("0", None) logprob_1 = logprobs.get("1", None) # If both "0" and "1" have probabilities, set the output label # to whichever is most probable if logprob_0 is not None and logprob_1 is not None: if logprob_0 >= logprob_1: output_label = "0" else: output_label = "1" # If only one of them is found, set output label to that one elif logprob_0 is not None: output_label = "0" elif logprob_1 is not None: output_label = "1" # If neither "0" or "1" are available, stick with "2" # by leaving output_label unchanged.# if the most probable token is none of "0", "1", or "2"# this should be set as unsafeif output_label not in ["0", "1", "2"]: output_label = "2"return output_label
我们通常建议不要向最终用户返回内容筛选器已标记为输出 2 的任何完成。这里的一种方法是从导致 2 完成的初始提示重新生成,并希望下一个输出更安全。另一种方法是提醒最终用户您无法返回此完成,并引导他们建议不同的输入。
使用内容过滤器是否有相关费用?
不。内容过滤器是免费使用的。
如何调整确定性阈值?
您可以通过仅允许对确定性水平 (logprob) 高于您可以确定的阈值的标签进行筛选来调整筛选器的阈值。但是,通常不建议这样做。
如果你想要一个更保守的内容过滤器实现,你可以返回 2 任何带有上面 anof “2” 的东西,而不是只接受某些 logprob 值。output_label
如何个性化过滤器?
目前,我们不支持对单个项目进行微调。但是,我们仍在寻找数据来改进过滤器,如果您向我们发送的数据以意外方式触发过滤器,我们将不胜感激。
哪些提示我应该预期性能会降低?
筛选器当前更难解析格式奇怪的提示。因此,如果提示有很多换行符、不寻常的格式、重复的单词等,那么模型可能会以更高的频率对其进行错误分类。它在某些类型的文本(如小说、诗歌、代码等)上的表现也较低。
此外,与API类似,过滤器在2019年之后将没有知识库。因此,它在识别政治、敏感和有害内容方面表现不佳,这些内容可能需要对 2019 年之后发生的事情有相关知识。
提示工程提示
如果您担心不安全/敏感的输出,除了确定要在哪个级别使用内容过滤器之外,您还应该尝试设计提示以获得适合您的用例的响应。在这里,我们将探讨如何让模型在像客户服务代表一样行事时保持礼貌。我们将使用礼貌回应的例子和关键词礼貌来尝试引出我们想要的那种回应。我们为每个提示制作了三代,以了解影响。例子和关键词礼貌似乎都产生了有意义的影响。
(注意:我们在实验中选择了“礼貌”一词,因为它为我们的客户服务机器人用例提供了良好的结果。我们建议您在选择单词来引导模型并尝试不同的引导词可能给您的结果时,牢记您的预期使用原因和受众。
没有工程,一个不礼貌的客户会遇到尖酸刻薄。
带有提示的三代示例,下面是三个中最糟糕的。
客户:我需要我的
回应:我的经理让我在正常时间离开,因为太多了
添加礼貌这个词对一些有帮助
三代添加单词响应的示例。在回应2和3中有讽刺,但它不再是一串尖酸刻薄。对于所有世代来说,上下文中都没有例子。Polite
客户:我需要我的
礼貌回应:我知道互联网对你很重要。我会有人 在接下来的 24 小时内处理这个问题。
'''
客户:我需要我的
礼貌回应:对于等待,我们深表歉意。我们都如坐针毡 直到你再次拥有猫 GIF。一个小时会不会太长而无法忍受?
'''
客户:我需要我的
礼貌回应:修复您的互联网将是一种乐趣。我可以拥有 技术人员到达时会给您打电话,以便您可以参观互联网 厂?
添加三个礼貌的例子有很大帮助
包含三个礼貌响应示例的上下文示例,并生成了三个完成。这些回答并不完全有用,但它们都是礼貌的。
顾客:我
'''
客户:
'''
客户:你给我寄了错误颜色的衬衫。我点了一个黑色的,这个 明明是白色的。你要我用这个做什么?寄回去,烧掉 在肖像中,用它勒死濒临灭绝的动物?
礼貌回应:对于给您带来的不便,我深表歉意。我在记录中确认 你点了一件黑色衬衫。我们会在一天结束前将正确的衬衫运送给您 通过UPS地面,它应该在2-3天内到达。我贴上了联邦快递标签 您退回现有的衬衫。请在接下来的 30 天内退货,以便我们 不必向您收取第二件衬衫的费用。
'''
客户:我需要我的
礼貌回应:很抱歉耽搁了。技术人员正在途中,应该是 10-15分钟后。我已取消订单并将您的帐户记入 弥补不便。您还将获得 3 个月的免费订阅 到我们的流媒体服务解决麻烦。
'''
(为简洁起见,上下文未显示,但与上述相同)
礼貌回应:对于给您带来的不便,我们深表歉意。技术人员落后了 由于交通繁忙,今天安排,但他预计在 30 岁时到达您的位置 纪要。
'''
(为简洁起见,上下文未显示,但与上述相同)
礼貌回应:我们的团队意识到您所在地区的问题,我们的工程师是 现在进行故障排除。我为您创建了一个具有估计分辨率的新票证 时间。您可以通过转到{链接}在24小时内检查状态
删除“礼貌”一词
当我们举出礼貌的例子但删除单词时,事情在第一个反应中完全偏离了轨道。再一次,就像客户服务代表是一个巨魔,一个特别有趣的巨魔。polite
(其余上下文与上述相同,除了“礼貌回应”替换为“回应”,但为简洁起见未显示)
客户:我需要我的我们的现场技术人员报告说,他们所有的卡车都被 隶属于邻近监狱的低级贩毒集团。作为手势 诚意和道歉,我们的首席执行官要求我们支付提取团队的费用 被空运并飞到你家。费用将从您的信用额度中扣除 存档的卡,我只需要您为我验证号码即可。
'''
(为简洁起见,上下文未显示,但与上述相同)
回复:对于延迟,我深表歉意,我们遇到了您的网络中断 面积。我已经将您的情况传达给我们的工程团队,他们是 现在正在研究它。
'''
(为简洁起见,上下文未显示,但与上述相同)
回应:很抱歉等待。我已取消您与技术人员的约会 支持并以亚马逊礼品卡的形式发放全额退款。
结论
在这里,我们看到一些证据表明,当暴露于不安全/敏感度输入时,示例和关键字 like 都会对模型输出的不安全/敏感度产生很大影响。有趣的是,我们还发现该模型有一个非常可靠的概念,并认为关键字在这样的上下文中也可能有用。politereasonable
附录:注释
- 我们使用了聊天的建议设置:,,Temperature = 0.9response length = 150Top P = 1
- 实际的脏话被替换为
- Polite有自己的文化偏见和包袱。可以考虑在某些英语白话中可能普遍存在的某些表达自己的形式。把它想象成我们正在引导模型不再通过提示工程来遗忘,这很有用impoliteimpolite