OpenAI API 文本補(bǔ)全

2023-03-16 17:15 更新

介紹

完成端點(diǎn)可用于各種任務(wù)。它為我們的任何模型提供了一個(gè)簡單但功能強(qiáng)大的界面。您輸入一些文本作為提示,模型將生成一個(gè)文本補(bǔ)全,嘗試匹配您提供的任何上下文或模式。例如,如果您向 API 提供提示, "As Descartes said, I think, therefore", 它將很有可能返回 " I am" 。

開始探索補(bǔ)全的最佳方式是通過我們的 Playground。它只是一個(gè)文本框,您可以在其中提交提示以生成完成。

Write a tagline for an ice cream shop.

提交后,您會看到如下內(nèi)容:

Write a tagline for an ice cream shop.
We serve up smiles with every scoop!

您看到的實(shí)際完成情況可能有所不同,因?yàn)槟J(rèn)情況下 API 是不確定的。這意味著即使您的提示保持不變,您每次調(diào)用它時(shí)可能會得到略微不同的完成。將 temperature 設(shè)置為 0 將使輸出大部分具有確定性,但可能會保留少量可變性。

這個(gè)簡單的文本輸入、文本輸出界面意味著您可以通過提供說明或您希望它做什么的幾個(gè)示例來“編程”模型。它的成功通常取決于任務(wù)的復(fù)雜性和提示的質(zhì)量。一個(gè)好的經(jīng)驗(yàn)法則是考慮如何為中學(xué)生寫一個(gè)應(yīng)用題來解決。一個(gè)寫得很好的提示提供了足夠的信息讓模型知道你想要什么以及它應(yīng)該如何響應(yīng)。

本指南涵蓋了一般的提示設(shè)計(jì)最佳實(shí)踐和示例。

請記住,默認(rèn)模型的訓(xùn)練數(shù)據(jù)將在 2021 年中斷,因此它們可能不了解時(shí)事。我們計(jì)劃在未來增加更多的持續(xù)培訓(xùn)。

Prompt 設(shè)計(jì)

基礎(chǔ)

我們的模型可以做任何事情,從生成原創(chuàng)故事到執(zhí)行復(fù)雜的文本分析。因?yàn)樗麄兛梢宰龊芏嗍虑?,所以你必須明確描述你想要什么。展示,而不僅僅是講述,通常是獲得良好提示的秘訣。

創(chuàng)建提示的三個(gè)基本準(zhǔn)則:

展示和講述。通過說明、示例或兩者的結(jié)合,明確您想要什么。如果您希望模型按字母順序?qū)?xiàng)目列表進(jìn)行排名或按情緒對段落進(jìn)行分類,請向它展示您想要的。

提供質(zhì)量數(shù)據(jù)。如果您正在嘗試構(gòu)建分類器或讓模型遵循某種模式,請確保有足夠的示例。一定要校對你的例子——模型通常足夠聰明,可以看穿基本的拼寫錯誤并給你一個(gè)回應(yīng),但它也可能認(rèn)為這是故意的,它會影響回應(yīng)。

檢查您的設(shè)置。 temperature 和 top_p 設(shè)置控制模型在生成響應(yīng)時(shí)的確定性。如果您要求它提供只有一個(gè)正確答案的答復(fù),那么您需要將這些設(shè)置得較低。如果您正在尋找更多樣化的響應(yīng),那么您可能希望將它們設(shè)置得更高。人們在使用這些設(shè)置時(shí)犯的第一個(gè)錯誤是假設(shè)它們是“聰明”或“創(chuàng)造力”控制。

故障排除

如果您在使用 API 按預(yù)期執(zhí)行時(shí)遇到問題,請遵循此清單:

  1. 是否清楚預(yù)期的生成結(jié)果應(yīng)該是什么?

  2. 有足夠的例子嗎?

  3. 你檢查過你的例子是否有錯誤嗎? (API 不會直接告訴你)

  4. 您是否正確使用 temperature 和 top_p?

分類

為了使用 API 創(chuàng)建文本分類器,我們提供了任務(wù)描述和一些示例。在此示例中,我們展示了如何對推文的情緒進(jìn)行分類。

值得關(guān)注此示例中的幾個(gè)功能:

  1. 使用通俗易懂的語言來描述您的輸入和輸出。我們對輸入“Tweet”和預(yù)期輸出“Sentiment”使用通俗易懂的語言。作為最佳實(shí)踐,從簡單的語言描述開始。雖然您通??梢允褂盟儆浕蜴I來指示輸入和輸出,但最好從盡可能具有描述性開始,然后向后工作以刪除多余的單詞并查看性能是否保持一致。

  2. 顯示 API 如何響應(yīng)任何情況。在此示例中,我們在指令中包含了可能的情緒標(biāo)簽。中性標(biāo)簽很重要,因?yàn)樵诤芏嗲闆r下,即使是人類也很難確定某事是積極的還是消極的,以及兩者都不是的情況。

  3. 對于熟悉的任務(wù),您需要更少的示例。對于這個(gè)分類器,我們不提供任何示例。這是因?yàn)?nbsp;API 已經(jīng)理解了情緒和推文的概念。如果您正在為 API 可能不熟悉的內(nèi)容構(gòu)建分類器,則可能需要提供更多示例。

