ChatGPT adalah plugin Neovim yang memungkinkan Anda untuk dengan mudah memanfaatkan API Openai ChatGPT, memberdayakan Anda untuk menghasilkan tanggapan bahasa alami dari chatgpt Openai langsung di dalam editor dalam menanggapi pertanyaan Anda.

T&J interaktif : Terlibat dalam sesi tanya jawab interaktif dengan model GPT yang kuat (chatgpt) menggunakan antarmuka intuitif.
Percakapan Berbasis Persona : Jelajahi berbagai perspektif dan melakukan percakapan dengan kepribadian yang berbeda dengan memilih petunjuk dari petunjuk chatgpt yang mengagumkan.
Bantuan Pengeditan Kode : Tingkatkan pengalaman pengkodean Anda dengan jendela pengeditan interaktif yang ditenagai oleh model GPT, menawarkan instruksi yang disesuaikan untuk tugas pengkodean.
Penyelesaian Kode : Nikmati kenyamanan penyelesaian kode yang mirip dengan github copilot, memanfaatkan kemampuan model GPT untuk menyarankan cuplikan kode dan penyelesaian berdasarkan konteks dan pola pemrograman.
Tindakan yang dapat disesuaikan : Jalankan berbagai tindakan yang menggunakan model GPT, seperti koreksi tata bahasa, terjemahan, pembuatan kata kunci, pembuatan docString, penambahan tes, optimasi kode, ringkasan, penetapan bug, penjelasan kode, pengeditan Roxygen, dan analisis keterbacaan kode. Selain itu, Anda dapat menentukan tindakan khusus Anda sendiri menggunakan file JSON.
Untuk pemahaman yang komprehensif tentang fungsi ekstensi, Anda dapat menonton video showcase plugin
Pastikan Anda telah diinstal curl .
Dapatkan kunci API dari OpenAI, yang bisa Anda peroleh di sini. (Catatan: Langganan ChatGPT Plus saat ini tidak termasuk kredit API yang diperlukan. Anda harus membeli kredit API secara terpisah.)
Kunci API Openai dapat disediakan dalam salah satu dari dua cara berikut:
Dalam opsi konfigurasi api_key_cmd , berikan jalur dan argumen ke yang dapat dieksekusi yang mengembalikan kunci API melalui STDOUT.
Mengaturnya melalui variabel lingkungan yang disebut $OPENAI_API_KEY .
Host API OpenAi Kustom dengan opsi konfigurasi api_host_cmd atau variabel lingkungan yang disebut $OPENAI_API_HOST . Ini berguna jika Anda tidak dapat mengakses Openai secara langsung
Parameter keriting khusus dapat dilewati menggunakan opsi konfigurasi extra_curl_params . Ini bisa berguna jika Anda perlu menyertakan header tambahan untuk permintaan:
{
... ,
extra_curl_params = {
" -H " ,
" Origin: https://example.com "
}
}Untuk penyebaran Azure, Anda perlu menentukan basis URL, mesin, dan jenis API. Anda dapat mencapai ini dalam salah satu dari dua cara:
api_type_cmd , azure_api_base , azure_api_engine_cmd , dan azure_api_version_cmd . Masing -masing harus menjadi perintah yang dapat dieksekusi yang mengembalikan nilai yang sesuai.Misalnya:
local config = {
api_host_cmd = ' echo -n "" ' ,
api_key_cmd = ' pass azure-openai-key ' ,
api_type_cmd = ' echo azure ' ,
azure_api_base_cmd = ' echo https://{your-resource-name}.openai.azure.com ' ,
azure_api_engine_cmd = ' echo chat ' ,
azure_api_version_cmd = ' echo 2023-05-15 '
}
require ( " chatgpt " ). setup ( config )$OPENAI_API_TYPE , $OPENAI_API_BASE , $OPENAI_API_AZURE_ENGINE , dan $OPENAI_API_AZURE_VERSION .Misalnya:
export OPENAI_API_TYPE= " azure "
export OPENAI_API_BASE= " https://{your-resource-name}.openai.azure.com "
export OPENAI_API_AZURE_ENGINE= " chat "
export OPENAI_API_AZURE_VERSION= " 2023-05-15 "Harap dicatat bahwa model edit telah sudah usang dan mungkin tidak berfungsi seperti yang diharapkan.
Jika Anda menggunakan packer.nvim sebagai manajer plugin:
-- Packer
use ({
" jackMort/ChatGPT.nvim " ,
config = function ()
require ( " chatgpt " ). setup ()
end ,
requires = {
" MunifTanjim/nui.nvim " ,
" nvim-lua/plenary.nvim " ,
" folke/trouble.nvim " ,
" nvim-telescope/telescope.nvim "
}
})atau jika Anda menggunakan malas.nvim:
-- Lazy
{
" jackMort/ChatGPT.nvim " ,
event = " VeryLazy " ,
config = function ()
require ( " chatgpt " ). setup ()
end ,
dependencies = {
" MunifTanjim/nui.nvim " ,
" nvim-lua/plenary.nvim " ,
" folke/trouble.nvim " , -- optional
" nvim-telescope/telescope.nvim "
}
} ChatGPT.nvim hadir dengan default berikut, Anda dapat menimpanya dengan meneruskan konfigurasi sebagai param pengaturan
https://github.com/jackmort/chatgpt.nvim/blob/main/lua/chatgpt/config.lua
Konfigurasi sederhana dari model obrolan bisa terlihat seperti ini:
{
" jackMort/ChatGPT.nvim " ,
event = " VeryLazy " ,
config = function ()
require ( " chatgpt " ). setup ({
-- this config assumes you have OPENAI_API_KEY environment variable set
openai_params = {
-- NOTE: model can be a function returning the model name
-- this is useful if you want to change the model on the fly
-- using commands
-- Example:
-- model = function()
-- if some_condition() then
-- return "gpt-4-1106-preview"
-- else
-- return "gpt-3.5-turbo"
-- end
-- end,
model = " gpt-4-1106-preview " ,
frequency_penalty = 0 ,
presence_penalty = 0 ,
max_tokens = 4095 ,
temperature = 0.2 ,
top_p = 0.1 ,
n = 1 ,
}
})
end ,
dependencies = {
" MunifTanjim/nui.nvim " ,
" nvim-lua/plenary.nvim " ,
" folke/trouble.nvim " , -- optional
" nvim-telescope/telescope.nvim "
}
}Memberikan kunci API OpenAI melalui variabel lingkungan berbahaya, karena meninggalkan kunci API yang mudah dibaca oleh proses apa pun yang dapat mengakses variabel lingkungan dari proses lain. Selain itu, ini mendorong pengguna untuk menyimpan kredensial di Clear-Text dalam file konfigurasi.
Sebagai alternatif untuk menyediakan kunci API melalui variabel lingkungan OPENAI_API_KEY , pengguna didorong untuk menggunakan opsi konfigurasi api_key_cmd . Opsi konfigurasi api_key_cmd mengambil string, yang dieksekusi saat startup, dan yang outputnya digunakan sebagai kunci API.
Konfigurasi berikut akan menggunakan 1Passwords CLI, op , untuk mengambil kunci API dari bidang credential entri OpenAI .
require ( " chatgpt " ). setup ({
api_key_cmd = " op read op://private/OpenAI/credential --no-newline "
})Konfigurasi berikut akan menggunakan GPG untuk mendekripsi file lokal yang berisi kunci API
local home = vim . fn . expand ( " $HOME " )
require ( " chatgpt " ). setup ({
api_key_cmd = " gpg --decrypt " .. home .. " /secret.txt.gpg "
}) Perhatikan bahwa argumen api_key_cmd dibagi berdasarkan Whitespace. Jika Anda membutuhkan spasi putih di dalam argumen (misalnya untuk merujuk jalur dengan spasi), Anda dapat membungkusnya dalam skrip terpisah.
Plugin memperlihatkan perintah berikut:
ChatGPT Perintah ChatGPT yang membuka jendela interaktif menggunakan model gpt-3.5-turbo . (juga dikenal sebagai ChatGPT )
ChatGPTActAs Perintah ChatGPTActAs yang membuka pilihan cepat dari petunjuk chatgpt yang luar biasa untuk digunakan dengan model gpt-3.5-turbo .

