In this article
StarChat
Un assistant IA qui simplifie l’affinage des résultats de Snyk Code
Comme toutes les solutions SAST, Snyk Code s’appuie sur un ensemble de règles constamment affiné et enrichi afin de détecter les vulnérabilités avec précision.
Au cœur de cette démarche se trouve StarLang, un langage déclaratif propriétaire et interne à Snyk, qui n’est pas documenté publiquement. Nos chercheurs en sécurité utilisent StarLang pour exprimer des schémas de vulnérabilité complexes de manière structurée et facile à maintenir. StarLang permet de définir les vulnérabilités signalées par Snyk Code, en exprimant toute une gamme d’abstractions d’analyse du code, de la recherche de constructions syntaxiques spécifiques au suivi des flux de données dans des schémas de code complexes.
Pour accélérer et développer cette activité, nous concevons StarChat, un assistant IA interne conçu sur mesure pour simplifier l’écriture de code StarLang.
Pourquoi StarChat ?
Le principal défi des assistants de codage IA consiste à les intégrer à des bases de code complexes et réelles, tout en veillant à ce qu’ils apportent des modifications précises et vérifiables.
La maîtrise complète de StarLang par Snyk, de sa représentation interne et de son environnement d’exécution nous confère un avantage majeur. L’accès exclusif de Snyk à StarLang permet à StarChat d’aller au-delà de la simple génération de texte des assistants IA génériques. L’interface de StarChat est accessible via une extension VSCode interne. Nous l’intégrons ainsi directement aux outils et aux workflows de nos analystes en sécurité. StarChat utilise une interface de chat standard qui combine les capacités conversationnelles des LLM à des outils statiques en arrière-plan. Il peut générer, compiler et exécuter du code StarLang de façon autonome, accéder aux résultats d’analyses formelles et comprendre l’impact des modifications sur la détection des vulnérabilités dans le code des clients.
Comment fonctionne StarChat
1. Modèles dynamiques
StarChat s’appuie sur un puissant LLM prêt à l’emploi, constamment mis à jour pour utiliser la meilleure option disponible. Nous avons d’abord utilisé un modèle Llama 3.1 8B auto-hébergé et, au moment de la rédaction, nous utilisons Gemini 2.5 pro. Pour permettre au modèle de comprendre et d’écrire un langage spécifique à un domaine qu’il n’a pas rencontré dans ses données d’entraînement, nous lui fournissons StarLang dans le prompt système et utilisons une version du prompting grammatical [1]. Nous pouvons ainsi tirer parti des capacités de raisonnement des meilleurs LLM disponibles, tout en économisant le temps et les ressources de calcul qu’aurait exigés l’affinage d’un modèle spécialement conçu pour StarLang.
2. Itération agentique
StarChat dispose d’un mode agentique dans lequel il interagit avec le compilateur Starlang pour corriger automatiquement les petites erreurs de syntaxe. Il exécute ensuite Snyk Code afin de vérifier que le code généré produit les modifications souhaitées dans l’analyse du code. Voici un petit exemple pour illustrer ce fonctionnement :

En plus du message de l’utilisateur et du code Python lui-même, StarChat accède à une représentation textuelle du graphe d’analyse du code pour l’ensemble du fichier Python. Lors de l’exécution de l’exemple ci-dessus, il génère ensuite un raisonnement sous forme d’extraits de code StarLang et en langage naturel, avant de produire une première solution complète. Après avoir reçu un message d’erreur du compilateur signalant l’absence de guillemets autour de la chaîne `subprocess.Popen`, il effectue une nouvelle itération. La deuxième tentative est correctement compilée et vérifiée comme correspondant au code Python fourni, puis transmise à l’utilisateur.
3. Tirer les leçons du passé
L’historique des versions retrace plus de huit années d’évolution de StarLang. Nous analysons les modifications passées des règles, les enrichissons avec des fonctionnalités d’analyse statique, les encodons sous forme d’embeddings et les stockons dans une base de données vectorielle. Pour cela, nous utilisons une base vectorielle Chroma standard de LangChain.
Nous analysons les PR du code source de StarLang. Chaque PR contient généralement des modifications apportées à des fichiers de code StarLang et à des fichiers de test dans un langage de programmation courant. Ces fichiers de test illustrent les conséquences des modifications StarLang : un nouveau signalement de vulnérabilité apparaît ou un signalement existant disparaît.
Les documents de la base vectorielle comprennent les versions avant et après des modifications StarLang, les fichiers de test, ainsi que la description et les échanges de la PR.
Pour calculer les embeddings, nous utilisons le modèle de sentence-transformers all-MiniLM-L6-v2 [2]. Il excelle à retrouver des modifications pertinentes, tout en étant suffisamment léger pour fonctionner sur un processeur, ce qui le rend économique. À l’exécution, StarChat effectue une recherche sémantique afin de consulter des exemples pertinents de manière dynamique, selon une architecture RAG standard. Les modifications antérieures récupérées sont fournies à StarChat comme exemples few-shot. La taille de ces exemples varie considérablement selon la nature de la modification. Certaines PR ne comportent qu’une seule ligne, tandis que d’autres modifient des centaines de lignes de code StarLang, soit des dizaines de milliers de tokens. Grâce à l’augmentation considérable de la taille des fenêtres de contexte des LLM, cela ne pose aucun problème.
4. Gestion précise du contexte
Au-delà du RAG standard, StarChat exploite un inventaire des prédicats — un système d’indexation rapide et à la volée du code source de StarLang. Du fait de la nature déclarative de StarLang, tout le code est divisé en déclarations, également appelées prédicats. Un prédicat peut référencer d’autres prédicats ou utiliser un mécanisme de templating. Ces templates et références sont résolus/développés lors de la compilation, et leur résolution dépend du langage analysé.
L’inventaire des prédicats nous permet de suivre les dépendances de résolution dans le code StarLang brut, sans compiler l’ensemble du code source. Nous pouvons ainsi interroger StarChat sur un signalement de vulnérabilité SQLI lié à un extrait de code spécifique et ajouter automatiquement à son contexte les déclarations StarLang pertinentes. StarChat peut alors identifier les parties du code source logiquement liées à un signalement de vulnérabilité donné et réunir le contexte adéquat pour chaque tâche.
Pourquoi est-ce important ?
En développant ce cadre, nous permettons à Snyk de tirer immédiatement parti des avancées des modèles fondamentaux. Transformer les recherches de pointe en IA en améliorations concrètes de Snyk Code nous permet d’accélérer l’assistance aux clients et de mieux aider les utilisateurs qui s’appuient sur nos produits pour résoudre des problèmes complexes de sécurité du code.
Découvrez Snyk Labs
Votre espace dédié aux dernières recherches et expérimentations en sécurité de l’IA.