提高分類器的效率

現(xiàn)在我們已經(jīng)掌握了如何構(gòu)建分類器,讓我們以該示例為例并使其更加高效,以便我們可以使用它從一次 API 調(diào)用中獲取多個(gè)結(jié)果。


我們提供了一個(gè)帶編號的推文列表,這樣 API 就可以在一次 API 調(diào)用中對五個(gè)(甚至更多)推文進(jìn)行評分。

請務(wù)必注意,當(dāng)您要求 API 創(chuàng)建列表或評估文本時(shí),您需要格外注意您的概率設(shè)置(Top P 或 Temperature)以避免漂移。

  1. 通過運(yùn)行多個(gè)測試確保您的概率設(shè)置得到正確校準(zhǔn)。

  2. 不要讓您的列表太長,否則 API 可能會發(fā)生變化。

生成

您可以使用 API 完成的最強(qiáng)大但最簡單的任務(wù)之一是產(chǎn)生新的想法或輸入版本。您可以詢問任何內(nèi)容,從故事創(chuàng)意到商業(yè)計(jì)劃,再到人物描述和營銷口號。在此示例中,我們將使用 API 來創(chuàng)建在健身中使用虛擬現(xiàn)實(shí)的想法。

如果需要,您可以通過在提示中包含一些示例來提高響應(yīng)質(zhì)量。

會話

API 非常擅長與人甚至與自己進(jìn)行對話。僅需幾行指令,我們就已經(jīng)看到 API 作為一個(gè)客戶服務(wù)聊天機(jī)器人運(yùn)行,它可以智能地回答問題而不會感到慌張,或者是一個(gè)聰明的開玩笑的對話伙伴,可以開玩笑和雙關(guān)語。關(guān)鍵是告訴 API 它應(yīng)該如何表現(xiàn),然后提供一些示例。

以下是扮演 AI 回答問題角色的 API 示例:


這就是創(chuàng)建能夠進(jìn)行對話的聊天機(jī)器人所需的全部。在其簡單性的背后,有幾件事情值得關(guān)注:

  1. 我們告訴 API 意圖,但我們也告訴它如何表現(xiàn)。就像其他提示一樣,我們將 API 提示到示例所代表的內(nèi)容中,但我們還添加了另一個(gè)關(guān)鍵細(xì)節(jié):我們明確說明如何與短語“助手很有幫助、有創(chuàng)意、聰明且非常友好”進(jìn)行交互。 “如果沒有該指令,API 可能會偏離并模仿與之交互的人,并變得諷刺或我們想要避免的其他行為。

  2. 我們給 API 一個(gè)身份。一開始我們讓 API 作為 AI 助手響應(yīng)。雖然 API 沒有內(nèi)在身份,但這有助于它以盡可能接近事實(shí)的方式做出響應(yīng)。您可以通過其他方式使用身份來創(chuàng)建其他類型的聊天機(jī)器人。如果您告訴 API 以一名作為生物學(xué)研究科學(xué)家的女性的身份做出回應(yīng),您將從 API 中獲得智能和深思熟慮的評論,類似于您對具有該背景的人的期望。

在這個(gè)例子中,我們創(chuàng)建了一個(gè)聊天機(jī)器人,它有點(diǎn)諷刺并且不情愿地回答問題:


為了創(chuàng)建一個(gè)有趣且有點(diǎn)幫助的聊天機(jī)器人,我們提供了一些問題和答案示例,展示了 API 如何回復(fù)。所需要的只是一些諷刺的回應(yīng),API 能夠識別模式并提供無窮無盡的諷刺回應(yīng)。

轉(zhuǎn)換

API 是一種語言模型,熟悉單詞和字符用于表達(dá)信息的各種方式。這范圍從自然語言文本到代碼和英語以外的語言。 API 還能夠在允許它以不同方式總結(jié)、轉(zhuǎn)換和表達(dá)內(nèi)容的級別上理解內(nèi)容。

翻譯

在此示例中,我們向 API 展示了如何將英語轉(zhuǎn)換為法語、西班牙語和日語:


此示例之所以有效,是因?yàn)?nbsp;API 已經(jīng)掌握了這些語言,因此無需嘗試教授它們。

如果您想將英語翻譯成 API 不熟悉的語言,則需要為其提供更多示例,甚至需要微調(diào)模型以使其流暢地完成。

轉(zhuǎn)換

在此示例中,我們將電影名稱轉(zhuǎn)換為表情符號。這顯示了 API 對選取模式和處理其他字符的適應(yīng)性。


概要

API能夠理解文本的內(nèi)容,并用不同的方式重新表達(dá)它。在這個(gè)例子中,我們從一個(gè)更長、更復(fù)雜的文本段落中創(chuàng)建了一個(gè)孩子能理解的解釋。這說明API對語言有很深的掌握。


