OpenAI API 生產(chǎn)最佳實踐

2023-03-20 13:51 更新

本指南提供了一套全面的最佳實踐,可幫助您從原型過渡到生產(chǎn)。無論您是經(jīng)驗豐富的機器學(xué)習(xí)工程師還是新近的愛好者,本指南都將為您提供成功將平臺投入生產(chǎn)環(huán)境所需的工具:從保護對我們 API 的訪問到設(shè)計能夠處理高交通量。使用本指南來幫助制定盡可能順利有效地部署應(yīng)用程序的計劃。

設(shè)置您的組織

登錄到您的 OpenAI 帳戶后,您可以在您的組織設(shè)置中找到您的組織名稱和 ID。組織名稱是您的組織的標(biāo)簽,顯示在用戶界面中。組織 ID 是您組織的唯一標(biāo)識符,可用于 API 請求。

屬于多個組織的用戶可以通過標(biāo)頭來指定哪個組織用于 API 請求。來自這些 API 請求的使用將計入指定組織的配額。如果未提供標(biāo)頭,將按默認(rèn)組織計費。您可以在用戶設(shè)置中更改默認(rèn)組織。

您可以從成員設(shè)置頁面邀請新成員加入您的組織。成員可以是讀者或所有者。讀者可以進行 API 請求和查看基本組織信息,而所有者可以修改帳單信息和管理組織內(nèi)的成員。

管理計費限額

新的免費試用用戶將獲得 5 美元的初始信用額度,該信用額度將在三個月后到期。信用額度用完或過期后,您可以選擇輸入賬單信息以繼續(xù)使用 API。如果未輸入賬單信息,您仍然可以登錄,但無法再發(fā)出任何 API 請求。

輸入賬單信息后,您將獲得每月 120 美元的批準(zhǔn)使用限額,這是由 OpenAI 設(shè)定的。要將您的配額增加到超過 120 美元的每月賬單限額,請?zhí)峤辉黾优漕~的請求。

如果您希望在使用量超過一定數(shù)量時收到通知,您可以通過使用限制頁面設(shè)置軟限制。當(dāng)達到軟限制時,組織的所有者將收到一封電子郵件通知。您還可以設(shè)置硬限制,一旦達到硬限制,任何后續(xù) API 請求都將被拒絕。請注意,這些限制是盡力而為的,使用和執(zhí)行限制之間可能會有 5 到 10 分鐘的延遲。

API 密鑰

OpenAI API 使用 API 密鑰進行身份驗證。訪問您的 API 密鑰頁面以檢索您將在請求中使用的 API 密鑰。

這是控制訪問的一種相對直接的方法,但您必須警惕保護這些密鑰。避免在您的代碼或公共存儲庫中公開 API 密鑰;相反,將它們存儲在安全的位置。您應(yīng)該使用環(huán)境變量或秘密管理服務(wù)將您的密鑰公開給您的應(yīng)用程序,這樣您就不需要在代碼庫中對它們進行硬編碼。

暫存帳戶

隨著規(guī)模的擴大,您可能希望為暫存和生產(chǎn)環(huán)境創(chuàng)建單獨的組織。請注意,您可以使用兩個單獨的電子郵件地址(例如 bob+prod@widgetcorp.com 和 bob+dev@widgetcorp.com)進行注冊,以創(chuàng)建兩個組織。這將允許您隔離您的開發(fā)和測試工作,這樣您就不會意外地中斷您的實時應(yīng)用程序。您還可以通過這種方式限制對生產(chǎn)組織的訪問。

建立你的原型

如果您還沒有閱讀快速入門指南,我們建議您先從這里開始,然后再深入閱讀本指南的其余部分。

對于 OpenAI API 的新手,我們的 playground 可以成為探索其功能的重要資源。這樣做將幫助您了解什么是可能的,以及您可能希望將精力集中在哪些方面。您還可以瀏覽我們的示例提示。

雖然 playground 是制作原型的好地方,但它也可以用作大型項目的孵化區(qū)。 playground 還可以輕松導(dǎo)出 API 請求的代碼片段并與協(xié)作者共享提示,使其成為開發(fā)過程中不可或缺的一部分。

