如何通过新的seed参数使您的完成输出具有可重现性
TLDR:开发人员现在可以在Chat
Completion请求中指定seed
参数,以接收(大多数情况下)一致的输出。为了帮助您跟踪这些更改,我们公开了system_fingerprint
字段。如果此值不同,您可能会看到不同的输出,这是由于我们在系统上所做的更改。请注意,此功能处于测试阶段,目前仅支持gpt-4-1106-preview
和gpt-3.5-turbo-1106
。
背景
在使用我们的API时,用户社区一直对可重现性提出了很大的需求。例如,当获得可重现的数值结果的能力时,用户可以解锁一些对数值变化敏感的用例。
用于一致输出的模型级功能
Chat Completions和Completions API默认是非确定性的(这意味着模型输出可能因请求而异),但现在通过一些模型级控制提供了一些控制以实现确定性输出。
这可以解锁一致的完成,从而使得对构建在API之上的任何内容的模型行为具有完全控制,并且对于复制结果和测试非常有用,这样您就可以确切地知道会得到什么。
实现一致的输出
为了在API调用之间接收_大多数_确定性输出:
- 将
seed
参数设置为您选择的任何整数,但在请求之间使用相同的值。例如,12345
。 - 在请求之间将所有其他参数(prompt、temperature、top_p等)设置为相同的值。
- 在响应中,检查
system_fingerprint
字段。系统指纹是当前模型权重、基础设施和OpenAI服务器用于生成完成的其他配置选项的组合的标识符。每当更改请求参数或OpenAI更新用于提供我们的模型的基础设施的数值配置时(可能每年发生几次),它都会更改。
如果在您的请求中seed
、请求参数和system_fingerprint
都匹配,那么模型输出将大多相同。即使请求参数和system_fingerprint
匹配,由于我们模型固有的非确定性,也有很小的可能性响应会有所不同。
模型级别控制 - seed
和 system_fingerprint
seed
如果指定了seed
,我们的系统将尽最大努力进行确定性采样,这样使用相同的seed
和参数重复请求应该返回相同的结果。并不保证确定性,您应该参考system_fingerprint
响应参数来监控后端的变化。
system_fingerprint
这个指纹代表模型运行的后端配置。它可以与seed
请求参数一起使用,以了解后端是否已经进行了可能影响确定性的更改。这是用户是否应该期望“几乎总是相同结果”的指标。