Programa
Já se foi o tempo em que ficávamos satisfeitos com grandes modelos de linguagem que só podem processar texto. Agora exigimos multimodais multimodais, capazes de compreender e interagir com textos, imagens e vídeos.
Entre Modelos de visão Llama 3.2 11B e 90BVocê pode usar os primeiros modelos multimodais de código aberto da Meta AI, capazes de processar entradas de texto e imagem.
Neste guia prático, mostrarei a você o processo de criação de um assistente de suporte ao cliente multimodal com a ajuda do Llama 3.2 e do Gradio. Ao final deste tutorial, você terá um aplicativo da Web totalmente funcional que pode analisar descrições textuais e imagens carregadas para gerar soluções úteis - exatamente como um assistente de tíquete de suporte faria!
Se você precisar de uma rápida introdução à Llama 3.2 antes de começarmos, recomendo a leitura deste Guia do Llama 3.2.
Configuração inicial
Nesta demonstração prática, usaremos o modelo Llama3.2-11B-Vision (multimodal). Antes de começar a codificar, vamos nos certificar de que temos todas as dependências necessárias.
Precisamos de algumas bibliotecas para que tudo funcione. Os principais são:
- Transformers: A biblioteca principal para trabalhar com modelos como o Llama 3.2.
- Tocha: A biblioteca de aprendizagem profunda que alimenta nosso modelo.
- Gradio: Para criar nossa interface de usuário.
Execute os seguintes comandos para instalar as dependências necessárias:
!pip3 install -U torch transformers bitsandbytes accelerate peft -q
!pip3 install gradio -q
Carregar o modelo e o processador do Llama 3.2
Agora, vamos carregar o modelo e o processador do Llama 3.2. Usaremos Hugging Facepara carregar o modelo e o processador, certificando-se de que o modelo seja executado na GPU, se estiver disponível, ou que o padrão seja a CPU, caso contrário. Por ser um modelo de parâmetro 11B, ele funciona bem em uma GPU A100 no Google Colab.
No bloco de código abaixo:
- Configuramos as importações necessárias.
- Carregamos o modelo e o processador com suporte a GPU, se disponível. Isso garante que o aplicativo seja executado com eficiência, especialmente ao processar grandes quantidades de dados.
- Uma parte importante do código que você deve observar aqui é
tie_weight()
, que garante que os pesos das camadas de incorporação de entrada e saída sejam idênticos. Isso reduz o consumo de memória e pode melhorar o desempenho.
import torch
from PIL import Image
import gradio as gr
from transformers import MllamaForConditionalGeneration, AutoProcessor
def load_model():
model_id = "meta-llama/Llama-3.2-11B-Vision-Instruct"
device = "cuda" if torch.cuda.is_available() else "cpu" # Check if GPU is available
model = MllamaForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
device_map="auto", # Automatically map to available device
offload_folder="offload", # Offload to disk if necessary
)
model.tie_weights() # Tying weights for efficiency
processor = AutoProcessor.from_pretrained(model_id)
print(f"Model loaded on: {device}")
return model, processor
Por que o Gradio?
Gradio é uma biblioteca Python leve que nos permite criar rapidamente aplicativos de aprendizado de máquina com interfaces baseadas na Web. Em vez de escrever HTML ou JavaScript complexos, podemos definir os componentes do nosso aplicativo (como caixas de texto, botões ou imagens) diretamente no Python.
Esta é a aparência de uma interface de usuário básica do Gradio:
O Gradio tem alguns benefícios:
- Sem problemas de instalação: Os aplicativos Gradio são hospedados e compartilhados com algumas linhas de código Python. O compartilhamento integrado permite o acesso por meio de um link público.
- Interface colaborativa: Permite demonstrações ao vivo de modelos compartilhados com colaboradores ou com o público. Vários usuários podem interagir simultaneamente.
- Suporte a vários tipos de entrada e saída: Oferece uma variedade de componentes de entrada/saída além de texto e imagens.
- Configuração mínima para hospedagem na nuvem: Fácil implementação em plataformas como o Hugging Face Spaces ou outros serviços de nuvem.
- Integração entre plataformas: As interfaces podem ser incorporadas a outros aplicativos da Web, Jupyter Notebooks ou publicações em blogs.
- Geração automática de API: Gera automaticamente uma API para o aplicativo.
- Segurança integrada: Inclui limites de tamanho de arquivo e outras medidas para evitar o uso malicioso.
Para esta demonstração, o Gradio simplifica para os usuários a inserção de texto e imagens e a visualização do resultado (análise de texto e imagem, neste caso) em tempo real. É perfeito para mostrar o poder de modelos como o Llama 3.2 em um ambiente fácil de usar.
Desenvolver aplicativos de IA
Criando o aplicativo multimodal Llama 3.2
Agora que já definimos nossas importações e configuramos nosso modelo com sucesso, vamos avançar para a parte principal do aplicativo: processar as entradas (texto e imagem) e gerar a resposta.
Geração de texto para texto
Começamos definindo uma função que recebe o texto do usuário e, opcionalmente, uma imagem. Em seguida, essa função usa o modelo Llama 3.2 para gerar uma resposta.
def process_ticket(text, image=None):
model, processor = load_model()
try:
if image:
# Resize the image for consistency
image = image.convert("RGB").resize((224, 224))
prompt = f"<|image|><|begin_of_text|>{text}"
# Process both the image and text input
inputs = processor(images=[image], text=prompt, return_tensors="pt").to(model.device)
else:
prompt = f"<|begin_of_text|>{text}"
# Process text-only input
inputs = processor(text=prompt, return_tensors="pt").to(model.device)
# Generate response (restrict token length for faster output)
outputs = model.generate(**inputs, max_new_tokens=200)
# Decode the response from tokens to text
response = processor.decode(outputs[0], skip_special_tokens=True)
return response
except Exception as e:
print(f"Error processing ticket: {e}")
return "An error occurred while processing your request."
Essa função lida com dois tipos de entrada dentro do loop:
- Somente texto: Se nenhuma imagem for fornecida, o modelo gera uma resposta com base na entrada de texto.
- Texto + imagem: Se uma imagem for fornecida, o modelo processará o texto e a imagem antes de gerar a resposta.
Depois que o tipo de entrada é identificado, ele é passado para um processador proveniente da biblioteca de transformadores para processar a entrada. Em seguida, o modelo gera um resultado no intervalo de max_new_tokens
.
Criando a interface do Gradio
A interface Gradio une tudo e nos permite executar testes em um formato baseado na Web. Essa interface permite que os usuários enviem textos e imagens de um problema que estejam enfrentando e vejam a solução gerada pela IA.
Vamos dar uma olhada no código e depois explicá-lo.
def create_interface():
text_input = gr.Textbox(
label="Describe your issue",
placeholder="Describe the problem you're experiencing",
lines=4,
)
image_input = gr.Image(label="Upload a Screenshot (Optional)", type="pil")
# Output element
output = gr.Textbox(label="Suggested Solution", lines=5)
# Create the Gradio interface
interface = gr.Interface(
fn=process_ticket, # Function to process inputs
inputs=[text_input, image_input], # User inputs (text and image)
outputs=output, # AI-generated output
title="Multimodal Customer Support Assistant",
description="Submit a description of your issue, along with an optional screenshot, and get AI-powered suggestions.",
)
# Launch the interface with debug mode
interface.launch(debug=True)
No código acima, nós:
- Defina duas entradas:
text_input
para textoimage_input
para imagem- Especifique uma caixa de saída para exibir a resposta.
- Crie a interface, passando parâmetros como:
- Entradas
- Função para processar a entrada
- Saída gerada do modelo
- Título da interface
- Descrição (se necessário)
- Configure a interface básica do usuário.
- Inicie a interface com
debug = True
para depurar os erros. Quando o código funcionar bem, mude-o novamente paraFalse
.
A interface final terá a seguinte aparência:
Nosso aplicativo Gradio, assistente multimodal de suporte ao cliente, está pronto! Para obter a resposta desejada, tente alterar o parâmetro max_new_tokens
ou brincar um pouco com o prompt.
Casos de uso para Llama 3.2 e Gradio
Além da demonstração que criamos neste tutorial, há alguns outros casos de uso que exigem um esforço mínimo. Isso inclui:
- Educação e tutoria: Os alunos podem fazer upload de recursos visuais, como gráficos ou diagramas, juntamente com suas perguntas, e o modelo pode gerar respostas abrangentes que incorporam informações visuais e textuais.
- Criação de conteúdo: Melhore a criação de legendas, publicações em blogs e conteúdo de mídia social gerando texto com base em imagens.
- Assistência virtual para imóveis: Auxiliar agentes e clientes processando imagens de propriedades e respondendo a perguntas relacionadas. Gerar descrições de propriedades ou analisar detalhes visuais de fotos.
Práticas recomendadas para o desenvolvimento com o Llama 3.2 e o Gradio
Para cada caso de uso, há algumas dicas que todo desenvolvedor pode usar ao desenvolver um aplicativo como o que já criamos. Aqui estão algumas práticas recomendadas que um desenvolvedor pode adotar ao trabalhar com modelos como o llama3.2.
Lidar com a latência
Como as tarefas multimodais podem exigir muitos recursos, a redução da latência é fundamental. Considere otimizar o modelo para obter respostas mais rápidas usando o cache, a poda do modelo ou limitando o número de tokens gerados.
Tratamento de erros
É importante que você crie mecanismos para lidar com erros. Nos casos em que o modelo não consegue gerar uma resposta significativa (por exemplo, devido à baixa qualidade da imagem), podemos fornecer respostas alternativas ou mensagens de erro. Podemos até optar pelo feedback humano, que, em troca, ajuda a aprimorar o modelo.
Monitoramento de desempenho
O acompanhamento do desempenho do aplicativo, como tempos de resposta e dados de interação do usuário, pode ajudar a otimizar a interface e até mesmo melhorar a experiência do usuário. Ao observar o tempo de desempenho, podemos tentar otimizar a latência do modelo usando bibliotecas como bits and bytes
.
Conclusão
Neste guia, aprendemos como combinar os recursos multimodais do Llama 3.2 e a interface intuitiva do Gradio. Do suporte ao cliente à educação e à criação de conteúdo, os aplicativos em potencial são vastos e variados.
Ao aderir às práticas recomendadas, como gerenciamento de latência, tratamento de erros e monitoramento de desempenho, podemos garantir que nossos aplicativos Llama 3.2 e Gradio sejam robustos, eficientes e fáceis de usar.
Para saber mais, recomendo estes tutoriais:
Obtenha uma das melhores certificações de IA

Sou Google Developers Expert em ML (Gen AI), Kaggle 3x Expert e Women Techmakers Ambassador com mais de 3 anos de experiência em tecnologia. Fui cofundador de uma startup de tecnologia de saúde em 2020 e estou fazendo mestrado em ciência da computação na Georgia Tech, com especialização em machine learning.