Criar um assistente de IA para e-mails comerciais com o Gemma

Lidar com as dúvidas dos clientes, incluindo e-mails, é uma parte necessária da execução muitas empresas, mas isso pode sobrecarregar rapidamente. Com um pouco de esforço, modelos de inteligência artificial (IA) como o Gemma podem ajudar a facilitar esse trabalho.

Cada empresa lida com consultas como e-mails de forma um pouco diferente, é importante adaptar tecnologias como a IA generativa às necessidades das sua empresa. Este projeto aborda o problema específico de extrair pedidos informações de e-mails a uma padaria em dados estruturados, para que possam ser rapidamente a um sistema de processamento de pedidos. Usando de 10 a 20 exemplos de consultas e a saída desejada, é possível ajustar um modelo Gemma para processar e-mails do seu clientes, responder com rapidez e integrar-se aos seus sistemas de negócios existentes. O projeto é criado como um padrão de aplicação de IA que pode ser estendido e adaptado aproveite os modelos Gemma para sua empresa.

Para conferir uma visão geral em vídeo do projeto e como ele pode ser estendido, incluindo insights dos criadores, assista ao vídeo Assistente de IA para e-mails comerciais no Build with Google AI. Você também pode analisar o código desse projeto no repositório de código do Gemma Cookbook (link em inglês). Caso contrário, você pode começar a estender o projeto usando as seguintes instruções.

Visão geral

Neste tutorial, você vai aprender a configurar, executar e estender um aplicativo de assistente de e-mail de negócios criado com Gemma, Python e Flask. O projeto oferece uma interface do usuário da Web básica que pode ser modificada de acordo com suas necessidades. O aplicativo foi criado para extrair dados de e-mails de clientes para uma estrutura em uma padaria fictícia. É possível usar esse padrão de aplicativo para qualquer tarefa de negócios que use entrada e saída de texto.

Captura de tela da interface do usuário do app da Web

Figura 1. Interface do usuário do projeto para processar consultas por e-mail de padaria

Requisitos de hardware

Execute esse processo de ajuste em um computador com uma unidade de processamento gráfico (GPU) ou uma unidade de processamento de tensor (TPU) e memória suficiente de GPU ou TPU para armazenar o modelo atual e os dados de ajuste. Para executar a configuração de ajuste neste é preciso ter cerca de 16 GB de memória GPU, a mesma quantidade e 50 GB de espaço em disco.

