Aqui está o código completo em uma única célula do Colab para servir o modelo Gemma 2B usando Ollama + Cloudflare Tunnel, tudo pronto pra rodar:

# 🧠 Servindo Gemma 2B via Ollama + Cloudflare em CPU (Colab Free Tier)
# Alfredo Development – 2024

# 1. Instala Ollama
!curl -fsSL https://ollama.com/install.sh | sh

# 2. Instala o cliente do Cloudflare Tunnel
!wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
!dpkg -i cloudflared-linux-amd64.deb

# 3. Prepara o ambiente para o Ollama servir via rede
import os, subprocess, threading, time, socket

os.environ.update({'OLLAMA_HOST': '0.0.0.0'})

def iframe_thread(port):
    while True:
        time.sleep(0.5)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex(('127.0.0.1', port))
        if result == 0:
            break
        sock.close()
    p = subprocess.Popen(["cloudflared", "tunnel", "--url", f"http://127.0.0.1:{port}"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    for line in p.stderr:
        l = line.decode()
        if "trycloudflare.com " in l:
            print("\n\n🌐 Seu endpoint público está aqui:\n\n", l[l.find("http"):], "\n\n")

threading.Thread(target=iframe_thread, daemon=True, args=(11434,)).start()

# 4. Inicia o servidor Ollama
!ollama serve

Quer adicionar funcionalidades de Inteligência Artificial ao seu site WordPress sem gastar com APIs caras?

Neste tutorial, vamos mostrar como você pode rodar o modelo de linguagem Gemma 2B do Google, totalmente de graça, usando o Google Colab (apenas CPU!), e disponibilizá-lo como uma API REST pública através do Cloudflare Tunnel.

Com isso, você poderá fazer chamadas para a IA diretamente do seu WordPress para gerar textos, responder perguntas, criar resumos e muito mais!

O que vamos cobrir:

Pré-requisitos:

Etapa 1: Criando o Servidor de IA no Google Colab

O primeiro passo é configurar o ambiente no Google Colab que irá rodar o modelo de IA.

Acesse o Google Colab e crie um novo notebook.

Na primeira célula do notebook, cole o código Python abaixo. Este script faz tudo: instala o Ollama (que gerencia o modelo de IA), instala o Cloudflared (para criar o túnel seguro) e inicia o servidor, expondo-o na internet.

# Instalar Ollama
!curl -fsSL https://ollama.com/install.sh | sh

# Instalar Cloudflared (Cliente do Cloudflare Tunnel)
!wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
!dpkg -i cloudflared-linux-amd64.deb

# Preparar e iniciar o túnel e o servidor Ollama
import os, subprocess, threading, time, socket

# Garante que o Ollama escute em todas as interfaces de rede
os.environ.update({'OLLAMA_HOST': '0.0.0.0'})

# Função para criar o túnel assim que o Ollama estiver pronto
def iframe_thread(port):
    # Espera a porta 11434 (padrão do Ollama) ficar ativa
    while True:
        time.sleep(0.5)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex(('127.0.0.1', port))
        if result == 0:
            break
        sock.close()
    print(f"Porta {port} está ativa. Iniciando Cloudflared Tunnel...")
    # Inicia o Cloudflared Tunnel e captura a URL pública
    p = subprocess.Popen(["cloudflared", "tunnel", "--url", f"http://127.0.0.1:{port}"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    for line in p.stderr:
        l = line.decode()
        # Procura pela linha que contém a URL pública gerada
        if "trycloudflare.com " in l:
            print("\n\n✅✅✅ Seu Endpoint Público da IA está pronto! ✅✅✅\n")
            # Extrai e imprime a URL
            print(f"URL Pública: {l[l.find('https'):].strip()}")
            print("\nCopie esta URL! Você vai precisar dela.\n\n")

# Inicia a thread do Cloudflared em background
threading.Thread(target=iframe_thread, daemon=True, args=(11434,)).start()

# Inicia o servidor Ollama (este comando vai rodar indefinidamente)
print("Iniciando servidor Ollama... Aguarde a URL pública aparecer acima.")
!ollama serve

Execute esta célula clicando no ícone de “Play” ou usando Shift + Enter.

Aguarde a execução. Você verá logs de instalação e, eventualmente, uma mensagem como:

✅✅✅ Seu Endpoint Público da IA está pronto! ✅✅✅

URL Pública: https://alguma-coisa-aleatoria.trycloudflare.com

Copie esta URL! Você vai precisar dela.

Importante: Copie essa URL https://....trycloudflare.com. Este é o endereço da sua API de IA pessoal! Use a URL que apareceu no SEU Colab. Para o restante deste tutorial, usaremos a URL de exemplo https://band-symptoms-tin-dress.trycloudflare.com/ (substitua pela sua).

Etapa 2: Carregando o Modelo Gemma 2B e Testando a API

Com o servidor rodando e a URL pública em mãos, vamos carregar o modelo Gemma 2B e fazer um teste rápido usando curl. Abra um terminal no seu computador (ou use outra célula no Colab prefixando os comandos com !).

Baixar o Modelo Gemma 2B: (Só precisa fazer isso uma vez por sessão do Colab)

curl https://band-symptoms-tin-dress.trycloudflare.com/api/pull -d '{ "name": "gemma:2b" }'

Aguarde o download terminar.

(Opcional) Manter o Modelo Carregado: Para evitar que o Ollama descarregue o modelo da memória por inatividade (o que causa lentidão na primeira resposta depois de um tempo), você pode fazer esta chamada:

curl https://band-symptoms-tin-dress.trycloudflare.com/api/generate -d '{"model": "gemma:2b", "keep_alive": -1}'

Fazer uma Pergunta (Teste):

curl https://band-symptoms-tin-dress.trycloudflare.com/api/generate \
  -d '{
        "model": "gemma:2b",
        "stream": false,
        "prompt": "Explique o que é WordPress em uma frase."
      }'

Você deve receber uma resposta em formato JSON contendo a resposta da IA no campo response. Se funcionar, sua API está pronta!

Etapa 3: Integrando a API de IA com seu WordPress

Agora vem a parte divertida: usar essa API no seu site WordPress. Você pode fazer isso de várias formas. Aqui estão duas opções comuns:

Opção 1: Usando JavaScript (Ideal para interações no Front-End)

Você pode adicionar um bloco HTML em uma página ou post (ou editar seu tema) para incluir um campo de texto e um botão que chamam sua API via JavaScript.

Edite a página/post onde você quer adicionar a funcionalidade de IA.

Adicione um bloco “HTML Personalizado”.

Cole o código abaixo, lembrando de substituir a URL pela sua:

<pre class="wp-block-code language-html"><code><h3>Converse com nossa IA (Gemma 2B)</h3>
<textarea id="ia-prompt" rows="4" style="width:100%;" placeholder="Digite sua pergunta aqui..."></textarea>
<button onclick="chamarGemma()">Enviar Pergunta</button>
<div id="ia-resposta" style="margin-top: 15px; padding: 10px; border: 1px solid #ccc; min-height: 50px; background-color: #f9f9f9;">
  Aguardando sua pergunta...
</div>

<script>
async function chamarGemma() {
  const promptUsuario = document.getElementById('ia-prompt').value;
  const divResposta = document.getElementById('ia-resposta');
  // !!! IMPORTANTE: SUBSTITUA PELA SUA URL DO CLOUDFLARE !!!
  const apiUrl = 'https://band-symptoms-tin-dress.trycloudflare.com/api/generate'; 

  divResposta.innerText = 'Pensando... 🧠';

  try {
    const response = await fetch(apiUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        model: 'gemma:2b',
        stream: false, // Mude para true se quiser resposta em tempo real (mais complexo de tratar)
        prompt: promptUsuario,
        system: "Você é um assistente prestativo que responde em português do Brasil." // Instrução opcional
      })
    });

    if (!response.ok) {
      throw new Error(`Erro HTTP: ${response.status}`);
    }

    const data = await response.json();
    divResposta.innerText = data.response || 'Não recebi uma resposta válida.';

  } catch (error) {
    console.error('Erro ao chamar a API Gemma:', error);
    divResposta.innerText = `Ocorreu um erro: ${error.message}. Verifique se o Colab ainda está rodando.`;
  }
}
</script></code></pre>