附加提示

  1. 首先確定您希望應(yīng)用程序具有的核心功能。考慮您將需要的數(shù)據(jù)輸入、輸出和處理的類型。旨在使原型盡可能集中,以便您可以快速高效地進行迭代。

  2. 選擇您感覺最舒服并且最符合您的項目目標(biāo)的編程語言和框架。一些流行的選項包括 Python、Java 和 Node.js。請參閱庫支持頁面以了解有關(guān)由我們的團隊和更廣泛的開發(fā)人員社區(qū)維護的庫綁定的更多信息。

  3. 開發(fā)環(huán)境和支持:使用正確的工具和庫設(shè)置您的開發(fā)環(huán)境,并確保您擁有訓(xùn)練模型所需的資源。利用我們的文檔、社區(qū)論壇和我們的幫助中心獲得故障排除方面的幫助。如果您正在使用 Python 進行開發(fā),請查看此構(gòu)建項目指南(存儲庫結(jié)構(gòu)是項目架構(gòu)的重要組成部分)。為了與我們的支持工程師聯(lián)系,只需登錄您的帳戶并使用“幫助”按鈕開始對話。

提高提示可靠性的技術(shù)

即使進行了周密的計劃,在您的應(yīng)用程序中使用 GPT-3 時為意外問題做好準(zhǔn)備也很重要。在某些情況下,模型可能會在任務(wù)上失敗,因此考慮可以采取哪些措施來提高應(yīng)用程序的可靠性會很有幫助。

如果您的任務(wù)涉及邏輯推理或復(fù)雜性,您可能需要采取額外的步驟來構(gòu)建更可靠的提示??傮w而言,建議圍繞:

  • 將不可靠的操作分解為更小、更可靠的操作(例如,選擇推理提示
  • 使用多個步驟或多個關(guān)系使系統(tǒng)的可靠性高于任何單個組件(例如,美化提示

評估和迭代

開發(fā)生產(chǎn)系統(tǒng)最重要的方面之一是定期評估和迭代試驗。此過程允許您衡量性能、解決問題并微調(diào)您的模型以提高準(zhǔn)確性和效率。此過程的一個關(guān)鍵部分是為您的功能創(chuàng)建評估數(shù)據(jù)集。請記住以下幾點:

  1. 確保您的評估集代表您的模型將在現(xiàn)實世界中使用的數(shù)據(jù)。這將允許您評估您的模型在它以前從未見過的數(shù)據(jù)上的性能,并幫助您了解它對新情況的泛化能力。

  2. 定期更新您的評估集,以確保它在您的模型發(fā)展和新數(shù)據(jù)可用時保持相關(guān)性。

  3. 使用各種指標(biāo)來評估模型的性能。根據(jù)您的應(yīng)用程序和業(yè)務(wù)成果,這可能包括準(zhǔn)確度、精確度、召回率、F1 分?jǐn)?shù)或平均精確度 (MAP)。此外,您可以將微調(diào)與權(quán)重和偏差同步以跟蹤實驗、模型和數(shù)據(jù)集。

  4. 將模型的性能與基線進行比較。這將使您更好地了解模型的優(yōu)勢和劣勢,并有助于指導(dǎo)您未來的開發(fā)工作。

通過進行定期評估和迭代實驗,您可以確保您的 GPT 驅(qū)動的應(yīng)用程序或原型隨著時間的推移不斷改進。

評估語言模型

語言模型可能很難評估,因為評估生成語言的質(zhì)量通常是主觀的,并且有許多不同的方法可以用語言正確傳達相同的信息。例如,在評估一個模型對一大段文本的總結(jié)能力時,有很多正確的總結(jié)。話雖如此,設(shè)計良好的評估對于機器學(xué)習(xí)取得進展至關(guān)重要。

評估套件需要全面、易于運行且速度相當(dāng)快(取決于模型大小)。它還需要易于繼續(xù)添加到套件中,因為一個月的綜合性內(nèi)容可能在另一個月就已經(jīng)過時了。我們應(yīng)該優(yōu)先考慮具有多樣性的任務(wù)和任務(wù),這些任務(wù)可以識別模型中的弱點或沒有隨著擴展而改進的能力。

評估系統(tǒng)的最簡單方法是手動檢查其輸出。它在做你想做的事嗎?輸出質(zhì)量高嗎?他們一致嗎?

自動評估

加快測試速度的最佳方法是開發(fā)自動化評估。但是,這在摘要任務(wù)等更主觀的應(yīng)用程序中可能是不可能的。

當(dāng)很容易將最終輸出定為正確或不正確時,自動評估效果最佳。例如,如果您正在微調(diào)分類器以將文本字符串分類為 A 類或 B 類,這非常簡單:創(chuàng)建一個包含示例輸入和輸出對的測試集,在輸入上運行您的系統(tǒng),然后對系統(tǒng)進行評分輸出與正確輸出(查看準(zhǔn)確度、F1 分?jǐn)?shù)、交叉熵等指標(biāo))。

