当前位置: 首页>C++>正文

OpenAI Codex,GitHub Copilot 和cheat.sh 三個代碼建議工具對比

OpenAI Codex,GitHub Copilot 和cheat.sh 三個代碼建議工具對比

在本文中,我們將對比 OpenAI Codex、GitHub Copilot 和cheat.sh 的智能感知和代碼建議。

OpenAI Codex簡單的集成

OpenAI Codex 是 OpenAI 開發的一個人工智能模型,可以解析自然語言并生成響應代碼。因為沒有提供插件,所以測試的時候需要我們自己調用他的API,這里為了方便,編寫一個簡單的Neovim Lua 模塊來進行集成。

local Job = require "plenary.job"local M = {}local API_KEY_FILE = vim.env.HOME .. "/.config/openai-codex/env"
local OPENAI_URL = "https://api.openai.com/v1/engines/davinci-codex/completions"
-- local OPENAI_URL = "https://api.openai.com/v1/engines/cushman-codex/completions"
local MAX_TOKENS = 300local function get_api_key()local file = io.open(API_KEY_FILE, "rb")if not file thenreturn nilendlocal content = file:read "*a"content = string.gsub(content, "^%s*(.-)%s*$", "%1") -- strip off any space or newlinefile:close()return content
endlocal function trim(s)return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
endfunction M.complete(v)v = v or truelocal ft = vim.bo.filetypelocal buf = vim.api.nvim_get_current_buf()local api_key = get_api_key()if api_key == nil thenvim.notify "OpenAI API key not found"returnendlocal text = ""if v thenlocal line1 = vim.api.nvim_buf_get_mark(0, "<")[1]local line2 = vim.api.nvim_buf_get_mark(0, ">")[1]text = vim.api.nvim_buf_get_lines(buf, line1 - 1, line2, false)text = trim(table.concat(text, "\n"))elsetext = trim(vim.api.nvim_get_current_line())endlocal cs = vim.bo.commentstringtext = string.format(cs .. "\n%s", ft, text)-- vim.notify(text)local request = {}request["max_tokens"] = MAX_TOKENSrequest["top_p"] = 1request["temperature"] = 0request["frequency_penalty"] = 0request["presence_penalty"] = 0request["prompt"] = textlocal body = vim.fn.json_encode(request)local completion = ""local job = Job:new {command = "curl",args = {OPENAI_URL,"-H","Content-Type: application/json","-H",string.format("Authorization: Bearer %s", api_key),"-d",body,},}local is_completed = pcall(job.sync, job, 10000)if is_completed thenlocal result = job:result()local ok, parsed = pcall(vim.json.decode, table.concat(result, ""))if not ok thenvim.notify "Failed to parse OpenAI result"returnendif parsed["choices"] ~= nil thencompletion = parsed["choices"][1]["text"]local lines = {}local delimiter = "\n"for match in (completion .. delimiter):gmatch("(.-)" .. delimiter) dotable.insert(lines, match)endvim.api.nvim_buf_set_lines(buf, -1, -1, false, lines)endend
endreturn M

要使用 OpenAI Codex,需要有 API 密鑰。并在 API_KEY_FILE 指定API 密鑰的文件的位置。Codex中有 2 種模型可以選擇。 Davinci Codex 是功能最強大的 Codex 模型。 它特別擅長將自然語言翻譯成代碼。 Cushman Codex 幾乎與 Davinci Codex 一樣強大,但速度略快。 這種速度優勢可能使其更適合實時應用程序。 我通過設置 OPENAI_URL 變量配置 Davinci Codex。

MAX_TOKENS 表示要返回的最大令牌數。 標記可以是單詞或只是字符塊。

有許多可以配置的參數,如 top_p、temperature、best_of、logprobs 等。這里就不詳細介紹了。

現在我們開始測試python代碼

"""
Ask the user for their name and say "Hello"
"""

def getUserBalance(id):
"""
Look up the user in the database ‘UserData' and return their current account balance.
"""

def sum_numbers(a, b):return a + b# Unit test
def

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?

解釋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

與Copilot和cheat.sh的比較

下面我們開始正式比較 Codex、Copilot 和cheat.sh 。

cheat.sh 雖然不是 AI 補全引擎,但是他的確很好用,所以這里也把他加入了進來,在這里我們把它作為非AI補全的天花板。

對于 Copilot,我將使用 VS Code,因為與 Neovim 插件相比,Copilot 擴展更加成熟。