Salve a página. Agora você terá um campo para digitar uma pergunta e receber a resposta da sua IA hospedada no Colab!

Opção 2: Usando PHP (Ideal para gerar conteúdo no Back-End ou via Shortcodes)

Se você prefere gerar conteúdo do lado do servidor ou criar um shortcode para usar no seu conteúdo, pode usar PHP.

Adicione o seguinte código PHP ao arquivo functions.php do seu tema filho ou use um plugin como Code Snippets ou WPCode. Substitua a URL pela sua.

 'gemma:2b',
        'prompt' => $prompt,
        'stream' => false,
        'system' => 'Você é um assistente prestativo que responde em português do Brasil.' // Instrução opcional
    ]);

    $args = [
        'body'        => $body,
        'headers'     => ['Content-Type' => 'application/json'],
        'method'      => 'POST',
        'data_format' => 'body',
        'timeout'     => 120, // Aumente se as respostas demorarem muito (CPU é lento!)
    ];

    // Usa a função nativa do WordPress para fazer a requisição HTTP
    $response = wp_remote_post($api_url, $args);

    if (is_wp_error($response)) {
        $response_text = 'Erro na requisição: ' . $response->get_error_message();
    } else {
        $body = wp_remote_retrieve_body($response);
        $data = json_decode($body, true);
        if (isset($data['response']) && !empty($data['response'])) {
            $response_text = $data['response'];
        } elseif (isset($data['error'])) {
             $response_text = 'Erro da API Ollama: ' . $data['error'];
        } else {
            // Captura o status code se disponível e não for 200 OK
            $status_code = wp_remote_retrieve_response_code($response);
             if ($status_code !== 200) {
                 $response_text = 'Erro: Resposta inesperada da API (Código: ' . $status_code . '). Verifique se o Colab e o túnel estão ativos.';
             } else {
                 $response_text = 'Erro: Resposta inesperada da API.';
             }
        }
    }
    return $response_text;
}

