Interaja com modelos GPT AI como um usuário avançado.
Suporta vários provedores de IA
Suporte de engenharia rápido e rico
IU flexível
Pesquise Stack Overflow de dentro do editor
Invoque comandos CLI personalizados pré-preparados de dentro do seu editor
Baixe em: VSCode Marketplace e siga as instruções.
OU
Passos:
Ctrl
- Shift
- P
(Windows, Linux) ou Cmd
- Shift
- P
(macOS), execute > Extensions: Install Extension
.FlexiGPT
da ppipada
.Ctrl
/ Cmd
+ ,
atalho de teclado) e pesquise flexigpt
.Opções:
// 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 " ,
O provedor OpenAI requer uma chave API para funcionar. Você pode obter um nas configurações da sua conta openAI aqui.
APIs suportadas
Modelos suportados - Todos os modelos suportados pelas duas APIs acima
gpt-4
gpt-4-*
gpt-3.5-turbo
gpt-3.5-turbo-*
FlexiGPT usa defaultChatCompletionModel: gpt-3.5-turbo
, a menos que o prompt o substitua.
Para obter um exemplo de como usar o recurso Function calling
do OpenAI, consulte este arquivo de prompt aqui.
Opções de configuração:
gpt-3.5-turbo
. Observe que o uso gpt-3.5-turbo
é contabilizado no faturamento do OpenAIs. O único modelo gratuito que está em beta em fevereiro de 2023 é o codex ( code-davinci-002
).https://api.openai.com
. O provedor Antrópico requer uma chave API para funcionar. Você pode obter um no site da Antrópico aqui.
API suportada
claude-3-*
, claude-2*
FlexiGPT usa defaultChatCompletionModel: claude-3-haiku-20240307
, a menos que o prompt o substitua.
Opções de configuração:
claude-3-haiku-20240307
.https://api.anthropic.com
. O provedor Huggingface requer uma chave de API para funcionar. Você pode obter um no site huggingface aqui.
API suportada
Modelos suportados - Todos os modelos suportados pela API acima
FlexiGPT usa defaultChatCompletionModel: deepseek-ai/deepseek-coder-1.3b-instruct
, a menos que o prompt o substitua.
Opções de configuração:
deepseek-ai/deepseek-coder-1.3b-instruct
.bigcode/starcoder2-15b
.https://api-inference.huggingface.co
. O provedor Googlegl requer uma chave de API para funcionar. Você pode obter um no site aqui.
API suportada: https://ai.google.dev/api/rest/v1/models/generateContent
gemini-1.0-pro
chat-bison-001
(legado)text-bison-001
(legado) FlexiGPT usa defaultChatCompletionModel: gemini-1.0-pro
, a menos que o prompt o substitua.
Opções de configuração:
gemini-1.0-pro
.gemini-1.0-pro
.https://generativelanguage.googleapis.com
. Configure um servidor llama.cpp conforme observado aqui
APIs suportadas
your host:port of the llama server
/completionModelos suportados – Todos os modelos suportados pelas APIs acima. Observe que o modelo em llama.cpp precisa ser fornecido durante a execução do próprio servidor e não pode ser fornecido em cada nível de solicitação.
Opções de configuração:
http://127.0.0.1:8080
.Obtenha o código usando um comentário no editor.
Ctrl
+ Alt
+ G
FlexiGPT: Get Code
para clicar/inserirEtapas para obter todas as funcionalidades abaixo (semelhantes para todos os prompts configurados; integrados ou personalizados):
Ctrl
+ Alt
+ A
Rectifique e refatore o código selecionado.
Crie um teste de unidade para o código selecionado.
Conclua a seleção.
Explique a seleção.
Gere documentação para o código selecionado.
Encontre problemas com a seleção, corrija-os e explique o que estava errado.
Otimize o código selecionado
{selection}
ou {readfile}
para aprimorar seu bate-papo com IA. (Mesma capacidade disponível para arquivos de prompt)A barra de atividades do chat pode ser aberta das seguintes maneiras:
FlexiGPT: Ask
para clicar/entrarCtrl
/ Cmd
+ Shift
+ P
): Você deve obter uma opção FlexiGPT: Ask
para clicar/entrarCtrl
+ Alt
+ A
Pesquise perguntas de estouro de pilha em seu editor.
Ctrl
+ Alt
+ S
FlexiGPT: Stackoverflow Search
para clicar/entrarCtrl
/ Cmd
+ Shift
+ P
): Você deve obter uma opção FlexiGPT: Stackoverflow Search
para clicar/entrarcliCommands
em seus arquivos de prompt.Ctrl
+ Alt
+ C
FlexiGPT: Run CLI Command
para clicar/entrarCtrl
/ Cmd
+ Shift
+ P
): Você deve obter uma opção FlexiGPT: Run CLI Command
para clicar/entrarProjete e ajuste os prompts, salve-os e use-os diretamente no VSCode.
Suporta modificações de parâmetros de solicitação para APIs GPT
Variáveis de sistema predefinidas podem ser usadas para aprimorar sua pergunta.
{system.selection}
ou apenas {selection}
para passar o texto selecionado no editor (código ou não).{system.readfile}
ou apenas {readfile}
para passar o arquivo aberto{system.readfile <your file path>}
para passar o arquivo em um determinado caminhosystem.
O prefixo para uma variável de sistema é opcional. Portanto, você pode até usar apenas {selection}
para usar o texto selecionado, ou {language}
em vez de {system.language}
para o idioma do seu arquivo.Suporta resposta pós-processamento por meio de responseHandlers em prompts. Vários responseHandlers predefinidos integrados disponíveis. Também oferece suporte a responseHandlers personalizados. Um exemplo pode ser encontrado aqui.
O recurso de chamada de função dos modelos GPT3.5/4 também é suportado. Um exemplo pode ser encontrado neste arquivo de prompt.
Ao clicar na caixa de texto de entrada, os prompts básicos fornecidos pelo próprio FlexiGPT, quaisquer prompts definidos em flexigpt.promptFiles
e quaisquer prompts embutidos habilitados usando flexigpt.inBuiltPrompts
, conforme definido na configuração devem ser carregados. (Se o primeiro clique na caixa de texto não carregar alguns prompts pré-configurados, tente escapar das opções e clicar novamente. O VSCode pode levar algum tempo para carregar listas dinâmicas de arquivos.)
Se você selecionar os prompts pré-configurados, o modelo de pergunta definido no comando do prompt será usado após a substituição das variáveis de sistema/usuário definidas. Outras opções de comando também serão retiradas da própria definição.
Se você digitar uma pergunta flutuante na caixa de texto, o próprio texto será usado diretamente como prompt. Você também pode usar variáveis de sistema predefinidas para aprimorar sua pergunta flutuante.
{selection}
para passar o texto selecionado no editor{readfile}
para transmitir o arquivo aberto Prompts básicos do FlexiGPT (padrão: ativado)
Vá aos prompts básicos (padrão: desabilitado, habilite na configuração)
Vá em prompts sqlx + squirrel (Padrão: desabilitado, habilite na configuração)
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" ,
} ,
] ,
} ;
nome: Obrigatório
descrição: Opcional
modelo: obrigatório
{system.*variableName*}
, variableName pode ser uma das variáveis de sistema predefinidas. Você também pode passar parâmetros para funções como readFile. Por exemplo: {readfile user.testFile}
é uma variável de modelo válida onde a entrada para readfile é o arquivo apontado pela variável testfile definida pelo usuário.{user.*variableName*}
, variableName deve estar no campo de variáveis no arquivo de prompt.parâmetros de solicitação: opcional
{ [key: string]: any }
.ResponseHandler: Opcional
responseHandler é usado para lidar com uma resposta. Por padrão, a função de substituição é usada. A função de identificador pode ser uma função predefinida do sistema ou uma função definida pelo usuário.
Você pode definir o responseHandler das seguintes maneiras:
responseHandler: "replace" ;
responseHandler: {
func : 'replace' ,
args : {
textToReplace : 'user.answerModified'
}
}
Qualquer um dos itens variables
pode ser usado em um modelo de comando. Os valores definidos pelo usuário devem ter o prefixo "usuário". Por exemplo, se "testFileName" for definido em variáveis, ele poderá ser usado como "user.TestFileName" no arquivo de modelo ou passado para uma função.
Os valores das variáveis podem ser estáticos ou dinâmicos. Para valores dinâmicos, você deve criar um método getter. Ao chamar o getter de variável, um único objeto com variáveis de sistema (consulte Variáveis de sistema predefinidas) é passado como primeiro argumento, quaisquer outras vars podem ser consideradas como próximos argumentos.
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*/
}
}
}
]
}
Todos os vars não diferenciam maiúsculas de minúsculas.
Nome da variável | Descrição |
---|---|
seleção de sistema | Texto selecionado no editor |
sistema.pergunta | Pergunta OpenAI |
sistema.resposta | Resposta OpenAI |
sistema.idioma | Linguagem de programação do arquivo ativo |
sistema.baseFolder | Caminho base do projeto |
sistema.fileFolder | Caminho da pasta pai do arquivo ativo |
sistema.fileName | Nome do arquivo ativo |
sistema.filePath | Caminho completo do arquivo ativo |
sistema.fileExtension | Extensão do arquivo ativo |
sistema.commitAndTagList | Últimos 25 commits e tags associadas |
sistema.readFile | Leia o arquivo completo do editor aberto. Opcionalmente, passe um caminho de arquivo como segundo argumento |
Observe que o system.
O prefixo para uma variável de sistema é opcional. Portanto, você pode até usar apenas {selection}
para usar o texto selecionado, ou {language}
em vez de {system.language}
para o idioma do seu arquivo.
functions
.Nome da Função | Descrição | parâmetros (padrão) |
---|---|---|
acrescentar | Anexar texto | textToAppend(system.resposta),posição('fim') |
substituir | Substituir texto selecionado | textToReplace(sistema.resposta) |
escrever arquivo | Escreva texto em arquivo. Anexe se o arquivo existir. | filePath(),content(system.resposta) |
Substituir
Substitua o texto pela seleção. Pegue o parâmetro opcional textToReplace
O valor padrão é igual à resposta da API.
Uso padrão
...
commands : [
{
name : "Refactor" ,
template : `Refactor following function.
function:
{system.selection}`
responseHandler : 'replace'
} ,
] ,
Uso com parâmetros
...
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*/`
} ,
] ,
Acrescentar
Anexar texto com seleção. Pegue o parâmetro opcional textToAppend
e postion
. postion
pode ser start
ou end
No padrão, textToAppend
é igual à postion
OpenAI é o fim da seleção
Uso de amostra
...
commands : [
{
name : "Append" ,
template : `Write jsdoc for following function.
function:
{system.selection}`
responseHandler : {
func : 'append' ,
args : {
position : 'start'
}
}
} ,
] ,
nome: Obrigatório
descrição: Opcional
comando: Obrigatório
Áreas funcionais | Recursos e implementações | Status |
Flexibilidade para falar com qualquer IA | Integração com vários provedores de IA por meio de APIs. | Feito |
Suporta seleção de parâmetros e lida com diferentes estruturas de resposta. | Feito | |
Flexibilidade para usar prompts personalizados | Suporte para engenharia de prompts que permite criar e modificar prompts por meio de uma estrutura padrão. | Feito |
Permitir modificação do parâmetro de solicitação | Feito | |
Permitir adicionar manipuladores de resposta personalizados para massagear a resposta da IA. | Feito | |
Fornece variáveis predefinidas comuns que podem ser usadas para aprimorar os prompts | Feito | |
Forneça melhorias extras de prompt usando variáveis personalizadas que podem ser estáticas ou getters de função. Isso deve permitir definições de funções na estrutura do prompt e integrar os resultados nos prompts. Permitir também passar vars do sistema ou vars do usuário ou strings estáticas como entradas | Feito | |
Fornece capacidade para avaliar diferentes prompts, atribuir classificações ELO, escolher e salvar os mais fortes | Longo prazo | |
Integração perfeita da interface do usuário | Projete uma IU flexível, uma interface de bate-papo integrada à barra de atividades do VSCode. | Feito |
A IU deve oferecer suporte para salvar, carregar e exportar conversas. | Feito | |
Implemente a digitação por streaming na IU, criando a sensação de que o bot de IA está digitando sozinho. | Longo prazo | |
Consultas/tarefas ad hoc | Ajude o desenvolvedor a fazer perguntas ad hoc à IA, onde ele pode descrever as perguntas ou problemas usando a interface de bate-papo. Isso pode ser usado para depurar problemas, entender o comportamento, obter dicas sobre coisas a serem observadas, etc. O desenvolvedor deve ser capaz de anexar código ou arquivos às suas perguntas. | Feito |
Fornece uma maneira de definir comandos CLI pré-preparados e acioná-los conforme necessário. A interface para definir comandos CLI deve ser semelhante aos prompts. | Feito | |
Fornece uma maneira de pesquisar consultas no StackOverflow. | Feito | |
Fornece uma maneira de obter resultados para consultas de respostas StackOverflow e respostas de IA correspondentes. | Longo prazo | |
Conclusão e inteligência de código | Fornece uma maneira de gerar código a partir de um comentário de código | Feito |
Fornece uma maneira de completar, refatorar, editar ou otimizar o código por meio da interface de chat. Deve permitir a seleção de código relevante do editor conforme necessário. | Feito | |
Implemente um sistema de gerenciamento de contexto integrado ao Language Server Protocol (LSP) que pode ser usado para enriquecer as interações de IA. | Médio prazo | |
Suporte à geração de incorporações de código para entender o contexto do código e integrá-lo aos prompts. | Médio prazo | |
Desenvolva um recurso inteligente de conclusão de código que preveja as próximas linhas de código. Ele deve integrar o contexto (LSP ou embeddings) nos prompts de preenchimento automático e lidar com as respostas de preenchimento automático na IU. | Médio prazo | |
Revisão e inteligência de código | Forneça uma maneira de revisar por meio da interface de bate-papo. Deve permitir a seleção de código relevante do editor conforme necessário | Feito |
Capacidade de buscar uma solicitação Merge/Pull do Github, Gitlab ou outros provedores de versão, analisá-los e fornecer comentários de revisão. Deve fornecer flexibilidade para especificar áreas de revisão e prioridade associada dependendo do caso de uso. | Médio prazo | |
Forneça revisões e recomendações automatizadas de código. Ele deve fornecer indicadores sutis para melhorias de código e lidar com as respostas da API de revisão de código na IU. | Longo prazo | |
Forneça sugestões de refatoração automatizada. Isso deve lidar com a refatoração das respostas da API e exibir sugestões na IU. | Longo prazo | |
Forneça sugestões de segurança automatizadas. Isso deve ser capaz de identificar possíveis vulnerabilidades adicionadas ou desvios das práticas recomendadas de segurança usadas no código. | Longo prazo | |
Assistência à documentação de código | Gere documentação para o código selecionado usando a interface de chat. Deve permitir a seleção de código relevante do editor conforme necessário. | Feito |
Desenvolva assistência eficaz à documentação em linha. Ele deve gerar e atualizar automaticamente a documentação com base no código e exibi-la na IU. | Longo prazo | |
Compreensão do código e suporte ao aprendizado | Forneça uma maneira de explicar o código por meio da interface de bate-papo. Deve permitir a seleção de código relevante do editor conforme necessário. | Feito |
Desenvolva/integrar com um gráfico de conhecimento integrado para fornecer explicações detalhadas de serviços, APIs, métodos, algoritmos e conceitos que o desenvolvedor está usando ou pode querer usar | Longo prazo | |
Integre a pesquisa gráfica aos prompts | Longo prazo | |
Teste | Fornece uma maneira de gerar testes de unidade por meio da interface de chat. Deve permitir a seleção de código relevante do editor conforme necessário. Deve ter a capacidade de inserir testes em novos arquivos ou arquivos atuais, conforme necessário. | Feito |
Fornece uma maneira de gerar API e testes de fluxo de trabalho associados por meio da interface de chat. Deve permitir a seleção de definições de código/API relevantes do editor, conforme necessário. Deve ter a capacidade de inserir testes em novos arquivos ou arquivos atuais, conforme necessário. | Curto prazo |
FlexiGPT é um software totalmente de código aberto licenciado sob a licença MIT.
Contribuições são bem-vindas! Sinta-se à vontade para enviar uma solicitação pull no GitHub.
Se você tiver alguma dúvida ou problema, abra um problema no GitHub na página de problemas.