La IA generativa presenta muchas oportunidades en el contexto de las operaciones y el desarrollo, pero también plantea muchos desafíos para quienes intentan incorporar la IA generativa en una solución de seguridad.
Uno de esos desafíos es cómo obtener información a través de LLM (modelos de lenguaje grandes) sobre contenido sensible que no está permitido compartir con ningún servicio de IA de terceros, como políticas de seguridad utilizadas para proteger aplicações y API contra fraudes y abusos.
Un segundo desafío de los LLM es su tendencia a alucinar, especialmente cuando se les pide analizar o generar contenido relacionado con un tema sobre el cual el LLM tiene poco conocimiento. Este suele ser el caso de lenguajes específicos de dominio como DEX . Se trata de un lenguaje puramente funcional, de tipado estático y no Turing-completo que, si bien está bien definido, no se usa ampliamente.
El primer desafío, la privacidad de los datos, inicialmente parece insuperable. Las empresas de seguridad deben tomar muy en serio la privacidad y la seguridad de todos los datos de los clientes, incluidas las políticas. Por lo tanto, si bien el uso de un LLM para ayudar a descubrir información en las políticas beneficiaría tanto a las prácticas operativas como a los clientes, se necesita una solución que pueda extraer información de los datos confidenciales sin compartirlos con un LLM de terceros, lo que haría imposible que el LLM los procese. El segundo desafío (alucinaciones) es uno que toda la industria está luchando actualmente por superar, especialmente en lo que se relaciona con las respuestas respecto a políticas, configuraciones y código.
Mientras que los humanos ven un programa como una secuencia de caracteres, el compilador ve las cosas de manera diferente. Para el compilador, un programa DEX es un tipo de estructura de datos llamada AST (árbol de sintaxis abstracta). Este árbol es un gráfico acíclico dirigido, lo que significa que las políticas en cuestión son adecuadas para ser representadas como un gráfico. Por lo tanto, la solución que encontramos aprovecha una base de datos gráfica (Neo4j) y emplea un agente GPT para generar consultas GraphQL en ella. Este enfoque aborda claramente el primer desafío porque podemos usar GraphQL para consultar una base de datos de gráficos que contiene los datos y al mismo tiempo proteger su privacidad del LLM de terceros.
El segundo desafío —las alucinaciones— es más difícil de superar, pero nuestro enfoque también funciona aquí utilizando múltiples técnicas de IA para mitigar el riesgo. Además, GraphQL es un lenguaje de consulta ampliamente utilizado y bien documentado con el que la mayoría de los modelos GPT están familiarizados y que se puede verificar sintácticamente fácilmente utilizando cualquier cantidad de herramientas. Esto reduce la probabilidad de una alucinación y proporciona una manera de garantizar la corrección antes de su uso.
Las alucinaciones de IA se refieren a casos en los que una IA generativa produce resultados que no se basan en datos o patrones reales, sino que son fabricados o distorsionados. Estas alucinaciones a menudo ocurren debido a limitaciones o sesgos en los datos de entrenamiento de la IA, o cuando la IA intenta generar resultados para situaciones que no ha encontrado antes. Las alucinaciones pueden manifestarse como contenido inventado o sin sentido o como conclusiones que pueden no tener sentido lógico o no ser fieles a los datos de entrada. Por ejemplo, una IA generadora de texto podría producir oraciones que parecen plausibles pero que en última instancia no tienen sentido o no están relacionadas con el contexto proporcionado.
GraphQL es un lenguaje de consulta de código abierto para API (interfaces de programación de aplicação ) y un entorno de ejecución del lado del servidor para ejecutar esas consultas mediante un sistema de tipos definido para los datos. Fue desarrollado por Meta (Facebook) y está diseñado para proporcionar una alternativa más eficiente, potente y flexible a las API RESTful tradicionales. Las API de GraphQL se definen mediante un esquema que especifica los tipos de datos que se pueden consultar o mutar. Esta tipificación fuerte permite mejores herramientas, introspección y validación.
Nuestro enfoque para incorporar de forma segura la IA generativa a la seguridad toma la forma de un agente GPT. Si bien el uso de un lenguaje bien documentado ayuda a reducir el riesgo de alucinaciones, necesitábamos encontrar una manera de limitar el espacio de salida de nuestro agente a un formato que permitiera la verificación programática de errores y, al mismo tiempo, evitar el envío de datos confidenciales a OpenAI. El uso de GraphQL como espacio de salida funciona bien en este caso, ya que es lo suficientemente expresivo como para responder a la mayoría de las preguntas, a la vez que es una abstracción que puede verificarse programáticamente con un esquema conocido.
Si bien hemos aplicado este enfoque a DEX, funcionará para cualquier conjunto de datos suficientemente interconectados y relacionales, como: redes sociales, redes y topologías de infraestructura, cadenas de suministro y datos geoespaciales (mapeo).
La arquitectura PC-graph consta de componentes para transformar DEX en una representación gráfica. Los datos del gráfico resultante se almacenan luego en una base de datos Neo4j. La salida de un agente GPT se puede enviar a través de API a un servidor GraphQL Apollo, que ejecuta la consulta en la base de datos del gráfico.
Nuestro agente utiliza GPT4 para responder a solicitudes en lenguaje natural de información sobre políticas escritas en DEX. Para ello, comprende la API de pc-graph y responde con una consulta o mutación adecuada que el usuario puede revisar y ejecutar.
Además de la API de pc-graph, nuestro agente también comprende las bibliotecas utilizadas y algunos conceptos sobre el lenguaje DEX. Esta información se selecciona cuidadosamente para incluirse en el contexto en tiempo de ejecución para proporcionar resultados óptimos.
Un desafío que esto plantea es que el agente requiere un contexto amplio para contener las partes relevantes del esquema, así como el material complementario, como la documentación de neo4j-graphQL que incluye tipos, consultas y mutaciones adicionales generadas por la biblioteca. Al utilizar GPT4-8k simplemente nos quedamos sin espacio para un aprendizaje adecuado en contexto. El contexto de 32k produce resultados aceptables, sin embargo, esto también implica un costo adicional. Por ejemplo, debemos enviar el SDL (lenguaje de definición de esquema) de GraphQL en cada solicitud a OpenAI. Esto no sería un problema si pudiéramos ajustar los modelos conversacionales de GPT4 con nuestro esquema, eliminando así la necesidad de incluirlo en el contexto. Sin embargo, OpenAI no admite esta función actualmente.
Hemos encontrado tres enfoques de IA que mejoran los resultados de GPT4:
Como último paso, utilizamos herramientas que proporcionan verificación de errores de sintaxis estática para consultas GraphQL para detectar posibles alucinaciones que hayan pasado inadvertidas a las mitigaciones iniciales.
Este diseño se mejora aún más al generar inicialmente tres respuestas potenciales en la misma solicitud. Esto no solo reduce el tiempo y el costo de una solicitud determinada, sino que también mejora la consistencia, ya que es más probable que aparezcan los aspectos correctos de una respuesta. Al hacer esto, también tenemos espacio para la variación aleatoria con el interés de explorar opciones improbables pero precisas.
Como resultado de nuestro enfoque, hemos podido obtener información de las políticas sin compartir datos privados. La calidad y consistencia de los resultados de nuestras consultas también han mejorado notablemente con una reducción notable en las alucinaciones, particularmente en tareas que implican la construcción de consultas grandes o complejas que incluyen múltiples filtros y/o funciones agregadas.
En cierto sentido, podemos tener todo lo que tenemos y comerlo también; cuando nos vemos obligados a elegir entre un agente creativo o determinista, simplemente hacemos ambas cosas.