BLOG | ESCRITÓRIO DO DIRETOR DE TECNOLOGIA

Mitigando alucinações de IA e protegendo a privacidade com GraphQL

Miniatura de Maxwell Wynter
Maxwell Wynter
Publicado em 09 de novembro de 2023

A IA generativa apresenta muitas oportunidades no contexto de operações e desenvolvimento, mas também levanta muitos desafios para aqueles que tentam incorporar IA generativa em uma solução de segurança. 

Um desses desafios é como obter insights por meio de LLMs (Large Language Models) sobre conteúdo sensível que não pode ser compartilhado com nenhum serviço de IA de terceiros, como políticas de segurança usadas para proteger aplicativos e APIs contra fraudes e abusos. 

Um segundo desafio com os LLMs é sua tendência a ter alucinações, especialmente quando solicitados a analisar ou gerar conteúdo relacionado a um assunto sobre o qual o LLM tem pouco conhecimento. Este é frequentemente o caso de linguagens específicas de domínio, como DEX . É uma linguagem puramente funcional, estaticamente tipada e não Turing-completa que, embora bem definida, não é amplamente usada.

O primeiro desafio, a privacidade dos dados, inicialmente parece intransponível. As empresas de segurança devem levar muito a sério a privacidade e a segurança de todos os dados dos clientes, incluindo políticas. Portanto, embora o uso de um LLM para ajudar a descobrir insights em políticas possa beneficiar tanto as práticas operacionais quanto os clientes, é necessária uma solução que possa obter insights de dados confidenciais sem compartilhá-los com um LLM de terceiros, impossibilitando que o LLM os processe. O segundo desafio (alucinações) é algo que toda a indústria está lutando para superar atualmente, especialmente no que se refere a respostas sobre políticas, configurações e código. 

Enquanto os humanos veem um programa como uma sequência de caracteres, o compilador vê as coisas de forma diferente. Para o compilador, um programa DEX é um tipo de estrutura de dados chamada AST (Árvore de Sintaxe Abstrata). Esta árvore é um gráfico acíclico direcionado, o que significa que as políticas em questão são adequadas para representação como um gráfico. Assim, a solução que encontramos aproveita um banco de dados gráfico (Neo4j) e emprega um agente GPT para gerar consultas GraphQL nele. Essa abordagem aborda perfeitamente o primeiro desafio porque podemos usar GraphQL para consultar um banco de dados de gráficos que contém os dados, ao mesmo tempo em que protegemos sua privacidade do LLM de terceiros. 

O segundo desafio — alucinações — é mais difícil de superar, mas nossa abordagem também funciona aqui usando diversas técnicas de IA para mitigar o risco. Além disso, GraphQL é uma linguagem de consulta amplamente utilizada e bem documentada, com a qual a maioria dos modelos GPT está familiarizada e que pode ser facilmente verificada sintaticamente usando qualquer número de ferramentas. Isso reduz a probabilidade de uma alucinação e fornece uma maneira de garantir a correção antes do uso.

O que são alucinações de IA?

Alucinações de IA referem-se a casos em que uma IA generativa produz resultados não baseados em dados ou padrões reais, mas sim fabricados ou distorcidos. Essas alucinações geralmente ocorrem devido a limitações ou vieses nos dados de treinamento da IA, ou quando a IA tenta gerar resultados para situações que nunca encontrou antes. Alucinações podem se manifestar como conteúdo ou conclusões inventadas ou sem sentido que podem não fazer sentido lógico ou podem não ser verdadeiras em relação aos dados de entrada. Por exemplo, uma IA geradora de texto pode produzir frases que parecem plausíveis, mas que, em última análise, são absurdas ou não relacionadas ao contexto fornecido.

O que é GraphQL?

GraphQL é uma linguagem de consulta de código aberto para APIs (Interfaces de Programação de Aplicativos) e um tempo de execução do lado do servidor para executar essas consultas usando um sistema de tipos definido para dados. Ele foi desenvolvido pela Meta (Facebook) e foi projetado para fornecer uma alternativa mais eficiente, poderosa e flexível às APIs RESTful tradicionais. As APIs GraphQL são definidas por um esquema que especifica os tipos de dados que podem ser consultados ou alterados. Essa tipagem forte permite melhor ferramental, introspecção e validação.  

Nossa Abordagem

Nossa abordagem para incorporar com segurança IA generativa à segurança assume a forma de um agente GPT. Embora o uso de uma linguagem bem documentada ajude a reduzir o risco de alucinação, precisávamos encontrar uma maneira de limitar o espaço de saída do nosso agente em um formato que pudesse ser verificado programaticamente quanto a erros, sem enviar dados confidenciais para o OpenAI. Usar GraphQL como o espaço de saída funciona bem aqui, pois é expressivo o suficiente para responder à maioria das perguntas, sendo também uma abstração que pode ser verificada programaticamente em relação a um esquema conhecido. 