如果您的輸出是半開放式的,就像會議記錄總結(jié)器那樣,那么定義成功可能會比較棘手:例如,是什么讓一個總結(jié)比另一個更好?這里,可能的技術(shù)包括:

  • 使用“黃金標(biāo)準(zhǔn)”答案編寫測試,然后測量每個黃金標(biāo)準(zhǔn)答案與系統(tǒng)輸出之間的某種相似性分?jǐn)?shù)(我們已經(jīng)看到嵌入為此工作得很好)

  • 建立一個判別器系統(tǒng)來判斷/排序輸出,然后給判別器一組輸出,其中一個由被測系統(tǒng)生成(這甚至可以是 GPT 模型,詢問給定輸出是否正確回答了問題)

  • 建立一個評估模型,檢查答案組成部分的真實性;例如,檢測引號是否實際出現(xiàn)在給定文本中

對于非常開放的任務(wù),例如創(chuàng)意故事作家,自動化評估更加困難。盡管可以制定質(zhì)量指標(biāo)來查看拼寫錯誤、單詞多樣性和可讀性分?jǐn)?shù),但這些指標(biāo)并不能真正體現(xiàn)一篇文章的創(chuàng)造性質(zhì)量。在找不到好的自動化指標(biāo)的情況下,人工評估仍然是最好的方法。

評估基于 GPT-3 的系統(tǒng)的示例程序

作為一個例子,讓我們考慮構(gòu)建一個基于檢索的問答系統(tǒng)的情況。

基于檢索的問答系統(tǒng)有兩個步驟。首先,用戶的查詢用于對知識庫中可能相關(guān)的文檔進行排名。其次,GPT-3 獲得了排名靠前的文檔,并被要求生成查詢的答案。

可以進行評估以衡量每個步驟的性能。

對于搜索步驟,可以:

  • 首先,生成一個包含約 100 個問題的測試集和每個問題的一組正確文檔

  • 如果您有任何問題,可以從用戶數(shù)據(jù)中獲取問題;否則,您可以發(fā)明一組具有不同風(fēng)格和難度的問題。

  • 對于每個問題,讓一個人手動搜索知識庫并記錄包含答案的文檔集。

  • 然后使用測試集對系統(tǒng)的性能進行評分

  • 對于每個問題,使用系統(tǒng)對候選文檔進行排名(例如,通過文檔嵌入與查詢嵌入的余弦相似度)。

  • 如果候選文檔至少包含 1 個來自答案鍵的相關(guān)文檔,則可以使用二進制準(zhǔn)確度分?jǐn)?shù) 1 對結(jié)果進行評分,否則為 0

  • 您還可以使用 Mean Reciprocal Rank 等連續(xù)指標(biāo),它可以幫助區(qū)分接近正確或遠(yuǎn)離正確的答案(例如,如果正確的文檔排名第 1,則得分為 1,如果排名第 2,則得分為 ? , ? 如果排名 3, 等等)

對于問題回答步驟,可以:

  • 首先,生成一個包含約 100 組{question, relevant text, correct answer} 的測試集

  • 對于問題和相關(guān)文本,使用上面的數(shù)據(jù)

  • 對于正確的答案,讓一個人寫下大約 100 個好的答案的例子。

二、使用測試集對系統(tǒng)的性能進行評分

  • 對于每個問題和文本對,將它們組合成一個提示并將提示提交給 GPT-3

  • 接下來,將 GPT-3 的答案與人類編寫的黃金標(biāo)準(zhǔn)答案進行比較

  • 這種比較可以是手動的,人類將它們并排查看并對 GPT-3 答案是否正確/高質(zhì)量進行評分

  • 這種比較也可以通過使用嵌入相似性分?jǐn)?shù)或其他方法來自動化(自動化方法可能會有噪音,但噪音是可以的,只要它是無偏見的,并且在你正在相互測試的不同類型的模型之間同樣有噪音)

當(dāng)然,N=100 只是一個例子,在早期階段,您可能會從更容易生成的較小集合開始,而在后期階段,您可能會投資成本更高但統(tǒng)計上更可靠的更大集合。

擴展您的解決方案架構(gòu)

