Взаимодействуйте с моделями GPT AI в качестве опытного пользователя.
Поддерживает несколько поставщиков искусственного интеллекта
Богатая оперативная инженерная поддержка
Гибкий пользовательский интерфейс
Поиск переполнения стека из редактора
Вызов заранее подготовленных пользовательских команд CLI из вашего редактора.
Загрузите с: VSCode Marketplace и следуйте инструкциям.
ИЛИ
Шаги:
Ctrl
- Shift
- P
(Windows, Linux) или Cmd
- Shift
- P
(macOS) запустите > Extensions: Install Extension
.FlexiGPT
от ppipada
.Ctrl
/ Cmd
+ ,
и найдите flexigpt
.Параметры:
// flexigpt basic configuration
"flexigpt.promptFiles" : " /home/me/my_prompt_files/myprompts.js " ,
"flexigpt.inBuiltPrompts" : " gobasic.js;gosql.js " ,
"flexigpt.defaultProvider" : " openai " ,
// openai provider configuration
"flexigpt.openai.apiKey" : " sk-mkey " ,
"flexigpt.openai.timeout" : " 120 " ,
"flexigpt.openai.defaultCompletionModel" : " gpt-3.5-turbo " ,
"flexigpt.openai.defaultChatCompletionModel" : " gpt-3.5-turbo " ,
"flexigpt.openai.defaultOrigin" : " https://api.openai.com " ,
// anthropic provider configuration
"flexigpt.anthropic.apiKey" : " sk-mkey " ,
"flexigpt.anthropic.timeout" : " 120 " ,
"flexigpt.anthropic.defaultCompletionModel" : " claude-3-haiku-20240307 " ,
"flexigpt.anthropic.defaultChatCompletionModel" : " claude-3-haiku-20240307 " ,
"flexigpt.anthropic.defaultOrigin" : " https://api.anthropic.com " ,
// huggingface provider configuration
"flexigpt.huggingface.apiKey" : " hf-mkey " ,
"flexigpt.huggingface.timeout" : " 120 " ,
"flexigpt.huggingface.defaultCompletionModel" : " bigcode/starcoder2-15b " ,
"flexigpt.huggingface.defaultChatCompletionModel" : " deepseek-ai/deepseek-coder-1.3b-instruct " ,
"flexigpt.huggingface.defaultOrigin" : " https://api-inference.huggingface.co " ,
// googlegl provider configuration
"flexigpt.googlegl.apiKey" : " gl-mkey " ,
"flexigpt.googlegl.timeout" : " 120 " ,
"flexigpt.googlegl.defaultCompletionModel" : " gemini-1.0-pro " ,
"flexigpt.googlegl.defaultChatCompletionModel" : " gemini-1.0-pro " ,
"flexigpt.googlegl.defaultOrigin" : " https://generativelanguage.googleapis.com " ,
// llamacpp provider configuration
"flexigpt.llamacpp.apiKey" : " " ,
"flexigpt.llamacpp.timeout" : " 120 " ,
"flexigpt.llamacpp.defaultOrigin" : " 127.0.0.1:8080 " ,
Поставщику OpenAI для работы требуется ключ API. Вы можете получить его в настройках своей учетной записи openAI здесь.
Поддерживаемые API
Поддерживаемые модели — все модели, поддерживаемые двумя вышеуказанными API.
gpt-4
gpt-4-*
gpt-3.5-turbo
gpt-3.5-turbo-*
FlexiGPT использует defaultChatCompletionModel: gpt-3.5-turbo
, если только приглашение не переопределяет его.
Пример использования функции Function calling
OpenAI см. в этом файле подсказки здесь.
Варианты конфигурации:
gpt-3.5-turbo
. Обратите внимание, что использование gpt-3.5-turbo
учитывается при выставлении счетов OpenAI. Единственная бесплатная модель, находящаяся в бета-версии по состоянию на февраль 2023 года, — это codex ( code-davinci-002
).https://api.openai.com
. Для работы поставщика Anthropic требуется ключ API. Вы можете получить его на сайте Anthropic здесь.
Поддерживаемый API
claude-3-*
, claude-2*
FlexiGPT использует defaultChatCompletionModel: claude-3-haiku-20240307
, если только приглашение не переопределяет его.
Варианты конфигурации:
claude-3-haiku-20240307
.https://api.anthropic.com
. Для работы поставщика Huggingface требуется ключ API. Вы можете получить его на сайте Huggingface здесь.
Поддерживаемый API
Поддерживаемые модели — все модели, поддерживаемые указанным выше API.
FlexiGPT использует defaultChatCompletionModel: deepseek-ai/deepseek-coder-1.3b-instruct
, если только приглашение не переопределяет его.
Варианты конфигурации:
deepseek-ai/deepseek-coder-1.3b-instruct
.bigcode/starcoder2-15b
.https://api-inference.huggingface.co
. Для работы поставщика Googlegl требуется ключ API. Вы можете получить его на сайте здесь.
Поддерживаемый API: https://ai.google.dev/api/rest/v1/models/generateContent.
gemini-1.0-pro
chat-bison-001
(наследие)text-bison-001
(устаревший) FlexiGPT использует defaultChatCompletionModel: gemini-1.0-pro
, если только приглашение не переопределяет его.
Варианты конфигурации:
gemini-1.0-pro
.gemini-1.0-pro
.https://generativelanguage.googleapis.com
. Настройте сервер llama.cpp, как указано здесь.
Поддерживаемые API
your host:port of the llama server
/завершениеПоддерживаемые модели — все модели, поддерживаемые указанными выше API. Обратите внимание, что модель в llama.cpp необходимо указывать при запуске самого сервера и ее нельзя указывать на каждом уровне запроса.
Варианты конфигурации:
http://127.0.0.1:8080
.Получите код, используя комментарий в редакторе.
Ctrl
+ Alt
+ G
FlexiGPT: Get Code
чтобы щелкнуть/ввести.Действия для получения всех перечисленных ниже функций (аналогично для всех настроенных подсказок: встроенных или пользовательских):
Ctrl
+ Alt
+ A
Исправьте и реорганизуйте выбранный код.
Создайте модульный тест для выбранного кода.
Завершите выбор.
Объясните выбор.
Создайте документацию для выбранного кода.
Найдите проблемы с выбором, исправьте их и объясните, что было не так.
Оптимизировать выбранный код
{selection}
или {readfile}
чтобы улучшить ваш чат с ИИ. (Те же возможности, что и для файлов подсказок)Панель активности чата можно открыть следующими способами:
FlexiGPT: Ask
чтобы щелкнуть/ввести.Ctrl
/ Cmd
+ Shift
+ P
): вы должны получить FlexiGPT: Ask
чтобы щелкнуть/ввести.Ctrl
+ Alt
+ A
Найдите вопросы о переполнении стека в своем редакторе.
Ctrl
+ Alt
+ S
FlexiGPT: Stackoverflow Search
чтобы щелкнуть/ввести.Ctrl
/ Cmd
+ Shift
+ P
): вы должны получить опцию FlexiGPT: Stackoverflow Search
, чтобы щелкнуть/ввести.cliCommands
в файлах подсказок.Ctrl
+ Alt
+ C
FlexiGPT: Run CLI Command
чтобы щелкнуть/ввести.Ctrl
/ Cmd
+ Shift
+ P
): вы должны получить опцию FlexiGPT: Run CLI Command
чтобы щелкнуть/ввести.Создавайте и настраивайте подсказки, сохраняйте их и используйте непосредственно в VSCode.
Поддерживает изменение параметров запроса для API GPT.
Предопределенные системные переменные можно использовать для уточнения вашего вопроса.
{system.selection}
или просто {selection}
чтобы передать выделенный текст в редактор (код или иное).{system.readfile}
или просто {readfile}
для передачи открытого файла.{system.readfile <your file path>}
для передачи файла по заданному пути.system.
префикс системной переменной не является обязательным. Таким образом, вы даже можете использовать только {selection}
для использования выделенного текста или {language}
вместо {system.language}
для языка вашего файла.Поддерживает постобработку ответа через responseHandlers в подсказках. Доступно несколько встроенных предопределенных обработчиков ответов. Также поддерживает пользовательские обработчики ответов. Пример можно найти здесь.
Также поддерживается функция вызова функций моделей GPT3.5/4. Пример можно найти в этом файле подсказки.
При нажатии на текстовое поле ввода должны загружаться базовые подсказки, предоставляемые самим FlexiGPT, любые подсказки, определенные в flexigpt.promptFiles
, и любые встроенные подсказки, включенные с помощью flexigpt.inBuiltPrompts
, как определено в конфигурации. (Если при первом нажатии на текстовое поле некоторые предварительно настроенные запросы не загружаются, попробуйте экранировать параметры и щелкнуть еще раз. VSCode может потребоваться некоторое время для загрузки динамических списков из файлов.)
Если вы выберете предварительно настроенные подсказки, шаблон вопроса, определенный в команде подсказки, будет использоваться после замены определенных системных/пользовательских переменных. Остальные параметры команды также будут взяты из самого определения.
Если вы введете в текстовое поле свободно плавающий вопрос, сам текст будет напрямую использоваться в качестве подсказки. Вы также можете использовать предопределенные системные переменные, чтобы улучшить свой свободно плавающий вопрос.
{selection}
, чтобы передать выделенный текст в редактор.{readfile}
для передачи открытого файла Основные запросы FlexiGPT (по умолчанию: включено)
Основные запросы Go (по умолчанию: отключено, включено в конфигурации)
Подсказки Go sqlx + squirrel (по умолчанию: отключено, включено в конфигурации)
module . exports = {
namespace : "myprompts" ,
commands : [
{
name : "Refactor" ,
template : `Refactor following function.
function:
{system.selection}` ,
} ,
] ,
} ;
module . exports = {
namespace : "MyComplexPrompts" ,
commands : [
{
name : "Create unit test." ,
template : `Create unit test in {user.unitTestFramework} framework for following function.
code:
{system.selection}` ,
responseHandler : {
func : "writeFile" ,
args : {
filePath : "user.testFileName" ,
} ,
} ,
requestparams : {
model : "gpt-3.5-turbo" ,
stop : [ "##" , "func Test" , "package main" , "func main" ] ,
} ,
} ,
{
name : "Write godoc" ,
template : `Write godoc for following functions.
code:
{system.selection}` ,
responseHandler : {
func : "append" ,
args : {
position : "start" ,
} ,
} ,
requestparams : {
model : "code-davinci-002" ,
stop : [ "##" , "func Test" , "package main" , "func main" ] ,
} ,
} ,
] ,
functions : [
// you could also write your own responseHandler.
// Note that it takes a single object as input.
function myHandler ( { system , user } ) {
console . table ( { system } ) ;
console . table ( { user } ) ;
} ,
] ,
variables : [
{
name : "unitTestFramework" ,
value : "testing" ,
} ,
{
name : "testFileName" ,
value : ( { baseFolder , fileName , fileExtension } ) =>
` ${ baseFolder } \ ${ fileName } _test ${ fileExtension } ` ,
} ,
] ,
cliCommands : [
{
name : "Go generate all" ,
command : `go generate ./...` ,
description : "Run go generate in the workspace" ,
} ,
] ,
} ;
имя: Обязательно
описание: Необязательно
шаблон: обязателен
{system.*variableName*}
, переменнаяName может быть одной из предопределенных системных переменных. Вы также можете передавать параметры таким функциям, как readFile. Например: {readfile user.testFile}
— допустимая переменная шаблона, где входными данными для readfile является файл, на который указывает определяемая пользователем переменная testfile.{user.*variableName*}
, имя переменной должно быть в поле переменных в файле приглашения.параметры запроса: необязательно
{ [key: string]: any }
.Обработчик ответа: необязательно
responseHandler используется для обработки ответа. По умолчанию используется функция замены. Функция дескриптора может быть одной из предопределенных системных функций или функций, определяемых пользователем.
Вы можете установить responseHandler следующими способами:
responseHandler: "replace" ;
responseHandler: {
func : 'replace' ,
args : {
textToReplace : 'user.answerModified'
}
}
Любой из элементов variables
можно использовать в шаблоне команды. Пользовательские значения должны иметь префикс «пользователь». Например, если «testFileName» определено в переменных, его можно использовать как «user.TestFileName» в файле шаблона или передать в функцию.
Значения переменных могут быть статическими или динамическими. Для динамических значений вам следует создать метод получения. При вызове метода получения переменных в качестве первого аргумента передается один объект с системными переменными (см. Предопределенные системные переменные), любые другие переменные могут быть приняты в качестве следующих аргументов.
module . exports = {
variables : [
{
//static
name : "testingFramework" ,
value : "xUnit"
} ,
{
//dynamic
name : "typeNameInResponse" ,
value : ( { answer /*system variable*/ } , myTestFile /*user defined var*/ ) => { }
} ,
]
functions : [
function extractTypeName ( { code , system } ) { /**/ } ,
function myOtherFunc ( ) { } ,
] ,
commands : [
{
name : "Create DTO" ,
template : `Create unit test with {user.testingFramework} for following class.
class:
{system.selection}` ,
responseHandler : {
func : 'writeFile' ,
args : {
filePath : 'user.typeNameInResponse' /*usage for function arg*/
}
}
}
]
}
Все переменные нечувствительны к регистру.
Имя переменной | Описание |
---|---|
system.selection | Выделенный текст в редакторе |
система.вопрос | Вопрос по OpenAI |
система.ответ | Ответ OpenAI |
system.language | Язык программирования активного файла |
system.baseFolder | Базовый путь проекта |
system.fileFolder | Путь к родительской папке активного файла |
system.имя_файла | Имя активного файла |
system.filePath | Полный путь к активному файлу |
system.fileExtension | Расширение активного файла |
system.commitAndTagList | Последние 25 коммитов и связанные теги |
system.readFile | Прочтите полный файл открытого редактора. При необходимости передайте путь к файлу в качестве второго аргумента. |
Обратите внимание, что system.
префикс системной переменной не является обязательным. Таким образом, вы даже можете использовать только {selection}
для использования выделенного текста или {language}
вместо {system.language}
для языка вашего файла.
functions
.Имя функции | Описание | параметры (по умолчанию) |
---|---|---|
добавить | Добавить текст | textToAppend(system.ответ),позиция('конец') |
заменять | Заменить выделенный текст | textToReplace(system.ответ) |
записьФайл | Запись текста в файл. Добавить, если файл существует. | filePath(), содержимое (system.ответ) |
Заменять
Заменить текст выделением. Возьмите необязательный параметр textToReplace
. Значение по умолчанию равно ответу API.
Использование по умолчанию
...
commands : [
{
name : "Refactor" ,
template : `Refactor following function.
function:
{system.selection}`
responseHandler : 'replace'
} ,
] ,
Использование с параметрами
...
commands : [
{
name : "Refactor" ,
template : `Refactor following function.
function:
{system.selection}`
responseHandler : {
func : 'replace' ,
args : {
textToReplace : 'user.answerModified'
}
}
} ,
] ,
variables : [
{
name : "answerModified" ,
value : ( { answer } ) => `/*n ${ anwer } n*/`
} ,
] ,
Добавить
Добавить текст с выделением. Возьмите необязательный параметр textToAppend
и postion
. postion
может быть start
или end
По умолчанию textToAppend
равен OpenAI, postion
является концом выделения.
Пример использования
...
commands : [
{
name : "Append" ,
template : `Write jsdoc for following function.
function:
{system.selection}`
responseHandler : {
func : 'append' ,
args : {
position : 'start'
}
}
} ,
] ,
имя: Обязательно
описание: Необязательно
команда: Требуется
Функциональные области | Возможности и реализации | Статус |
Гибкость общения с любым ИИ | Интеграция с несколькими поставщиками ИИ через API. | Сделанный |
Поддержка выбора параметров и обработка различных структур ответа. | Сделанный | |
Гибкость использования пользовательских подсказок | Поддержка разработки подсказок, которая позволяет создавать и изменять подсказки с помощью стандартной структуры. | Сделанный |
Разрешить изменение параметров запроса | Сделанный | |
Разрешить добавление пользовательских обработчиков ответов для обработки ответа от ИИ. | Сделанный | |
Предоставьте общие предопределенные переменные, которые можно использовать для улучшения подсказок. | Сделанный | |
Обеспечьте дополнительные улучшения подсказок, используя пользовательские переменные, которые могут быть статическими или функциональными получателями. Это должно позволить определять функции в структуре подсказок и интегрировать результаты в подсказки. Также разрешите передачу системных переменных, пользовательских переменных или статических строк в качестве входных данных. | Сделанный | |
Предоставить возможность оценивать различные подсказки, назначать рейтинги ELO, выбирать и сохранять самые сильные | Долгосрочная перспектива | |
Бесшовная интеграция пользовательского интерфейса | Разработайте гибкий пользовательский интерфейс, интерфейс чата, интегрированный в панель активности VSCode. | Сделанный |
Пользовательский интерфейс должен поддерживать сохранение, загрузку и экспорт разговоров. | Сделанный | |
Реализуйте потоковый ввод текста в пользовательском интерфейсе, создавая ощущение, что ИИ-бот печатает сам. | Долгосрочная перспектива | |
Специальные запросы/задачи | Помогите разработчику задавать специальные запросы ИИ, где он сможет описать вопросы или проблемы, связанные с ним, с помощью интерфейса чата. Это можно использовать для отладки проблем, понимания поведения, получения подсказок о том, на что следует обратить внимание, и т. д. Разработчик должен иметь возможность прикреплять код или файлы к своим вопросам. | Сделанный |
Предоставьте способ определять заранее подготовленные команды CLI и запускать их по мере необходимости. Интерфейс для определения команд CLI должен быть аналогичен подсказкам. | Сделанный | |
Предоставьте возможность поиска запросов в StackOverflow. | Сделанный | |
Предоставьте способ получать результаты для запросов из ответов StackOverflow и соответствующего ответа AI. | Долгосрочная перспектива | |
Дополнение кода и интеллект | Предоставьте способ генерации кода из комментария к коду. | Сделанный |
Обеспечьте возможность завершения, рефакторинга, редактирования или оптимизации кода через интерфейс чата. Должен позволять при необходимости выбирать соответствующий код из редактора. | Сделанный | |
Внедрите систему управления контекстом, интегрированную с протоколом языкового сервера (LSP), которую можно использовать для улучшения взаимодействия ИИ. | Среднесрочная перспектива | |
Поддержка создания вложений кода для понимания контекста кода и интеграции его в подсказки. | Среднесрочная перспектива | |
Разработайте интеллектуальную функцию завершения кода, которая прогнозирует следующие строки кода. Он должен интегрировать контекст (LSP или внедрения) в подсказки автозаполнения и обрабатывать ответы автозаполнения в пользовательском интерфейсе. | Среднесрочная перспектива | |
Анализ кода и аналитика | Предоставьте возможность просмотра через интерфейс чата. Должно позволять выбирать соответствующий код из редактора по мере необходимости. | Сделанный |
Возможность получать запросы на слияние/вытягивание от Github, Gitlab или других поставщиков версий, анализировать их и предоставлять комментарии для проверки. Должен обеспечивать гибкость для указания областей проверки и связанного с ними приоритета в зависимости от варианта использования. | Среднесрочная перспектива | |
Предоставляйте автоматические проверки кода и рекомендации. Он должен предоставлять тонкие индикаторы улучшений кода и обрабатывать ответы API проверки кода в пользовательском интерфейсе. | Долгосрочная перспектива | |
Предоставление предложений по автоматическому рефакторингу. Это должно обрабатывать ответы API рефакторинга и отображать предложения в пользовательском интерфейсе. | Долгосрочная перспектива | |
Предоставляйте автоматические предложения по безопасности. Это должно позволять выявлять потенциальные добавляемые уязвимости или отклонения от лучших практик безопасности, используемых в коде. | Долгосрочная перспектива | |
Помощь в документации кода | Сгенерируйте документацию для выбранного кода с помощью интерфейса чата. Должен позволять при необходимости выбирать соответствующий код из редактора. | Сделанный |
Разработайте эффективную встроенную помощь в документации. Он должен автоматически генерировать и обновлять документацию на основе кода и отображать ее в пользовательском интерфейсе. | Долгосрочная перспектива | |
Понимание кода и поддержка обучения | Предоставьте способ объяснить код через интерфейс чата. Должен позволять при необходимости выбирать соответствующий код из редактора. | Сделанный |
Разработка/интеграция с интегрированным графиком знаний для предоставления подробных объяснений Сервисов, API, методов, алгоритмов и концепций, которые разработчик использует или может захотеть использовать. | Долгосрочная перспектива | |
Интегрируйте поиск по графику в подсказки | Долгосрочная перспектива | |
Тестирование | Предоставьте возможность генерировать модульные тесты через интерфейс чата. Должен позволять при необходимости выбирать соответствующий код из редактора. Должна иметь возможность вставлять тесты в новые файлы или текущий файл по мере необходимости. | Сделанный |
Предоставьте возможность генерировать API и связанные с ним тесты рабочих процессов через интерфейс чата. Должно позволять выбирать соответствующие определения кода/API из редактора по мере необходимости. Должна иметь возможность вставлять тесты в новые файлы или текущий файл по мере необходимости. | Короткий срок |
FlexiGPT — это программное обеспечение с полностью открытым исходным кодом, лицензированное по лицензии MIT.
Вклады приветствуются! Не стесняйтесь отправлять запрос на вытягивание на GitHub.
Если у вас есть какие-либо вопросы или проблемы, откройте проблему на GitHub на странице проблем.