結(jié)論

雖然所有的提示都會產(chǎn)生補(bǔ)全,但在你想讓API接著你的話說下去的情況下,把文本補(bǔ)全當(dāng)作一個(gè)單獨(dú)的任務(wù)來考慮可能會有幫助。例如,如果給出這個(gè)提示,API會繼續(xù)關(guān)于垂直農(nóng)業(yè)的思路。你可以降低 temperature 設(shè)置,讓API更專注于提示的意圖,或者提高它,讓它偏離主題。


下一個(gè)提示顯示了如何使用補(bǔ)全來幫助編寫 React 組件。我們向 API 發(fā)送一些代碼,它能夠繼續(xù)剩下的,因?yàn)樗私?nbsp;React 庫。我們建議將我們的 Codex 模型用于涉及理解或生成代碼的任務(wù)。


事實(shí)回應(yīng)

API 有很多知識,這些知識是從它接受訓(xùn)練的數(shù)據(jù)中學(xué)到的。它還能夠提供聽起來非常真實(shí)但實(shí)際上是虛構(gòu)的響應(yīng)。有兩種方法可以限制 API 編造答案的可能性。

  1. 為 API 提供基本事實(shí)。如果您向 API 提供文本正文來回答有關(guān)問題(如維基百科條目),那么它就不太可能偽造響應(yīng)。

  2. 使用低概率并向 API 展示如何說“我不知道”。如果 API 理解在不太確定回答“我不知道”或某些變體是否合適的情況下,它就不太愿意編造答案。

在此示例中,我們?yōu)?nbsp;API 提供它知道的問題和答案示例,然后提供它不知道的示例并提供問號。我們還將概率設(shè)置為零,這樣 API 更有可能以“?”響應(yīng)。如果有任何疑問。


插入文字

完成端點(diǎn)還支持通過提供除前綴提示之外的后綴提示來在文本中插入文本。在編寫長文本、段落之間的過渡、遵循大綱或引導(dǎo)模型走向結(jié)尾時(shí),這種需求自然會出現(xiàn)。這也適用于代碼,可用于插入函數(shù)或文件的中間。

為了說明后綴語境對我們預(yù)測能力的重要性,考慮這個(gè)提示,“今天我決定做一個(gè)大改變?!庇泻芏喾N方式可以想象完成這句話。但如果我們現(xiàn)在提供故事的結(jié)尾:“我得到了很多人對我的新發(fā)型的贊美!”,那么預(yù)期的補(bǔ)全就變得清楚了。


通過為模型提供額外的上下文,它可以更加可控。然而,這對模型來說是一個(gè)更具約束性和挑戰(zhàn)性的任務(wù)。

最佳實(shí)踐

插入文本是 Beta 版的一項(xiàng)新功能,您可能需要修改 API 的使用方式以獲得更好的結(jié)果。以下是一些最佳實(shí)踐:

使用 max_tokens > 256。該模型更擅長插入更長的補(bǔ)全。如果 max_tokens 太小,模型可能會在連接到后綴之前被切斷。請注意,即使使用更大的 max_tokens,您也只會根據(jù)生成的代幣數(shù)量付費(fèi)。

更喜歡 finish_reason == “stop”。當(dāng)模型到達(dá)自然停止點(diǎn)或用戶提供的停止序列時(shí),它會將 finish_reason 設(shè)置為“停止”。這表明該模型已設(shè)法很好地連接到后綴,并且是完成質(zhì)量的良好信號。這對于在使用 n > 1 或重采樣時(shí)在幾個(gè)完成之間進(jìn)行選擇尤其相關(guān)(請參閱下一點(diǎn))。

重新采樣 3-5 次。雖然幾乎所有補(bǔ)全都連接到前綴,但在更困難的情況下,模型可能難以連接后綴。我們發(fā)現(xiàn),在這種情況下,重采樣 3 次或 5 次(或使用 k=3,5 的 best_of)并選擇帶有“stop”作為其 finish_reason 的樣本可能是一種有效的方法。重采樣時(shí),您通常需要更高的溫度來增加多樣性。

注意:如果所有返回的樣本都有 finish_reason == "length",很可能是 max_tokens 太小,模型在設(shè)法自然地連接提示和后綴之前用完了標(biāo)記??紤]在重采樣之前增加 max_tokens。

嘗試提供更多線索。在某些情況下,為了更好地幫助模型的生成,您可以通過提供一些模式示例來提供線索,模型可以遵循這些模式來決定自然停止的位置。



編輯文本

edits 端點(diǎn)可用于編輯文本,而不僅僅是完成文本。您提供一些文本和如何修改它的說明,text-davinci-edit-001 模型將嘗試相應(yīng)地對其進(jìn)行編輯。這是用于翻譯、編輯和調(diào)整文本的自然界面。這對于重構(gòu)和使用代碼也很有用。請?jiān)L問我們的代碼指南以了解更多信息。在此初始測試期間,編輯端點(diǎn)的使用是免費(fèi)的。

示例



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號