ChatGPT เป็นปลั๊กอิน NeoVim ที่ช่วยให้คุณใช้ OpenAI Chatgpt API ได้อย่างง่ายดายช่วยให้คุณสร้างการตอบสนองภาษาธรรมชาติจาก ChatGPT ของ OpenAI ภายในบรรณาธิการโดยตรงเพื่อตอบคำถามของคุณ

คำถามและคำตอบแบบโต้ตอบ : มีส่วนร่วมในเซสชันคำถามและคำตอบแบบโต้ตอบด้วยโมเดล GPT ที่ทรงพลัง (CHATGPT) โดยใช้อินเทอร์เฟซที่ใช้งานง่าย
บทสนทนาที่ใช้ Persona : สำรวจมุมมองที่หลากหลายและมีการสนทนากับบุคคลที่แตกต่างกันโดยเลือกพรอมต์จากพรอมต์ chatgpt ที่ยอดเยี่ยม
ความช่วยเหลือในการแก้ไขรหัส : ปรับปรุงประสบการณ์การเข้ารหัสของคุณด้วยหน้าต่างแก้ไขแบบโต้ตอบที่ขับเคลื่อนโดยรุ่น GPT ซึ่งเสนอคำแนะนำที่เหมาะสำหรับงานการเข้ารหัส
รหัสเสร็จสมบูรณ์ : เพลิดเพลินไปกับความสะดวกในการสมบูรณ์ของรหัสคล้ายกับ GitHub Copilot ใช้ประโยชน์จากความสามารถของโมเดล GPT เพื่อแนะนำตัวอย่างโค้ดและความสมบูรณ์ตามบริบทและรูปแบบการเขียนโปรแกรม
การดำเนินการที่ปรับแต่งได้ : ดำเนินการช่วงของการกระทำที่ใช้โมเดล GPT เช่นการแก้ไขไวยากรณ์การแปลการสร้างคำหลักการสร้างเอกสารการเพิ่มการทดสอบการเพิ่มประสิทธิภาพรหัสการสรุปการแก้ไขข้อผิดพลาดรหัสคำอธิบายรหัสการแก้ไข Roxygen และการวิเคราะห์ความสามารถในการอ่านรหัส นอกจากนี้คุณสามารถกำหนดการกระทำที่กำหนดเองของคุณเองโดยใช้ไฟล์ JSON
สำหรับความเข้าใจที่ครอบคลุมเกี่ยวกับฟังก์ชั่นของส่วนขยายคุณสามารถดูวิดีโอปลั๊กอิน Showcase
ตรวจสอบให้แน่ใจว่าคุณติดตั้ง curl
รับคีย์ API จาก OpenAI ซึ่งคุณสามารถรับได้ที่นี่ (หมายเหตุ: การสมัครสมาชิก CHATGPT Plus ไม่ได้รวมเครดิต API ที่จำเป็นในปัจจุบันคุณจะต้องซื้อเครดิต API แยกกัน)
คีย์ OpenAI API สามารถให้ได้ในหนึ่งในสองวิธีต่อไปนี้:
ในตัวเลือกการกำหนดค่า api_key_cmd ให้พาพา ธ และอาร์กิวเมนต์ไปยังปฏิบัติการที่ส่งคืนคีย์ API ผ่านทาง stdout
การตั้งค่าผ่านตัวแปรสภาพแวดล้อมที่เรียกว่า $OPENAI_API_KEY
โฮสต์ OpenAI API ที่กำหนดเองพร้อมตัวเลือกการกำหนดค่า api_host_cmd หรือตัวแปรสภาพแวดล้อมที่เรียกว่า $OPENAI_API_HOST มีประโยชน์หากคุณไม่สามารถเข้าถึง OpenAI ได้โดยตรง
พารามิเตอร์ curl ที่กำหนดเองสามารถส่งผ่านโดยใช้ตัวเลือกการกำหนดค่า extra_curl_params จะมีประโยชน์หากคุณต้องการรวมส่วนหัวเพิ่มเติมสำหรับคำขอ:
{
... ,
extra_curl_params = {
" -H " ,
" Origin: https://example.com "
}
}สำหรับการปรับใช้ Azure คุณต้องระบุฐาน URL เครื่องยนต์และประเภท API คุณสามารถทำสิ่งนี้ให้สำเร็จได้ในหนึ่งในสองวิธี:
api_type_cmd , azure_api_base , azure_api_engine_cmd และ azure_api_version_cmd แต่ละเหล่านี้ควรเป็นคำสั่งที่เรียกใช้งานได้ซึ่งส่งคืนค่าที่สอดคล้องกันตัวอย่างเช่น:
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 และ $OPENAI_API_AZURE_VERSIONตัวอย่างเช่น:
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 "โปรดทราบว่าแบบจำลองการแก้ไขได้เลิกใช้แล้วและอาจไม่ทำงานตามที่คาดไว้
หากคุณใช้ packer.nvim เป็นตัวจัดการปลั๊กอิน:
-- 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 "
}
})หรือถ้าคุณใช้ lazy.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 มาพร้อมกับค่าเริ่มต้นต่อไปนี้คุณสามารถแทนที่พวกเขาได้โดยผ่านการกำหนดค่าเป็นพารามิเตอร์การตั้งค่า
https://github.com/jackmort/chatgpt.nvim/blob/main/lua/chatgpt/config.lua
การกำหนดค่าอย่างง่ายของโมเดลแชทอาจมีลักษณะเช่นนี้:
{
" 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 "
}
}การจัดหาคีย์ OpenAI API ผ่านตัวแปรสภาพแวดล้อมเป็นอันตรายเนื่องจากออกจากคีย์ API ที่อ่านได้ง่ายโดยกระบวนการใด ๆ ที่สามารถเข้าถึงตัวแปรสภาพแวดล้อมของกระบวนการอื่น ๆ นอกจากนี้ยังสนับสนุนให้ผู้ใช้จัดเก็บข้อมูลรับรองในข้อความที่ชัดเจนในไฟล์กำหนดค่า
เป็นทางเลือกในการจัดหาคีย์ API ผ่านตัวแปรสภาพแวดล้อม OPENAI_API_KEY ผู้ใช้ควรใช้ตัวเลือกการกำหนดค่า api_key_cmd ตัวเลือกการกำหนดค่า api_key_cmd ใช้สตริงซึ่งดำเนินการเมื่อเริ่มต้นและมีการใช้เอาต์พุตเป็นคีย์ API
การกำหนดค่าต่อไปนี้จะใช้ 1Passwords CLI, op เพื่อดึงคีย์ API จากฟิลด์ credential ของรายการ OpenAI
require ( " chatgpt " ). setup ({
api_key_cmd = " op read op://private/OpenAI/credential --no-newline "
})การกำหนดค่าต่อไปนี้จะใช้ GPG เพื่อถอดรหัสไฟล์ท้องถิ่นที่มีคีย์ API
local home = vim . fn . expand ( " $HOME " )
require ( " chatgpt " ). setup ({
api_key_cmd = " gpg --decrypt " .. home .. " /secret.txt.gpg "
}) โปรดทราบว่าอาร์กิวเมนต์ api_key_cmd ถูกแบ่งออกเป็นช่องว่าง หากคุณต้องการช่องว่างภายในอาร์กิวเมนต์ (ตัวอย่างเช่นการอ้างอิงเส้นทางที่มีช่องว่าง) คุณสามารถห่อมันในสคริปต์แยกต่างหาก
ปลั๊กอินเปิดเผยคำสั่งต่อไปนี้:
ChatGPT คำสั่ง ChatGPT ซึ่งเปิดหน้าต่างแบบโต้ตอบโดยใช้รุ่น gpt-3.5-turbo (เรียกอีกอย่างว่า ChatGPT )
ChatGPTActAs คำสั่ง ChatGPTActAs ซึ่งเปิดการเลือกพรอมต์จากพรอมต์ chatgpt ที่ยอดเยี่ยมที่จะใช้กับรุ่น gpt-3.5-turbo

