EXPLICACIÓN CON ANALOGÍAS: Cómo PHP habla con Gemma 3

 

📞 ANALOGÍA DEL TELÉFONO

Imagina que PHP es una persona y Gemma 3 es otra persona muy inteligente. Para comunicarse necesitan:

  1. 📱 El teléfono = http://localhost:11434
    (La dirección donde vive Gemma 3)

  2. 🎧 El auricular = file_get_contents() o curl
    (Lo que usa PHP para "llamar por teléfono")

  3. 🗣️ Lo que dices = prompt
    (Tu pregunta o mensaje)

  4. 👂 Lo que responde Gemma = response
    (La respuesta que te da)


✉️ ANALOGÍA DE LA CARTA

PHP envía una carta a Gemma 3:

php
// La "carta" que envías (en formato JSON)
$carta = [
    "to" => "Gemma 3",           // Destinatario
    "message" => "Hola",         // Tu mensaje
    "language" => "español"      // Cómo quieres respuesta
];

// El "cartero" que lleva la carta
$respuesta = enviar_carta("http://localhost:11434", $carta);

En código real sería:

php
// Así se envía la "carta" realmente
$respuesta = file_get_contents('http://localhost:11434/api/generate', false, stream_context_create([
    'http' => [
        'method' => 'POST',                    // Método: enviar (no pedir)
        'header' => 'Content-Type: application/json',  // Formato: carta JSON
        'content' => json_encode([             // Contenido de la carta
            "model" => "gemma3:4b",            // A quién va dirigido
            "prompt" => "Hola, ¿cómo estás?",  // El mensaje
            "stream" => false                  // Quiero respuesta completa
        ])
    ]
]));

👨‍🍳 ANALOGÍA DEL RESTAURANTE

PHP es el cliente y Gemma 3 es el chef:

php
// 1. Entras al restaurante (conectas)
$restaurante = 'http://localhost:11434';

// 2. Pides el menú (modelos disponibles)
// GET /api/tags = "¿Qué tienes en el menú?"

// 3. Haces tu pedido (envías prompt)
$pedido = [
    "plato" => "gemma3:4b",      // Qué chef quieres
    "instrucciones" => "Explícame qué es PHP",  // Cómo quieres tu plato
    "temperatura" => 0.7         // Qué tan creativo
];

// 4. Esperas la comida (procesamiento)
// El chef cocina...

// 5. Recibes tu plato (response)
echo $respuesta_del_chef;

🎯 LO MÍNIMO INDISPENSABLE (3 LÍNEAS CLAVE)

php
// 1️⃣ PREPARAS la pregunta
$pregunta = "Hola Gemma, ¿cómo estás?";

// 2️⃣ ENVÍAS a Ollama (esto es el "cartero")
$respuesta = file_get_contents('http://localhost:11434/api/generate', 
    false, 
    stream_context_create([
        'http' => [
            'method' => 'POST',
            'header' => 'Content-Type: application/json',
            'content' => json_encode([
                "model" => "gemma3:4b",
                "prompt" => $pregunta
            ])
        ]
    ])
);

// 3️⃣ LEES la respuesta
$datos = json_decode($respuesta, true);
echo $datos['response'];  // ¡La respuesta de Gemma!

🔄 ANALOGÍA DE LA CONVERSACIÓN

Una conversación normal vs cómo funciona con código:

Conversación humana:

text
TÚ: "Hola, ¿qué es el agua?"
AMIGO: "El agua es H2O, una molécula compuesta..."
TÚ: "¿Y para qué sirve?"
AMIGO: "Para hidratarnos, lavar, cocinar..."

Conversación PHP-Gemma:

php
// Mensaje 1
$respuesta1 = enviar_a_gemma("Hola, ¿qué es el agua?");

// Mensaje 2 (recordando lo anterior)
$respuesta2 = enviar_a_gemma([
    "Hola, ¿qué es el agua?",
    "El agua es H2O...",
    "¿Y para qué sirve?"
]);

Para que Gemma recuerde, debes enviar TODO el historial cada vez:

php
// Así NO funciona (Gemma olvida):
enviar("Hola");
enviar("¿Cómo estás?");  // Gemma no sabe que antes dijiste "Hola"

// Así SÍ funciona (envías todo):
enviar("Hola");
enviar("Hola\n¿Cómo estás?");  // Envías la conversación completa

📊 ANALOGÍA DE LOS PARÁMETROS (como "botones de control")

Imagina que Gemma 3 tiene botones para ajustar cómo responde:

php
$configuracion = [
    "model" => "gemma3:4b",     // ¿Qué modelo usar?
    
    // "BOTONES" DE CONTROL:
    "temperature" => 0.7,       // 🔥 Creatividad (0 = preciso, 1 = creativo)
    "num_predict" => 100,       // 📏 Largo máximo de respuesta
    "top_p" => 0.9,             // 🎯 Calidad de palabras
    "seed" => 42,               // 🎲 Número fijo para respuestas iguales
];

