Interactúe con los modelos GPT AI como usuario avanzado.
Admite múltiples proveedores de IA
Amplio soporte de ingeniería rápido
Interfaz de usuario flexible
Buscar Stack Overflow desde el editor
Invoque comandos CLI personalizados predefinidos desde su editor
Descárguelo desde: VSCode Marketplace y siga las instrucciones.
O
Pasos:
Ctrl
- Shift
- P
(Windows, Linux) o Cmd
- Shift
- P
(macOS), ejecute > Extensions: Install Extension
.FlexiGPT
de ppipada
.Ctrl
/ Cmd
+ ,
método abreviado de teclado) y busque flexigpt
.Opciones:
// 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 " ,
El proveedor de OpenAI requiere una clave API para funcionar. Puede obtener uno desde la configuración de su cuenta openAI aquí.
API compatibles
Modelos compatibles: todos los modelos compatibles con las dos API anteriores
gpt-4
gpt-4-*
gpt-3.5-turbo
gpt-3.5-turbo-*
FlexiGPT usa defaultChatCompletionModel: gpt-3.5-turbo
, a menos que el mensaje lo anule.
Para ver un ejemplo sobre cómo utilizar la función Function calling
de OpenAI, consulte este archivo de solicitud aquí.
Opciones de configuración:
gpt-3.5-turbo
. Tenga en cuenta que el uso de gpt-3.5-turbo
se contabiliza en la facturación de OpenAI. El único modelo gratuito que está en versión beta a partir de febrero de 2023 es el códice ( code-davinci-002
).https://api.openai.com
. El proveedor antrópico requiere una clave API para funcionar. Puede obtener uno en el sitio web de Anthropic aquí.
API compatible
claude-3-*
, claude-2*
FlexiGPT usa defaultChatCompletionModel: claude-3-haiku-20240307
, a menos que el mensaje lo anule.
Opciones de configuración:
claude-3-haiku-20240307
.https://api.anthropic.com
. El proveedor de Huggingface requiere una clave API para funcionar. Puede obtener uno en el sitio web de Huggingface aquí.
API compatible
Modelos compatibles: todos los modelos compatibles con la API anterior
FlexiGPT usa defaultChatCompletionModel: deepseek-ai/deepseek-coder-1.3b-instruct
, a menos que el mensaje lo anule.
Opciones de configuración:
deepseek-ai/deepseek-coder-1.3b-instruct
.bigcode/starcoder2-15b
.https://api-inference.huggingface.co
. El proveedor Googlegl requiere una clave API para funcionar. Puede obtener uno desde el sitio web aquí.
API compatible: https://ai.google.dev/api/rest/v1/models/generateContent
gemini-1.0-pro
chat-bison-001
(heredado)text-bison-001
(heredado) FlexiGPT usa defaultChatCompletionModel: gemini-1.0-pro
, a menos que el mensaje lo anule.
Opciones de configuración:
gemini-1.0-pro
.gemini-1.0-pro
.https://generativelanguage.googleapis.com
. Configure un servidor llama.cpp como se indica aquí
API compatibles
your host:port of the llama server
/ finalizaciónModelos compatibles: todos los modelos compatibles con las API anteriores. Tenga en cuenta que el modelo en llama.cpp debe proporcionarse cuando se ejecuta el servidor y no se puede proporcionar en cada nivel de solicitud.
Opciones de configuración:
http://127.0.0.1:8080
.Obtenga código usando un comentario en el editor.
Ctrl
+ Alt
+ G
FlexiGPT: Get Code
para hacer clic/ingresarPasos para obtener todas las funciones siguientes (similares para todos los mensajes configurados; incorporadas o personalizadas):
Ctrl
+ Alt
+ A
Rectificar y refactorizar el código seleccionado.
Cree una prueba unitaria para el código seleccionado.
Completa la selección.
Explica la selección.
Generar documentación para el código seleccionado.
Encuentre problemas con la selección, corríjalos y explique qué estuvo mal.
Optimiza el código seleccionado.
{selection}
o {readfile}
para mejorar su chat con IA. (La misma capacidad que está disponible para archivos de aviso)La barra de actividad del chat se puede abrir de las siguientes maneras:
FlexiGPT: Ask
para hacer clic/ingresarCtrl
/ Cmd
+ Shift
+ P
): Debería obtener un FlexiGPT: Ask
para hacer clic/ingresarCtrl
+ Alt
+ A
Busque preguntas de desbordamiento de pila en su editor.
Ctrl
+ Alt
+ S
FlexiGPT: Stackoverflow Search
para hacer clic/ingresarCtrl
/ Cmd
+ Shift
+ P
): Debería obtener una opción FlexiGPT: Stackoverflow Search
para hacer clic/ingresarcliCommands
en sus archivos de aviso.Ctrl
+ Alt
+ C
FlexiGPT: Run CLI Command
para hacer clic/ingresarCtrl
/ Cmd
+ Shift
+ P
): Debería obtener una opción FlexiGPT: Run CLI Command
para hacer clic/ingresarDiseñe y ajuste las indicaciones, guárdelas y úselas directamente en VSCode.
Admite modificaciones de parámetros de solicitud para las API de GPT
Se pueden utilizar variables del sistema predefinidas para mejorar su pregunta.
{system.selection}
o simplemente {selection}
para pasar el texto seleccionado en el editor (código o no).{system.readfile}
o simplemente {readfile}
para pasar el archivo abierto{system.readfile <your file path>}
para pasar el archivo en una ruta determinadasystem.
El prefijo para una variable del sistema es opcional. Por lo tanto, incluso puedes usar solo {selection}
para usar el texto seleccionado, o {language}
en lugar de {system.language}
para el idioma de tu archivo.Admite respuesta de posprocesamiento a través de ResponseHandlers en mensajes. Múltiples controladores de respuesta predefinidos incorporados disponibles. También admite controladores de respuesta personalizados. Se puede encontrar un ejemplo aquí.
También se admite la función de llamada de funciones de los modelos GPT3.5/4. Se puede encontrar un ejemplo en este archivo de solicitud.
Al hacer clic en el cuadro de texto de entrada, se deben cargar los mensajes básicos proporcionados por el propio FlexiGPT, cualquier mensaje definido en flexigpt.promptFiles
y cualquier mensaje incorporado habilitado usando flexigpt.inBuiltPrompts
, como se define en la configuración. (Si la primera vez que hace clic en el cuadro de texto no se cargan algunos mensajes preconfigurados, intente escapar de las opciones y hacer clic nuevamente. VSCode puede tardar algún tiempo en cargar listas dinámicas de archivos).
Si selecciona las indicaciones preconfiguradas, la plantilla de preguntas definida en el comando de solicitud se utilizará después de sustituir las variables definidas del sistema/usuario. Otras opciones de comando también se tomarán de la propia definición.
Si escribe una pregunta flotante en el cuadro de texto, el texto en sí se utilizará directamente como mensaje. También puede utilizar variables de sistema predefinidas para mejorar su pregunta flotante libre.
{selection}
para pasar el texto seleccionado en el editor{readfile}
para pasar el archivo abierto Indicaciones básicas de FlexiGPT (predeterminado: habilitado)
Ir a indicaciones básicas (predeterminado: deshabilitado, habilitado en la configuración)
Vaya a sqlx + indicaciones de ardilla (predeterminado: deshabilitado, habilitado en la configuración)
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" ,
} ,
] ,
} ;
nombre: Requerido
descripción: Opcional
plantilla: Requerido
{system.*variableName*}
, variableName puede ser una de las variables del sistema predefinidas. También puede pasar parámetros a funciones como readFile. Por ejemplo: {readfile user.testFile}
es una variable de plantilla válida donde la entrada al archivo read es el archivo señalado por la variable testfile definida por el usuario.{user.*variableName*}
, el nombre de la variable debe estar en el campo de variables del archivo de solicitud.parámetros de solicitud: opcional
{ [key: string]: any }
.controlador de respuesta: opcional
ResponseHandler se utiliza para manejar una respuesta. De forma predeterminada, se utiliza la función de reemplazo. La función de control puede ser una función del sistema predefinida o una función definida por el usuario.
Puede configurar ResponseHandler de las siguientes maneras:
responseHandler: "replace" ;
responseHandler: {
func : 'replace' ,
args : {
textToReplace : 'user.answerModified'
}
}
Cualquiera de los elementos variables
se puede utilizar en una plantilla de comando. Los valores definidos por el usuario deben tener el prefijo "usuario". Por ejemplo, si "testFileName" se define en variables, se puede utilizar como "user.TestFileName" en el archivo de plantilla o pasar a una función.
Los valores de las variables pueden ser estáticos o dinámicos. Para valores dinámicos, debe crear un método getter. Al llamar al captador de variables, se pasa un único objeto con variables del sistema (consulte Variables del sistema predefinidas) como primer argumento, cualquier otra variable se puede tomar como siguiente argumento.
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*/
}
}
}
]
}
Todas las variables no distinguen entre mayúsculas y minúsculas.
Nombre de la variable | Descripción |
---|---|
selección.del.sistema | Texto seleccionado en el editor |
pregunta.del.sistema | Pregunta abierta AI |
sistema.respuesta | Respuesta abierta AI |
idioma.delsistema | Lenguaje de programación del archivo activo. |
carpeta.basesistema | Ruta base del proyecto |
carpeta.archivosistema | Ruta de la carpeta principal del archivo activo |
sistema.nombredearchivo | Nombre del archivo activo |
sistema.filePath | Ruta completa del archivo activo |
extensión.archivosistema | Extensión del archivo activo |
sistema.commitAndTagList | Últimas 25 confirmaciones y etiquetas asociadas |
sistema.readFile | Lea el archivo completo del editor abierto. Opcionalmente, pase una ruta de archivo como segundo argumento. |
Tenga en cuenta que el system.
El prefijo para una variable del sistema es opcional. Por lo tanto, incluso puedes usar solo {selection}
para usar el texto seleccionado, o {language}
en lugar de {system.language}
para el idioma de tu archivo.
functions
.Nombre de la función | Descripción | parámetros (predeterminado) |
---|---|---|
añadir | Agregar texto | textToAppend(sistema.respuesta),posición('fin') |
reemplazar | Reemplazar texto seleccionado | textToReplace(sistema.respuesta) |
escribir archivo | Escribir texto en el archivo. Agregar si el archivo existe. | filePath(),contenido(sistema.respuesta) |
Reemplazar
Reemplazar texto con selección. Tome el parámetro opcional textToReplace
El valor predeterminado es igual a la respuesta de la API.
Uso predeterminado
...
commands : [
{
name : "Refactor" ,
template : `Refactor following function.
function:
{system.selection}`
responseHandler : 'replace'
} ,
] ,
Uso con 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*/`
} ,
] ,
Añadir
Agregar texto con selección. Tome el parámetro opcional textToAppend
y postion
. postion
puede ser start
o end
Por defecto, textToAppend
es igual a postion
OpenAI y es el final de la selección.
Uso de muestra
...
commands : [
{
name : "Append" ,
template : `Write jsdoc for following function.
function:
{system.selection}`
responseHandler : {
func : 'append' ,
args : {
position : 'start'
}
}
} ,
] ,
nombre: Requerido
descripción: Opcional
comando: Requerido
Áreas funcionales | Características e implementaciones | Estado |
Flexibilidad para hablar con cualquier IA | Integración con múltiples proveedores de IA a través de API. | Hecho |
Admite la selección de parámetros y maneja diferentes estructuras de respuesta. | Hecho | |
Flexibilidad para utilizar indicaciones personalizadas | Soporte para ingeniería de avisos que permite crear y modificar avisos a través de una estructura estándar. | Hecho |
Permitir modificación de parámetros de solicitud | Hecho | |
Permita agregar controladores de respuesta personalizados para modificar la respuesta de la IA. | Hecho | |
Proporcionar variables predefinidas comunes que se pueden utilizar para mejorar las indicaciones. | Hecho | |
Proporcione mejoras adicionales en los mensajes utilizando variables personalizadas que pueden ser estáticas o captadoras de funciones. Esto debería permitir definiciones de funciones en la estructura de indicaciones e integrar los resultados en las indicaciones. También permita pasar vars del sistema o vars de usuario o cadenas estáticas como entradas | Hecho | |
Proporcionar capacidad para evaluar diferentes indicaciones, asignar calificaciones ELO, elegir y guardar las más sólidas. | Largo plazo | |
Integración perfecta de la interfaz de usuario | Diseñe una interfaz de usuario flexible, una interfaz de chat integrada en la barra de actividad de VSCode. | Hecho |
La interfaz de usuario debe permitir guardar, cargar y exportar conversaciones. | Hecho | |
Implemente la escritura en tiempo real en la interfaz de usuario, creando la sensación de que el robot de IA está escribiendo solo. | Largo plazo | |
Consultas/tareas ad hoc | Ayude al desarrollador a realizar consultas ad hoc a AI donde pueda describirle las preguntas o problemas utilizando la interfaz de chat. Esto se puede utilizar para depurar problemas, comprender el comportamiento, obtener sugerencias sobre cosas a tener en cuenta, etc. El desarrollador debería poder adjuntar código o archivos a sus preguntas. | Hecho |
Proporcione una forma de definir comandos CLI predefinidos y activarlos según sea necesario. La interfaz para definir los comandos CLI debe ser similar a las indicaciones. | Hecho | |
Proporcione una forma de buscar consultas en StackOverflow. | Hecho | |
Proporcione una forma de obtener resultados para consultas a partir de las respuestas de StackOverflow y la respuesta de IA correspondiente. | Largo plazo | |
Completación de código e inteligencia. | Proporcionar una forma de generar código a partir de un comentario de código. | Hecho |
Proporcione una forma de completar, refactorizar, editar u optimizar el código a través de la interfaz de chat. Debería permitir seleccionar el código relevante del editor según sea necesario. | Hecho | |
Implementar un sistema de gestión de contexto integrado con el Protocolo de servidor de idiomas (LSP) que se pueda utilizar para enriquecer las interacciones de IA. | Medio plazo | |
Admite la generación de incrustaciones de código para comprender el contexto del código e integrarlo en las indicaciones. | Medio plazo | |
Desarrollar una función de finalización de código inteligente que prediga las siguientes líneas de código. Debe integrar el contexto (LSP o incrustaciones) en las indicaciones de autocompletar y manejar las respuestas de autocompletar en la interfaz de usuario. | Medio plazo | |
Revisión de código e inteligencia. | Proporcione una forma de revisar a través de la interfaz de chat. Debería permitir seleccionar el código relevante del editor según sea necesario | Hecho |
Capacidad para recuperar una solicitud de fusión/extracción de Github, Gitlab u otros proveedores de versiones, analizarlas y proporcionar comentarios de revisión. Debe proporcionar flexibilidad para especificar áreas de revisión y prioridad asociada según el caso de uso. | Medio plazo | |
Proporcione revisiones y recomendaciones de código automatizadas. Debería proporcionar indicadores sutiles para mejoras en el código y manejar las respuestas de la API de revisión de código en la interfaz de usuario. | Largo plazo | |
Proporcionar sugerencias de refactorización automatizada. Esto debería manejar la refactorización de las respuestas de la API y mostrar sugerencias en la interfaz de usuario. | Largo plazo | |
Proporcionar sugerencias de seguridad automatizadas. Esto debería poder identificar posibles vulnerabilidades que se estén agregando o desviaciones de las mejores prácticas de seguridad utilizadas en el código. | Largo plazo | |
Asistencia con la documentación del código. | Genere documentación para el código seleccionado usando la interfaz de chat. Debería permitir seleccionar el código relevante del editor según sea necesario. | Hecho |
Desarrollar una asistencia de documentación en línea eficaz. Debería generar y actualizar automáticamente la documentación basada en el código y mostrarla en la interfaz de usuario. | Largo plazo | |
Comprensión de código y soporte de aprendizaje | Proporcione una forma de explicar el código a través de la interfaz de chat. Debería permitir seleccionar el código relevante del editor según sea necesario. | Hecho |
Desarrollar/integrar con un gráfico de conocimiento integrado para proporcionar explicaciones detalladas de los servicios, API, métodos, algoritmos y conceptos que el desarrollador está usando o que podría querer usar. | Largo plazo | |
Integre la búsqueda de gráficos en las indicaciones | Largo plazo | |
Pruebas | Proporcione una forma de generar pruebas unitarias a través de la interfaz de chat. Debería permitir seleccionar el código relevante del editor según sea necesario. Debería tener la capacidad de insertar pruebas en archivos nuevos o en el archivo actual según sea necesario. | Hecho |
Proporcione una forma de generar API y pruebas de flujo de trabajo asociadas a través de la interfaz de chat. Debería permitir seleccionar definiciones de código/API relevantes desde el editor según sea necesario. Debería tener la capacidad de insertar pruebas en archivos nuevos o en el archivo actual según sea necesario. | Corto plazo |
FlexiGPT es un software de código totalmente abierto con licencia MIT.
¡Las contribuciones son bienvenidas! No dudes en enviar una solicitud de extracción en GitHub.
Si tiene alguna pregunta o problema, abra un problema en GitHub en la página de problemas.