ChatGPTEditWithInstructions Perintah ChatGPTEditWithInstructions yang membuka jendela interaktif untuk mengedit teks yang dipilih atau seluruh jendela menggunakan model code-davinci-edit-001 (GPT 3.5 disesuaikan untuk pengkodean).
Anda dapat memetakannya menggunakan LUA API, misalnya menggunakan which-key.nvim :
local chatgpt = require ( " chatgpt " )
wk . register ({
p = {
name = " ChatGPT " ,
e = {
function ()
chatgpt . edit_with_instructions ()
end ,
" Edit with instructions " ,
},
},
}, {
prefix = " <leader> " ,
mode = " v " ,
})
ChatGPTRun Perintah ChatGPTRun [action] yang menjalankan tindakan spesifik - lihat file actions.json untuk daftar terperinci. Tindakan yang tersedia adalah:
grammar_correctiontranslatekeywordsdocstringadd_testsoptimize_codesummarizefix_bugsexplain_coderoxygen_editcode_readability_analysis - lihat demo Semua tindakan di atas menggunakan model gpt-3.5-turbo .
Dimungkinkan untuk mendefinisikan tindakan khusus dengan file JSON. Lihat actions.json Sebagai contoh. Jalur tindakan kustom dapat diatur dalam bidang konfigurasi (lihat bidang actions_paths di contoh konfigurasi di atas).
Contoh tindakan kustom mungkin terlihat seperti ini: ( # Marks Comments)
{
"action_name" : {
"type" : "chat" , # or "completion" or "edit"
"opts" : {
"template" : "A template using possible variable: {{filetype}} (neovim filetype), {{input}} (the selected text) an {{argument}} (provided on the command line), {{filepath}} (the relative path to the file)" ,
"strategy" : "replace" , # or "display" or "append" or "edit"
"params" : { # parameters according to the official OpenAI API
"model" : "gpt-3.5-turbo" , # or any other model supported by `"type"` in the OpenAI API, use the playground for reference
"stop" : [
"```" # a string used to stop the model
]
}
},
"args" : {
"argument" : {
"type" : "strig" ,
"optional" : "true" ,
"default" : "some value"
}
}
}
} Strategi edit terdiri dari menunjukkan output berdampingan dengan input dan tersedia untuk permintaan pengeditan lebih lanjut. Untuk saat ini, strategi edit hanya diimplementasikan untuk jenis chat .
Strategi display menunjukkan output di jendela float.
append dan replace ubah teks secara langsung di buffer.
Saat menggunakan ChatGPT dan ChatGPTEditWithInstructions , inti keybinding berikut tersedia:
<C-Enter> [Keduanya] untuk mengirimkan.<Cy> [keduanya] untuk menyalin/menarik jawaban terakhir.<Co> [keduanya] Sakelar pengaturan pengaturan.<Ch> [Keduanya] Toggle Bantuan Window.<Tab> [keduanya] siklus di atas windows.<Cf> [chat] siklus mode over (tengah, tetap di sebelah kanan).<Cc> [keduanya] untuk menutup jendela obrolan.<Cp> [chat] daftar sesi sakelar.<Cu> [chat] Gulir jendela obrolan.<Cd> [obrolan] gulir ke bawah jendela obrolan.<Ck> [CHAT] untuk menyalin/menarik kode dari jawaban terakhir.<Cn> [CHAT] Mulai sesi baru.<Cr> [chat] draf pesan (buat pesan tanpa mengirimkannya ke server)<Cr> [chat] saklar peran (beralih antara peran pengguna dan asisten untuk mendefinisikan alur kerja)<Cs> [keduanya] Toggle System Message Window.<Ci> [edit jendela] Gunakan respons sebagai input.<Cd> [edit jendela] Lihat diff antara panel kiri dan kanan dan gunakan perintah mode diff Ketika jendela pengaturan dibuka (dengan <Co> ), pengaturan dapat dimodifikasi dengan menekan Enter pada konfigurasi terkait. Pengaturan disimpan di seluruh bagian
Tambahkan ini ke pemetaan plugin mana Anda untuk ikatan yang nyaman
c = {
name = " ChatGPT " ,
c = { " <cmd>ChatGPT<CR> " , " ChatGPT " },
e = { " <cmd>ChatGPTEditWithInstruction<CR> " , " Edit with instruction " , mode = { " n " , " v " } },
g = { " <cmd>ChatGPTRun grammar_correction<CR> " , " Grammar Correction " , mode = { " n " , " v " } },
t = { " <cmd>ChatGPTRun translate<CR> " , " Translate " , mode = { " n " , " v " } },
k = { " <cmd>ChatGPTRun keywords<CR> " , " Keywords " , mode = { " n " , " v " } },
d = { " <cmd>ChatGPTRun docstring<CR> " , " Docstring " , mode = { " n " , " v " } },
a = { " <cmd>ChatGPTRun add_tests<CR> " , " Add Tests " , mode = { " n " , " v " } },
o = { " <cmd>ChatGPTRun optimize_code<CR> " , " Optimize Code " , mode = { " n " , " v " } },
s = { " <cmd>ChatGPTRun summarize<CR> " , " Summarize " , mode = { " n " , " v " } },
f = { " <cmd>ChatGPTRun fix_bugs<CR> " , " Fix Bugs " , mode = { " n " , " v " } },
x = { " <cmd>ChatGPTRun explain_code<CR> " , " Explain Code " , mode = { " n " , " v " } },
r = { " <cmd>ChatGPTRun roxygen_edit<CR> " , " Roxygen Edit " , mode = { " n " , " v " } },
l = { " <cmd>ChatGPTRun code_readability_analysis<CR> " , " Code Readability Analysis " , mode = { " n " , " v " } },
},