clase:iabd:pia:proyectos:agentes:paso2
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| clase:iabd:pia:proyectos:agentes:paso2 [2026/02/18 17:30] – Lorenzo | clase:iabd:pia:proyectos:agentes:paso2 [2026/02/19 17:03] (actual) – [Anexo Técnico: Emulación del Estándar OpenAI Chat Completions] Lorenzo | ||
|---|---|---|---|
| Línea 3: | Línea 3: | ||
| 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. | 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 ===== | + | ===== 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 crudo de la estación meteorológica de Valencia. | + | El primer objetivo es crear un punto de entrada que, al ser consultado, devuelva el JSON técnico |
| - | **Configuración: | + | **Configuración |
| - | * **Nodo Webhook: | + | * **Nodo Webhook: |
| - | * **Nodo HTTP Request (Autenticación):** Realizar una petición a la API de AEMET OpenData | + | * Path: '' |
| - | * **Nodo HTTP Request (Descarga):** AEMET devuelve | + | * Response Mode: '' |
| - | * **Respuesta:** El flujo debe devolver | + | * **Nodo HTTP Request (Paso A):** * URL: '' |
| + | * Header: Añadir llave '' | ||
| + | * **Nodo HTTP Request (Paso B):** * AEMET no envía los datos directamente, | ||
| + | * Debes crear un segundo nodo HTTP Request cuya URL sea la expresión: '' | ||
| + | * **Resultado esperado:** Al llamar a la URL del Webhook, el navegador | ||
| + | ===== 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. | ||
| - | ===== Paso 2: Integración de IA con Ollama | + | **Instrucciones:** |
| + | 1. Instalar y levantar **Ollama** | ||
| + | 2. En n8n, añadir el nodo **Ollama** (o un AI Agent con el modelo Ollama). | ||
| + | 3. Configurar el **Prompt**: | ||
| + | > " | ||
| + | 4. Ahora, el flujo debe devolver una cadena de texto amigable. | ||
| - | Una vez tenemos los datos técnicos, añadimos una capa de inteligencia para que la respuesta no sea un JSON frío, sino un texto natural en castellano. | + | ===== Paso 3: Emulación |
| - | **Pasos: | + | Este es el paso crítico. Para que **Open WebUI** reconozca nuestro |
| - | * Instalar | + | |
| - | * Conectar el resultado de AEMET al nodo de Ollama. | + | |
| - | * **Prompt Engineering: | + | |
| - | * El flujo ahora devuelve una cadena | + | |
| - | ===== Paso 3: Emulación de la API de OpenAI (Proxy) ===== | + | **Configuración Técnica para el alumno:** |
| - | + | * **Cambiar | |
| - | Para que herramientas externas puedan usar nuestro flujo como si fuera un modelo oficial, debemos " | + | * **Nodo Respond to Webhook: |
| - | + | ||
| - | **Cambios en el flujo:** | + | |
| - | * **Webhook: | + | |
| - | * **Nodo Respond to Webhook: | + | |
| <code json> | <code json> | ||
| { | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| " | " | ||
| { | { | ||
| + | " | ||
| " | " | ||
| " | " | ||
| - | " | + | " |
| - | } | + | }, |
| + | " | ||
| } | } | ||
| - | ] | + | ], |
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| } | } | ||
| </ | </ | ||
| + | **¿Por qué hacemos esto?** | ||
| + | * **id/ | ||
| + | * **choices: | ||
| + | * **content: | ||
| + | |||
| + | |||
| ===== Paso 4: Consumo desde Open WebUI ===== | ===== Paso 4: Consumo desde Open WebUI ===== | ||
| Línea 54: | Línea 74: | ||
| * Añadir la URL de nuestro webhook de n8n (omitiendo el final ''/ | * Añadir la URL de nuestro webhook de n8n (omitiendo el final ''/ | ||
| * Seleccionar el nuevo modelo en el chat y comprobar que, al preguntar cualquier cosa, la IA responde con el clima real de Valencia obtenido de la AEMET. | * Seleccionar el nuevo modelo en el chat y comprobar que, al preguntar cualquier cosa, la IA responde con el clima real de Valencia obtenido de la AEMET. | ||
| + | | ||
| + | ===== Anexo Técnico: Emulación del Estándar OpenAI Chat Completions ===== | ||
| + | |||
| + | Para que una interfaz como **Open WebUI** o cualquier cliente compatible pueda consumir nuestro flujo de n8n, el Webhook debe comportarse exactamente como un servidor de OpenAI. Esto implica cumplir con una ruta específica y una estructura de respuesta estricta. | ||
| + | |||
| + | ==== 1. Configuración del Endpoint (Ruta) ==== | ||
| + | |||
| + | Open WebUI busca por defecto el recurso en la ruta estándar de la API de Chat. Por lo tanto, el nodo **Webhook** de n8n debe configurarse con: | ||
| + | |||
| + | * **HTTP Method:** '' | ||
| + | * **HTTP Path:** '' | ||
| + | * **Response Mode:** '' | ||
| + | |||
| + | ==== 2. La Estructura del JSON de Respuesta ==== | ||
| + | |||
| + | El cliente de chat espera un objeto JSON complejo. Si n8n responde solo con texto plano, el chat dará un error de " | ||
| + | |||
| + | <code json> | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | } | ||
| + | ], | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== 3. Desglose de Campos Clave ==== | ||
| + | |||
| + | | Campo | Función | | ||
| + | | **id** | Identificador único de la respuesta. Usamos un prefijo estático seguido de un ID aleatorio si se desea. | | ||
| + | | **created** | Marca de tiempo en formato Unix (segundos). En n8n usamos la expresión '' | ||
| + | | **model** | Nombre que aparecerá en la interfaz del chat como " | ||
| + | | **choices[0].message.content** | Aquí es donde insertamos la respuesta generada por el nodo de **Ollama**. Es el texto que el usuario leerá en su burbuja de chat. | | ||
| + | | **finish_reason** | Indica que la IA ha terminado de hablar. Debe ser ''" | ||
| + | |||
| + | ==== 4. Conexión en el Cliente (Open WebUI) ==== | ||
| + | |||
| + | En la configuración de conexiones de Open WebUI: | ||
| + | * La **Base URL** debe ser la URL de n8n hasta antes de la versión: Ej. '' | ||
| + | * Automáticamente, | ||
clase/iabd/pia/proyectos/agentes/paso2.1771432243.txt.gz · Última modificación: por Lorenzo