ChatGPTEditWithInstructions คำสั่ง ChatGPTEditWithInstructions ซึ่งเปิดหน้าต่างแบบโต้ตอบเพื่อแก้ไขข้อความที่เลือกหรือหน้าต่างทั้งหมดโดยใช้โมเดล code-davinci-edit-001 (GPT 3.5 ปรับแต่งสำหรับการเข้ารหัส)
คุณสามารถแมปโดยใช้ lua api เช่นโดยใช้ 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 คำสั่ง ChatGPTRun [action] ซึ่งเรียกใช้การกระทำที่เฉพาะเจาะจง - ดูไฟล์ actions.json สำหรับรายการโดยละเอียด การกระทำที่มีอยู่คือ:
grammar_correctiontranslatekeywordsdocstringadd_testsoptimize_codesummarizefix_bugsexplain_coderoxygen_editcode_readability_analysis - ดูตัวอย่าง การกระทำทั้งหมดข้างต้นใช้รุ่น gpt-3.5-turbo
เป็นไปได้ที่จะกำหนดการกระทำที่กำหนดเองด้วยไฟล์ JSON ดู actions.json สำหรับตัวอย่าง เส้นทางของการกระทำที่กำหนดเองสามารถตั้งค่าในฟิลด์ config (ดูฟิลด์ actions_paths ในตัวอย่างการกำหนดค่าด้านบน)
ตัวอย่างของการกระทำที่กำหนดเองอาจมีลักษณะเช่นนี้: ( # เครื่องหมายความคิดเห็น)
{
"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"
}
}
}
} กลยุทธ์ edit ประกอบด้วยการแสดงเอาต์พุตเคียงข้างกับอินพุตและพร้อมใช้งานสำหรับคำขอแก้ไขเพิ่มเติม สำหรับตอนนี้กลยุทธ์ edit จะถูกนำไปใช้สำหรับประเภท chat เท่านั้น
กลยุทธ์ display แสดงผลลัพธ์ในหน้าต่างลอย
append และ replace แก้ไขข้อความโดยตรงในบัฟเฟอร์
เมื่อใช้ ChatGPT และ ChatGPTEditWithInstructions keybindings ต่อไปนี้จะพร้อมใช้งาน:
<C-Enter> [ทั้งคู่] เพื่อส่ง<Cy> [ทั้งสอง] เพื่อคัดลอก/ดึงคำตอบสุดท้าย<Co> [ทั้งสอง] สลับหน้าต่างการตั้งค่า<Ch> [ทั้งสอง] สลับหน้าต่างความช่วยเหลือ<Tab> [ทั้งสอง] รอบ Windows<Cf> [แชท] รอบโหมด (ตรงกลางติดไปทางขวา)<Cc> [ทั้งคู่] เพื่อปิดหน้าต่างแชท<Cp> [แชท] รายการสลับ<Cu> [แชท] เลื่อนหน้าต่างแชทขึ้น<Cd> [แชท] เลื่อนหน้าต่างแชทลง<Ck> [แชท] เพื่อคัดลอก/ดึงรหัสจากคำตอบล่าสุด<Cn> [แชท] เริ่มเซสชันใหม่<Cr> [แชท] ข้อความร่าง (สร้างข้อความโดยไม่ส่งไปยังเซิร์ฟเวอร์)<Cr> [แชท] เปลี่ยนบทบาท (สลับระหว่างผู้ใช้และผู้ช่วยบทบาทเพื่อกำหนดเวิร์กโฟลว์)<Cs> [ทั้งสอง] สลับหน้าต่างข้อความระบบ<Ci> [แก้ไขหน้าต่าง] ใช้การตอบสนองเป็นอินพุต<Cd> [แก้ไขหน้าต่าง] ดูความแตกต่างระหว่างบานหน้าต่างด้านซ้ายและขวาและใช้คำสั่งโหมด diff-mode เมื่อหน้าต่างการตั้งค่าถูกเปิด (ด้วย <Co> ) การตั้งค่าสามารถแก้ไขได้โดยการกด Enter บนการกำหนดค่าที่เกี่ยวข้อง การตั้งค่าจะถูกบันทึกในส่วนต่างๆ
เพิ่มสิ่งเหล่านี้ลงในการแมปปลั๊กอินของคุณเพื่อการผูกที่สะดวก
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 " } },
},