在設(shè)計使用我們的 API 用于生產(chǎn)的應(yīng)用程序或服務(wù)時,重要的是要考慮如何擴展以滿足流量需求。無論您選擇哪種云服務(wù)提供商,您都需要考慮幾個關(guān)鍵領(lǐng)域:

  • Horizontal scaling: 您可能希望橫向擴展您的應(yīng)用程序以適應(yīng)來自多個來源的應(yīng)用程序請求。這可能涉及部署額外的服務(wù)器或容器來分配負(fù)載。如果您選擇這種類型的縮放,請確保您的體系結(jié)構(gòu)設(shè)計用于處理多個節(jié)點,并且您有適當(dāng)?shù)臋C制來平衡它們之間的負(fù)載。
  • Vertical scaling: 另一種選擇是垂直擴展您的應(yīng)用程序,這意味著您可以增加單個節(jié)點可用的資源。這將涉及升級服務(wù)器的能力以處理額外的負(fù)載。如果您選擇這種類型的擴展,請確保您的應(yīng)用程序旨在利用這些額外資源。
  • Caching: 通過存儲經(jīng)常訪問的數(shù)據(jù),您可以縮短響應(yīng)時間,而無需重復(fù)調(diào)用我們的 API。您的應(yīng)用程序需要設(shè)計為盡可能使用緩存數(shù)據(jù),并在添加新信息時使緩存無效。有幾種不同的方法可以做到這一點。例如,您可以將數(shù)據(jù)存儲在數(shù)據(jù)庫、文件系統(tǒng)或內(nèi)存緩存中,具體取決于哪種方式對您的應(yīng)用程序最有意義。
  • Load balancing: 最后,考慮負(fù)載平衡技術(shù)以確保請求在可用服務(wù)器之間均勻分布。這可能涉及在服務(wù)器前面使用負(fù)載平衡器或使用 DNS 循環(huán)。平衡負(fù)載將有助于提高性能并減少瓶頸。

管理速率限制

使用我們的 API 時,了解和規(guī)劃速率限制非常重要。

改善延遲

延遲是處理請求和返回響應(yīng)所需的時間。在本節(jié)中,我們將討論影響文本生成模型延遲的一些因素,并提供有關(guān)如何減少延遲的建議。

完成請求的延遲主要受兩個因素影響:模型和生成的令牌數(shù)量。完成請求的生命周期如下所示:


大部分延遲通常來自令牌生成步驟。

Intuition: 提示標(biāo)記對完成調(diào)用的延遲很少。生成完成令牌的時間要長得多,因為一次生成一個令牌。由于每個令牌所需的生成,較長的生成長度將累積延遲。

影響延遲的常見因素和可能的緩解技術(shù)

現(xiàn)在我們已經(jīng)了解了延遲的基礎(chǔ)知識,讓我們看一下可能影響延遲的各種因素,大致按照從影響最大到影響最小的順序排列。

模型

我們的 API 提供了不同程度的復(fù)雜性和通用性的不同模型。最強大的模型,例如 gpt-4,可以生成更復(fù)雜和多樣化的補全,但它們也需要更長的時間來處理您的查詢。 gpt-3.5-turbo 等模型可以生成更快、更便宜的聊天完成,但它們生成的結(jié)果可能不太準(zhǔn)確或與您的查詢不相關(guān)。您可以選擇最適合您的用例的模型以及速度和質(zhì)量之間的權(quán)衡。

完成令牌的數(shù)量

請求大量生成的令牌完成會導(dǎo)致延遲增加:

  • 較低的最大令牌數(shù):對于具有類似令牌生成計數(shù)的請求,那些具有較低 max_tokens 參數(shù)的請求會產(chǎn)生較少的延遲。

  • 包括停止序列:為防止生成不需要的令牌,請?zhí)砑油V剐蛄?。例如,您可以使用停止序列生成包含特定?shù)量項目的列表。在這種情況下,通過使用 11. 作為停止序列,您可以生成一個只有 10 個項目的列表,因為當(dāng)?shù)竭_ 11. 時完成將停止。

  • 生成更少的補全:盡可能降低 n 和 best_of 的值,其中 n 指的是為每個提示生成多少補全,best_of 用于表示每個標(biāo)記具有最高對數(shù)概率的結(jié)果。

如果 n 和 best_of 都等于 1(這是默認(rèn)值),則生成的令牌數(shù)量最多等于 max_tokens。

如果 n(返回的完成數(shù))或 best_of(為考慮而生成的完成數(shù))設(shè)置為 > 1,則每個請求將創(chuàng)建多個輸出。在這里,您可以將生成的令牌數(shù)視為 [ max_tokens * max (n, best_of) ]

Streaming

在請求中設(shè)置 stream: true 會使模型在令牌可用時立即開始返回令牌,而不是等待生成完整的令牌序列。它不會改變獲取所有令牌的時間,但它會減少我們想要顯示部分進度或?qū)⑼V股傻膽?yīng)用程序的第一個令牌的時間。這可能是更好的用戶體驗和 UX 改進,因此值得嘗試流式傳輸。

基礎(chǔ)設(shè)施

