In this article
StarChat
Un asistente de IA que agiliza el proceso de perfeccionar los resultados de Snyk Code
Snyk Code, como todas las soluciones SAST, depende de un conjunto de reglas que se perfecciona y amplía continuamente para detectar vulnerabilidades con precisión.
En el centro de este esfuerzo está StarLang, un lenguaje declarativo propietario e interno de Snyk que no está documentado públicamente. Nuestros investigadores de seguridad usan StarLang para expresar patrones de vulnerabilidades complejos de forma estructurada y fácil de mantener. StarLang permite definir las vulnerabilidades que reporta Snyk Code, ya que permite expresar distintas abstracciones de análisis de código, desde la coincidencia con construcciones sintácticas específicas hasta el seguimiento del flujo de datos en patrones de código complejos.
Para acelerar y ampliar este trabajo, estamos desarrollando StarChat: un asistente interno de IA diseñado a la medida para agilizar el proceso de escritura de código StarLang.
¿Por qué StarChat?
El principal desafío de los asistentes de código con IA es integrarlos en bases de código complejas y del mundo real, y garantizar que realicen cambios precisos y verificables.
Aquí es donde la propiedad total de Snyk sobre StarLang, su representación interna y su entorno de ejecución nos da una gran ventaja. El acceso exclusivo de Snyk a StarLang permite que StarChat vaya más allá de la generación de texto simple de los asistentes de IA genéricos. La interfaz de StarChat aparece mediante una extensión interna de VSCode. Así, lo integramos directamente en las herramientas y los flujos de trabajo de nuestros analistas de seguridad. StarChat usa una interfaz de chat estándar que combina las capacidades de chat de los LLM con herramientas estáticas en segundo plano. StarChat puede generar, compilar y ejecutar código StarLang de forma autónoma, acceder a resultados de análisis formales y comprender cómo los cambios afectarán la detección de vulnerabilidades en el código de los clientes.
Cómo funciona StarChat
1. Modelos dinámicos
StarChat se basa en un potente LLM comercial que se actualiza continuamente para usar la mejor opción disponible. Al principio usamos un modelo Llama 3.1 8B autohospedado y, al momento de escribir esto, usamos Gemini 2.5 pro. Para que el modelo pueda comprender y escribir un lenguaje específico de dominio que no aparece en sus datos de entrenamiento, combinamos la inclusión de StarLang en el prompt del sistema con una versión de prompting de gramática [1]. Esto nos permite aprovechar las capacidades de razonamiento de los mejores LLM disponibles hoy y, al mismo tiempo, ahorrar el tiempo y el costo computacional que implicaría ajustar un modelo específicamente para StarLang.
2. Iteración agéntica
StarChat incluye un modo agéntico en el que interactúa con el compilador de Starlang para corregir automáticamente pequeños problemas de sintaxis. Luego ejecuta Snyk Code para verificar que el código generado produzca los cambios deseados en el análisis de código. A continuación, presentamos un breve ejemplo para ilustrarlo:

Además del mensaje del usuario y del propio código Python, StarChat accede a una representación textual del grafo de análisis de código de todo el archivo de código Python. Al ejecutar el ejemplo anterior, genera razonamientos en fragmentos de código StarLang y en lenguaje natural antes de producir un primer intento de una solución completa. Luego vuelve a iterar sobre ese intento inicial, después de recibir del compilador un mensaje de error que indica que faltan comillas alrededor de la cadena `subprocess.Popen`. El segundo intento se verifica correctamente: compila y coincide con el código Python proporcionado, y se envía al usuario.
3. Aprendizaje del pasado
Nuestro historial de versiones recoge más de ocho años de evolución de StarLang. Analizamos estos cambios de reglas anteriores, los enriquecemos con funciones de análisis estático, los codificamos en embeddings y los almacenamos en una base de datos vectorial. Para esto, usamos un almacén vectorial estándar de LangChain Chroma.
Analizamos los PR del código base de StarLang. Cada PR suele incluir cambios en archivos de código StarLang y algunos archivos de prueba en un lenguaje de programación común. Los archivos de prueba muestran un caso en el que los cambios de StarLang dan lugar a la ausencia o presencia de un reporte de vulnerabilidad.
Los documentos del almacén vectorial incluyen versiones anteriores y posteriores de los cambios de StarLang, archivos de código de prueba y la descripción y el debate del PR.
Para calcular los embeddings, usamos el modelo de sentence-transformers all-MiniLM-L6-v2 [2]. Se destaca por encontrar cambios anteriores relevantes y, a la vez, ser lo suficientemente pequeño como para ejecutarse en una CPU, lo que lo hace rentable. Durante la ejecución, StarChat realiza una recuperación semántica para consultar ejemplos relevantes de forma dinámica mediante una arquitectura RAG estándar. Los cambios anteriores recuperados se proporcionan a StarChat como ejemplos de few-shot. El tamaño de estos ejemplos varía mucho según el tipo de cambio. Algunos PR contienen una sola línea, mientras que otros modifican cientos de líneas de código StarLang, lo que suma decenas de miles de tokens. La enorme ampliación de las ventanas de contexto de los LLM hace que esto no sea un problema.
4. Administración precisa del contexto
Más allá del RAG estándar, StarChat aprovecha un inventario de predicados: un sistema rápido de indexación sobre la marcha para el código base de StarLang. Debido a la naturaleza declarativa de StarLang, todo el código se divide en declaraciones, también conocidas como predicados. Cualquier predicado puede hacer referencia a otros predicados o usar un mecanismo de plantillas. Estas plantillas y referencias se resuelven o expanden durante la compilación, y su resolución depende del lenguaje que se analiza.
El inventario de predicados nos permite rastrear las dependencias de resolución en todo el código StarLang sin necesidad de compilar el código base completo. Así, podemos consultar a StarChat sobre un reporte de vulnerabilidad SQLI en un fragmento de código específico y agregar automáticamente a su contexto las declaraciones relevantes de StarLang relacionadas con ese reporte. Esto le permite identificar qué partes del código base están vinculadas lógicamente a un reporte de vulnerabilidad determinado y garantiza que reúna el contexto adecuado para cada tarea.
Por qué es importante
Al crear este marco de trabajo, posicionamos a Snyk para aprovechar de inmediato los avances en modelos fundamentales. Convertir la investigación de IA de vanguardia en mejoras tangibles de los productos de Snyk Code nos permite acelerar la asistencia a los clientes y ayudar mejor a quienes confían en nuestros productos para resolver problemas complejos de seguridad del código.
Descubre Snyk Labs
Tu centro de investigación y experimentación más reciente en seguridad de IA.