ChatGPT - это плагин NEOVIM, который позволяет вам легко использовать API OpenAI CHATGPT, позволяя вам генерировать ответы естественного языка от CHATGPT OpenAI непосредственно в редакторе в ответ на ваши запросы.

Интерактивные вопросы и ответы : участвуйте в интерактивных сеансах вопросов и ответов с мощной моделью GPT (CHATGPT), используя интуитивно понятный интерфейс.
Разговоры на основе личности : изучить различные перспективы и поговорить с разными персонажами, выбирая подсказки из потрясающих подсказок CHATGPT.
Помощь в редактировании кода : улучшите свой опыт кодирования с помощью интерактивного редактирования окна, включенного в модель GPT, предлагая инструкции, адаптированные для задач кодирования.
Завершение кода : наслаждайтесь удобством завершения кода, аналогично Copilot Github, используя возможности модели GPT, чтобы предложить фрагменты кода и завершения на основе контекста и шаблонов программирования.
Настраиваемые действия : выполнить диапазон действий, использующих модель GPT, такие как коррекция грамматики, перевод, генерация ключевых слов, создание Docstring, дополнение к тестированию, оптимизация кода, суммирование, исправление ошибок, объяснение кода, редактирование Roxygen и анализ читаемости кода. Кроме того, вы можете определить свои собственные индивидуальные действия, используя файл JSON.
Чтобы получить всеобъемлющее понимание функциональности расширения, вы можете посмотреть видео с плагинами витрины
Убедитесь, что у вас установлен curl .
Получите ключ API от Openai, который вы можете получить здесь. (Примечание: в настоящее время подписка CHATGPT Plus не включает необходимые кредиты API. Вам придется купить кредиты API отдельно.)
Ключ API OpenAI может быть предоставлен одним из следующих двух способов:
В опции конфигурации api_key_cmd предоставьте путь и аргументы исполняемому файлу, который возвращает клавишу API через STDOUT.
Установите его через переменную среды под названием $OPENAI_API_KEY .
Пользовательский хост API OpenAI с опцией конфигурации 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 "
}
})Или, если вы используете ленивый. 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 "
}
}Предоставление ключа API OpenAI через переменную среды опасно, так как он оставляет ключ 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 Fine-Tun для кодирования).
Вы можете сопоставить его, используя API LUA, например, используя 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> [CHAT] цикл по режимам (в центре, придерживайтесь справа).<Cc> [оба], чтобы закрыть окно чата.<Cp> [CHAT] Список сессий переключения.<Cu> [CHAT] Прокрутите окно чата.<Cd> [ЧАТ] Прокрутите окно чата вниз.<Ck> [CHAT], чтобы скопировать/yank код из последнего ответа.<Cn> [CHAT] Начните новую сеанс.<Cr> [CHAT] Проектное сообщение (создать сообщение без отправки его на сервер)<Cr> [ЧАТ] Роль переключения (переключение между пользователем и помощником роли для определения рабочего процесса)<Cs> [оба] Окно системы переключения.<Ci> [Редактировать окно] Используйте ответ как вход.<Cd> [Редактировать окно] Посмотреть DIFF между левой и правой панелями и используйте команды Diff-Mode Когда окно настройки открывается (с <Co> ), настройки могут быть изменены, нажав Enter на связанной конфигурации. Настройки сохраняются по разделам
Добавьте их в ваши способления плагина WhatKey для удобных связей
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 " } },
},