先看看Python

我們輸入

def binary_sort(input_list):"""Binary sort the input list"""

Copilot

除了默認建議外,還提供了替代建議。

Codex

cheat.sh

下面對比下Javascript

// Find out the minimum and maximum values of the input array
function process(arr) {

Copilot

Codex

cheat.sh

總結

cheat.sh正如他的名字cheatsheet一樣,如果你是進行刷題的,那么他將非常的好用因為他能能夠匹配到原題。

但是對于是實際開發來說,Copilot是非常好用的,因為畢竟其后面有著Github的代碼庫。Codex的變現也不錯,總體來說AI輔助編程絕對是降低編程門檻的一大進步。 現在提出最佳編碼實踐可能不夠聰明,但隨著模型的改進,應該會變得更好。

譯者注:我最近在開發中一直在使用Copilot,它甚至能夠完成完整的代碼,因為畢竟他背后有著Github的龐大代碼庫。我覺得他之所以做的這么好是因為目前我們寫的代碼大部分都出現在了github中(別人也寫過類似的功能),其實這對于AI模型來說就是數據泄露了,模型在用訓練的數據做推理所以準確性非常的高。其實把Copilot作為代碼搜索模型我覺得更恰當,簡單的講就是在Github這么龐大的代碼庫中,它可以搜索到適用我們需求的代碼,并且給我們提示或者能夠給我們一些別人寫代碼的思路。但是無論怎樣,Copilot真的很好用,推薦大家都試試。

作者:alpha2phi

https://www.nshth.com/cplus/313076.html
>

相关文章:

  • 計算機專業英語第04章,2021計算機專業英語第四章
  • 組合體的組合類型有哪兩類,C++實驗03(03)組合類:Triangle類與Point類
  • 單元測試分析怎么寫,單元測試覆蓋分析指標-翻譯中
  • switch一個用戶只能綁定一個賬號嗎,switch兩個賬號合并_Switch如何綁定任天堂網絡ID?
  • 知道ip地址和子網掩碼求廣播地址,如何計算一個網段的子網掩碼,網絡ID,廣播地址和可用IP地址數
  • Avada學習之-如何修改網站標題(正標題與副標題)
  • Wordpress建站,如何判斷一個網站是WordPress搭建的網站以及網站SEO網絡推廣
  • arcanum wiki,阿木實驗室的一個專門教程的網站(現在知道這是P200的wiki地址)
  • 數據結構嚴蔚敏,DSW算法(《C++數據結構與算法》P200)
  • 枚舉類型怎么用,c++ enum 給定類型_講解C++中的枚舉類型以及聲明新類型的方法
  • 匯趣投影儀是品牌嗎,康佳P200投影儀咋樣?和哈趣H1哪個更好,對比兩款投影儀參數區別
  • C++prime,C++ Primer Plus P125~P200
  • cps廣告,計算廣告-GD廣告
  • 廣告學概論章節知識點總結,計算廣告學筆記
  • cmd命令數字雨,關于DOS命令的騷操作
  • 學生請假系統app,學生上課考勤系統jsp_jsp學生考勤在線請假系統
  • 有關上課睡覺的評語,學生上課睡覺班主任怎么處理_學生上課睡覺老師該怎么辦:高級教師教你一招...
  • wegame右下角有個盾牌,Win10應用右下角小盾牌怎么解決?
  • 電腦用戶賬戶控制怎么取消,Delphi與Windows 7下的用戶賬戶控制(UAC)機制(加小盾牌),注冊表沒反應
  • 桌面圖標盾牌怎么去掉,win7系統下如何關閉UAC,去掉軟件圖標上的盾牌
  • 選擇管理員命令提示符,快速啟動以管理員身份運行命令行窗口命令
  • 3d繪圖軟件有哪些,老都管喝道 繪圖軟件
  • 手機遠程控制軟件主控端,智深叫道 遠程控制軟件
  • 水滸蔣門神是哪里人,話說當時武松踏住蔣 水滸傳
  • 【轉】告訴你外語學習的真實方法及誤區分析(精編版)-part 1
  • 人人網開放平臺推出Live Stream Box,為視頻直播帶來社會化屬性!
  • 虎牙科技,虎牙發布直播行業首個技術開放平臺 三年十億打造開放生態
  • 爬蟲網站,美國space爬蟲
  • 國外音樂APP,Apple App Store 音樂App 美國暢銷榜單前30名使用記錄
  • 數學之美—泰勒展開式