// Criar um Shortcode [gemma_assistente prompt="Sua pergunta aqui"]
function gemma_shortcode_func($atts) {
    // Define os atributos do shortcode e seus valores padrão
    $a = shortcode_atts([
        'prompt' => 'Olá! Quem é você?', // Prompt padrão se nenhum for fornecido
    ], $atts);

    // Validação básica do prompt
    if (empty(trim($a['prompt']))) {
        return '
Erro: O prompt não pode estar vazio.
'; } // Chama a função que faz a requisição à API, passando o prompt do shortcode $resposta = chamar_api_gemma(sanitize_text_field($a['prompt'])); // Sanitiza o prompt // Retorna a resposta para ser exibida no post/página // Escapa a saída para evitar problemas de HTML/JS maliciosos, caso a IA gere algo inseguro return '
' . esc_html($resposta) . '
'; } // Registra o shortcode para que o WordPress o reconheça add_shortcode('gemma_assistente', 'gemma_shortcode_func'); ?>

Salve as alterações.

Agora você pode usar o shortcode [gemma_assistente prompt="Escreva um parágrafo sobre a importância de ter um blog."] em qualquer post ou página para que a IA gere o texto naquele local.

Limitações Importantes

Sessão do Colab: As sessões gratuitas do Google Colab não são permanentes. Elas expiram após algumas horas de uso ou cerca de 90 minutos de inatividade. Quando isso acontecer, você precisará reexecutar a célula no Colab, o que gerará uma nova URL pública do Cloudflare. Você terá que atualizar essa URL no seu código WordPress (JavaScript ou PHP).

Desempenho: Rodar um modelo de linguagem em CPU é lento. Espere respostas que podem levar de 30 segundos a vários minutos, dependendo da complexidade da pergunta e da carga no servidor do Colab.

Não é para Produção Crítica: Devido às limitações acima, esta solução é excelente para experimentação, projetos pessoais ou demonstrações, mas não é recomendada para aplicações comerciais de alto tráfego ou que exijam disponibilidade constante e respostas rápidas. Para isso, considere usar o Colab Pro (com GPU), alugar um servidor com GPU, ou usar APIs pagas de IA (como OpenAI, Anthropic, Google AI Studio, etc.).

Conclusão

Parabéns! Você configurou com sucesso uma API de IA gratuita usando Gemma 2B no Google Colab e a integrou ao seu site WordPress. Embora existam limitações, esta é uma maneira fantástica de explorar o poder dos modelos de linguagem e começar a construir funcionalidades inteligentes no seu site sem custos iniciais.

Experimente diferentes prompts, ajuste o código e veja o que você pode criar!

Deixe um comentário