Ejemplo práctico:

php
// Gemma como profesor serio (temperature = 0.3)
"El agua se compone de dos átomos de hidrógeno y uno de oxígeno."

// Gemma como poeta (temperature = 0.9)
"El agua, cristalina danza de la vida, espejo del cielo en la tierra..."

🚨 LOS 3 ERRORES MÁS COMUNES (y sus soluciones)

Error 1: "No hay conexión"

php
// Error: Ollama no está corriendo
// Solución: Abrir terminal y escribir:
// ollama serve

Error 2: "Gemma no entiende español"

php
// Error: Responde en inglés
// Solución: Decírselo claramente:
$pregunta = "Responde en español: ¿qué es el agua?";

Error 3: "Gemma se corta a la mitad"

php
// Error: La respuesta termina abruptamente
// Solución: Aumentar el límite:
"num_predict" => 500  // Más tokens = respuesta más larga

🎮 ANALOGÍA DEL VIDEOJUEGO

Pensemos en esto como un juego de enviar y recibir:

php
// NIVEL 1: Una sola pregunta
$puntuacion = preguntar("Hola");

// NIVEL 2: Conversación (guardas historial)
$historial = [];
$historial[] = "Tú: Hola";
$historial[] = "Gemma: ¡Hola!";
$puntuacion = preguntar($historial . "Tú: ¿Cómo estás?");

// NIVEL 3: Con configuración avanzada
$puntuacion = preguntar("Cuenta una historia", [
    'dificultad' => 'temperature: 0.8',
    'longitud' => 'num_predict: 300'
]);

📝 RESUMEN CON DIBUJO MENTAL

text
TU CÓDIGO PHP
     |
     | (envía JSON)
     ↓
[ OLLAMA SERVER ]
     | (localhost:11434)
     | 
     | (procesa con Gemma 3)
     ↓
RESPUESTA EN JSON
     |
     | (lee con json_decode)
     ↓
MUESTRA EN PANTALLA

En palabras simples:

  1. PHP escribe una nota en formato JSON

  2. La envía a localhost:11434

  3. Gemma lee la nota, piensa y escribe otra

  4. PHP recibe la respuesta y la muestra


✨ LA ESENCIA (lo que realmente importa)

Solo necesitas recordar ESTO:

php
// 1. Tu pregunta
$tu_pregunta = "Hola";

// 2. La envías aquí
$url = "http://localhost:11434/api/generate";

// 3. En este formato
$formato = [
    "model" => "gemma3:4b",
    "prompt" => $tu_pregunta
];

// 4. Y lees la respuesta aquí
$respuesta_json = /* envío mágico */;
$respuesta = json_decode($respuesta_json, true);
echo $respuesta['response'];

La "fórmula mágica" simplificada:

text
PREGUNTA → [PHP] → (JSON) → [OLLAMA] → (GEMMA) → (JSON) → [PHP] → RESPUESTA

🎓 PARA LA CLASE: Ejercicio práctico

Instrucciones para estudiantes:

  1. Llama a Gemma y pregúntale su nombre

  2. Pídele que te explique algo simple

  3. Cambia la temperatura y ve cómo cambian las respuestas

  4. Haz una conversación de 3 mensajes

Código base para empezar:

php
<?php
// Paso 1: Tu pregunta
$mi_pregunta = "_______________";  // ← Escribe aquí tu pregunta

// Paso 2: Envío (no tocar)
$respuesta = file_get_contents('http://localhost:11434/api/generate', 
    false, 
    stream_context_create([
        'http' => [
            'method' => 'POST',
            'header' => 'Content-Type: application/json',
            'content' => json_encode([
                "model" => "gemma3:4b",
                "prompt" => $mi_pregunta
            ])
        ]
    ])
);

// Paso 3: Mostrar respuesta
$datos = json_decode($respuesta, true);
echo "Gemma dice: " . $datos['response'];
?>

¿Qué aprenderán?

  • ✅ Cómo PHP se comunica con IA

  • ✅ Qué es un API REST

  • ✅ Cómo funciona el formato JSON

  • ✅ Qué son los modelos de lenguaje


💡 CONCLUSIÓN: Piensa en esto como...

PHP es como un mensajero que:

  1. Recoge tu pregunta

  2. La lleva a Gemma 3 (en Ollama)

  3. Espera a que Gemma piense

  4. Trae la respuesta de vuelta

  5. Te la entrega

Y tú solo necesitas decirle al mensajero:

  • "¿A quién?" → "model": "gemma3:4b"

  • "¿Qué le digo?" → "prompt": "tu mensaje"

  • "¿Dónde lo dejo?" → http://localhost:11434/api/generate

¡Y listo! Tienes un chatbot inteligente en PHP. 🎉

Comentarios

Entradas más populares de este blog

1-Instalación y Primeros Pasos con Ollama

3- Creando tu Primer Entorno Virtual Python con Flask

2- Cómo Usar Ollama con Postman (APIs y Comunicación)