我們的服務(wù)器目前位于美國。雖然我們希望在未來實現(xiàn)全球冗余,但與此同時,您可以考慮將基礎(chǔ)設(shè)施的相關(guān)部分放在美國,以最大限度地減少服務(wù)器與 OpenAI 服務(wù)器之間的往返時間。

批處理

根據(jù)您的用例,批處理可能會有所幫助。如果您向同一個端點發(fā)送多個請求,您可以批處理要在同一個請求中發(fā)送的提示。這將減少您需要提出的請求數(shù)量。 prompt 參數(shù)最多可以包含 20 個不同的提示。我們建議您測試此方法,看看是否有幫助。在某些情況下,您最終可能會增加生成的令牌數(shù)量,這會減慢響應(yīng)時間。

管理成本

要監(jiān)控您的成本,您可以在您的帳戶中設(shè)置一個軟限制,以便在您超過某個使用閾值時收到一封電子郵件警報。您還可以設(shè)置硬限制。請注意硬限制可能會導(dǎo)致您的應(yīng)用程序/用戶中斷。使用用量跟蹤儀表板來監(jiān)控您在當(dāng)前和過去的計費周期中的令牌使用情況。

文本生成

將原型投入生產(chǎn)的挑戰(zhàn)之一是對與運行應(yīng)用程序相關(guān)的成本進行預(yù)算。 OpenAI 提供現(xiàn)收現(xiàn)付的定價模式,每 1,000 個代幣(約等于 750 個單詞)的價格。要估算您的成本,您需要預(yù)測代幣利用率。考慮諸如流量級別、用戶與您的應(yīng)用程序交互的頻率以及您將處理的數(shù)據(jù)量等因素。

考慮降低成本的一個有用框架是將成本視為代幣數(shù)量和每個代幣成本的函數(shù)。使用此框架可以通過兩種潛在途徑降低成本。首先,您可以通過為某些任務(wù)切換到較小的模型來降低每個令牌的成本,以降低成本?;蛘?,您可以嘗試減少所需的令牌數(shù)量。有幾種方法可以做到這一點,例如使用更短的提示、微調(diào)模型或緩存常見的用戶查詢,這樣就不需要重復(fù)處理它們。

您可以嘗試使用我們的交互式分詞器工具來幫助您估算成本。 API 和 playground 還返回令牌計數(shù)作為響應(yīng)的一部分。一旦您使用了我們最強大的模型,您就可以查看其他模型是否可以以更低的延遲和成本產(chǎn)生相同的結(jié)果。

MLOps 策略

當(dāng)您將原型投入生產(chǎn)時,您可能需要考慮制定 MLOps 策略。 MLOps(機器學(xué)習(xí)操作)是指管理機器學(xué)習(xí)模型的端到端生命周期的過程,包括您可能使用我們的 API 進行微調(diào)的任何模型。設(shè)計 MLOps 策略時需要考慮多個方面。這些包括

  • 數(shù)據(jù)和模型管理:管理用于訓(xùn)練或微調(diào)模型以及跟蹤版本和更改的數(shù)據(jù)。

  • 模型監(jiān)控:隨著時間的推移跟蹤模型的性能并檢測任何潛在的問題或退化。

  • 模型再訓(xùn)練:確保您的模型與數(shù)據(jù)變化或不斷變化的需求保持同步,并根據(jù)需要進行再訓(xùn)練或微調(diào)。

  • 模型部署:自動化將模型和相關(guān)工件部署到生產(chǎn)中的過程。

仔細(xì)考慮您的應(yīng)用程序的這些方面將有助于確保您的模型保持相關(guān)性并隨著時間的推移表現(xiàn)良好。

安全性和合規(guī)性

當(dāng)您將原型投入生產(chǎn)時,您需要評估并解決可能適用于您的應(yīng)用程序的任何安全性和合規(guī)性要求。這將涉及檢查您正在處理的數(shù)據(jù)、了解我們的 API 如何處理數(shù)據(jù),以及確定您必須遵守哪些法規(guī)。作為參考,這里是我們的隱私政策使用條款

您需要考慮的一些常見領(lǐng)域包括數(shù)據(jù)存儲、數(shù)據(jù)傳輸和數(shù)據(jù)保留。您可能還需要實施數(shù)據(jù)隱私保護,例如在可能的情況下進行加密或匿名化。此外,您應(yīng)該遵循安全編碼的最佳實踐,例如輸入清理和正確的錯誤處理。

安全最佳實踐

使用我們的 API 創(chuàng)建您的應(yīng)用程序時,請考慮我們的安全最佳實踐,以確保您的應(yīng)用程序安全且成功。這些建議強調(diào)了廣泛測試產(chǎn)品、積極解決潛在問題以及限制濫用機會的重要性。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號