Interagissez avec les modèles GPT AI en tant qu'utilisateur expérimenté.
Prend en charge plusieurs fournisseurs d'IA
Support technique rapide et riche
Interface utilisateur flexible
Rechercher Stack Overflow depuis l'éditeur
Invoquez des commandes CLI personnalisées prédéfinies depuis votre éditeur
Téléchargez depuis : VSCode Marketplace et suivez les instructions.
OU
Mesures:
Ctrl
- Shift
- P
(Windows, Linux) ou Cmd
- Shift
- P
(macOS), exécutez > Extensions: Install Extension
.FlexiGPT
par ppipada
.Ctrl
/ Cmd
+ ,
raccourci clavier) et recherchez flexigpt
.Possibilités :
// 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 " ,
Le fournisseur OpenAI nécessite une clé API pour fonctionner. Vous pouvez en obtenir un à partir des paramètres de votre compte openAI ici.
API prises en charge
Modèles pris en charge - Tous les modèles pris en charge par les deux API ci-dessus
gpt-4
gpt-4-*
gpt-3.5-turbo
gpt-3.5-turbo-*
FlexiGPT utilise defaultChatCompletionModel: gpt-3.5-turbo
, sauf si l'invite le remplace.
Pour un exemple sur la façon d'utiliser Function calling
de fonction d'OpenAI, consultez ce fichier d'invite ici.
Options de configuration :
gpt-3.5-turbo
. Notez que l'utilisation gpt-3.5-turbo
est prise en compte dans la facturation d'OpenAI. Le seul modèle gratuit en version bêta en février 2023 est le codex ( code-davinci-002
).https://api.openai.com
. Le fournisseur Anthropic nécessite une clé API pour fonctionner. Vous pouvez en obtenir un sur le site Anthropic ici.
API prise en charge
claude-3-*
, claude-2*
FlexiGPT utilise defaultChatCompletionModel: claude-3-haiku-20240307
, sauf si l'invite le remplace.
Options de configuration :
claude-3-haiku-20240307
.https://api.anthropic.com
. Le fournisseur Huggingface nécessite une clé API pour fonctionner. Vous pouvez en obtenir un sur le site Web huggingface ici.
API prise en charge
Modèles pris en charge - Tous les modèles pris en charge par l'API ci-dessus
FlexiGPT utilise defaultChatCompletionModel : deepseek-ai/deepseek-coder-1.3b-instruct
, sauf si l'invite le remplace.
Options de configuration :
deepseek-ai/deepseek-coder-1.3b-instruct
.bigcode/starcoder2-15b
.https://api-inference.huggingface.co
. Le fournisseur Googlegl nécessite une clé API pour fonctionner. Vous pouvez en obtenir un sur le site Web ici.
API prise en charge : https://ai.google.dev/api/rest/v1/models/generateContent
gemini-1.0-pro
chat-bison-001
(héritage)text-bison-001
(héritage) FlexiGPT utilise defaultChatCompletionModel: gemini-1.0-pro
, sauf si l'invite le remplace.
Options de configuration :
gemini-1.0-pro
.gemini-1.0-pro
.https://generativelanguage.googleapis.com
. Configurez un serveur llama.cpp comme indiqué ici
API prises en charge
your host:port of the llama server
/achèvementModèles pris en charge : tous les modèles pris en charge par les API ci-dessus. Notez que le modèle dans llama.cpp doit être fourni lors de l'exécution du serveur lui-même et ne peut pas être fourni à chaque niveau de requête.
Options de configuration :
http://127.0.0.1:8080
.Obtenez le code en utilisant un commentaire dans l'éditeur.
Ctrl
+ Alt
+ G
FlexiGPT: Get Code
pour cliquer/entrerÉtapes pour obtenir toutes les fonctionnalités ci-dessous (similaires pour toutes les invites configurées ; intégrées ou personnalisées) :
Ctrl
+ Alt
+ A
Rectifiez et refactorisez le code sélectionné.
Créez un test unitaire pour le code sélectionné.
Complétez la sélection.
Expliquez la sélection.
Générez la documentation pour le code sélectionné.
Trouvez les problèmes liés à la sélection, corrigez-les et expliquez ce qui n'allait pas.
Optimiser le code sélectionné
{selection}
ou {readfile}
pour améliorer votre conversation avec l'IA. (Même capacité que celle disponible pour les fichiers d'invite)La barre d'activité de chat peut être ouverte des manières suivantes :
FlexiGPT: Ask
l'option pour cliquer/entrerCtrl
/ Cmd
+ Shift
+ P
) : vous devriez obtenir un FlexiGPT: Ask
l'option pour cliquer/entrerCtrl
+ Alt
+ A
Recherchez les questions de débordement de pile auprès de votre éditeur.
Ctrl
+ Alt
+ S
FlexiGPT: Stackoverflow Search
pour cliquer/entrerCtrl
/ Cmd
+ Shift
+ P
) : vous devriez obtenir une option FlexiGPT: Stackoverflow Search
pour cliquer/entrercliCommands
dans vos fichiers d'invite.Ctrl
+ Alt
+ C
FlexiGPT: Run CLI Command
pour cliquer/entrerCtrl
/ Cmd
+ Shift
+ P
) : vous devriez obtenir une option FlexiGPT: Run CLI Command
pour cliquer/entrerConcevez et affinez les invites, enregistrez-les et utilisez-les directement dans VSCode.
Prend en charge les modifications des paramètres de demande pour les API GPT
Des variables système prédéfinies peuvent être utilisées pour améliorer votre question.
{system.selection}
ou simplement {selection}
pour transmettre le texte sélectionné dans l'éditeur (code ou autre).{system.readfile}
ou simplement {readfile}
pour transmettre le fichier ouvert{system.readfile <your file path>}
pour transmettre le fichier à un chemin donnésystem.
le préfixe d’une variable système est facultatif. Par conséquent, vous pouvez même utiliser uniquement {selection}
pour utiliser le texte sélectionné, ou {language}
au lieu de {system.language}
pour la langue de votre fichier.Prend en charge la réponse post-traitement via ResponseHandlers dans les invites. Plusieurs gestionnaires de réponses prédéfinis intégrés disponibles. Prend également en charge les gestionnaires de réponses personnalisés. Un exemple peut être trouvé ici.
La fonction d'appel de fonction des modèles GPT3.5/4 est également prise en charge. Un exemple peut être trouvé dans ce fichier d'invite.
En cliquant sur la zone de texte de saisie, les invites de base fournies par FlexiGPT lui-même, toutes les invites définies dans flexigpt.promptFiles
et toutes les invites intégrées activées à l'aide flexigpt.inBuiltPrompts
, telles que définies dans la configuration, doivent être chargées. (Si le premier clic sur la zone de texte ne charge pas certaines invites préconfigurées, essayez d'échapper aux options et cliquez à nouveau. VSCode peut prendre un certain temps pour charger les listes dynamiques à partir de fichiers.)
Si vous sélectionnez les invites préconfigurées, le modèle de question défini dans la commande d'invite sera utilisé après avoir remplacé les variables système/utilisateur définies. D'autres options de commande seront également tirées de la définition elle-même.
Si vous tapez une question flottante dans la zone de texte, le texte lui-même sera utilisé directement comme invite. Vous pouvez également utiliser des variables système prédéfinies pour améliorer votre question flottante libre.
{selection}
pour transmettre le texte sélectionné dans l'éditeur{readfile}
pour transmettre le fichier ouvert Invites de base FlexiGPT (par défaut : activé)
Accédez aux invites de base (par défaut : désactivé, activé dans la configuration)
Allez aux invites sqlx + écureuil (par défaut : désactivé, activé dans la configuration)
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" ,
} ,
] ,
} ;
nom : obligatoire
description : Facultatif
modèle : obligatoire
{system.*variableName*}
, variableName peut être l'une des variables système prédéfinies. Vous pouvez également transmettre des paramètres à des fonctions telles que readFile. Par exemple : {readfile user.testFile}
est une variable de modèle valide où l'entrée dans readfile est le fichier pointé par la variable testfile définie par l'utilisateur.{user.*variableName*}
, variableName doit être dans le champ des variables du fichier d'invite.paramètres de requête : facultatif
{ [key: string]: any }
.réponseHandler : facultatif
ResponseHandler est utilisé pour gérer une réponse. Par défaut, la fonction de remplacement est utilisée. La fonction de poignée peut être l’une des fonctions système prédéfinies ou une fonction définie par l’utilisateur.
Vous pouvez définir ResponseHandler des manières suivantes :
responseHandler: "replace" ;
responseHandler: {
func : 'replace' ,
args : {
textToReplace : 'user.answerModified'
}
}
N'importe lequel des éléments variables
peut être utilisé dans un modèle de commande. Les valeurs définies par l'utilisateur doivent avoir le préfixe « user ». Par exemple, si « testFileName » est défini dans des variables, il peut être utilisé comme « user.TestFileName » dans le fichier modèle ou transmis à une fonction.
Les valeurs des variables peuvent être statiques ou dynamiques. Pour les valeurs dynamiques, vous devez créer une méthode getter. Lors de l'appel du getter de variable, un seul objet avec des variables système (voir Variables système prédéfinies) est passé comme premier argument, toutes les autres variables peuvent être prises comme arguments suivants.
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*/
}
}
}
]
}
Toutes les variables ne sont pas sensibles à la casse.
Nom de la variable | Description |
---|---|
système.sélection | Texte sélectionné dans l'éditeur |
système.question | Question OpenAI |
système.réponse | Réponse OpenAI |
système.langue | Langage de programmation du fichier actif |
système.baseFolder | Chemin de base du projet |
système.fileFolder | Chemin du dossier parent du fichier actif |
system.fileName | Nom du fichier actif |
système.filePath | Chemin complet du fichier actif |
système.fileExtension | Extension du fichier actif |
système.commitAndTagList | 25 derniers commits et balises associées |
system.readFile | Lisez le fichier complet de l'éditeur ouvert. Passez éventuellement un chemin de fichier comme deuxième argument |
Notez que le system.
le préfixe d’une variable système est facultatif. Par conséquent, vous pouvez même utiliser uniquement {selection}
pour utiliser le texte sélectionné, ou {language}
au lieu de {system.language}
pour la langue de votre fichier.
functions
.Nom de la fonction | Description | paramètres (par défaut) |
---|---|---|
ajouter | Ajouter du texte | textToAppend(system.answer),postion('fin') |
remplacer | Remplacer le texte sélectionné | textToReplace (système.réponse) |
écrireFichier | Écrivez du texte dans un fichier. Ajouter si le fichier existe. | filePath(),content(système.réponse) |
Remplacer
Remplacez le texte par une sélection. Prenez le paramètre facultatif textToReplace
La valeur par défaut est égale à la réponse de l'API.
Utilisation par défaut
...
commands : [
{
name : "Refactor" ,
template : `Refactor following function.
function:
{system.selection}`
responseHandler : 'replace'
} ,
] ,
Utilisation avec les paramètres
...
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*/`
} ,
] ,
Ajouter
Ajouter du texte avec sélection. Prenez les paramètres facultatifs textToAppend
et postion
. postion
peut être start
ou end
Par défaut, textToAppend
est égal à postion
OpenAI correspondant à la fin de la sélection
Exemple d'utilisation
...
commands : [
{
name : "Append" ,
template : `Write jsdoc for following function.
function:
{system.selection}`
responseHandler : {
func : 'append' ,
args : {
position : 'start'
}
}
} ,
] ,
nom : obligatoire
description : Facultatif
commande : obligatoire
Domaines fonctionnels | Fonctionnalités et implémentations | Statut |
Flexibilité pour parler à n’importe quelle IA | Intégration avec plusieurs fournisseurs d'IA via des API. | Fait |
Prend en charge la sélection des paramètres et gère différentes structures de réponse. | Fait | |
Flexibilité pour utiliser des invites personnalisées | Prise en charge de l'ingénierie des invites qui permet de créer et de modifier des invites via une structure standard. | Fait |
Autoriser la modification des paramètres de la requête | Fait | |
Autoriser l'ajout de gestionnaires de réponses personnalisés pour masser la réponse de l'IA. | Fait | |
Fournir des variables prédéfinies communes qui peuvent être utilisées pour améliorer les invites | Fait | |
Fournissez des améliorations d'invite supplémentaires à l'aide de variables personnalisées qui peuvent être des getters statiques ou fonctionnels. Cela devrait permettre la définition de fonctions dans la structure d'invite et intégrer les résultats dans les invites. Autoriser également le passage de variables système, de variables utilisateur ou de chaînes statiques en tant qu'entrées | Fait | |
Offre la possibilité d'évaluer différentes invites, d'attribuer des notes ELO, de choisir et d'enregistrer les plus fortes | Long terme | |
Intégration transparente de l'interface utilisateur | Concevez une UI flexible, une interface de chat intégrée à la barre d'activité VSCode. | Fait |
L'interface utilisateur doit prendre en charge l'enregistrement, le chargement et l'exportation des conversations. | Fait | |
Implémentez la saisie en continu dans l'interface utilisateur, créant ainsi le sentiment que le robot IA se tape lui-même. | Long terme | |
Requêtes/tâches ad hoc | Aidez le développeur à poser des requêtes ad hoc à l'IA où il peut lui décrire les questions ou les problèmes à l'aide de l'interface de chat. Cela peut être utilisé pour déboguer des problèmes, comprendre le comportement, obtenir des conseils sur les éléments à surveiller, etc. Le développeur doit pouvoir joindre du code ou des fichiers à ses questions. | Fait |
Fournissez un moyen de définir des commandes CLI pré-préparées et de les exécuter si nécessaire. L'interface permettant de définir les commandes CLI doit être similaire aux invites. | Fait | |
Fournissez un moyen de rechercher des requêtes sur StackOverflow. | Fait | |
Fournissez un moyen d'obtenir des résultats pour les requêtes à partir des réponses StackOverflow et de la réponse IA correspondante. | Long terme | |
Achèvement du code et intelligence | Fournir un moyen de générer du code à partir d'un commentaire de code | Fait |
Fournissez un moyen de compléter, refactoriser, modifier ou optimiser le code via l'interface de discussion. Devrait permettre de sélectionner le code pertinent dans l'éditeur selon les besoins. | Fait | |
Implémentez un système de gestion de contexte intégré au Language Server Protocol (LSP) qui peut être utilisé pour enrichir les interactions avec l'IA. | Moyen terme | |
Prise en charge de la génération d'intégrations de code pour comprendre le contexte du code et l'intégrer dans les invites. | Moyen terme | |
Développez une fonctionnalité de complétion de code intelligente qui prédit les prochaines lignes de code. Il doit intégrer le contexte (LSP ou intégrations) dans les invites de saisie semi-automatique et gérer les réponses de saisie semi-automatique dans l'interface utilisateur. | Moyen terme | |
Révision du code et intelligence | Fournissez un moyen de réviser via l’interface de chat. Doit permettre de sélectionner le code pertinent dans l'éditeur si nécessaire | Fait |
Possibilité de récupérer une demande de fusion/extraction auprès de Github, Gitlab ou d'autres fournisseurs de versions, de les analyser et de fournir des commentaires de révision. Doit offrir une certaine flexibilité pour spécifier les domaines de révision et la priorité associée en fonction du cas d'utilisation. | Moyen terme | |
Fournissez des révisions de code et des recommandations automatisées. Il doit fournir des indicateurs subtils pour les améliorations du code et gérer les réponses de l'API de révision du code dans l'interface utilisateur. | Long terme | |
Fournissez des suggestions de refactorisation automatisées. Cela devrait gérer les réponses de l'API de refactorisation et afficher les suggestions dans l'interface utilisateur. | Long terme | |
Fournissez des suggestions de sécurité automatisées. Cela devrait être en mesure d'identifier les vulnérabilités potentielles ajoutées ou les écarts par rapport aux meilleures pratiques de sécurité utilisées dans le code. | Long terme | |
Aide à la documentation des codes | Générez de la documentation pour le code sélectionné à l'aide de l'interface de discussion. Devrait permettre de sélectionner le code pertinent dans l'éditeur selon les besoins. | Fait |
Développer une assistance documentaire en ligne efficace. Il doit automatiquement générer et mettre à jour la documentation basée sur le code et l'afficher dans l'interface utilisateur. | Long terme | |
Compréhension du code et aide à l'apprentissage | Fournissez un moyen d'expliquer le code via l'interface de discussion. Devrait permettre de sélectionner le code pertinent dans l'éditeur selon les besoins. | Fait |
Développer/intégrer un graphique de connaissances intégré pour fournir des explications détaillées sur les services, les API, les méthodes, les algorithmes et les concepts que le développeur utilise ou souhaite utiliser. | Long terme | |
Intégrer la recherche graphique dans les invites | Long terme | |
Essai | Fournir un moyen de générer des tests unitaires via l'interface de chat. Devrait permettre de sélectionner le code pertinent dans l'éditeur selon les besoins. Doit avoir la possibilité d'insérer des tests dans de nouveaux fichiers ou dans le fichier actuel selon les besoins. | Fait |
Fournissez un moyen de générer des tests d'API et de workflow associés via l'interface de chat. Doit permettre de sélectionner les définitions de code/API pertinentes dans l'éditeur, selon les besoins. Doit avoir la possibilité d'insérer des tests dans de nouveaux fichiers ou dans le fichier actuel selon les besoins. | Court terme |
FlexiGPT est un logiciel entièrement open source sous licence MIT.
Les contributions sont les bienvenues ! N'hésitez pas à soumettre une pull request sur GitHub.
Si vous avez des questions ou des problèmes, veuillez ouvrir un problème sur GitHub sur la page des problèmes.