GPT-4o加錢能變快!新功能7秒完成原先23秒的任務(wù)
OpenAI出了個新功能,直接讓ChatGPT輸出的速度原地起飛!
這個功能叫做“預(yù)測輸出”(Predicted Outputs),在它的加持之下,GPT-4o可以比原先快至多5倍。
以編程為例,來感受一下這個feel:
為啥會這么快?用一句話來總結(jié)就是:
跳過已知內(nèi)容,不用從頭開始重新生成。
因此,“預(yù)測輸出”就特別適合下面這些任務(wù):
- 在文檔中更新博客文章
- 迭代先前的響應(yīng)
- 重寫現(xiàn)有文件中的代碼
而且與OpenAI合作開發(fā)這個功能的FactoryAI,也亮出了他們在編程任務(wù)上的數(shù)據(jù):
從實驗結(jié)果來看,“預(yù)測輸出”加持下的GPT-4o響應(yīng)時間比之前快了2-4倍,同時保持高精度。
并且官方還表示:
原先需要70秒完成的編程任務(wù),現(xiàn)在只需要20秒。
值得注意的是,目前“預(yù)測輸出”功能僅支持GPT-4o和GPT-4o mini兩個模型,且是以API的形式。
對于開發(fā)者而言,這可以說是個利好消息了。
網(wǎng)友們在線實測
消息一出,眾多網(wǎng)友也是坐不住了,反手就是實測一波。
例如Firecrawl創(chuàng)始人Eric Ciarla就用“預(yù)測輸出”體驗了一把將博客文章轉(zhuǎn)為SEO(搜索引擎優(yōu)化)的內(nèi)容,然后他表示:
速度真的超級快。
它就像在API調(diào)用中添加一個預(yù)測參數(shù)一樣簡單。
,時長00:20
另一位網(wǎng)友則是在已有的代碼之上,“喂”了一句Prompt:
change the details to be random pieces of text.
將詳細信息更改為隨機文本片段。
來感受一下這個速度:
也有網(wǎng)友曬出了自己實測的數(shù)據(jù):
總而言之,快,是真的快。
怎么做到的?
對于“預(yù)測輸出”的技術(shù)細節(jié),OpenAI在官方文檔中也有所介紹。
OpenAI認為,在某些情況下,LLM的大部分輸出都是提前知道的。
如果你要求模型僅對某些文本或代碼進行細微修改,就可以通過“預(yù)測輸出”,將現(xiàn)有內(nèi)容作為預(yù)測輸入,讓延遲明顯降低。
例如,假設(shè)你想重構(gòu)一段 C# 代碼,將 Username 屬性更改為 Email
/// <summary>
/// Represents a user with a first name, last name, and username.
/// </summary>
public class User
{
/// <summary>
/// Gets or sets the user's first name.
/// </summary>
public string FirstName { get; set; }
/// <summary>
/// Gets or sets the user's last name.
/// </summary>
public string LastName { get; set; }
/// <summary>
/// Gets or sets the user's username.
/// </summary>
public string Username { get; set; }
}
你可以合理地假設(shè)文件的大部分內(nèi)容將不會被修改(例如類的文檔字符串、一些現(xiàn)有的屬性等)。
通過將現(xiàn)有的類文件作為預(yù)測文本傳入,你可以更快地重新生成整個文件。
import OpenAI from "openai";
const code = `
/// <summary>
/// Represents a user with a first name, last name, and username.
/// </summary>
public class User
{
/// <summary>
/// Gets or sets the user's first name.
/// </summary>
public string FirstName { get; set; }
/// <summary>
/// Gets or sets the user's last name.
/// </summary>
public string LastName { get; set; }
/// <summary>
/// Gets or sets the user's username.
/// </summary>
public string Username { get; set; }
}
`;
const openai = new OpenAI();
const completion = await openai.chat.completions.create({
model: "gpt-4o",
messages: [
{
role: "user",
content: "Replace the Username property with an Email property. Respond only with code, and with no markdown formatting."
},
{
role: "user",
content: code
}
],
prediction: {
type: "content",
content: code
}
});
// Inspect returned data
console.log(completion);
使用“預(yù)測輸出”生成tokens會大大降低這些類型請求的延遲。
不過對于“預(yù)測輸出”的使用,OpenAI官方也給出了幾點注意事項。
首先就是我們剛才提到的僅支持GPT-4o和GPT-4o-mini系列模型。
其次,以下API參數(shù)在使用預(yù)測輸出時是不受支持的:
- n
- logprobs
- presence_penalty
- frequency_penalty
- audio
- modalities
- max_completion_tokens
- tools
除此之外,在這份文檔中,OpenAI還總結(jié)了除“預(yù)測輸出”之外的幾個延遲優(yōu)化的方法。
包括“加速處理token”、“生成更少的token”、“使用更少的輸入token”、“減少請求”、“并行化”等等。
文檔鏈接放在文末了,感興趣的小伙伴可以查閱哦~
One More Thing
雖然輸出的速度變快了,但OpenAI還有一個注意事項引發(fā)了網(wǎng)友們的討論:
When providing a prediction, any tokens provided that are not part of the final completion are charged at completion token rates.
在提供預(yù)測時,所提供的任何非最終完成部分的tokens都按完成tokens費率收費。
有網(wǎng)友也曬出了他的測試結(jié)果:
- 未采用“預(yù)測輸出”:5.2秒,0.1555美分
- 采用了“預(yù)測輸出”:3.3秒,0.2675美分
嗯,快了,也貴了。
OpenAI官方文檔:https://platform.openai.com/docs/guides/latency-optimization#use-predicted-outputs