Embora tenhamos aplicado essa abordagem ao DEX, ela funcionará para qualquer conjunto de dados suficientemente interconectados e relacionais, como: redes sociais, topologias de redes e infraestrutura, cadeias de suprimentos e dados geoespaciais (mapeamento).  

A arquitetura PC-graph consiste em componentes para transformar DEX em uma representação gráfica. Os dados gráficos resultantes são então armazenados em um banco de dados Neo4j. A saída de um agente GPT pode ser enviada via API para um servidor GraphQL Apollo, que executa a consulta no banco de dados do gráfico. 

Nosso agente usa GPT4 para responder a solicitações em linguagem natural para informações sobre políticas escritas em DEX. O agente consegue isso entendendo a API pc-graph e respondendo com uma consulta ou mutação apropriada que pode então ser revisada e executada pelo usuário. 

Além da API do pc-graph, nosso agente também entende as bibliotecas utilizadas e alguns conceitos sobre a linguagem DEX. Essas informações são cuidadosamente selecionadas para serem incluídas no contexto em tempo de execução para fornecer resultados ideais. 

Um desafio que isso representa é que o agente requer um contexto grande para conter as partes relevantes do esquema, bem como o material suplementar, como a documentação neo4j-graphQL que inclui tipos, consultas e mutações adicionais gerados pela biblioteca. Ao usar o GPT4-8k, simplesmente ficamos sem espaço para um aprendizado adequado no contexto. O contexto de 32k produz resultados aceitáveis, porém, isso também gera custos adicionais. Por exemplo, precisamos enviar o GraphQL SDL (Schema Definition Language) em cada solicitação para o OpenAI. Isso não seria um problema se pudéssemos ajustar os modelos de conversação do GPT4 com nosso esquema, removendo a necessidade de incluí-lo no contexto. No entanto, isso não é suportado atualmente pelo OpenAI. 

Encontramos três abordagens de IA que melhoram os resultados do GPT4:

  1. Cadeia de Pensamento
    • Cadeia de Pensamento (CoT) é um conceito de IA que simula processos de pensamento semelhantes aos humanos, permitindo que os sistemas sigam uma sequência lógica de ideias ou conceitos, semelhante à forma como os humanos conectam pensamentos em forma de cadeia. Isso auxilia na compreensão da linguagem natural, no raciocínio e na compreensão do contexto. Esta técnica produz os melhores resultados quando aplicada ao modelo de última geração GPT-4 .
  2. IA reflexiva
    • IA reflexiva, também conhecida como IA autoconsciente ou IA com capacidades reflexivas, refere-se a sistemas de inteligência artificial que possuem a capacidade de introspecção e tomar decisões sobre suas próprias ações e processos. Esse nível de IA vai além do aprendizado de máquina tradicional e das capacidades básicas de tomada de decisão, pois envolve um grau maior de autoconsciência e autoavaliação. Reflexion, uma estrutura para agentes de linguagem com aprendizagem por reforço verbal , “reflete verbalmente sobre os sinais de feedback da tarefa e, em seguida, mantém seu próprio texto reflexivo em um buffer de memória episódica para induzir uma melhor tomada de decisão em testes subsequentes”.
  3. Dialogando consigo mesmo

Como última etapa, usamos ferramentas que fornecem verificação de erros de sintaxe estática para consultas GraphQL para detectar quaisquer possíveis alucinações que tenham passado despercebidas pelas mitigações iniciais.

Esse design é ainda mais aprimorado ao gerar inicialmente três respostas possíveis no mesmo prompt. Isso não apenas reduz o tempo e o custo de um determinado prompt, mas também melhora a consistência, pois é mais provável que os aspectos corretos de uma resposta ocorram. Fazendo isso, também temos espaço para variação aleatória no interesse de explorar opções improváveis, mas precisas.

Como resultado da nossa abordagem, conseguimos obter insights de políticas sem compartilhar dados privados. A qualidade e a consistência dos resultados de nossas consultas também melhoraram notavelmente, com uma redução notável nas alucinações, principalmente em tarefas que envolvem a construção de consultas grandes ou complexas que incluem vários filtros e/ou funções agregadas. 

De certa forma, temos o direito de ter o bolo e comê-lo também; quando somos forçados a escolher entre um agente criativo e um determinista, simplesmente fazemos as duas coisas.