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:
📱 El teléfono =
http://localhost:11434
(La dirección donde vive Gemma 3)🎧 El auricular =
file_get_contents()ocurl
(Lo que usa PHP para "llamar por teléfono")🗣️ Lo que dices =
prompt
(Tu pregunta o mensaje)👂 Lo que responde Gemma =
response
(La respuesta que te da)
✉️ ANALOGÍA DE LA CARTA
PHP envía una carta a Gemma 3:
// 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:
// 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:
// 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)
// 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:
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:
// 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:
// 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:
$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:
// 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"
// Error: Ollama no está corriendo
// Solución: Abrir terminal y escribir:
// ollama serveError 2: "Gemma no entiende español"
// 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"
// 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:
// 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
TU CÓDIGO PHP
|
| (envía JSON)
↓
[ OLLAMA SERVER ]
| (localhost:11434)
|
| (procesa con Gemma 3)
↓
RESPUESTA EN JSON
|
| (lee con json_decode)
↓
MUESTRA EN PANTALLAEn palabras simples:
PHP escribe una nota en formato JSON
La envía a
localhost:11434Gemma lee la nota, piensa y escribe otra
PHP recibe la respuesta y la muestra
✨ LA ESENCIA (lo que realmente importa)
Solo necesitas recordar ESTO:
// 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:
PREGUNTA → [PHP] → (JSON) → [OLLAMA] → (GEMMA) → (JSON) → [PHP] → RESPUESTA🎓 PARA LA CLASE: Ejercicio práctico
Instrucciones para estudiantes:
Llama a Gemma y pregúntale su nombre
Pídele que te explique algo simple
Cambia la temperatura y ve cómo cambian las respuestas
Haz una conversación de 3 mensajes
Código base para empezar:
<?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:
Recoge tu pregunta
La lleva a Gemma 3 (en Ollama)
Espera a que Gemma piense
Trae la respuesta de vuelta
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
Publicar un comentario