Tabla de Contenidos
¡Esta es una revisión vieja del documento!
2. Proxy Meteorológico con n8n, AEMET y Ollama
Este ejercicio consiste en crear un flujo de trabajo en n8n que actúe como un puente (proxy) entre un cliente de IA (Open WebUI) y los datos reales de la AEMET, procesados por un modelo local de Ollama.
Paso 1: Webhook y Extracción de Datos de AEMET (JSON Crudo)
El primer objetivo es crear un punto de entrada que, al ser consultado, devuelva el JSON técnico de la estación meteorológica de Valencia.
Configuración detallada:
- Nodo Webhook: * HTTP Method:
GET- Path:
clima-valencia - Response Mode:
When Last Node Finishes
- Nodo HTTP Request (Paso A): * URL:
https://opendata.aemet.es/opendata/api/observacion/convencional/datos/estacion/8416Y(Estación Valencia Aeropuerto).- Header: Añadir llave
api_keycon tu token de AEMET OpenData.
- Nodo HTTP Request (Paso B): * AEMET no envía los datos directamente, envía un JSON con una URL en el campo
datos.- Debes crear un segundo nodo HTTP Request cuya URL sea la expresión:
json.datos.
- Resultado esperado: Al llamar a la URL del Webhook, el navegador debe mostrar el array de datos meteorológicos (temperatura, humedad, etc.).
Paso 2: Integración de IA con Ollama (Procesamiento de Lenguaje)
Añadiremos una capa de inteligencia para que la respuesta no sea un JSON técnico, sino un informe humano.
Instrucciones:
1. Instalar y levantar **Ollama** con el modelo ''llama3'' o ''mistral''.
2. En n8n, añadir el nodo **Ollama** (o un AI Agent con el modelo Ollama).
3. Configurar el **Prompt**:
> "Actúa como un meteorólogo. Basándote en estos datos: Temperatura {{ $json[0].ta }}°C y Humedad {{ $json[0].hr }}%, genera un breve informe del tiempo en Valencia en español."
4. Ahora, el flujo debe devolver una cadena de texto amigable.
Paso 3: Emulación de la API de OpenAI (Modo Proxy)
Este es el paso crítico. Para que Open WebUI reconozca nuestro n8n como si fuera "ChatGPT", debemos disfrazar la respuesta. Las aplicaciones de IA no esperan un texto suelto, esperan un objeto JSON específico.
Configuración Técnica para el alumno:
- Cambiar Webhook: El método debe ser obligatoriamente
POSTy el pathv1/chat/completions. - Nodo Respond to Webhook: Debes configurar el cuerpo de la respuesta en formato JSON con la siguiente estructura exacta:
{
"id": "chatcmpl-n8n-aemet",
"object": "chat.completion",
"created": {{ Math.floor(Date.now() / 1000) }},
"model": "aemet-valencia-bot",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{{ $node["Ollama"].json.output }}"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 0,
"completion_tokens": 0,
"total_tokens": 0
}
}
¿Por qué hacemos esto?
- id/object/created: Son campos de control que el estándar de OpenAI exige.
- choices: Es una lista porque la API original permite devolver varias respuestas, aunque aquí solo enviamos la nuestra en la posición
[0]. - content: Es donde inyectamos el texto que generó Ollama en el paso anterior.
Paso 4: Conexión desde Open WebUI
Para terminar, integraremos el flujo en la interfaz de chat:
1. Entrar en **Open WebUI** > **Settings** > **Connections**. 2. En la sección **OpenAI API**, añadir una nueva conexión. 3. **URL:** Poner la URL base de tu n8n (ej: ''http://localhost:5678/webhook/''). El sistema añad
