Codex 模型系列是我們的 GPT-3 系列的后代,該系列已經(jīng)過(guò)自然語(yǔ)言和數(shù)十億行代碼的訓(xùn)練。它最擅長(zhǎng) Python,精通 JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL,甚至 Shell 等十幾種語(yǔ)言。在最初的有限測(cè)試期間,Codex 使用是免費(fèi)的。
您可以將 Codex 用于各種任務(wù),包括:
將注釋變成代碼
在上下文中完成你的下一行或函數(shù)
為您帶來(lái)知識(shí),例如為應(yīng)用程序查找有用的庫(kù)或 API 調(diào)用
添加評(píng)論
重寫代碼以提高效率
要自己開(kāi)始使用 Codex,請(qǐng)嘗試在 Playground 中打開(kāi)這些示例。
說(shuō) "Hello" (Python)
"""
Ask the user for their name and say "Hello"
"""
創(chuàng)建隨機(jī)名稱 (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)建一個(gè) 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?
訪問(wèn)我們的示例庫(kù),探索更多為 Codex 設(shè)計(jì)的提示。
從注釋、數(shù)據(jù)或代碼開(kāi)始。您可以在我們的 playground 中嘗試使用其中一種 Codex 模型(需要時(shí)將樣式說(shuō)明作為注釋。)
為了讓 Codex 創(chuàng)建有用的完成,考慮程序員執(zhí)行任務(wù)需要哪些信息會(huì)很有幫助。這可能只是一個(gè)清晰的注釋或編寫有用函數(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í)行的任務(wù)。
這種方法甚至可以擴(kuò)展到您可以向 Codex 提供注釋和數(shù)據(jù)庫(kù)模式示例,以使其為各種數(shù)據(jù)庫(kù)編寫有用的查詢請(qǐng)求。
# 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
當(dāng)您向 Codex 顯示數(shù)據(jù)庫(kù)架構(gòu)時(shí),它能夠?qū)θ绾胃袷交樵冏龀鲇懈鶕?jù)的猜測(cè)。
指定語(yǔ)言。 Codex 了解數(shù)十種不同的編程語(yǔ)言。許多人對(duì)注釋、函數(shù)和其他編程語(yǔ)法有著相似的約定。通過(guò)在注釋中指定語(yǔ)言和版本,Codex 能夠更好地完成您想要的內(nèi)容。也就是說(shuō),Codex 在風(fēng)格和語(yǔ)法方面相當(dāng)靈活。
# 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)頁(yè),請(qǐng)?jiān)谀脑u(píng)論告訴 Codex 下一步應(yīng)該做什么之后將第一行代碼放在 HTML 文檔 (<!DOCTYPE html>) 中。相同的方法適用于從注釋創(chuàng)建函數(shù)(在注釋之后以 func 或 def 開(kāi)頭的新行)。
<!-- Create a web page with the title 'Kat Katman attorney at paw' -->
<!DOCTYPE html>
在我們的評(píng)論之后放置 <!DOCTYPE html> 可以讓 Codex 清楚地知道我們想要它做什么。
# Create a function to count to 100
def counter
如果我們開(kāi)始編寫函數(shù),Codex 將了解下一步需要做什么。
指定庫(kù)將幫助 Codex 了解您的需求。 Codex 知道大量的庫(kù)、API 和模塊。通過(guò)通過(guò)注釋或?qū)⑺鼈儗?dǎo)入您的代碼告訴 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 -->
通過(guò)指定版本,您可以確保 Codex 使用最新的庫(kù)。
注意:Codex 可以推薦有用的庫(kù)和 API,但請(qǐng)始終確保自己進(jìn)行研究以確保它們對(duì)您的應(yīng)用程序是安全的。
注釋風(fēng)格會(huì)影響代碼質(zhì)量。對(duì)于某些語(yǔ)言,注釋的風(fēng)格可以提高輸出的質(zhì)量。例如,在使用 Python 時(shí),在某些情況下使用文檔字符串(用三引號(hào)引起來(lái)的注釋)可以提供比使用井號(hào) (#) 符號(hào)更高質(zhì)量的結(jié)果。
"""
Create an array of users and email addresses
"""
將注釋放在函數(shù)內(nèi)部可能會(huì)有所幫助。推薦的編碼標(biāo)準(zhǔn)通常建議將函數(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 使用的特定樣式或格式,請(qǐng)?jiān)谡?qǐng)求的第一部分提供示例或演示,這將有助于 Codex 更準(zhǔn)確地滿足您的需求。
"""
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)往往會(huì)產(chǎn)生更好的結(jié)果。與 GPT-3 不同,更高的 temperature 可以提供有用的創(chuàng)造性和隨機(jī)結(jié)果,Codex 的更高 temperature 可能會(huì)給你真正隨機(jī)或不穩(wěn)定的響應(yīng)。
如果您需要 Codex 提供不同的潛在結(jié)果,請(qǐng)從零開(kāi)始,然后向上遞增 0.1,直到找到合適的變化。
將任務(wù)組織成功能。我們可以通過(guò)在注釋中盡可能準(zhǔn)確地指定函數(shù)應(yīng)該做什么來(lái)讓 Codex 編寫函數(shù)。通過(guò)編寫以下注釋,Codex 創(chuàng)建了一個(gè) Javascript 計(jì)時(shí)器函數(shù),該函數(shù)在用戶按下按鈕時(shí)觸發(fā):
一個(gè)簡(jiǎn)單的 JavaScript 定時(shí)器
// Create a timer that creates an alert in 10 seconds
我們可以使用 Codex 與眾所周知的庫(kù)一起執(zhí)行常見(jiàn)任務(wù),例如使用 Stripe API 創(chuàng)建客戶:
在 Python 中創(chuàng)建 Stripe 客戶
# Create a Stripe customer from an email address
創(chuàng)建示例數(shù)據(jù)。測(cè)試應(yīng)用程序通常需要使用示例數(shù)據(jù)。因?yàn)?nbsp;Codgen 是一種理解如何理解和編寫自然語(yǔ)言的語(yǔ)言模型,所以您可以要求 Codex 創(chuàng)建數(shù)據(jù),例如虛構(gòu)名稱、產(chǎn)品和其他變量的數(shù)組。
/* Create an array of weather temperatures for San Francisco */
要求 Codex 執(zhí)行此任務(wù)將生成如下表格:
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 }
];
復(fù)合函數(shù)和小型應(yīng)用程序。我們可以向 Codex 提供包含復(fù)雜請(qǐng)求的評(píng)論,例如創(chuàng)建隨機(jī)名稱生成器或使用用戶輸入執(zhí)行任務(wù),如果有足夠的令牌,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 中請(qǐng)求更長(zhǎng)的完成時(shí)間可能會(huì)導(dǎo)致不準(zhǔn)確的答案和重復(fù)。通過(guò)減少 max_tokens 和設(shè)置停止標(biāo)記來(lái)限制查詢的大小。例如,添加 \n 作為停止序列以將完成限制為一行代碼。較小的完成也會(huì)導(dǎo)致較少的延遲。
使用流式傳輸來(lái)減少延遲。大型 Codex 查詢可能需要數(shù)十秒才能完成。要構(gòu)建需要較低延遲的應(yīng)用程序,例如執(zhí)行自動(dòng)完成的編碼助手,請(qǐng)考慮使用流式處理。在模型完成生成整個(gè)完成之前將返回響應(yīng)。僅需要部分完成的應(yīng)用程序可以通過(guò)以編程方式或使用創(chuàng)造性的停止值來(lái)切斷完成來(lái)減少延遲。
用戶可以通過(guò)從 API 請(qǐng)求多個(gè)解決方案并使用返回的第一個(gè)響應(yīng),將流式處理與復(fù)制結(jié)合起來(lái)以減少延遲。通過(guò)設(shè)置 n > 1 來(lái)做到這一點(diǎn)。這種方法消耗更多的令牌配額,因此請(qǐng)謹(jǐn)慎使用(例如,通過(guò)對(duì) max_tokens 和 stop 使用合理的設(shè)置)。
使用 Codex 來(lái)解釋代碼。 Codex 創(chuàng)建和理解代碼的能力使我們能夠使用它來(lái)執(zhí)行任務(wù),例如解釋文件中代碼的作用。實(shí)現(xiàn)此目的的一種方法是在以“This function”或“This application is”開(kāi)頭的函數(shù)之后添加注釋。食典委通常將此解釋為解釋的開(kāi)始并完成文本的其余部分。
/* 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
--
編寫單元測(cè)試。只需添加注釋“單元測(cè)試”并啟動(dòng)一個(gè)函數(shù),即可在 Python 中創(chuàng)建單元測(cè)試。
# Python 3
def sum_numbers(a, b):
return a + b
# Unit test
def
檢查代碼是否有錯(cuò)誤。通過(guò)使用示例,您可以向 Codex 展示如何識(shí)別代碼中的錯(cuò)誤。在某些情況下不需要示例,但是展示提供描述的級(jí)別和細(xì)節(jié)可以幫助法典理解要尋找的內(nèi)容以及如何解釋它。 (Codex 對(duì)錯(cuò)誤的檢查不應(yīng)取代用戶的仔細(xì)審查。)
/* Explain why the previous function doesn't work. */
使用源數(shù)據(jù)編寫數(shù)據(jù)庫(kù)函數(shù)。正如人類程序員會(huì)從了解數(shù)據(jù)庫(kù)結(jié)構(gòu)和列名中獲益一樣,Codex 可以使用此數(shù)據(jù)來(lái)幫助您編寫準(zhǔn)確的查詢請(qǐng)求。在此示例中,我們插入數(shù)據(jù)庫(kù)的模式并告訴 Codex 要查詢數(shù)據(jù)庫(kù)的內(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
語(yǔ)言之間的轉(zhuǎn)換。您可以讓 Codex 從一種語(yǔ)言轉(zhuǎn)換為另一種語(yǔ)言,方法是遵循一種簡(jiǎn)單的格式,您可以在注釋中列出要轉(zhuǎn)換的代碼的語(yǔ)言,然后是代碼,然后是包含您希望將其翻譯成的語(yǔ)言的注釋。
# Convert this from Python to R
# Python version
[ Python code ]
# End
# R version
為庫(kù)或框架重寫代碼。如果您希望 Codex 提高某個(gè)功能的效率,您可以為其提供要重寫的代碼,然后提供有關(guān)使用何種格式的說(shuō)明。
// 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:
插入代碼
完成端點(diǎn)還支持通過(guò)提供除前綴提示之外的后綴提示來(lái)在代碼中插入代碼。這可用于在函數(shù)或文件中間插入補(bǔ)全。
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
通過(guò)為模型提供額外的上下文,它可以更加可控。然而,這對(duì)模型來(lái)說(shuō)是一個(gè)更具約束性和挑戰(zhàn)性的任務(wù)。
插入代碼是測(cè)試版中的一項(xiàng)新功能,您可能需要修改使用 API 的方式以獲得更好的結(jié)果。以下是一些最佳實(shí)踐:
使用 max_tokens > 256。該模型更擅長(zhǎng)插入更長(zhǎng)的補(bǔ)全。如果 max_tokens 太小,模型可能會(huì)在連接到后綴之前被切斷。請(qǐng)注意,即使使用更大的 max_tokens,您也只會(huì)根據(jù)生成的代幣數(shù)量付費(fèi)。
更喜歡 finish_reason == “stop”。當(dāng)模型到達(dá)自然停止點(diǎn)或用戶提供的停止序列時(shí),它會(huì)將 finish_reason 設(shè)置為“停止”。這表明該模型已設(shè)法很好地連接到后綴,并且是完成質(zhì)量的良好信號(hào)。這對(duì)于在使用 n > 1 或重采樣時(shí)在幾個(gè)完成之間進(jìn)行選擇尤其相關(guān)(請(qǐng)參閱下一點(diǎn))。
重新采樣 3-5 次。雖然幾乎所有補(bǔ)全都連接到前綴,但在更困難的情況下,模型可能難以連接后綴。我們發(fā)現(xiàn),在這種情況下,重采樣 3 次或 5 次(或使用 k=3,5 的 best_of)并選擇帶有“stop”作為其 finish_reason 的樣本可能是一種有效的方法。重采樣時(shí),您通常需要更高的溫度來(lái)增加多樣性。
注意:如果所有返回的樣本都有 finish_reason == "length",很可能是 max_tokens 太小,模型在設(shè)法自然地連接提示和后綴之前用完了標(biāo)記??紤]在重采樣之前增加 max_tokens。
編輯代碼
edits 端點(diǎn)可用于編輯代碼,而不僅僅是完成它。您提供一些代碼和如何修改它的說(shuō)明,code-davinci-edit-001 模型將嘗試相應(yīng)地對(duì)其進(jìn)行編輯。這是重構(gòu)和調(diào)整代碼的自然界面。在此初始測(cè)試期間,編輯端點(diǎn)的使用是免費(fèi)的。
迭代構(gòu)建程序
編寫代碼通常是一個(gè)迭代過(guò)程,需要一路完善文本。編輯自然而然地不斷完善模型的輸出,直到最終結(jié)果得到完善。在此示例中,我們使用斐波那契作為如何迭代構(gòu)建代碼的示例。
寫一個(gè)函數(shù)
重構(gòu)它
重命名函數(shù)
添加文檔
最佳實(shí)踐
edits 端點(diǎn)仍處于 alpha 階段,我們建議遵循這些最佳實(shí)踐。
考慮使用空提示!在這種情況下,編輯可以類似于完成使用。
說(shuō)明盡可能具體。
有時(shí),模型無(wú)法找到解決方案并會(huì)導(dǎo)致錯(cuò)誤。我們建議改寫您的說(shuō)明或輸入。
更多建議: