ChatGPT OpenAI ChatGpt API를 쉽게 활용하여 문의에 응답하여 OpenAi의 ChatGpt에서 직접 자연어 응답을 생성 할 수있는 Neovim 플러그인입니다.

대화식 Q & A : 직관적 인 인터페이스를 사용하여 강력한 GPT 모델 (ChatGPT)과 대화식 질문 및 답변 세션에 참여하십시오.
페르소나 기반 대화 : 다양한 관점을 탐구하고 멋진 chatgpt 프롬프트에서 프롬프트를 선택하여 다른 페르소나와 대화를 나누십시오.
코드 편집 지원 : GPT 모델로 구동되는 대화식 편집 창으로 코딩 경험을 향상시켜 코딩 작업에 맞춰진 지침을 제공합니다.
코드 완료 : GitHub Copilot과 유사한 코드 완료의 편의를 누리며 GPT 모델의 기능을 활용하여 컨텍스트 및 프로그래밍 패턴을 기반으로 코드 스 니펫 및 완성을 제안합니다.
사용자 정의 가능한 조치 : 문법 보정, 번역, 키워드 생성, 문서 생성, 테스트 첨가, 코드 최적화, 요약, 버그 수정, 코드 설명, roxygen 편집 및 코드 가독성 분석과 같은 GPT 모델을 사용하는 다양한 작업을 실행합니다. 또한 JSON 파일을 사용하여 자신의 사용자 정의 작업을 정의 할 수 있습니다.
Extension의 기능에 대한 포괄적 인 이해를 위해 플러그인 쇼케이스 비디오를 볼 수 있습니다.
curl 설치되어 있는지 확인하십시오.
OpenAi에서 API 키를 얻으십시오. (참고 : ChatGpt Plus 구독에는 현재 필요한 API 크레딧이 포함되어 있지 않습니다. API 크레딧을 별도로 구매해야합니다.)
OpenAI API 키는 다음 두 가지 방법 중 하나로 제공 될 수 있습니다.
구성 옵션 api_key_cmd 에서 STDOUT를 통해 API 키를 반환하는 실행 파일에 경로와 인수를 제공하십시오.
$OPENAI_API_KEY 라는 환경 변수를 통해 설정합니다.
구성 옵션 api_host_cmd 또는 $OPENAI_API_HOST 라는 환경 변수가있는 사용자 정의 OpenAI API 호스트. OpenAI에 직접 액세스 할 수없는 경우 유용합니다
configuration 옵션 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 키를 쉽게 읽을 수 있기 때문에 위험합니다. 또한 사용자는 CLEAR-TEXT에 구성 파일에 자격 증명을 저장하도록 권장합니다.
OPENAI_API_KEY 환경 변수를 통해 API 키를 제공하기위한 대안으로, 사용자는 api_key_cmd 구성 옵션을 사용하도록 권장됩니다. api_key_cmd 구성 옵션은 시작시 실행되고 출력이 API 키로 사용되는 문자열을 취합니다.
다음 구성은 1Passwords CLI, op 사용하여 OpenAI 항목의 credential 필드에서 API 키를 가져옵니다.
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 gpt-3.5-turbo 모델을 사용하여 대화식 창을 열는 ChatGPT 명령. ( ChatGPT 라고도 함)
ChatGPTActAs ChatGPTActAs 명령은 gpt-3.5-turbo 모델과 함께 사용하도록 Awesome Chatgpt 프롬프트에서 프롬프트를 엽니 다.

ChatGPTEditWithInstructions code-davinci-edit-001 모델을 사용하여 선택한 텍스트 또는 전체 창을 편집하기 위해 대화식 창을 열어주는 ChatGPTEditWithInstructions 명령 (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 참조하십시오. 사용자 정의 작업 경로는 구성에서 설정할 수 있습니다 (위 구성 예제의 actions_paths 필드 참조).
사용자 정의 행동의 예는 다음과 같이 보일 수 있습니다. ( # marks 댓글)
{
"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 전략은 입력과 함께 출력을 나란히 표시하며 추가 편집 요청에 사용할 수있는 것으로 구성됩니다. 현재로서는 chat 유형에 대해서만 edit 전략이 구현됩니다.
display 전략은 플로트 창의 출력을 보여줍니다.
버퍼에서 직접 텍스트를 append 하고 replace 하십시오.
ChatGPT 및 ChatGPTEditWithInstructions 사용할 때 다음과 같은 키 바인딩을 사용할 수 있습니다.
<C-Enter> [둘 다] 제출.<Cy> [둘 다] 마지막 답변을 복사/예금합니다.<Co> [둘 다] 토글 설정 창.<Ch> [둘 다] 토글 헬프 윈도우.<Tab> [둘 다] Windows 위로 순환합니다.<Cf> [채팅] 모드 오버 사이클 (중앙, 오른쪽에 고수).<Cc> [둘 다].<Cp> [채팅] 토글 세션 목록.<Cu> [채팅] 채팅 창을 위로 스크롤합니다.<Cd> [채팅] 채팅 창 아래로 스크롤합니다.<Ck> [채팅] 마지막 답변에서 코드를 복사/yank합니다.<Cn> [채팅] 새 세션을 시작합니다.<Cr> [채팅] 초안 메시지 (서버에 제출하지 않고 메시지 작성)<Cr> [채팅] 스위치 역할 (워크 플로를 정의하기 위해 사용자와 보조 역할 사이의 전환)<Cs> [둘 다] 시스템 메시지 전환 창.<Ci> [편집 창] 응답을 입력으로 사용합니다.<Cd> [창 편집] 왼쪽과 오른쪽 판의 차이를보고 Diff-Mode 명령을 사용하십시오. 설정 창이 열리면 ( <Co> 와 함께) 관련 구성에서 Enter 눌러 설정을 수정할 수 있습니다. 설정은 섹션에 걸쳐 저장됩니다
편리한 바인딩을 위해 whykey 플러그인 매핑에 추가하십시오.
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 " } },
},