Codex 模型系列是我們的 GPT-3 系列的后代,該系列已經(jīng)過自然語言和數(shù)十億行代碼的訓練。它最擅長 Python,精通 JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL,甚至 Shell 等十幾種語言。在最初的有限測試期間,Codex 使用是免費的。
您可以將 Codex 用于各種任務,包括:
將注釋變成代碼
在上下文中完成你的下一行或函數(shù)
為您帶來知識,例如為應用程序查找有用的庫或 API 調(diào)用
添加評論
重寫代碼以提高效率
要自己開始使用 Codex,請嘗試在 Playground 中打開這些示例。
說 "Hello" (Python)
"""
Ask the user for their name and say "Hello"
"""
創(chuàng)建隨機名稱 (Python)
"""
1. Create a list of first names
2. Create a list of last names
3. Combine them randomly into a list of 100 full names
"""
創(chuàng)建一個 MySQL 查詢 (Python)
"""
Table customers, columns = [CustomerId, FirstName, LastName, Company, Address, City, State, Country, PostalCode, Phone, Fax, Email, SupportRepId]
Create a MySQL query for all customers in Texas named Jane
"""
query =
解釋代碼 (JavaScript)
// Function 1
var fullNames = [];
for (var i = 0; i < 50; i++) {
fullNames.push(names[Math.floor(Math.random() * names.length)]
+ " " + lastNames[Math.floor(Math.random() * lastNames.length)]);
}
// What does Function 1 do?
訪問我們的示例庫,探索更多為 Codex 設(shè)計的提示。
從注釋、數(shù)據(jù)或代碼開始。您可以在我們的 playground 中嘗試使用其中一種 Codex 模型(需要時將樣式說明作為注釋。)
為了讓 Codex 創(chuàng)建有用的完成,考慮程序員執(zhí)行任務需要哪些信息會很有幫助。這可能只是一個清晰的注釋或編寫有用函數(shù)所需的數(shù)據(jù),例如變量名稱或函數(shù)處理的類。
# Create a function called 'nameImporter' to add a first and last name to the database
在此示例中,我們告訴 Codex 調(diào)用該函數(shù)的內(nèi)容以及它將執(zhí)行的任務。
這種方法甚至可以擴展到您可以向 Codex 提供注釋和數(shù)據(jù)庫模式示例,以使其為各種數(shù)據(jù)庫編寫有用的查詢請求。
# Table albums, columns = [AlbumId, Title, ArtistId]
# Table artists, columns = [ArtistId, Name]
# Table media_types, columns = [MediaTypeId, Name]
# Table playlists, columns = [PlaylistId, Name]
# Table playlist_track, columns = [PlaylistId, TrackId]
# Table tracks, columns = [TrackId, Name, AlbumId, MediaTypeId, GenreId, Composer, Milliseconds, Bytes, UnitPrice]
# Create a query for all albums by Adele
當您向 Codex 顯示數(shù)據(jù)庫架構(gòu)時,它能夠?qū)θ绾胃袷交樵冏龀鲇懈鶕?jù)的猜測。
指定語言。 Codex 了解數(shù)十種不同的編程語言。許多人對注釋、函數(shù)和其他編程語法有著相似的約定。通過在注釋中指定語言和版本,Codex 能夠更好地完成您想要的內(nèi)容。也就是說,Codex 在風格和語法方面相當靈活。
# R language
# Calculate the mean distance between an array of points
# Python 3
# Calculate the mean distance between an array of points
提示 Codex 你想要它做什么。如果您希望 Codex 創(chuàng)建網(wǎng)頁,請在您的評論告訴 Codex 下一步應該做什么之后將第一行代碼放在 HTML 文檔 (<!DOCTYPE html>) 中。相同的方法適用于從注釋創(chuàng)建函數(shù)(在注釋之后以 func 或 def 開頭的新行)。
<!-- Create a web page with the title 'Kat Katman attorney at paw' -->
<!DOCTYPE html>
在我們的評論之后放置 <!DOCTYPE html> 可以讓 Codex 清楚地知道我們想要它做什么。
# Create a function to count to 100
def counter
如果我們開始編寫函數(shù),Codex 將了解下一步需要做什么。
指定庫將幫助 Codex 了解您的需求。 Codex 知道大量的庫、API 和模塊。通過通過注釋或?qū)⑺鼈儗肽拇a告訴 Codex 使用哪些,Codex 將根據(jù)它們而不是備選方案提出建議。
<!-- Use A-Frame version 1.2.0 to create a 3D website -->
<!-- https://aframe.io/releases/1.2.0/aframe.min.js -->
通過指定版本,您可以確保 Codex 使用最新的庫。
注意:Codex 可以推薦有用的庫和 API,但請始終確保自己進行研究以確保它們對您的應用程序是安全的。
注釋風格會影響代碼質(zhì)量。對于某些語言,注釋的風格可以提高輸出的質(zhì)量。例如,在使用 Python 時,在某些情況下使用文檔字符串(用三引號引起來的注釋)可以提供比使用井號 (#) 符號更高質(zhì)量的結(jié)果。
"""
Create an array of users and email addresses
"""
將注釋放在函數(shù)內(nèi)部可能會有所幫助。推薦的編碼標準通常建議將函數(shù)的描述放在函數(shù)內(nèi)部。使用這種格式有助于 Codex 更清楚地了解您希望函數(shù)執(zhí)行的操作。
def getUserBalance(id):
"""
Look up the user in the database ‘UserData' and return their current account balance.
"""
提供示例以獲得更精確的結(jié)果。如果您有需要 Codex 使用的特定樣式或格式,請在請求的第一部分提供示例或演示,這將有助于 Codex 更準確地滿足您的需求。
"""
Create a list of random animals and species
"""
animals = [ {"name": "Chomper", "species": "Hamster"}, {"name":
較低的 temperature 可提供更精確的結(jié)果。在大多數(shù)情況下,將 API temperature 設(shè)置為 0 或接近于零(例如 0.1 或 0.2)往往會產(chǎn)生更好的結(jié)果。與 GPT-3 不同,更高的 temperature 可以提供有用的創(chuàng)造性和隨機結(jié)果,Codex 的更高 temperature 可能會給你真正隨機或不穩(wěn)定的響應。
如果您需要 Codex 提供不同的潛在結(jié)果,請從零開始,然后向上遞增 0.1,直到找到合適的變化。
將任務組織成功能。我們可以通過在注釋中盡可能準確地指定函數(shù)應該做什么來讓 Codex 編寫函數(shù)。通過編寫以下注釋,Codex 創(chuàng)建了一個 Javascript 計時器函數(shù),該函數(shù)在用戶按下按鈕時觸發(fā):
一個簡單的 JavaScript 定時器
// Create a timer that creates an alert in 10 seconds
我們可以使用 Codex 與眾所周知的庫一起執(zhí)行常見任務,例如使用 Stripe API 創(chuàng)建客戶:
在 Python 中創(chuàng)建 Stripe 客戶
# Create a Stripe customer from an email address
創(chuàng)建示例數(shù)據(jù)。測試應用程序通常需要使用示例數(shù)據(jù)。因為 Codgen 是一種理解如何理解和編寫自然語言的語言模型,所以您可以要求 Codex 創(chuàng)建數(shù)據(jù),例如虛構(gòu)名稱、產(chǎn)品和其他變量的數(shù)組。
/* Create an array of weather temperatures for San Francisco */
要求 Codex 執(zhí)行此任務將生成如下表格:
var weather = [
{ month: 'January', high: 58, low: 48 },
{ month: 'February', high: 61, low: 50 },
{ month: 'March', high: 64, low: 53 },
{ month: 'April', high: 67, low: 55 },
{ month: 'May', high: 70, low: 58 },
{ month: 'June', high: 73, low: 61 },
{ month: 'July', high: 76, low: 63 },
{ month: 'August', high: 77, low: 64 },
{ month: 'September', high: 76, low: 63 },
{ month: 'October', high: 73, low: 61 },
{ month: 'November', high: 68, low: 57 },
{ month: 'December', high: 64, low: 54 }
];
復合函數(shù)和小型應用程序。我們可以向 Codex 提供包含復雜請求的評論,例如創(chuàng)建隨機名稱生成器或使用用戶輸入執(zhí)行任務,如果有足夠的令牌,Codex 可以生成其余內(nèi)容。
/*
Create a list of animals
Create a list of cities
Use the lists to generate stories about what I saw at the zoo in each city
*/
限制完成大小以獲得更精確的結(jié)果或更低的延遲。在 Codex 中請求更長的完成時間可能會導致不準確的答案和重復。通過減少 max_tokens 和設(shè)置停止標記來限制查詢的大小。例如,添加 \n 作為停止序列以將完成限制為一行代碼。較小的完成也會導致較少的延遲。
使用流式傳輸來減少延遲。大型 Codex 查詢可能需要數(shù)十秒才能完成。要構(gòu)建需要較低延遲的應用程序,例如執(zhí)行自動完成的編碼助手,請考慮使用流式處理。在模型完成生成整個完成之前將返回響應。僅需要部分完成的應用程序可以通過以編程方式或使用創(chuàng)造性的停止值來切斷完成來減少延遲。
用戶可以通過從 API 請求多個解決方案并使用返回的第一個響應,將流式處理與復制結(jié)合起來以減少延遲。通過設(shè)置 n > 1 來做到這一點。這種方法消耗更多的令牌配額,因此請謹慎使用(例如,通過對 max_tokens 和 stop 使用合理的設(shè)置)。
使用 Codex 來解釋代碼。 Codex 創(chuàng)建和理解代碼的能力使我們能夠使用它來執(zhí)行任務,例如解釋文件中代碼的作用。實現(xiàn)此目的的一種方法是在以“This function”或“This application is”開頭的函數(shù)之后添加注釋。食典委通常將此解釋為解釋的開始并完成文本的其余部分。
/* Explain what the previous function is doing: It
解釋 SQL 查詢。在此示例中,我們使用 Codex 以人類可讀的格式解釋 SQL 查詢的作用。
SELECT DISTINCT department.name
FROM department
JOIN employee ON department.id = employee.department_id
JOIN salary_payments ON employee.id = salary_payments.employee_id
WHERE salary_payments.date BETWEEN '2020-06-01' AND '2020-06-30'
GROUP BY department.name
HAVING COUNT(employee.id) > 10;
-- Explanation of the above query in human readable format
--
編寫單元測試。只需添加注釋“單元測試”并啟動一個函數(shù),即可在 Python 中創(chuàng)建單元測試。
# Python 3
def sum_numbers(a, b):
return a + b
# Unit test
def
檢查代碼是否有錯誤。通過使用示例,您可以向 Codex 展示如何識別代碼中的錯誤。在某些情況下不需要示例,但是展示提供描述的級別和細節(jié)可以幫助法典理解要尋找的內(nèi)容以及如何解釋它。 (Codex 對錯誤的檢查不應取代用戶的仔細審查。)
/* Explain why the previous function doesn't work. */
使用源數(shù)據(jù)編寫數(shù)據(jù)庫函數(shù)。正如人類程序員會從了解數(shù)據(jù)庫結(jié)構(gòu)和列名中獲益一樣,Codex 可以使用此數(shù)據(jù)來幫助您編寫準確的查詢請求。在此示例中,我們插入數(shù)據(jù)庫的模式并告訴 Codex 要查詢數(shù)據(jù)庫的內(nèi)容。
# Table albums, columns = [AlbumId, Title, ArtistId]
# Table artists, columns = [ArtistId, Name]
# Table media_types, columns = [MediaTypeId, Name]
# Table playlists, columns = [PlaylistId, Name]
# Table playlist_track, columns = [PlaylistId, TrackId]
# Table tracks, columns = [TrackId, Name, AlbumId, MediaTypeId, GenreId, Composer, Milliseconds, Bytes, UnitPrice]
# Create a query for all albums by Adele
語言之間的轉(zhuǎn)換。您可以讓 Codex 從一種語言轉(zhuǎn)換為另一種語言,方法是遵循一種簡單的格式,您可以在注釋中列出要轉(zhuǎn)換的代碼的語言,然后是代碼,然后是包含您希望將其翻譯成的語言的注釋。
# Convert this from Python to R
# Python version
[ Python code ]
# End
# R version
為庫或框架重寫代碼。如果您希望 Codex 提高某個功能的效率,您可以為其提供要重寫的代碼,然后提供有關(guān)使用何種格式的說明。
// Rewrite this as a React component
var input = document.createElement('input');
input.setAttribute('type', 'text');
document.body.appendChild(input);
var button = document.createElement('button');
button.innerHTML = 'Say Hello';
document.body.appendChild(button);
button.onclick = function() {
var name = input.value;
var hello = document.createElement('div');
hello.innerHTML = 'Hello ' + name;
document.body.appendChild(hello);
};
// React version:
插入代碼
完成端點還支持通過提供除前綴提示之外的后綴提示來在代碼中插入代碼。這可用于在函數(shù)或文件中間插入補全。
def get_largest_prime_factor(n):
if n < 2:
return False
def is_prime(n): > for i in range(2, n): > if n % i == 0: > return False > return True > largest = 1
for j in range(2, n + 1):
if n % j == 0 and is_prime(j):
return largest
通過為模型提供額外的上下文,它可以更加可控。然而,這對模型來說是一個更具約束性和挑戰(zhàn)性的任務。
插入代碼是測試版中的一項新功能,您可能需要修改使用 API 的方式以獲得更好的結(jié)果。以下是一些最佳實踐:
使用 max_tokens > 256。該模型更擅長插入更長的補全。如果 max_tokens 太小,模型可能會在連接到后綴之前被切斷。請注意,即使使用更大的 max_tokens,您也只會根據(jù)生成的代幣數(shù)量付費。
更喜歡 finish_reason == “stop”。當模型到達自然停止點或用戶提供的停止序列時,它會將 finish_reason 設(shè)置為“停止”。這表明該模型已設(shè)法很好地連接到后綴,并且是完成質(zhì)量的良好信號。這對于在使用 n > 1 或重采樣時在幾個完成之間進行選擇尤其相關(guān)(請參閱下一點)。
重新采樣 3-5 次。雖然幾乎所有補全都連接到前綴,但在更困難的情況下,模型可能難以連接后綴。我們發(fā)現(xiàn),在這種情況下,重采樣 3 次或 5 次(或使用 k=3,5 的 best_of)并選擇帶有“stop”作為其 finish_reason 的樣本可能是一種有效的方法。重采樣時,您通常需要更高的溫度來增加多樣性。
注意:如果所有返回的樣本都有 finish_reason == "length",很可能是 max_tokens 太小,模型在設(shè)法自然地連接提示和后綴之前用完了標記??紤]在重采樣之前增加 max_tokens。
編輯代碼
edits 端點可用于編輯代碼,而不僅僅是完成它。您提供一些代碼和如何修改它的說明,code-davinci-edit-001 模型將嘗試相應地對其進行編輯。這是重構(gòu)和調(diào)整代碼的自然界面。在此初始測試期間,編輯端點的使用是免費的。
迭代構(gòu)建程序
編寫代碼通常是一個迭代過程,需要一路完善文本。編輯自然而然地不斷完善模型的輸出,直到最終結(jié)果得到完善。在此示例中,我們使用斐波那契作為如何迭代構(gòu)建代碼的示例。
寫一個函數(shù)
重構(gòu)它
重命名函數(shù)
添加文檔
最佳實踐
edits 端點仍處于 alpha 階段,我們建議遵循這些最佳實踐。
考慮使用空提示!在這種情況下,編輯可以類似于完成使用。
說明盡可能具體。
有時,模型無法找到解決方案并會導致錯誤。我們建議改寫您的說明或輸入。
更多建議: