ChatGPTはNeovimプラグインであり、Openai ChatGpt APIを簡単に利用できるようになり、お客様の問い合わせに応じてOpenaiのChatGPTから直接自然言語応答を生成することができます。

インタラクティブなQ&A :直感的なインターフェイスを使用して、強力なGPTモデル(CHATGPT)とインタラクティブな質問と回答のセッションに参加します。
ペルソナベースの会話:さまざまな視点を探求し、Awesome ChatGPTプロンプトからプロンプトを選択することにより、さまざまなペルソナとの会話をします。
コード編集支援:GPTモデルを搭載したインタラクティブな編集ウィンドウでコーディングエクスペリエンスを強化し、タスクのコーディングに合わせた指示を提供します。
コードの完了:GitHub Copilotと同様のコード完了の利便性を享受し、GPTモデルの機能を活用して、コンテキストとプログラミングパターンに基づいてコードスニペットと完了を提案します。
カスタマイズ可能なアクション:文法修正、翻訳、キーワード生成、ドキュストリングの作成、テストの追加、コード最適化、要約、バグ修正、コード説明、ロキシゲン編集、コード読みやすさの分析など、GPTモデルを使用したさまざまなアクションを実行します。さらに、JSONファイルを使用して独自のカスタムアクションを定義できます。
拡張機能の機能を包括的に理解するために、プラグインショーケースビデオを見ることができます
curlがインストールされていることを確認してください。
OpenAIからAPIキーを入手してください。ここで入手できます。 (注:ChatGPT Plusサブスクリプションには現在、必要なAPIクレジットは含まれていません。APIクレジットを個別に購入する必要があります。)
OpenAI APIキーは、次の2つの方法のいずれかで提供できます。
構成オプションapi_key_cmdで、STDOUTを介してAPIキーを返すパスと引数を実行可能ファイルに提供します。
$OPENAI_API_KEYと呼ばれる環境変数を介して設定します。
Configuration Option Option api_host_cmdまたは環境変数を使用したカスタムOpenAI APIホスト$OPENAI_API_HOSTと呼ばれる環境変数。 Openaiに直接アクセスできない場合は便利です
Configuration Option extra_curl_paramsを使用して、カスタムカールパラメーターを渡すことができます。リクエストに追加のヘッダーを含める必要がある場合に役立ちます。
{
... ,
extra_curl_params = {
" -H " ,
" Origin: https://example.com "
}
}Azureの展開については、URLベース、エンジン、およびAPIタイプを指定する必要があります。これを2つの方法のいずれかで達成できます。
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キーは、他のプロセスの環境変数にアクセスできるプロセスが簡単に読みやすくするためです。さらに、ユーザーがクリアテキストに資格情報を構成ファイルに保存することを奨励します。
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引数は、Whitespaceによって分割されることに注意してください。引数内(たとえば、スペースのあるパスを参照するために)内部の空間が必要な場合は、別のスクリプトにラップできます。
プラグインは次のコマンドを公開します。
ChatGPT gpt-3.5-turboモデルを使用してインタラクティブウィンドウを開くChatGPTコマンド。 ( ChatGPTとも呼ばれます)
ChatGPTActAs gpt-3.5-turboモデルで使用するAwesome ChatGPTプロンプトからのプロンプト選択を開くChatGPTActAsコマンド。

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を参照してください。カスタムアクションのパスは、構成で設定できます(上記の構成例の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を使用する場合、次のキーバインディングが利用可能です。
<C-Enter> [両方]送信。<Cy> [両方]最後の回答をコピー/ヤンクします。<Co> [両方]トグル設定ウィンドウ。<Ch> [両方]トグルヘルプウィンドウ。<Tab> [両方]ウィンドウのサイクル。<Cf> [チャット]モードのサイクル(中央、右に固執)。<Cc> [両方]チャットウィンドウを閉じる。<Cp> [チャット]トグルセッションリスト。<Cu> [チャット]チャットウィンドウをスクロールします。<Cd> [チャット]チャットウィンドウをスクロールします。<Ck> [チャット]最後の回答からコードをコピー/ヤンクします。<Cn> [チャット]新しいセッションを開始します。<Cr> [チャット]ドラフトメッセージ(サーバーに送信せずにメッセージを作成)<Cr> [チャット]ロールを切り替える(ユーザーとアシスタントの役割を切り替えてワークフローを定義する)<Cs> [両方]システムメッセージウィンドウを切り替えます。<Ci> [ウィンドウの編集]入力として応答を使用します。<Cd> [ウィンドウの編集]左と右のペインの間のdiffを表示し、DIFF-MODEコマンドを使用します[設定]ウィンドウが開いた場合( <Co>を使用)、関連する構成でEnter押すことで設定を変更できます。設定はセクション全体に保存されます
便利なバインドのためにこれらをwhikeyプラグインマッピングに追加します
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 " } },
},