É possível executar a parte de ajuste do modelo do Gemma neste tutorial usando um ambiente do Colab com um ambiente de execução de GPU T4. Se você estiver construindo este projeto Google Cloud Instância de VM, configure a instância seguindo estes requisitos:

  • Hardware da GPU: é necessário ter uma NVIDIA T4 para executar este projeto (NVIDIA Nível 4 ou superior (recomendado)
  • Sistema operacional: escolha uma opção de Aprendizado profundo no Linux. especificamente Deep Learning VM com CUDA 12.3 M124 com Drivers de software da GPU.
  • Tamanho do disco de inicialização: provisione pelo menos 50 GB de espaço em disco para seus dados, modelos e software de suporte.

Configurar o projeto

Estas instruções ajudam você a preparar o projeto para o desenvolvimento e testes. As etapas gerais de configuração incluem a instalação do software de pré-requisito, clonando o projeto do repositório de código, configurando alguns ambientes variáveis, instalar bibliotecas Python e testar aplicativos da Web.

Instalar e configurar

Este projeto usa o Python 3 e ambientes virtuais (venv) para gerenciar pacotes e executar o aplicativo. As instruções de instalação a seguir servem para Linux máquina host.

Para instalar o software necessário:

  • Instale o Python 3 e o pacote do ambiente virtual venv para Python:

    sudo apt update
    sudo apt install git pip python3-venv
    

Clonar o projeto

Faça o download do código do projeto para seu computador de desenvolvimento. Você precisa do software de controle de origem git para extrair o código-fonte do projeto.

Para fazer o download do código do projeto:

  1. Clone o repositório do Git usando o seguinte comando:

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. Se quiser, configure seu repositório local do git para usar o checkout esparso, para que você tenha apenas os arquivos do projeto:

    cd gemma-cookbook/
    git sparse-checkout set Demos/business-email-assistant/
    git sparse-checkout init --cone
    

Instalar bibliotecas do Python

Instale as bibliotecas Python com o ambiente virtual venv ativado para gerenciar pacotes e dependências do Python. Ative o ambiente virtual do Python antes de instalar bibliotecas do Python com o instalador pip. Para mais informações sobre o uso de ambientes virtuais do Python, consulte a documentação do Python venv.

Para instalar as bibliotecas do Python:

  1. Em uma janela de terminal, navegue até o diretório business-email-assistant:

    cd Demos/business-email-assistant/
    
  2. Configure e ative o ambiente virtual do Python (venv) para este projeto:

    python3 -m venv venv
    source venv/bin/activate
    
  3. Instale as bibliotecas Python necessárias para este projeto usando o script setup_python:

    ./setup_python.sh
    

Defina as variáveis de ambiente

Este projeto requer algumas variáveis de ambiente para ser executado, incluindo um nome de usuário e um token de API do Kaggle. Você deve ter um Kaggle e solicita acesso aos modelos Gemma para fazer o download deles. Para projeto, adicione seu nome de usuário e token de API do Kaggle a duas .env , que são lidos pelo aplicativo da Web e pelo programa de ajuste, respectivamente.

Para definir as variáveis de ambiente:

  1. Para conferir seu nome de usuário e chave de token do Kaggle, siga as instruções na documentação do Kaggle.
  2. Para acessar o modelo do Gemma, siga as instruções em Acessar o Gemma na página Gemma Setup (Configuração do Gemma).
  3. Crie arquivos de variáveis de ambiente para o projeto. Para isso, crie um .env em cada um desses locais no clone do projeto:
    email-processing-webapp/.env
    model-tuning/.env
    
  4. Depois de criar os arquivos de texto .env, adicione as seguintes configurações a ambos os arquivos:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

Executar e testar o aplicativo

Depois de concluir a instalação e configuração do projeto, execute o aplicativo da Web para confirmar se ele foi configurado corretamente. Faça essa verificação como uma verificação de referência antes de editar o projeto para seu próprio uso.

Para executar e testar o projeto:

  1. Em uma janela de terminal, navegue até o diretório email-processing-webapp:

    cd business-email-assistant/email-processing-webapp/
    
  2. Execute o aplicativo usando o script run_app:

    ./run_app.sh
    
  3. Após iniciar o aplicativo da web, o código do programa lista um URL em que para navegar e testar. Normalmente, esse endereço é:

    http://127.0.0.1:5000/
    
  4. Na interface da Web, pressione o botão Obter dados abaixo da primeira entrada para gerar uma resposta do modelo.

A primeira resposta do modelo após a execução do aplicativo leva mais tempo, porque precisa concluir as etapas de inicialização na primeira execução de geração. Solicitações de prompt subsequentes e geração em um aplicativo da Web já em execução concluir em menos tempo.

Estender o aplicativo

Quando o aplicativo estiver em execução, você poderá estendê-lo modificando o nome interface de usuário e lógica de negócios para que ele funcione para tarefas relevantes para você ou sua empresa. Você também pode modificar o comportamento do modelo Gemma usando o o código do aplicativo, alterando os componentes da solicitação que o aplicativo envia para o modelo de IA generativa.

O aplicativo fornece instruções ao modelo com os dados de entrada do usuário, um comando completo do modelo. Você pode modificar essas instruções para mudar o comportamento do modelo, como especificar os nomes dos parâmetros. e a estrutura do JSON a ser gerado. Uma maneira mais simples de mudar o comportamento modelo é fornecer instruções ou orientações adicionais para a resposta, como especificar que as respostas geradas não devem incluir nenhuma Formatação do Markdown.

Para modificar as instruções:

  1. No projeto de desenvolvimento, abra o arquivo de código business-email-assistant/email-processing-webapp/app.py.
  2. No código app.py, adicione instruções de adições à Função get_prompt()::

    def get_prompt():
      return """
        Extract the relevant details of this request and return them in
        JSON code, with no additional markdown formatting:\n"""
    

Este exemplo adiciona a frase "sem formatação de marcação adicional" ao instruções.

Fornecer mais instruções de comando pode influenciar muito o saída e exige muito menos esforço para ser implementado. Tente usar esse método primeiro para conferir se é possível conseguir o comportamento desejado do modelo. No entanto, usar instruções de comando para modificar o comportamento de um modelo Gemma tem sua limites. Especificamente, o limite geral de tokens de entrada do modelo, que é de 8.192 tokens para Gemma 2, exige que você equilibre instruções detalhadas com o tamanho dos novos dados fornecidos para permanecer abaixo desse limite.

Ajustar o modelo

O ajuste fino de um modelo Gemma é a maneira recomendada de fazer com que ele responda de forma mais confiável para tarefas específicas. Em particular, se você quiser que o modelo gere JSON com uma estrutura específica, incluindo parâmetros nomeados específicos, ajuste o modelo para esse comportamento. Dependendo da tarefa que você quer que o modelo conclua, é possível realizar tarefas funcionalidade de armazenamento com 10 a 20 exemplos. Esta seção do tutorial explica como configurar e executar o ajuste fino em um modelo Gemma para uma tarefa específica.

As instruções a seguir explicam como realizar a operação de ajuste fino em um ambiente de VM. No entanto, você também pode realizar essa operação de ajuste usando o Colab noteboook associado a este projeto.

Requisitos de hardware

Os requisitos de computação para ajustes são os mesmos que os requisitos de hardware para o restante do projeto. É possível executar a operação de ajuste em um ambiente do Colab com um ambiente de execução de GPU T4 se você limitar os tokens de entrada a 256 e o tamanho do lote a 1.

Preparar dados

Antes de começar a ajustar um modelo do Gemma, é necessário preparar os dados para o ajuste. Ao ajustar um modelo para uma tarefa específica, você precisa de um conjunto de exemplos de solicitação e resposta. Esses exemplos devem mostrar o texto da solicitação, sem nenhum instruções e o texto de resposta esperado. Para começar, você deve se preparar um conjunto de dados com cerca de 10 exemplos. Esses exemplos devem representar uma variedade completa de solicitações e as respostas ideais. Verifique se as solicitações e respostas não são repetitivas, porque isso pode fazer com que as respostas dos modelos sejam repetitivas e não se ajustem adequadamente às variações nas solicitações. Se você estiver ajustando o modelo para produzir um formato de dados estruturados, verifique se todas as respostas foram rigorosamente conformes ao formato de saída de dados desejado. A tabela a seguir mostra alguns registros de exemplo do conjunto de dados deste exemplo de código:

Solicitação Resposta
Olá, Indian Bakery Central,\nVocê tem 10 pendas e trinta bundi ladoos na mão? Você também vende bolos com cobertura de baunilha e sabor chocolate. Quero um tamanho de 15 cm { &quot;type&quot;: &quot;inquiry&quot;, "items": [ { &quot;name&quot;: &quot;pendas&quot;, "quantity": 10}, { &quot;name&quot;: &quot;bundi ladoos&quot;, "quantity": 30}, { "name": "bolo", &quot;filling&quot;: null, "frosting": "baunilha", "flavor": "chocolate", "size": "6 pol" }]. }
Vi sua empresa no Google Maps. Você vende gelatina e gulab? Jamun? { "type": "inquiry", "items": [ { "name": "jellabi", "quantity": null }, { "name": "gulab jamun", "quantity": null } ] }

Tabela 1. Listagem parcial do conjunto de dados de ajuste para o extrator de dados de e-mail da padaria.

Formato e carregamento de dados

É possível armazenar dados de ajustes no formato que preferir, incluindo registros de banco de dados, arquivos JSON, CSV ou arquivos de texto simples, contanto que você tenha o significa recuperar os registros com código Python. Esse projeto lê arquivos JSON de um diretório data em uma matriz de objetos de dicionário. Neste exemplo de programa de giro, o conjunto de dados de ajuste é carregado na Módulo model-tuning/main.py usando a função prepare_tuning_dataset():

def prepare_tuning_dataset():
    # collect data from JSON files
    prompt_data = read_json_files_to_dicts("./data")
    ...

Como mencionado anteriormente, é possível armazenar o conjunto de dados em um formato que seja conveniente, desde que você possa recuperar as solicitações com os recursos respostas e as montamos em uma string de texto que é usada como um registro de ajuste.

Montar registros de ajuste

Para o processo de ajuste real, o programa reúne cada solicitação e resposta em uma única string com as instruções do comando e o conteúdo da resposta. O programa de ajuste tokeniza a string para consumo pelo um modelo de machine learning. Você pode ver o código para montar um registro de ajuste na Função prepare_tuning_dataset() do módulo model-tuning/main.py da seguinte maneira:

def prepare_tuning_dataset():
    ...
    # prepare data for tuning
    tuning_dataset = []
    template = "{instruction}\n{response}"

    for prompt in prompt_data:
        tuning_dataset.append(template.format(instruction=prompt["prompt"],
                                              response=prompt["response"]))

    return tuning_dataset

A função usa os dados como entrada e os formata com a adição de uma quebra de linha entre a instrução e a resposta.

Gerar pesos de modelo

Depois de carregar e colocar os dados de ajuste no lugar, é possível executar o programa de ajuste. O processo de ajuste para este aplicativo de exemplo usa a biblioteca Keras NLP para ajustar o modelo com uma adaptação de classificação baixa, ou técnica LoRA, para gerar novos pesos de modelo. Em comparação com o ajuste de precisão total, o uso da LoRA é muito mais eficiente em memória, porque se aproxima das mudanças da pesos do modelo. Em seguida, você pode sobrepor esses pesos aproximados às pesos do modelo para alterar o comportamento dele.

Para executar a execução de ajuste e calcular novos pesos:

  1. Em uma janela do terminal, navegue até o diretório model-tuning/.

    cd business-email-assistant/model-tuning/
    
  2. Execute o processo de ajuste usando o script tune_model:

    ./tune_model.sh
    

O processo de ajuste leva vários minutos dependendo da computação disponível do Google Cloud. Quando ele for concluído, o programa de ajuste vai gravar novos arquivos de peso *.h5 no diretório model-tuning/weights com o seguinte formato:

gemma2-2b_inquiry_tuned_4_epoch##.lora.h5

Solução de problemas

Se o ajuste não for concluído com sucesso, há dois motivos prováveis:

  • Sem memória ou recursos esgotados: esses erros ocorrem quando o processo de ajuste solicita memória que excede a memória disponível da GPU ou da CPU. Verifique se você não está executando o aplicativo da Web enquanto o processo de ajuste está em execução. Se estiver ajustando um dispositivo com 16 GB de memória GPU, verifique se o token_limit está definido como 256 e o batch_size Defina como 1.
  • Drivers de GPU não instalados ou incompatíveis com o JAX: o processo de transformação exige que o dispositivo de computação tenha drivers de hardware instalados, compatível com a versão Bibliotecas JAX. Para mais detalhes, consulte a Instalação do JAX na documentação do Google Cloud.

Implantar modelo ajustado

O processo de ajuste gera vários pesos com base nos dados de ajuste e no número total de épocas definidas no aplicativo de ajuste. Por padrão, o ajuste gera 3 arquivos de peso de modelo, um para cada período de ajuste. Cada época de ajuste sucessiva produz pesos que reproduzem com mais precisão os resultados dos dados de ajuste. É possível conferir as taxas de precisão de cada época na saída do terminal do processo de ajuste, conforme mostrado abaixo:

...
8/8 ━━━━━━━━━━━━━━━━━━━━ 121s 195ms/step - loss: 0.5432 - sparse_categorical_accuracy: 0.5982
Epoch 2/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 194ms/step - loss: 0.3320 - sparse_categorical_accuracy: 0.6966
Epoch 3/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 192ms/step - loss: 0.2135 - sparse_categorical_accuracy: 0.7848

Embora você queira que a taxa de precisão seja relativamente alta, em torno de 0,80, não quero que a taxa seja muito alta ou muito próxima de 1,00, porque isso significa que os pesos se aproximaram de um overfitting dos dados de ajuste. Quando isso acontece, o modelo não tem um bom desempenho em solicitações significativamente diferentes dos exemplos de ajuste. Por padrão, o script de implantação escolhe a época 3 pesos, que normalmente têm uma taxa de precisão em torno de 0,80.

Para implantar os pesos gerados no aplicativo da Web:

  1. Em uma janela de terminal, navegue até o diretório model-tuning:

    cd business-email-assistant/model-tuning/
    
  2. Execute o processo de ajuste usando o script deploy_weights:

    ./deploy_weights.sh
    

Depois de executar esse script, você vai encontrar um novo arquivo *.h5 no diretório email-processing-webapp/weights/.

Testar o novo modelo

Depois de implantar os novos pesos no aplicativo, é hora de testar o modelo recém-ajustado. Para isso, execute novamente o aplicativo da Web e gerencie uma resposta.

Para executar e testar o projeto:

  1. Em uma janela de terminal, navegue até o diretório email-processing-webapp:

    cd business-email-assistant/email-processing-webapp/
    
  2. Execute o aplicativo usando o script run_app:

    ./run_app.sh
    
  3. Após iniciar o aplicativo da web, o código do programa lista um URL em que que você pode procurar e testar, normalmente esse endereço é:

    http://127.0.0.1:5000/
    
  4. Na interface da Web, pressione o botão Obter dados abaixo da primeira entrada para gerar uma resposta do modelo.

Você ajustou e implantou um modelo Gemma em um aplicativo. Teste o aplicativo e tente determinar os limites do recurso de geração do modelo ajustado para sua tarefa. Se você encontrar cenários em que o modelo não tem um bom desempenho, adicione algumas dessas solicitações à sua lista de dados de exemplo de ajuste, adicionando a solicitação e fornecendo uma resposta ideal. Em seguida, execute o processo de ajuste novamente, implante os novos pesos e teste a saída.

Outros recursos

Para mais informações sobre esse projeto, consulte o repositório de código do Gemma Cookbook. Se você precisar de ajuda para criar o aplicativo ou quiser colaborar com outros desenvolvedores, confira a Discord da comunidade do Google Developers servidor. Para conferir mais projetos do Build with Google AI, acesse a playlist de vídeos.