最後活躍 3 days ago

Script del Episodio 827 - atareao con Linux

primera-consulta.sh 原始檔案
1#!/bin/bash
2# =============================================================================
3# primera-consulta.sh — Tu primera consulta a un modelo local
4# =============================================================================
5#
6# Uso:
7# chmod +x primera-consulta.sh
8# ./primera-consulta.sh
9#
10# Descripción:
11# Script paso a paso que guía al oyente en su primera interacción con un
12# modelo de lenguaje local. Cubre los 4 pasos del Bloque 6 del episodio:
13#
14# Paso 1 — Verificar que Ollama está instalado y corriendo
15# Paso 2 — Descargar un modelo pequeño (qwen2.5:3b)
16# Paso 3 — Hacer una consulta desde terminal con ollama run
17# Paso 4 — Abrir Open WebUI en http://localhost:3000
18#
19# Es el script estrella del episodio. El momento en que el oyente descubre
20# que su máquina puede responder con inteligencia genuina, sin internet.
21#
22# Requisitos:
23# - Ollama instalado (ver 02-instalacion/setup-ollama.sh)
24# - Conexión a internet (solo para el Paso 2, descarga del modelo)
25# - ~3 GB de espacio libre para el modelo
26#
27# =============================================================================
28
29set -euo pipefail
30
31# Colores para el output
32VERDE='\033[0;32m'
33AMARILLO='\033[1;33m'
34AZUL='\033[0;34m'
35ROJO='\033[0;31m'
36RESET='\033[0m'
37
38echo -e "${AZUL}╔══════════════════════════════════════════════════════╗${RESET}"
39echo -e "${AZUL}║ 🚀 Tu primera consulta a un modelo local ║${RESET}"
40echo -e "${AZUL}║ Episodio 827 — Recursos IA: el botiquín del ║${RESET}"
41echo -e "${AZUL}║ explorador ║${RESET}"
42echo -e "${AZUL}╚══════════════════════════════════════════════════════╝${RESET}"
43echo ""
44
45# =============================================================================
46# PASO 1 — Verificar que Ollama está instalado y corriendo
47# =============================================================================
48echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
49echo -e "${AZUL} Paso 1 de 4: Verificar Ollama${RESET}"
50echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
51echo ""
52
53# 1a. Comprobar que el binario de Ollama existe
54echo -n " Comprobando instalación de Ollama... "
55if command -v ollama &>/dev/null; then
56 echo -e "${VERDE}${RESET}"
57 echo " Versión: $(ollama --version 2>/dev/null || echo 'desconocida')"
58else
59 echo -e "${ROJO}${RESET}"
60 echo ""
61 echo " ERROR: Ollama no está instalado."
62 echo ""
63 echo " Para instalar Ollama, ejecuta:"
64 echo " curl -fsSL https://ollama.com/install.sh | sh"
65 echo ""
66 echo " O usa el script guiado:"
67 echo " ../02-instalacion/setup-ollama.sh"
68 echo ""
69 exit 1
70fi
71echo ""
72
73# 1b. Comprobar que el servicio está corriendo (vía API)
74echo -n " Comprobando que el servicio está activo... "
75if curl -s http://localhost:11434/api/tags &>/dev/null; then
76 echo -e "${VERDE}${RESET}"
77 echo " API REST respondiendo en http://localhost:11434"
78else
79 echo -e "${AMARILLO}${RESET}"
80 echo ""
81 echo " El binario está instalado pero el servicio no responde."
82 echo ""
83 echo " Arranca el servicio con:"
84 echo " sudo systemctl start ollama"
85 echo ""
86 echo " O manualmente:"
87 echo " ollama serve &"
88 echo ""
89 echo " Luego vuelve a ejecutar este script."
90 echo ""
91 exit 1
92fi
93echo ""
94
95# 1c. Mostrar modelos ya descargados (si los hay)
96MODELOS_EXISTENTES=$(ollama list 2>/dev/null | tail -n +2 | wc -l)
97if [ "$MODELOS_EXISTENTES" -gt 0 ]; then
98 echo " Modelos disponibles actualmente:"
99 ollama list 2>/dev/null | tail -n +2 | while read -r line; do
100 echo "$line"
101 done
102else
103 echo " No hay modelos descargados todavía."
104fi
105echo ""
106
107# =============================================================================
108# PASO 2 — Descargar un modelo pequeño
109# =============================================================================
110echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
111echo -e "${AZUL} Paso 2 de 4: Descargar un modelo pequeño${RESET}"
112echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
113echo ""
114
115# Usamos qwen2.5:3b como modelo recomendado para empezar
116# Es pequeño (~2 GB), rápido, y sorprendentemente capaz
117MODELO="qwen2.5:3b"
118
119echo " Modelo recomendado: ${AMARILLO}${MODELO}${RESET}"
120echo " Tamaño aproximado: ~2 GB"
121echo " Ideal para: hardware con 8-16 GB de RAM"
122echo ""
123
124# Comprobar si ya está descargado
125if ollama list 2>/dev/null | grep -q "^${MODELO}\s"; then
126 echo -e " ${VERDE}${RESET} El modelo ya está descargado."
127else
128 echo " Descargando modelo... (esto puede tardar según tu conexión)"
129 echo " ☕ Momento café."
130 echo ""
131
132 # El comando estrella: ollama pull
133 ollama pull "$MODELO"
134
135 echo ""
136 echo -e " ${VERDE}${RESET} Modelo descargado correctamente."
137fi
138echo ""
139
140# =============================================================================
141# PASO 3 — Hacer una consulta desde terminal
142# =============================================================================
143echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
144echo -e "${AZUL} Paso 3 de 4: Preguntar desde la terminal${RESET}"
145echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
146echo ""
147
148# Prompt diseñado para ser didáctico y mostrar la capacidad del modelo
149PROMPT="Explícame qué es un modelo de lenguaje cuantizado como si tuviera 12 años"
150
151echo -e " ${AMARILLO}Pregunta:${RESET}"
152echo " \"$PROMPT\""
153echo ""
154echo -e " ${AZUL}Respuesta:${RESET}"
155echo ""
156
157# El momento mágico del episodio: ollama run
158ollama run "$MODELO" "$PROMPT"
159
160echo ""
161echo -e " ${VERDE}${RESET} Consulta completada."
162echo ""
163
164# =============================================================================
165# PASO 4 — Mensaje para abrir Open WebUI
166# =============================================================================
167echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
168echo -e "${AZUL} Paso 4 de 4: Interfaz web (Open WebUI)${RESET}"
169echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
170echo ""
171
172echo " Tu modelo local ya funciona desde terminal."
173echo ""
174echo " Para usar la interfaz gráfica:"
175echo ""
176
177# Comprobar si Open WebUI está corriendo
178if curl -s http://localhost:3000 &>/dev/null; then
179 echo -e " ${VERDE}${RESET} Open WebUI detectado en http://localhost:3000"
180 echo ""
181 echo " Abre tu navegador y visita:"
182 echo -e " ${AZUL}→ http://localhost:3000${RESET}"
183 echo ""
184 echo " Crea tu cuenta (el primer usuario es administrador)."
185 echo " Selecciona el modelo '${MODELO}' y empieza a chatear."
186else
187 echo " Open WebUI no está corriendo aún."
188 echo ""
189 echo " Para levantarlo, ejecuta:"
190 echo " ../02-instalacion/setup-openwebui.sh"
191 echo ""
192 echo " O directamente con Docker:"
193 echo " docker run -d -p 3000:8080 \\"
194 echo " -v open-webui:/app/backend/data \\"
195 echo " --name open-webui --restart always \\"
196 echo " ghcr.io/open-webui/open-webui:main"
197 echo ""
198 echo " Luego abre:"
199 echo -e " ${AZUL}→ http://localhost:3000${RESET}"
200fi
201
202echo ""
203echo " 💡 Prueba a subir un PDF y pedir un resumen."
204echo " 💡 Pídele que te explique un concepto."
205echo " 💡 Juega. Experimenta. Rompe cosas."
206echo ""
207
208# =============================================================================
209# CIERRE
210# =============================================================================
211echo -e "${VERDE}╔══════════════════════════════════════════════════════╗${RESET}"
212echo -e "${VERDE}║ ✅ Laboratorio listo ║${RESET}"
213echo -e "${VERDE}║ ║${RESET}"
214echo -e "${VERDE}║ Tu máquina acaba de responder con inteligencia ║${RESET}"
215echo -e "${VERDE}║ genuina, sin pasar por ningún servidor externo, ║${RESET}"
216echo -e "${VERDE}║ sin enviar tus datos a nadie. ║${RESET}"
217echo -e "${VERDE}║ ║${RESET}"
218echo -e "${VERDE}║ Esa sensación no se olvida. 🎉 ║${RESET}"
219echo -e "${VERDE}╚══════════════════════════════════════════════════════╝${RESET}"
220echo ""
221echo " Próximo episodio (829): Skills imprescindibles para tu agente IA"
222echo " Vamos a enseñar al modelo a usar herramientas."
223echo ""
224echo " Nos oímos el jueves. Sed felices. Y seguid trasteando."
225echo ""