<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog | Pablo Sanxiao</title>
    <link>https://psanxiao.com/blog.html</link>
    <description>Artículos y reflexiones sobre tecnología, software libre, sistemas de información geográfica (GIS), deporte y proyectos personales.</description>
    <language>es-es</language>
    <atom:link href="https://psanxiao.com/feed.xml" rel="self" type="application/rss+xml" />
    
        <item>
            <title>Conecta QGIS con OpenCode: tu mapa habla con la IA</title>
            <link>https://psanxiao.com/posts/2026-07-16-qgis-mcp-opencode.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-07-16-qgis-mcp-opencode.html</guid>
            <pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<h1 id="qgis-mcp-opencode-como-conectar-qgis-con-un-agente-de-ia">QGIS + MCP + OpenCode: cómo conectar QGIS con un agente de IA</h1>
<p>Los Sistemas de Información Geográfica (SIG) son herramientas increíblemente potentes, pero también complejas. QGIS es probablemente el SIG de escritorio de software libre más completo y usado del mundo, pero su interfaz tiene una curva de aprendizaje pronunciada. Y aunque sepas usarlo bien, muchas tareas son repetitivas (cargar capas, aplicar estilos, configurar layouts).</p>
<p>¿Y si pudieras decirle a un agente de IA lo que quieres hacer y que lo ejecute directamente sobre QGIS? Sin arrastrar capas, sin buscar el botón correcto, sin recordar dónde está cada opción.</p>
<p>Eso es exactamente lo que permite el <strong>MCP de QGIS</strong>.</p>
<p>Pero como todo lo que merece la pena, la configuración no siempre sale a la primera. En este artículo te explico qué es MCP, cómo se conecta con QGIS con un agente de IA (OpenCode), la configuración paso a paso, problemas reales que me encontré al hacerlo funcionar, y ejemplos prácticos para sacarle partido.</p>
<h2 id="que-es-mcp">¿Qué es MCP?</h2>
<p><strong>MCP (Model Context Protocol)</strong> es un protocolo abierto que permite a modelos de lenguaje (LLMs) interactuar con herramientas y sistemas externos de forma estructurada y segura.</p>
<p>Piénsalo como un <strong>USB para la IA</strong>: igual que el USB estandarizó la conexión de periféricos al ordenador, MCP estandariza la conexión de la IA con el mundo exterior: bases de datos, APIs, sistemas de archivos y, en este caso, QGIS.</p>
<p>Sin MCP, si le pides a una IA que "cargue un shapefile y lo pinte con un gradiente", lo máximo que puede hacer es generarte el código Python y decirte "copia esto en la consola de QGIS". Con MCP, la IA ejecuta las acciones directamente sobre QGIS.</p>
<p>El flujo es sencillo:</p>
<ol>
<li>Haces una petición en lenguaje natural: <em>"Carga la capa de municipios y coloréalos por población"</em></li>
<li>OpenCode envía la petición al modelo</li>
<li>El modelo decide qué herramientas del MCP de QGIS necesita usar</li>
<li>Las ejecuta directamente sobre tu QGIS abierto</li>
<li>El resultado aparece al instante en tu mapa</li>
</ol>
<h2 id="como-funciona-el-mcp-de-qgis">Cómo funciona el MCP de QGIS</h2>
<h3 id="arquitectura">Arquitectura</h3>
<p>Antes de pasar a la configuración, conviene entender cómo se conectan las piezas:</p>
<div class="codehilite"><pre><span></span><code>opencode ←→ MCP Server (stdio/HTTP) ←→ TCP :9876 ←→ Plugin QGIS ←→ PyQGIS
</code></pre></div>

<p>El plugin <strong>QGIS MCP</strong> (<a href="https://github.com/nkarasiak/qgis-mcp">github.com/nkarasiak/qgis-mcp</a>) de nkarasiak expone más de 100 herramientas de QGIS a través del protocolo MCP. Pero ojo: el plugin no habla MCP directamente. Tiene un socket TCP interno en el puerto 9876 que solo entiende comandos JSON con un formato propio. Para que opencode (o cualquier cliente MCP) pueda hablar con él, hace falta un <strong>MCP Server intermedio</strong> que traduzca el protocolo MCP a los comandos que el plugin entiende.</p>
<p>Ese servidor intermedio se ejecuta con <code>uvx</code> y es el que realmente configuraremos en opencode.</p>
<h3 id="herramientas-disponibles">Herramientas disponibles</h3>
<p>El MCP de QGIS expone las funcionalidades del SIG como <strong>herramientas</strong> que el agente IA puede invocar. Cada herramienta hace una operación específica:</p>
<table>
<thead>
<tr>
<th>Categoría</th>
<th>Herramientas</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Capas</strong></td>
<td><code>add_vector_layer</code>, <code>add_raster_layer</code>, <code>add_web_layer</code></td>
</tr>
<tr>
<td><strong>Estilos</strong></td>
<td><code>set_layer_style</code>, <code>apply_style_qml</code>, <code>save_style_qml</code></td>
</tr>
<tr>
<td><strong>Datos</strong></td>
<td><code>get_layer_features</code>, <code>field_calculator</code>, <code>execute_sql</code></td>
</tr>
<tr>
<td><strong>Geoprocesos</strong></td>
<td><code>execute_processing</code>, <code>zonal_statistics</code>, <code>spatial_join</code></td>
</tr>
<tr>
<td><strong>Mapas</strong></td>
<td><code>create_layout</code>, <code>add_layout_map</code>, <code>export_layout</code></td>
</tr>
<tr>
<td><strong>Atlas</strong></td>
<td><code>configure_atlas</code>, <code>export_atlas</code></td>
</tr>
<tr>
<td><strong>Proyecto</strong></td>
<td><code>load_project</code>, <code>save_project</code>, <code>set_canvas_extent</code></td>
</tr>
</tbody>
</table>
<p>Hay más de 100 herramientas disponibles. La lista completa cambia con cada versión, pero cubre prácticamente todo lo que harías manualmente en QGIS.</p>
<h2 id="configuracion-paso-a-paso">Configuración paso a paso</h2>
<h3 id="1-pre-requisitos">1. Pre-requisitos</h3>
<p>Necesitas tres cosas:</p>
<ul>
<li><strong>QGIS</strong> instalado (cualquier versión reciente vale, incluida la 4)</li>
<li><strong>QGIS MCP Plugin</strong> instalado en QGIS</li>
<li><strong>OpenCode</strong> instalado</li>
<li><strong>uv</strong> instalado (lo usa <code>uvx</code> para ejecutar el MCP Server sin instalar nada)</li>
</ul>
<h3 id="2-instalar-el-plugin-en-qgis">2. Instalar el plugin en QGIS</h3>
<p>El plugin se llama <strong>QGIS MCP</strong>. Lo instalas desde el menú de QGIS:</p>
<p><code>Complementos → Gestionar e instalar complementos... → Buscar "QGIS MCP" → Instalar</code></p>
<p>Una vez instalado, lo activas desde el menú <code>MCP → Start Server</code>. El plugin se queda escuchando en un socket TCP interno en el puerto <strong>9876</strong>.</p>
<p>Puedes comprobar que está vivo:</p>
<div class="codehilite"><pre><span></span><code>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span>http://localhost:9876/<span class="w"> </span>-H<span class="w"> </span><span class="s2">&quot;Content-Type: application/json&quot;</span><span class="w"> </span>-d<span class="w"> </span><span class="s1">&#39;{&quot;action&quot;:&quot;ping&quot;}&#39;</span>
</code></pre></div>

<h3 id="3-configurar-opencode">3. Configurar OpenCode</h3>
<p>Aquí es donde la mayoría de la documentación existente se queda corta. El plugin de QGIS <strong>no</strong> expone un servidor MCP directamente — solo entiende comandos JSON sobre un socket TCP. Necesitamos un proceso intermedio que haga de traductor.</p>
<p>OpenCode se configura en <code>~/.config/opencode/opencode.jsonc</code> (o en un <code>opencode.jsonc</code> en la raíz de tu proyecto):</p>
<div class="codehilite"><pre><span></span><code><span class="p">{</span>
<span class="w">  </span><span class="s">&quot;mcpServers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="s">&quot;qgis&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="s">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;local&quot;</span><span class="p">,</span>
<span class="w">      </span><span class="s">&quot;command&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">        </span><span class="s">&quot;uvx&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="s">&quot;--from&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="s">&quot;https://github.com/nkarasiak/qgis-mcp/archive/refs/heads/main.zip&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="s">&quot;qgis-mcp-server&quot;</span><span class="p">,</span>
<span class="w">      </span><span class="p">],</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">  </span><span class="p">},</span>
<span class="p">}</span>
</code></pre></div>

<p>Con <code>type: "local"</code>, opencode lanza el MCP Server como un subproceso cada vez que arranca. El servidor se comunica con el plugin de QGIS a través del puerto 9876 y expone todas las herramientas a opencode vía MCP.</p>
<h3 id="4-verificar-la-conexion">4. Verificar la conexión</h3>
<p>Arranca OpenCode en cualquier directorio:</p>
<div class="codehilite"><pre><span></span><code>opencode
</code></pre></div>

<p>Si todo funciona, verás el servidor MCP de QGIS en el panel de herramientas de opencode, listo para aceptar comandos.</p>
<h2 id="problemas-y-soluciones">Problemas y soluciones</h2>
<p>Hasta aquí la teoría. Ahora la práctica, con los problemas reales con los que me topé.</p>
<p>Antes de entrar en cada problema, conviene aclarar: <strong>el plugin QGIS MCP está bien documentado</strong>. Su README en GitHub incluye la configuración correcta para opencode y para otras herramientas (Claude Code, Codex CLI, Gemini CLI, Cursor, etc.). Los problemas que encontré no fueron por documentación incorrecta, sino por dos cosas:</p>
<ol>
<li><strong>La arquitectura no es evidente hasta que la ves.</strong> El plugin tiene dos componentes: un proceso dentro de QGIS (socket TCP) y un servidor MCP externo (uvx). Si no sabes que existe esa separación, es fácil asumir que el plugin expone MCP directamente y configurarlo mal.</li>
<li><strong>El README asume que el lector conoce <code>uvx</code>.</strong> La compilación de dependencias nativas en la primera ejecución no se menciona, y el timeout de opencode (30s) no es suficiente para ese arranque inicial.</li>
</ol>
<p>Dicho esto, van los problemas.</p>
<h3 id="problema-1-conectar-al-puerto-equivocado">Problema 1: Conectar al puerto equivocado</h3>
<p>Si ya sabes cómo configurar servidores MCP puede que vayas directamente a opencode y lo hagas con <code>type: "url"</code> apuntando a <code>http://localhost:9876</code>, asumiendo que el plugin de QGIS habla MCP directamente. Pero no: el plugin solo entiende comandos JSON sobre un socket TCP, no el protocolo MCP. Es como intentar hablar HTTP contra un servidor que solo entiende el protocolo de Redis. El plugin viene con un configurador para diferentes agentes, incluido opencode.</p>
<p><strong>Solución:</strong><br />
Usar <code>type: "local"</code> con <code>uvx</code> como se muestra en la configuración de arriba. El <code>qgis-mcp-server</code> es el proceso intermedio que traduce de MCP a los comandos JSON que el plugin entiende. O, alternativamente, tener el servidor HTTP ejecutándose de forma persistente (lo explico al final de esta sección).</p>
<h3 id="problema-2-timeout-en-la-primera-ejecucion">Problema 2: Timeout en la primera ejecución</h3>
<p>La primera vez que opencode ejecuta <code>uvx --from https://github.com/nkarasiak/qgis-mcp/archive/refs/heads/main.zip qgis-mcp-server</code>, <code>uvx</code> descarga el código y <strong>compila dependencias nativas</strong> como <code>cryptography</code>. Esta compilación puede superar los 30 segundos, que es el timeout que opencode tiene por defecto para la inicialización de servidores MCP.</p>
<p><strong>Solución:</strong><br />
Ejecutar el comando manualmente una vez antes de arrancar opencode, para que <code>uvx</code> descargue y compile todo y lo deje en caché:</p>
<div class="codehilite"><pre><span></span><code>uvx<span class="w"> </span>--from<span class="w"> </span>https://github.com/nkarasiak/qgis-mcp/archive/refs/heads/main.zip<span class="w"> </span>qgis-mcp-server
</code></pre></div>

<p>La primera ejecución puede llevar más de un minuto. Las siguientes serán casi instantáneas.</p>
<p>Si aún así quieres más margen, opencode permite configurar el timeout por servidor MCP:</p>
<div class="codehilite"><pre><span></span><code><span class="p">{</span>
<span class="w">  </span><span class="s">&quot;mcpServers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="s">&quot;qgis&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="s">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;local&quot;</span><span class="p">,</span>
<span class="w">      </span><span class="s">&quot;timeout&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">120000</span><span class="p">,</span>
<span class="w">      </span><span class="s">&quot;command&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">        </span><span class="s">&quot;uvx&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="s">&quot;--from&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="s">&quot;https://github.com/nkarasiak/qgis-mcp/archive/refs/heads/main.zip&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="s">&quot;qgis-mcp-server&quot;</span><span class="p">,</span>
<span class="w">      </span><span class="p">],</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">  </span><span class="p">},</span>
<span class="p">}</span>
</code></pre></div>

<h2 id="ejemplos-practicos">Ejemplos prácticos</h2>
<h3 id="cargar-y-visualizar-datos">Cargar y visualizar datos</h3>
<p>Pídele que cargue archivos directamente desde tu ordenador y los deje listos para trabajar:</p>
<blockquote>
<p>Carga el fichero <code>municipios.gpkg</code> que está en mi escritorio, nómbralo "Municipios" y aplícale un estilo graduado por el campo <code>poblacion</code> usando 5 clases con la rampa de color Viridis.</p>
<p>Añade un fondo OSM con el servicio XYZ.</p>
</blockquote>
<p>En segundos tienes la capa en QGIS con el estilo aplicado. Sin ir a buscar el archivo en el navegador de capas, sin acordarte de dónde está el estilo graduado.</p>
<h3 id="manipular-datos">Manipular datos</h3>
<p>Puedes crear campos nuevos, hacer consultas, filtrar, etc. todo en lenguaje natural:</p>
<blockquote>
<p>En la capa Municipios, calcula la densidad de población en un nuevo campo llamado <code>densidad</code>.</p>
<p>¿Cuántos municipios tienen más de 50000 habitantes? Dame los nombres.</p>
</blockquote>
<p>El agente consulta los datos, los procesa y te responde con la información. No necesitas saber SQL ni recordar la sintaxis de la calculadora de campos.</p>
<h3 id="analisis-espacial">Análisis espacial</h3>
<p>Las operaciones que antes requerían varios clics en el menú Processing ahora se resuelven con una frase:</p>
<blockquote>
<p>Haz una unión espacial entre la capa de municipios y la de estaciones meteorológicas, para que cada municipio tenga el nombre de la estación más cercana.</p>
<p>Calcula la altitud media de cada municipio a partir del raster MDT05 y crea un campo nuevo con esos valores.</p>
</blockquote>
<h3 id="crear-mapas-y-layouts">Crear mapas y layouts</h3>
<p>Le dices cómo quieres el mapa y él lo monta:</p>
<blockquote>
<p>Crea un layout llamado "Mapa General", tamaño A4 horizontal. Añade un mapa que ocupe toda la página, una leyenda y una barra de escala. Luego expórtalo como PNG.</p>
<p>Configura un atlas con la capa Municipios. Cada página debe mostrar un municipio. Exporta el atlas como PDF.</p>
</blockquote>
<h3 id="trabajar-con-el-proyecto">Trabajar con el proyecto</h3>
<p>También puedes gestionar el proyecto al vuelo:</p>
<blockquote>
<p>Guarda el proyecto actual como "analisis.qgz" en el escritorio.</p>
<p>¿Qué capas tengo cargadas ahora mismo en el proyecto?</p>
</blockquote>
<h2 id="limitaciones-y-consideraciones">Limitaciones y consideraciones</h2>
<h3 id="no-es-magico">No es mágico</h3>
<p>El MCP de QGIS es tan potente como el modelo que tengas detrás. Los modelos más capaces (Gemini, Claude, GPT-4) entienden bien el contexto geoespacial y saben qué herramienta llamar en cada caso. Los modelos más pequeños pueden confundir herramientas o necesitar prompts más explícitos. Puedes apoyarte en skills o ficheros de memoria de contexto para ayudarles.</p>
<h3 id="mapas-para-imprimir">Mapas para imprimir</h3>
<p>Usar herramientas de procesado es relativamente sencillo para un LLM, incluso si le pides que cree estilos suele ser bastante eficiente. Pero conseguir que te haga un mapa profesional para imprimir ya es otra cosa.</p>
<p>Pueden trabajar con el layout de mapas, pero conseguir que de primeras hagan un buen diseño no es fácil, aquí es donde está más verde. Necesitarás instrucciones detalladas, un buen modelo e incluso crear skills de diseño si quieres conseguir mapas que puedas considerar como versiones finales.</p>
<h3 id="necesitas-qgis-abierto">Necesitas QGIS abierto</h3>
<p>El plugin MCP de QGIS actúa como servidor, pero necesita que QGIS esté ejecutándose. Si cierras QGIS, pierdes la conexión. Puedes tener QGIS minimizado, pero tiene que estar abierto.</p>
<h3 id="operaciones-destructivas">Operaciones destructivas</h3>
<p>Herramientas como <code>remove_layer</code> o <code>delete_features</code> están disponibles, pero el plugin las trata con cuidado. OpenCode también te pide confirmación antes de ejecutar operaciones que modifican datos. Aun así, es recomendable trabajar sobre copias cuando hagas pruebas.</p>
<h3 id="latencia">Latencia</h3>
<p>Cada llamada al MCP viaja de OpenCode al modelo, del modelo de vuelta, y luego se ejecuta en QGIS. No es instantáneo. Para operaciones simples (cargar una capa, cambiar estilo) es rápido. Para geoprocesos pesados (uniones espaciales, estadísticas zonales), el tiempo depende de la carga de trabajo.</p>
<h2 id="conclusion">Conclusión</h2>
<p>Esto está empezando a eclosionar. Estamos viendo cómo la IA se integra en herramientas que antes requerían años de práctica: programas de retoque fotográfico, diseño 3D, edición de vídeo… herramientas complejas que ahora empiezan a entenderse sin conocerlas a fondo.</p>
<p>Con los SIG pasa algo parecido, pero con un matiz importante: para ciertas tareas como retocar una foto es fácil saber lo que quieres aunque no seas fotógrafo, y aún así te quedarás en la superficie, comparado con alguien con experiencia en la profesión. Analizar datos geográficos, crear mapas o interpretar resultados requiere formación. La IA no sustituye ese conocimiento, pero sí acelera los procesos: ejecuta operaciones, prueba combinaciones, genera mapas base que luego puedes ajustar.</p>
<p>Yo sigo pensando lo mismo que meses atrás, cuando todo esto empezó a explotar. Estamos ante el mayor avance en el mundo de la informática después del ratón. La IA está cambiando por completo la forma en la que interactuamos con el software, y eso de por sí, ya es una maravilla.</p>]]></description>
        </item>
    
        <item>
            <title>Por qué OpenCode es mi herramienta principal de IA para desarrollo</title>
            <link>https://psanxiao.com/posts/2026-07-14-por-que-opencode.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-07-14-por-que-opencode.html</guid>
            <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Cada semana aparece una nueva herramienta de IA para desarrollo. Cursor, Claude Code, Windsurf, Antigravity, GitHub Copilot, Codeium — la lista no para de crecer, y todas prometen ser la solución definitiva.</p>
<p>En esta fase inicial, probar está bien. De hecho, es necesario. El mercado se mueve tan rápido que no sabes qué te va a funcionar hasta que lo usas en el día a día. Pero llega un momento en el que tienes que elegir una como base. No para siempre, no de forma exclusiva, pero sí como herramienta principal en la que invertir tiempo en configurar, aprender y construir un flujo de trabajo alrededor.</p>
<p>Este post es mi justificación personal de por qué OpenCode es esa herramienta para mí.</p>
<h2 id="el-problema-de-elegir">El problema de elegir</h2>
<p>Cada herramienta tiene sus ventajas, pero también un coste de aprendizaje. No me refiero solo al dinero, sino al tiempo que dedicas a entender su funcionamiento, ajustarla a tu forma de trabajar y sacarle partido. Ese tiempo es limitado, y si lo repartes entre varias herramientas diferentes, corres el riesgo de no profundizar en ninguna lo suficiente como para que realmente te aporte valor.</p>
<p>Además, cada vez que cambias de herramienta, pierdes parte de lo acumulado: los atajos de teclado que ya sabías, los ajustes que habías hecho, los flujos que habías optimizado. Empezar de cero con una herramienta nueva no es solo instalarla, es volver a pasar por la curva de aprendizaje hasta que empieza a ser realmente productiva.</p>
<p>En un mercado donde cada semana sale algo nuevo, es fácil caer en el FOMO y estar saltando de una herramienta a otra sin llegar a sacar partido de ninguna. Pero el valor real no está en haber probado muchas herramientas, sino en conocer una bien y haber construido un flujo de trabajo alrededor de ella.</p>
<p>Eso no significa cerrarse a probar cosas nuevas. Significa tener una base sobre la que construir, y a partir de ahí explorar con criterio.</p>
<p>Esta decisión no es tan diferente de las que hemos tomado siempre las personas que nos dedicamos al desarrollo de software al elegir un IDE. Antes era escoger entre VS Code o IntelliJ, y si nos vamos algo más atrás en el tiempo, la guerra Vim o Emacs, y esa decisión definía tu forma de trabajar durante años. La diferencia es que entonces el IDE era una herramienta que comprabas una vez o era gratis, y punto. Ahora la IA viene integrada en el IDE, y con ella llegan las suscripciones mensuales, los límites de uso y los cambios de precio que pueden dejar obsoleta tu configuración de la noche a la mañana. El coste recurrente añade una capa nueva a una decisión que antes era más estable.</p>
<h2 id="por-que-opencode">Por qué OpenCode</h2>
<p>La razón principal es simple: <strong>OpenCode es libre</strong>. No depende, en exclusiva, de ninguna empresa ni de sus decisiones comerciales. Si mañana OpenAI decide cambiar sus precios, si Anthropic modifica su política de uso, si Cursor elimina el plan gratuito, o los compra alguien, ninguna de esas decisiones afecta a mi capacidad de seguir trabajando con OpenCode. Cambio de proveedor, cambio de modelo, y mi herramienta sigue siendo la misma.</p>
<p>Eso tiene implicaciones prácticas importantes:</p>
<ul>
<li><strong>Puedo cambiar de modelo sin cambiar de herramienta.</strong> Hoy uso un modelo frontier para tareas que requieren mucho contexto, un modelo específico open-source para codificar, otro para consultas rápidas y baratas. No tengo que adaptarme a un CLI diferente ni aprender otra interfaz.</li>
<li><strong>Puedo ejecutar modelos locales.</strong> Conecto LM Studio, Ollama o el servidor que quiera, y OpenCode habla con él igual que con cualquier API cloud. Ninguna herramienta cerrada te da tanta flexibilidad.</li>
<li><strong>No hay vendor lock-in.</strong> Si un proveedor sube precios o baja calidad, lo cambio sin tocar nada de mi setup. Mi inversión en skills, MCPs y configuración es portable.</li>
<li><strong>Puedo ver el código, entenderlo y contribuir.</strong> No es solo una cuestión ideológica: cuando algo no funciona como espero, puedo mirar el código, saber por qué ocurre y a veces incluso arreglarlo.</li>
</ul>
<p>Dicho de otro modo: OpenCode es la herramienta que se adapta a mi flujo de trabajo, en lugar de obligarme a adaptar mi flujo de trabajo a ella.</p>
<h2 id="opencode-en-general">OpenCode en general</h2>
<p>Para quien no lo conozca, OpenCode es un agente de IA para desarrollo que se ejecuta en el terminal. Es software libre y está disponible en GitHub. Pero lo que realmente lo diferencia no es solo que sea gratuito, sino cómo está construido.</p>
<h3 id="arquitectura-cliente-servidor">Arquitectura cliente-servidor</h3>
<p>A diferencia de Cursor (atado a su editor) o Claude Code y Codex, con sus aplicaciones específicas, OpenCode separa el servidor del cliente. El servidor gestiona sesiones, proyectos y conexiones con modelos, y los clientes son intercambiables:</p>
<ul>
<li><strong>TUI</strong> (terminal): la interfaz principal, con navegación por teclado, paneles divididos y una experiencia comparable a un IDE dentro del terminal.</li>
<li><strong>Interfaz web</strong>: <code>opencode web</code> levanta un servidor HTTP con múltiples sesiones visibles a la vez, accesible desde cualquier navegador. Con Tailscale o soluciones similares, <a href="https://psanxiao.com/posts/2026-06-25-opencode-web.html">puedes conectarte a tu opencode en tu equipo principal desde otros dispositivos</a>, como si estuvieras en local.</li>
<li><strong>IDE plugin</strong>: puede conectarse desde VS Code o cualquier editor que soporte el protocolo.</li>
</ul>
<p>El resultado es que tienes un único servidor con todas tus sesiones, y puedes conectarte desde donde quieras. Todas comparten el mismo estado.</p>
<h3 id="agentes">Agentes</h3>
<p>OpenCode tiene dos modos de trabajo que cambian cómo interactúas con el agente, en realidad viene con dos agentes predefinidos:</p>
<ul>
<li><strong>Plan Mode</strong>: el agente solo explica lo que haría, sin tocar nada. Ideal para tareas complejas donde quieres revisar el enfoque antes de ejecutar.</li>
<li><strong>Build Mode</strong>: el agente ejecuta los cambios directamente.</li>
</ul>
<p>Cambias entre ellos con TAB, sin comandos ni menús. Si el plan no te convence, ajustas el prompt y vuelves a intentarlo. Si el resultado no es lo que esperabas, <code>/undo</code> revierte los cambios al instante.</p>
<h3 id="sub-agentes">Sub-agentes</h3>
<p>OpenCode permite definir sub-agentes: instancias especializadas que usan modelos y prompts diferentes para tareas concretas. Puedes tener un agente para revisión de código que use un modelo más lento pero más preciso, otro para scripting rápido con un modelo ligero, otro para documentación. El agente principal delega en ellos según la tarea, todo de forma transparente. Para cada sub-agente puedes definir si tiene permisos de escritura o no, que herramientas puede usar, etc.</p>
<p>A través de la interfaz puedes ir viendo cuáles están trabajando y lo que hacen.</p>
<h3 id="agentsmd-contexto-que-viaja-con-el-proyecto">AGENTS.md: contexto que viaja con el proyecto</h3>
<p>Cuando ejecutas <code>/init</code> en un proyecto, OpenCode analiza el código y genera un <code>AGENTS.md</code> con la estructura, las tecnologías, las convenciones y los patrones que detecta. Ese archivo se incluye en el contexto del modelo en cada sesión. El resultado es que el agente entiende tu proyecto desde el primer prompt, sin que tengas que explicarle nada.</p>
<h3 id="sesiones-persistentes">Sesiones persistentes</h3>
<p>Cada proyecto mantiene su historial guardado en SQLite. Puedes retomar una sesión días después y el agente recuerda lo que estabais haciendo. También puedes compartir sesiones con tu equipo mediante <code>/share</code>, que genera un enlace con toda la conversación.</p>
<h3 id="personalizacion">Personalización</h3>
<p>Skills, MCPs y system prompts son funcionalidades que OpenCode ofrece igual que otras herramientas, pero con un enfoque abierto: todo se configura con archivos markdown y JSON en <code>~/.config/opencode/</code>, sin formatos propietarios ni dependencias de servicios externos.</p>
<h3 id="como-empezar">Cómo empezar</h3>
<p>La instalación es sencilla y hay varias opciones:</p>
<div class="codehilite"><pre><span></span><code>curl -fsSL https://opencode.ai/install | bash
npm install -g opencode-ai
brew install anomalyco/tap/opencode
scoop install opencode
docker run -it --rm ghcr.io/anomalyco/opencode
</code></pre></div>

<p>Una vez instalado, <code>opencode</code> desde tu proyecto arranca el TUI. Con <code>/connect</code> eliges tu proveedor y ya puedes empezar. Si corres <code>/init</code> primero, el agente analizará tu proyecto y generará el <code>AGENTS.md</code> automáticamente.</p>
<h2 id="gestion-de-modelos-por-que-tener-varios">Gestión de modelos: por qué tener varios</h2>
<p>Uno de los aspectos que más valoro de OpenCode es la capacidad de <strong>elegir el modelo según la tarea</strong>. No uso el mismo modelo para todo, y tener esa flexibilidad cambia completamente la relación coste/beneficio del setup:</p>
<ul>
<li><strong>Tareas rápidas y baratas</strong>: DeepSeek V4 Flash o Gemma 4 en local para debugging rápido, scripting o preguntas concretas. Casi cero coste, respuesta inmediata.</li>
<li><strong>Tareas generales de desarrollo</strong>: Kimi K2.6,Qwen 3.6 Plus o GML 5 desde OpenCode Go. Cubren el día a día sin preocuparme por el coste.</li>
<li><strong>Tareas complejas o contexto grande</strong>: Gemini 3.1 o Claude Opus desde OpenCode Zen o mi cuenta de Gemini. Solo cuando realmente lo necesito.</li>
</ul>
<p>Esta granularidad no es posible si tu herramienta te obliga a usar un solo proveedor o un solo modelo. Y el ahorro, tanto en coste como en calidad del resultado, es notable.</p>
<h2 id="cierre">Cierre</h2>
<p>No estoy diciendo que OpenCode sea la mejor herramienta para todo el mundo. Es importante probar, experimentar y buscar la que te hace tener más comodidad y poductividad en el día a día. Pero está bien mirar un poco más allá de las funcionalidades simplemente y analizar también los modelos que hay detrás, las implicaciones que tiene que las decisiones comerciales de las empresas terminen impactando directamente en tu día a día.</p>
<p>Si valoras la libertad de elegir, la capacidad de adaptar la herramienta a tu flujo de trabajo y no depender de las decisiones comerciales de una empresa, a día de hoy OpenCode es difícil de superar.</p>
<p>En un mercado donde las herramientas de IA cambian cada semana, tener una base libre, flexible y abierta no es un lujo: es una decisión estratégica. Ojalá haya más herramientas que sigan esta filosofía.</p>]]></description>
        </item>
    
        <item>
            <title>OpenCode Web: desarrollo con IA desde el navegador</title>
            <link>https://psanxiao.com/posts/2026-06-25-opencode-web.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-06-25-opencode-web.html</guid>
            <pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Si usas OpenCode en el terminal, es posible que no sepas que ya tiene una interfaz web integrada. No es una herramienta aparte, no es un fork comunitario: es el mismo OpenCode, el mismo agente, los mismos modelos, pero ejecutándose en el navegador. Y desde que la descubrí, la uso cada vez más.</p>
<h2 id="que-es-opencode-web">Qué es OpenCode Web</h2>
<p>OpenCode funciona con una arquitectura cliente-servidor. Cuando abres el TUI en el terminal, estás ejecutando un cliente que se conecta a un servidor local. Ese servidor expone una API HTTP, y <strong>OpenCode Web</strong> es simplemente otra interfaz para ese mismo servidor.</p>
<p>Para arrancarlo, solo necesitas un comando:</p>
<div class="codehilite"><pre><span></span><code>opencode web
</code></pre></div>

<p>Esto levanta un servidor local en un puerto aleatorio y abre el navegador con la interfaz web. Es exactamente la misma experiencia que en terminal: misma sesión, mismos modelos, mismo contexto.</p>
<p>La diferencia está en lo que eso habilita.</p>
<h2 id="por-que-la-uso-multiples-proyectos-y-acceso-remoto">Por qué la uso: múltiples proyectos y acceso remoto</h2>
<p>La razón principal por la que he empezado a usar OpenCode Web no es estética ni de comodidad en el escritorio. Es la posibilidad de <strong>gestionar varios proyectos a la vez desde un único punto</strong>.</p>
<p>Cuando trabajas con el TUI en el terminal, cada ventana es un proyecto. Si tienes tres proyectos abiertos, tienes tres terminales, tres pestañas, tres contextos. Con OpenCode Web puedes tener todas las sesiones activas visibles en una sola interfaz, cambiar entre proyectos con un clic y mantener el hilo de cada uno sin perder el contexto.</p>
<p>Pero lo que realmente me hizo empezar a usarla más fue el <strong>acceso remoto</strong>.</p>
<p>Mi equipo principal es un Mac M1 Pro donde tengo todos mis proyectos, configuraciones, MCPs, skills y recursos. Normalmente trabajo desde ahí. Pero hay situaciones en las que no estoy sentado delante de esa máquina.</p>
<p>Con <a href="https://tailscale.com"><strong>Tailscale</strong></a>, la herramienta que uso para tener una red privada, me conecto al servidor OpenCode de mi equipo principal desde el navegador de cualquier dispositivo. Abro el iPad, entro en la dirección de Tailscale y tengo acceso a todo: mis sesiones, mis proyectos, mis configuraciones. No es lo mismo que estar delante del terminal principal, pero me ha sacado de más de un apuro.</p>
<h2 id="configuracion-basica">Configuración básica</h2>
<p>Para que esto funcione, necesitas tres cosas:</p>
<p><strong>1. Arrancar OpenCode Web con acceso a la red:</strong></p>
<div class="codehilite"><pre><span></span><code>opencode web --hostname 0.0.0.0 --port 4096
</code></pre></div>

<p>El flag <code>--hostname 0.0.0.0</code> hace que el servidor escuche en todas las interfaces de red, no solo en localhost. Sin esto, solo podrías acceder desde la propia máquina.</p>
<p><strong>2. Proteger el acceso con contraseña:</strong></p>
<p>Si el servidor va a estar accessible por la red, esto es fundamental:</p>
<div class="codehilite"><pre><span></span><code>OPENCODE_SERVER_PASSWORD=tu_contraseña opencode web --hostname 0.0.0.0 --port 4096
</code></pre></div>

<p>Por defecto el usuario es <code>opencode</code>, pero puedes cambiarlo con <code>OPENCODE_SERVER_USERNAME</code>. Sin esta protección, cualquiera en tu red podría acceder a tus sesiones y código.</p>
<p><strong>3. Configurar Tailscale (si necesitas acceso remoto):</strong></p>
<p>Tailscale crea una red privada cifrada entre tus dispositivos. Una vez que tu equipo principal y tu iPad o portátil están en la misma Tailnet, puedes acceder al servidor OpenCode como si estuvieras en la misma red local, sin abrir puertos en el router ni configurar nada más.</p>
<h2 id="lo-que-no-es-opencode-web">Lo que no es OpenCode Web</h2>
<p>Es importante tener expectativas claras. OpenCode Web no es un reemplazo del TUI para desarrollo intensivo. La interfaz web es más simple, menos pulida y no tiene todas las opciones de navegación por teclado que hace cómodo el terminal. Escribir código largo o hacer tareas complejas en un iPad, por ejemplo, te puede sacar de un apuro, pero no es lo mismo que trabajar con tu setup habitual.</p>
<p>Lo que sí es, y donde realmente aporta, es un <strong>punto de acceso ligero</strong>. Para revisar el estado de un proyecto, lanzar una tarea al agente, hacer una consulta rápida o continuar un hilo de trabajo que dejaste abierto, funciona perfecto. Y el hecho de poder hacerlo desde cualquier dispositivo con un navegador es una ventaja que el TUI no puede dar por sí solo.</p>
<h2 id="conclusion">Conclusión</h2>
<p>OpenCode Web no es una funcionalidad que necesites si solo trabajas desde tu escritorio y te sientes bien trabajando en la terminal. Pero en el momento en que necesitas flexibilidad, rabajar desde otro dispositivo, acceder a proyectos remotos, o simplemente tener una vista global de todo lo que tienes abierto, se convierte en una pieza clave del setup. También, si quieres tener otra interfaz diferente a un terminal, y poder acceder a varios proyectos a la vez.</p>]]></description>
        </item>
    
        <item>
            <title>Mi Setup IA</title>
            <link>https://psanxiao.com/posts/2026-06-22-mi-setup-ia.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-06-22-mi-setup-ia.html</guid>
            <pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>A estas alturas de 2026, cualquiera que trabaje con tecnología tiene una opinión sobre qué herramientas de IA usar. El problema es que casi todo el mundo tiene una opinión diferente, y el mercado cambia cada semana. Elegir un setup de IA se ha convertido en una decisión más estratégica de lo que parece: no se trata solo de qué modelo es mejor en un benchmark, sino de cómo diseñas un ecosistema de herramientas que sea sostenible, flexible y que no te deje atado a un proveedor cuando todo cambie dentro de tres meses.</p>
<p>Llevo tiempo probando combinaciones de herramientas, modelos y flujos de trabajo. Este artículo es la fotografía de mi setup actual, con la certeza de que dentro de unos meses será diferente, pero también con la convicción de que la estrategia que hay detrás va a mantenerse.</p>
<h2 id="la-estrategia-por-que-no-tengo-una-sola-herramienta">La estrategia: por qué no tengo una sola herramienta</h2>
<p>En <strong>iCarto</strong> tomamos una decisión a la hora de tratar de facilitar la adopción de herramientas de IA: en lugar de comprar una solución de IA corporativa unificada, establecimos un presupuesto individual para que cada persona del equipo explore y decida qué herramientas le funcionan mejor.</p>
<p>Esta decisión tiene una razón de ser. El mercado de la IA se mueve a una velocidad en la que cualquier solución que compres hoy como estándar empresarial puede quedar obsoleta en cuestión de meses. Los modelos, las herramientas y las plataformas evolucionan tan rápido que comprometerse con una única solución ahora mismo es, en mi opinión, un error estratégico. Prefiero que la gente aprenda, experimente y luego compartamos internamente qué funciona y qué no. Este artículo es mi contribución a ese aprendizaje colectivo.</p>
<p>Mi enfoque personal se basa en tres pilares:</p>
<ol>
<li><strong>Una herramienta generalista para el día a día</strong>: Gemini, por su versatilidad y ecosistema.</li>
<li><strong>Una herramienta especializada para desarrollo</strong>: OpenCode, como entorno agéntico donde invierto el tiempo de configuración.</li>
<li><strong>Modelos locales para lo que no necesita salir de mi máquina</strong>: Gemma 4 y LM Studio, para tareas donde la privacidad importa.</li>
</ol>
<h2 id="gemini-el-todoterreno-de-google">Gemini: el todoterreno de Google</h2>
<p>Mi cuenta de <strong>Google IA Pro</strong> (Gemini) es mi herramienta generalista. No es mi favorita para ninguna tarea concreta, pero es la que mejor cubre el espectro completo cuando no sé por dónde empezar.</p>
<h3 id="que-hago-con-gemini">Qué hago con Gemini</h3>
<ul>
<li><strong>Documentación e informes</strong>: la generación de texto de Gemini es sólida, pero donde realmente brilla es en la capacidad de procesar documentos largos. Gemini 3.1 maneja contextos enormes sin perder coherencia, algo que a otros modelos les cuesta más.</li>
<li><strong>NotebookLM</strong>: es, para mí, una de las herramientas más infravaloradas de Google. La posibilidad de subir fuentes propias (documentos, PDFs, webs) y construir un asistente que solo responda sobre ese material es increíblemente potente para trabajo de investigación y análisis. La uso mucho combinada con otras herramientas, es casi como poder generar un <a href="https://psanxiao.com/posts/2026-03-07-la-guia-de-la-IA.html#7-el-rag-como-aprende-la-ia-sobre-tus-datos">RAG</a> de forma muy simple.</li>
<li><strong>Imágenes y exploración</strong>: cuando necesito crear imágenes o simplemente explorar una idea sin comprometerme con una herramienta concreta, Gemini es mi punto de partida.</li>
<li><strong>Contextos muy grandes</strong>: en proyectos donde necesito procesar documentación extensa sin perder el hilo, Gemini 3.1 es imbatible. Su ventana de contexto es, hoy por hoy, de las mejores del mercado para uso práctico.</li>
</ul>
<h3 id="lo-que-no-me-gusta">Lo que no me gusta</h3>
<p>Google tiene un problema histórico: crea herramientas excelentes de forma individual pero no las integra bien entre sí. El ecosistema Gemini tiene de todo, pero descubrir qué existe y cómo encaja es una tarea en sí misma. No es un problema de calidad, es un problema de cohesión.</p>
<p>En desarrollo, empecé usando <strong>Gemini CLI</strong> y algo de <strong>Antigravity</strong>. Con los cambios recientes en Antigravity, si lo uso suelo tirar de su versión sin IDE. Pero no es mi herramienta principal para programar. Para revisión de código sigo usando <strong>Visual Studio Code</strong>, que he ido ajustando y configurando a lo largo de los años hasta tener un entorno que se adapta a mi forma de trabajar.</p>
<h2 id="opencode-el-centro-de-mi-desarrollo-con-ia">OpenCode: el centro de mi desarrollo con IA</h2>
<p>Si Gemini es mi navaja suiza, <strong>opencode</strong> es mi herramienta principal ahora mismo. Es donde más tiempo invierto y donde más rendimiento saco.</p>
<p>La decisión de centrarme en una herramienta de desarrollo con IA no fue trivial. Hay decenas de opciones: Cursor, Windsurf, Claude Code, Antigravity, GitHub Copilot —cada una con sus ventajas. Pero mi filosofía es clara: prefiero conocer una herramienta en profundidad que tener nociones superficiales de varias. OpenCode es la herramienta en la que he decidido invertir, y eso incluye aprender a configurar skills, MCPs, providers y todo el ecosistema que la rodea.</p>
<h3 id="como-gestiono-los-modelos-en-opencode">Cómo gestiono los modelos en OpenCode</h3>
<p>Tener acceso a una variedad de modelos y poder elegir según la tarea es, para mí, la clave del setup. En OpenCode gestiono esto con dos cuentas complementarias:</p>
<p><strong>OpenCode Go</strong> es mi suscripción base. Por $10/mes tengo acceso plano a modelos open-source como DeepSeek V4, Qwen 3.6 Plus, Kimi K2.6 y GLM-5.1, sin preocuparme por el consumo de tokens. Este es mi canal para el día a día: generación de código, revisión, debugging, scripting. Para el 80% de mis tareas, estos modelos son suficientes y no necesito más.</p>
<p><strong>OpenCode Zen</strong> funciona con presupuesto prepago. Cargo una cantidad y voy consumiendo según uso. Lo reservo para modelos grandes o muy potentes en casos puntuales donde necesito algo que los modelos open-source no alcanzan. Me permite acceder a Claude Opus o GPT-5 cuando la tarea lo requiere, sin llevarme sorpresas en la factura porque controlo cuánto cargo y cuándo.</p>
<p>La combinación de ambos es lo que hace sostenible el setup: el uso diario va mayoritariamente por Go, y Zen actúa como válvula de escape para cuando necesito potencia extra sin comprometer el presupuesto mensual.</p>
<h3 id="skills-y-mcps">Skills y MCPs</h3>
<p>Donde más tiempo he invertido en OpenCode es en la configuración del entorno: <strong>skills</strong> para automatizar tareas recurrentes y <strong>MCPs</strong> (Model Context Protocol) para conectar con herramientas externas. Esto es lo que marca la diferencia entre tener un chat con IA y tener un entorno de desarrollo agéntico que realmente entiende tu flujo de trabajo.</p>
<p>La curva de aprendizaje existe, pero una vez que lo tienes configurado, el retorno es inmediato. Puedo lanzar tareas complejas con un comando y el agente sabe qué herramientas usar, qué contexto considerar y cómo estructurar la respuesta.</p>
<h2 id="modelos-en-local-gemma-4-y-lm-studio">Modelos en local: Gemma 4 y LM Studio</h2>
<p>Aunque el cloud cubre la mayoría de mis necesidades, tener la opción de ejecutar modelos en local es importante. No siempre quieres que tu código salga de tu máquina, y a veces necesitas respuestas rápidas sin depender de la latencia de una API.</p>
<p>Mi equipo es un <strong>Mac M1 Pro</strong>, que no es ninguna bestia para IA pero mueve modelos pequeños de forma aceptable. He probado varias opciones y mi configuración actual es:</p>
<ul>
<li><strong>Gemma 4</strong> como modelo principal para local. Lo muevo a unos 50 tokens por segundo, que es suficiente para tareas de análisis y edición de código que no requieren respuestas largas.</li>
<li><strong>LM Studio</strong> para servir el modelo. Levanta una API compatible con OpenAI en local, y OpenCode se conecta a ella sin configuración adicional.</li>
</ul>
<p>El matiz importante: usar un modelo local como <strong>chat</strong> es relativamente sencillo si tu equipo lo aguanta. Pero conseguir que funcione bien como <strong>entorno agéntico</strong> —donde el modelo tiene que hacer llamadas a herramientas, interpretar resultados y mantener el contexto— es mucho más exigente. He tenido que tunear el <em>system prompt</em> varias veces hasta encontrar un equilibrio que funcione. Los modelos locales no están al mismo nivel que las soluciones comerciales, que unen a estos un entorno de trabajo ya pulido, y es justo reconocerlo.</p>
<p>Aun así, tener esta opción disponible me da flexibilidad. Para tareas sencillas o cuando necesito privacidad, es una alternativa que funciona.</p>
<h2 id="lecciones-aprendidas">Lecciones aprendidas</h2>
<p>Después de meses probando combinaciones, estas son mis conclusiones principales:</p>
<p><strong>Los modelos open-source cubren la mayoría del trabajo diario.</strong> Con una buena ventana de contexto y habilidades bien configuradas, modelos como DeepSeek V4 o Qwen 3.6 rinden a un nivel que hace un año habría sido impensable para código abierto. La inversión en configuración —skills, prompts, MCPs— es lo que realmente marca la diferencia.</p>
<p><strong>Los modelos frontier siguen siendo necesarios, pero como recurso puntual.</strong> Gemini Pro, Claude Opus o GPT-5 tienen capacidades que los open-source aún no igualan en tareas muy específicas. Tener acceso a ellos sin comprometer el presupuesto mensual es cuestión de diseñar bien el sistema de decisión: qué tareas van a modelos baratos y cuáles justifican el coste de un modelo caro.</p>
<p><strong>La variedad de modelos es más importante que la calidad de uno solo.</strong> No uso el mismo modelo para revisar un documento, generar código, analizar una base de datos o mantener una conversación exploratoria. Cada tarea tiene un perfil de coste, latencia y capacidad diferente, y el setup gana cuando puedes elegir en cada momento.</p>
<p><strong>Invertir en una herramienta, no en muchas.</strong> Conocer OpenCode en profundidad me ha dado más rendimiento que probar diez herramientas diferentes sin llegar a dominar ninguna. La configuración de skills, MCPs y flujos de trabajo es tiempo invertido que se amortiza con cada uso. Eso no significa que siga explorando y probando muchas otras, pero por el momento todo lo que es trabajo profesional va a OpenCode.</p>
<h2 id="cierre">Cierre</h2>
<p>No considero este setup definitivo. El mercado de la IA se mueve demasiado rápido como para aferrarse a una combinación concreta. Pero la estrategia sí creo que se mantendrá: variedad de modelos, una herramienta principal bien configurada, acceso a modelos frontier cuando sea necesario y modelos locales para lo que no debe salir de la máquina.</p>
<p>Siento que estamos rascando la superficie de lo que la IA puede hacer en el día a día del desarrollo de software. Experimentar, probar y compartir lo que funciona es, ahora mismo, la mejor inversión que podemos hacer. Aún así, para el trabajo profesional es bueno mantener cierta estabilidad y apostar por una herramienta de base. En el momento en que decida cambiarla será porque estoy convencido de haber encontrado una alternativa mejor, al menos para mi uso.</p>
<p>Creo también que es muy importante experimentar a tu propio ritmo, si te dejas llevar por todo lo que aparece en redes sociales, necesitarias dedicar varias horas al día a probar todo. Más que nunca es necesario sentar las bases de todas las novedades que supone la IA, pero sin querer abarcar todo, porque es imposible. Prefiero invertir en entender los conceptos e ir construyendo un sistema y dinámicas que me funcionen, que copiar las de otros, por mucho <em>hype</em> que estén despertando.</p>]]></description>
        </item>
    
        <item>
            <title>Modelos LLM open source en 2026: familias, licencias y cómo acceder a ellos</title>
            <link>https://psanxiao.com/posts/2026-06-20-modelos-llm-open-source-2026.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-06-20-modelos-llm-open-source-2026.html</guid>
            <pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Si has seguido la evolución de la inteligencia artificial en los últimos años, sabrás que el ecosistema de modelos de lenguaje ha cambiado drásticamente. Hasta no hace mucho, los mejores modelos eran exclusivamente privativos (GPT-4, Claude), pero desde 2024 los modelos open source han acortado distancias y hoy, en 2026, <strong>el gap entre modelos abiertos y cerrados es de apenas unos pocos puntos porcentuales</strong> en la mayoría de benchmarks.</p>
<p>Pero antes de entrar en materia, hay que aclarar un concepto importante porque es fuente de confusión constante: cuando hablamos de modelos "open source" en IA, casi siempre nos referimos en realidad a modelos de <strong>pesos abiertos (open-weight)</strong>. La diferencia es sutil pero clave:</p>
<ul>
<li><strong>Open-weight</strong>: el fabricante publica los pesos del modelo (los parámetros entrenados) para que cualquiera pueda descargarlos y usarlos. Pero el código de entrenamiento, los datos y el proceso completo no se comparten. Licencias como Apache 2.0 o MIT permiten uso comercial sin restricciones.</li>
<li><strong>Open source real (según OSI)</strong>: además de los pesos, se comparten el código de entrenamiento, los datos (o su composición) y los checkpoints intermedios. Esto es extremadamente raro en modelos grandes.</li>
</ul>
<p>Cuando una empresa dice que su modelo es "open source", normalmente significa que puedes descargar los pesos y ejecutar el modelo, usarlo comercialmente (con restricciones variables según la licencia), y hacer fine-tuning y adaptación. Pero lo que <strong>no</strong> incluye casi nunca son los datos de entrenamiento (sabemos la composición general, pero no los ejemplos concretos), el código de entrenamiento completo, los checkpoints intermedios, ni la metodología exacta de limpieza y filtrado de datos.</p>
<p>Esto tiene implicaciones prácticas: no puedes verificar de forma independiente si el modelo fue entrenado con datos sesgados o con contenido con copyright. Tienes que confiar en lo que dice la empresa. Es mejor que un modelo cerrado, desde luego, pero no es el ideal del software libre tradicional.</p>
<p>Así que, con matices, podemos decir que hoy tenemos una gran variedad de modelos "abiertos" que podemos usar, descargar y en muchos casos afinar, pero cuyo proceso de entrenamiento sigue siendo un secreto industrial.</p>
<div class="toc"><span class="toctitle">Índice de contenidos</span><ul>
<li><a href="#familias-de-modelos-por-empresa">Familias de modelos por empresa</a><ul>
<li><a href="#meta-llama-4">Meta — Llama 4</a></li>
<li><a href="#alibaba-qwen-35">Alibaba — Qwen 3.5</a></li>
<li><a href="#deepseek-v4-y-v32">DeepSeek — V4 y V3.2</a></li>
<li><a href="#mistral-ai-mistral-large-3">Mistral AI — Mistral Large 3</a></li>
<li><a href="#google-gemma-4">Google — Gemma 4</a></li>
<li><a href="#moonshot-ai-kimi-k25-k26">Moonshot AI — Kimi K2.5 / K2.6</a></li>
<li><a href="#zhipu-ai-glm-5">Zhipu AI — GLM-5</a></li>
<li><a href="#microsoft-phi-4">Microsoft — Phi-4</a></li>
<li><a href="#minimax-m25-m27">MiniMax — M2.5 / M2.7</a></li>
<li><a href="#01ai-yi">01.AI — Yi</a></li>
</ul>
</li>
<li><a href="#tabla-resumen-de-modelos-y-licencias">Tabla resumen de modelos y licencias</a></li>
<li><a href="#routers-de-modelos-como-acceder-a-todo-esto">Routers de modelos: cómo acceder a todo esto</a><ul>
<li><a href="#openrouter">OpenRouter</a></li>
<li><a href="#groq">Groq</a></li>
<li><a href="#opencode-go">OpenCode Go</a></li>
<li><a href="#comparativa-rapida">Comparativa rápida</a></li>
</ul>
</li>
<li><a href="#conclusion">Conclusión</a></li>
</ul>
</div>
<h2 id="familias-de-modelos-por-empresa">Familias de modelos por empresa</h2>
<p>Voy a agrupar los modelos más relevantes por la empresa que está detrás.</p>
<h3 id="meta-llama-4">Meta — Llama 4</h3>
<p>Meta ha sido el gran impulsor del ecosistema open-weight con su familia Llama. En 2026, <strong>Llama 4</strong> es su apuesta más ambiciosa, con tres variantes principales:</p>
<table>
<thead>
<tr>
<th>Modelo</th>
<th>Parámetros totales</th>
<th>Parámetros activos</th>
<th>Contexto</th>
</tr>
</thead>
<tbody>
<tr>
<td>Llama 4 Scout</td>
<td>109B</td>
<td>17B</td>
<td>10M tokens</td>
</tr>
<tr>
<td>Llama 4 Maverick</td>
<td>400B+</td>
<td>17B</td>
<td>1M tokens</td>
</tr>
<tr>
<td>Llama 4 Behemoth</td>
<td>2T</td>
<td>288B</td>
<td>256K tokens</td>
</tr>
</tbody>
</table>
<p>Arquitectónicamente, Llama 4 adopta <strong>Mixture of Experts (MoE)</strong>, lo que significa que aunque el modelo tenga cientos de miles de millones de parámetros totales, solo activa una fracción por inferencia. Scout y Maverick activan solo 17B parámetros, lo que los hace sorprendentemente eficientes.</p>
<p>La <strong>licencia de Llama</strong> es propia de Meta: permite uso comercial, pero si tu producto supera los 700 millones de usuarios activos mensuales, necesitas permiso especial. Es una cláusula pensada para que gigantes como Google o Microsoft no puedan usarlo libremente compitiendo con Meta.</p>
<h3 id="alibaba-qwen-35">Alibaba — Qwen 3.5</h3>
<p>La familia Qwen de Alibaba es probablemente la que más rápido ha evolucionado. En febrero de 2026 lanzaron <strong>Qwen 3.5</strong>, con versiones desde 27B hasta 397B parámetros, todas bajo <strong>Apache 2.0</strong>.</p>
<table>
<thead>
<tr>
<th>Modelo</th>
<th>Parámetros</th>
<th>Arquitectura</th>
<th>Contexto</th>
</tr>
</thead>
<tbody>
<tr>
<td>Qwen 3.5 397B-A17B</td>
<td>397B total / 17B activos</td>
<td>MoE</td>
<td>256K</td>
</tr>
<tr>
<td>Qwen 3.5 122B-A10B</td>
<td>122B total / 10B activos</td>
<td>MoE</td>
<td>256K</td>
</tr>
<tr>
<td>Qwen 3.5 27B</td>
<td>27B denso</td>
<td>Dense</td>
<td>256K</td>
</tr>
</tbody>
</table>
<p>Qwen 3.5 destaca especialmente en razonamiento y tareas multimodales (texto + imagen). En GPQA Diamond, Qwen 3.5 lidera los modelos open-weight con un <strong>88.4%</strong>, superando a modelos cerrados de generaciones anteriores.</p>
<p><strong>Apache 2.0</strong> es una de las licencias más permisivas que existen: puedes usar, modificar, distribuir y vender sin restricciones. Alibaba ha apostado fuerte por esta estrategia para ganar adopción global.</p>
<h3 id="deepseek-v4-y-v32">DeepSeek — V4 y V3.2</h3>
<p>DeepSeek, el laboratorio chino, ha sido uno de los grandes disruptores. Su modelo <strong>DeepSeek V4-Pro</strong> alcanza un <strong>80.6% en SWE-bench Verified</strong>, a solo 0.2 puntos de Claude Opus 4.6, y lo hace con licencia <strong>MIT</strong>.</p>
<table>
<thead>
<tr>
<th>Modelo</th>
<th>Parámetros</th>
<th>Arquitectura</th>
<th>Contexto</th>
</tr>
</thead>
<tbody>
<tr>
<td>DeepSeek V4-Pro</td>
<td>1.6T total / 49B activos</td>
<td>MoE</td>
<td>1M tokens</td>
</tr>
<tr>
<td>DeepSeek V3.2</td>
<td>671B total / 37B activos</td>
<td>MoE</td>
<td>128K tokens</td>
</tr>
</tbody>
</table>
<p>DeepSeek llamó la atención mundial en 2025 por sus afirmaciones de entrenamiento eficiente (con un coste declarado muy inferior al de modelos equivalentes), lo que generó tanto admiración como controversia. Lo cierto es que sus modelos son, hoy por hoy, referencia en codificación y razonamiento matemático.</p>
<p><strong>MIT</strong> es incluso más permisiva que Apache 2.0: básicamente puedes hacer lo que quieras con el modelo, siempre que incluyas el aviso de copyright.</p>
<h3 id="mistral-ai-mistral-large-3">Mistral AI — Mistral Large 3</h3>
<p>Mistral, la startup francesa, representa a Europa en la élite de los LLMs. Su <strong>Mistral Large 3</strong> (675B total / 41B activos) compite en la frontera, con licencia <strong>Apache 2.0</strong> para los modelos abiertos. También tienen modelos más pequeños como <strong>Mistral 7B</strong> (el original que los hizo famosos) y <strong>Mixtral 8x22B</strong>.</p>
<p>Mistral tiene una estrategia dual: ofrece modelos abiertos potentes bajo Apache 2.0 y una versión comercial (Mistral Large) con capacidades adicionales bajo licencia paga. Es un enfoque pragmático que les ha dado una base de desarrolladores muy leal en Europa.</p>
<h3 id="google-gemma-4">Google — Gemma 4</h3>
<p>Google tiene dos líneas: Gemini (cerrado) y <strong>Gemma</strong> (abierto). Gemma 4, lanzado en 2026, es posiblemente el movimiento más importante de Google en el espacio open-weight.</p>
<p>Gemma 4 viene en tamaños de 2B, 9B y 31B (versión medium), y lo relevante es que <strong>todo Gemma 4 está bajo Apache 2.0</strong>. La versión de 31B alcanza un 80% en LiveCodeBench con solo una décima parte de los parámetros activos de los MoE frontera. Es ideal para ejecución local y edge deployment.</p>
<h3 id="moonshot-ai-kimi-k25-k26">Moonshot AI — Kimi K2.5 / K2.6</h3>
<p>Moonshot AI es una empresa china que ha destacado por su enfoque en <strong>contextos largos</strong>. Sus modelos Kimi fueron los primeros en soportar 2M tokens de contexto efectivo. Hoy, <strong>Kimi K2.5 y K2.6</strong> son sus modelos estrella, con 1T parámetros totales (32B activos) y licencia open-weight.</p>
<p>Kimi K2.5 destaca especialmente en generación visual-a-código y agentes autónomos. K2.6 (lanzado a principios de 2026) mejora los benchmarks de razonamiento y codificación.</p>
<h3 id="zhipu-ai-glm-5">Zhipu AI — GLM-5</h3>
<p>Zhipu AI es otro laboratorio chino que ha irrumpido con fuerza. Su <strong>GLM-5</strong> (744B total / 40B activos) bajo licencia <strong>MIT</strong> es uno de los modelos más potentes en tareas de sistemas complejos y agentes de larga duración.</p>
<h3 id="microsoft-phi-4">Microsoft — Phi-4</h3>
<p>Microsoft ha apostado por modelos pequeños pero muy capaces. <strong>Phi-4</strong> (14B) bajo licencia <strong>MIT</strong> demuestra que no todo es tamaño: supera a modelos de 70B+ en razonamiento matemático con una fracción de los recursos. Es perfecto para dispositivos con recursos limitados.</p>
<h3 id="minimax-m25-m27">MiniMax — M2.5 / M2.7</h3>
<p>MiniMax, otra empresa china, ha lanzado <strong>MiniMax-M2.5</strong> (229B total / 10B activos) y su versión mejorada M2.7, enfocados en flujos de trabajo de ingeniería de software. Son modelos ligeros y rápidos, con buena relación calidad-recurso.</p>
<h3 id="01ai-yi">01.AI — Yi</h3>
<p>Fundada por Kai-Fu Lee, 01.AI publicó la familia <strong>Yi</strong> bajo licencias Apache 2.0. Aunque no están en la frontera absoluta en 2026, siguen siendo modelos sólidos, especialmente en tareas en chino e inglés.</p>
<h2 id="tabla-resumen-de-modelos-y-licencias">Tabla resumen de modelos y licencias</h2>
<table>
<thead>
<tr>
<th>Empresa</th>
<th>Modelo estrella</th>
<th>Licencia</th>
</tr>
</thead>
<tbody>
<tr>
<td>Meta</td>
<td>Llama 4 Maverick</td>
<td>Licencia propia (restricción 700M MAU)</td>
</tr>
<tr>
<td>Alibaba</td>
<td>Qwen 3.5 397B</td>
<td>Apache 2.0</td>
</tr>
<tr>
<td>DeepSeek</td>
<td>V4-Pro</td>
<td>MIT</td>
</tr>
<tr>
<td>Mistral AI</td>
<td>Mistral Large 3</td>
<td>Apache 2.0</td>
</tr>
<tr>
<td>Google</td>
<td>Gemma 4</td>
<td>Apache 2.0</td>
</tr>
<tr>
<td>Moonshot AI</td>
<td>Kimi K2.6</td>
<td>Open-weight propia</td>
</tr>
<tr>
<td>Zhipu AI</td>
<td>GLM-5</td>
<td>MIT</td>
</tr>
<tr>
<td>Microsoft</td>
<td>Phi-4</td>
<td>MIT</td>
</tr>
<tr>
<td>MiniMax</td>
<td>M2.7</td>
<td>Open-weight propia</td>
</tr>
<tr>
<td>01.AI</td>
<td>Yi 1.5</td>
<td>Apache 2.0</td>
</tr>
</tbody>
</table>
<h2 id="routers-de-modelos-como-acceder-a-todo-esto">Routers de modelos: cómo acceder a todo esto</h2>
<p>Todos estos modelos, al ser open-weight, se pueden descargar y ejecutar en local usando herramientas como Ollama, LM Studio o vLLM. De hecho, esa es una de las grandes ventajas del ecosistema abierto: no dependes de ningún proveedor y tus datos no salen de tu máquina. Sin embargo, ejecutar modelos grandes requiere hardware potente —una GPU con suficiente VRAM— y no todo el mundo tiene una RTX 4090 o un clúster en casa. Modelos como DeepSeek V4-Pro (1.6T parámetros) necesitan múltiples GPUs para funcionar a velocidad aceptable.</p>
<p>Aquí es donde entran los <strong>routers de modelos</strong>: servicios cloud que te permiten usar estos modelos sin necesidad de infraestructura propia. Unifican el acceso a decenas de modelos bajo una misma API, de modo que no tienes que gestionar 20 cuentas y 20 facturas diferentes.</p>
<h3 id="openrouter">OpenRouter</h3>
<p><strong>OpenRouter</strong> es el router más conocido. Funciona como una pasarela unificada: te registras una vez, cargas crédito y accedes a <strong>400+ modelos</strong> de <strong>60+ proveedores</strong>.</p>
<p>Fortalezas:
- Catálogo enorme: desde los modelos frontier (Claude, GPT) hasta los más nicho
- Auto-fallback: si un proveedor falla, OpenRouter redirige automáticamente
- Sin logging por defecto (tu código no se usa para entrenar)
- API compatible con OpenAI (cambias la URL y ya funciona)
- Modelos gratuitos disponibles (limitados)</p>
<p>Debilidades:
- Añade latencia (es una capa intermedia)
- Comisión del 5.5% en compras de crédito
- El tier gratuito es muy limitado (50 requests/día sin crédito)</p>
<p>OpenRouter usa <strong>precios passthrough</strong>: pagas lo mismo que pagarías yendo directamente al proveedor. Su negocio está en la comisión de crédito, no en marcar precio.</p>
<h3 id="groq">Groq</h3>
<p><strong>Groq</strong> es un caso diferente. No es un router, es un <strong>proveedor de inferencia</strong> con hardware propio: sus LPUs (Language Processing Units) son chips diseñados específicamente para ejecutar LLMs. El resultado es una velocidad de inferencia que puede alcanzar <strong>500-1000 tokens/segundo</strong>, muy por encima de lo que ofrecen las GPUs tradicionales.</p>
<p>Fortalezas:
- Velocidad bestial: tiempo hasta el primer token por debajo de 200ms
- Tier gratuito generoso: 250K+ tokens/minuto
- API compatible con OpenAI
- Modelos populares: Llama 4 Scout, Qwen3-32B, DeepSeek</p>
<p>Debilidades:
- Catálogo limitado (solo modelos open-source que ellos optimizan para su hardware)
- No es un router (solo un proveedor)
- Sin posibilidad de auto-hospedar (el hardware LPU es suyo)</p>
<p>Groq es ideal cuando necesitas <strong>velocidad</strong> y trabajas con modelos open-source populares. No te sirve si necesitas un modelo específico que ellos no tengan.</p>
<h3 id="opencode-go">OpenCode Go</h3>
<p><strong>OpenCode Go</strong> es la apuesta del equipo de OpenCode. Por <strong>$10/mes</strong> obtienes acceso a <strong>14+ modelos open-source</strong> de última generación a través de una API única.</p>
<p>Fortalezas:
- Precio planísimo: $10/mes sin preocuparte por tokens
- Modelos frontier open-source: DeepSeek V4 Pro, Qwen 3.6 Plus, Kimi K2.6, GLM-5.1, MiniMax M2.7
- API compatible con OpenAI (funciona con cualquier herramienta que hable OpenAI API)
- Política zero-retention: tu código no se usa para entrenar
- Infraestructura en US, EU y Singapur</p>
<p>Debilidades:
- Límites de consumo por ventanas de tiempo: tu suscripción de $10 te da un pool de $60/mes en compute, con sub-límites de $12/5h y $30/semana para evitar abusos. Con modelos baratos (DeepSeek V4 Flash a $0.14/M tokens) llegas a miles de requests; con modelos caros (Kimi K2.6) el límite se alcanza antes. Nunca pagas más de los $10 al mes.
- Solo modelos open-source (no hay Claude, GPT ni Gemini)
- Dependes de la disponibilidad del servicio</p>
<p>OpenCode Go es perfecto si tu flujo de trabajo se basa en modelos open-source y quieres un coste predecible sin sorpresas en la factura.</p>
<h3 id="comparativa-rapida">Comparativa rápida</h3>
<table>
<thead>
<tr>
<th>Característica</th>
<th>OpenRouter</th>
<th>Groq</th>
<th>OpenCode Go</th>
</tr>
</thead>
<tbody>
<tr>
<td>Modelos disponibles</td>
<td>400+ (todos)</td>
<td>~10-15 (open)</td>
<td>14 (open)</td>
</tr>
<tr>
<td>Modelos cerrados</td>
<td>Sí (Claude, GPT)</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>Velocidad</td>
<td>Variable</td>
<td>Muy alta</td>
<td>Variable</td>
</tr>
<tr>
<td>Precio</td>
<td>Pay-per-use +5.5%</td>
<td>Pay-per-use + free tier</td>
<td>$10/mes fijo</td>
</tr>
<tr>
<td>Latencia añadida</td>
<td>Sí (capa proxy)</td>
<td>No (directo)</td>
<td>Sí</td>
</tr>
<tr>
<td>Auto-fallback</td>
<td>Sí</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>Ideal para</td>
<td>Experimentar con muchos modelos</td>
<td>Velocidad máxima</td>
<td>Coste predecible</td>
</tr>
</tbody>
</table>
<h2 id="conclusion">Conclusión</h2>
<p>El ecosistema de modelos open source en 2026 es más rico que nunca. Hay modelos para cada necesidad, desde los gigantes multimodales como Qwen 3.5 o Llama 4 hasta pequeños pero matones como Phi-4 o Gemma 4 que funcionan en un portátil.</p>
<p>La principal recomendación que puedo dar es:</p>
<ol>
<li><strong>Para uso general con máxima calidad</strong>, Qwen 3.5 y DeepSeek V4 son las mejores opciones open-weight hoy por hoy.</li>
<li><strong>Para ejecución local</strong>, Gemma 4 (31B) o Phi-4 (14B) son imbatibles en relación calidad/recursos.</li>
<li><strong>Para desarrollo de software</strong>, Kimi K2.6 destaca en generación de código y agentes autónomos. Como alternativas, DeepSeek V4-Pro es el rey del SWE-bench Verified (80.6%) para tareas complejas, y Qwen 3.7 Max lidera en SWE-Bench Pro dentro del ecosistema OpenCode Go.</li>
<li><strong>Para acceder a todo sin complicaciones</strong>, OpenRouter es la navaja suiza. Si buscas velocidad, Groq. Si prefieres coste fijo, OpenCode Go.</li>
</ol>
<p>Y recuerda: aunque llamemos "open source" a estos modelos, lo que realmente tenemos son pesos abiertos con licencias variadas. Úsalos, aprovéchalos, pero sé consciente de lo que estás usando y de las limitaciones reales de cada "open" que ves en la etiqueta.</p>]]></description>
        </item>
    
        <item>
            <title>Los límites de la IA: Por qué la evolución del software sigue siendo humana</title>
            <link>https://psanxiao.com/posts/2026-06-14-los-limites-de-la-IA.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-06-14-los-limites-de-la-IA.html</guid>
            <pubDate>Sun, 14 Jun 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Con la llegada de la IA generativa parece que el software ha pasado de ser el producto estrella a convertirse en un accesorio de bajo coste. Al observar la velocidad con la que los modelos de lenguaje generan líneas de código, es fácil caer en la trampa de pensar que el desarrollo de software es un problema resuelto, que cualquiera puede hacerlo y que por tanto en ello no hay valor.</p>
<p>Durante la Revolución Industrial, la llegada del telar mecánico destruyó por completo el sector de los tejedores artesanales. Quienes habían pasado años aprendiendo la técnica manual de entrelazar hilos vieron cómo su oficio desaparecía ante una máquina que hacía lo mismo de forma masiva, rápida y barata. ¿Significó eso el fin de la industria textil? Al contrario. La manufactura de la tela se convirtió en una utilidad genérica, lo que redujo los costes drásticamente. El valor real de la industria se desplazó hacia arriba: hacia el diseño de moda, el patronaje a escala y la logística.</p>
<p>Pero hacer software no va solamente de tejer hilo, el proceso es mucho más complejo y la llegada de la IA no va transformar radicalmente la industria. Va a cambiar cosas y vamos a necesitar adaptarnos, eso sí.</p>
<p>Lo que cuesta entender, al parecer, es lo que la IA realmente hace: encontrar patrones matemáticos en datos existentes. Si limitamos nuestra profesión a lo que la IA puede replicar, corremos el riesgo de congelar la industria. La informática real sigue siendo un terreno estrictamente humano. Como decía Edsger Dijkstra:</p>
<blockquote>
<p><em>"Computer science is no more about computers than astronomy is about telescopes"</em></p>
</blockquote>
<p>La IA es un telescopio potentísimo, pero no es la astronomía. Confundir la capacidad de escribir código sintáctico con la capacidad de resolver problemas mediante la computación es el mayor error conceptual que estamos cometiendo.</p>
<p>Seguramente has experimentado con el <em>vibe coding</em>: te pones a construir una aplicación con IA, piensas en sacarle rendimiento, ponerla en un market y venderla. En unas pocas horas tienes una aplicación funcional y sientes que ya has hecho el 80% del trabajo. Piensas: «Mañana cierro los últimos flecos y la publico». Pero ese 20% que falta resulta no ser tan sencillo. Ya no es cuestión de horas, sino de días o semanas. O simplemente, nunca llegas a publicarla, porque la IA no es tan buena lidiando con la complejidad del mundo real. Esos últimos flecos son el producto, la usabilidad y la infraestructura: todo aquello que requiere el conocimiento y la experiencia de una persona.</p>
<h2 id="lo-que-la-ia-no-sabe-hacer-el-mundo-real-mas-alla-del-codigo">Lo que la IA no sabe hacer: El mundo real más allá del código</h2>
<p>Un modelo de lenguaje puede escribir una función limpia si la instrucción es lo suficientemente meticulosa. El problema es que el software no vive en el vacío; convive en un ecosistema complejo de usuarios, servidores, costes y decisiones estratégicas.</p>
<p>Existen tres dimensiones críticas donde la IA carece de la capacidad operativa para decidir:</p>
<h3 id="1-el-criterio-de-digitalizacion-saber-cuando-no-hacer-software">1. El criterio de digitalización (Saber cuándo NO hacer software)</h3>
<p>La IA siempre va a intentar resolver el problema generando texto o código, porque esa es su naturaleza estadística. Carece del criterio para analizar un proceso de negocio y concluir: <em>"La solución óptima aquí no es construir una aplicación, sino cambiar este flujo organizativo en el mundo real"</em>. Saber cuándo <strong>no</strong> introducir tecnología porque sí, para evitar complejidad innecesaria, es una de las mayores muestras de madurez en ingeniería.</p>
<h3 id="2-la-experiencia-de-usuario-ux">2. La experiencia de usuario (UX)</h3>
<p>La IA no tiene un modelo mental de la realidad. Puede replicar interfaces basadas en patrones de diseño comunes (como colocar un botón de carrito arriba a la derecha), pero no entiende la fricción humana. No sabe el estrés que siente un operario de almacén usando una aplicación bajo la luz del sol directa, ni la confusión de un usuario ante un menú saturado. La UX requiere empatía y observación, algo que no se encuentra en una matriz de <em>embeddings</em>.</p>
<h3 id="3-las-limitaciones-y-el-diseno-de-la-infraestructura">3. Las limitaciones y el diseño de la infraestructura</h3>
<p>Escribir código es fácil; hacer que ese código escale de forma eficiente bajo restricciones de hardware reales es ingeniería pura. La IA no sufre cuando una base de datos PostgreSQL se satura por falta de memoria, ni entiende el impacto en costes que implica mover datos entre diferentes regiones de la nube. No contempla escenarios sin una buena conexión a Internet, con cortes de electricidad o sin cobertura móvil. La IA es como los experimentos de laboratorio, siempre asume condiciones ideales.
Puede darte la sintaxis de una consulta, pero el diseño de una arquitectura tolerante a fallos que optimice los recursos físicos requiere comprender los <em>trade-offs</em> reales del sistema.</p>
<h2 id="la-trampa-del-estancamiento-la-ia-copia-el-pasado-el-humano-disena-el-futuro">La trampa del estancamiento: La IA copia el pasado, el humano diseña el futuro</h2>
<p>Hay una reflexión profunda que quizás estamos ignorando debido al <em>hype</em>: <strong>los modelos de lenguaje construyen software tal y como se ha hecho hasta hoy.</strong> Como los LLMs se entrenan con repositorios existentes (como el histórico de GitHub), son maestros de la probabilidad estadística respecto a lo que ya existe. Esto significa que la IA es, por definición, una fuerza conservadora y retrospectiva.</p>
<blockquote>
<p><strong>El bucle de la imitación:</strong> La IA encuentra y replica patrones. Si detecta que el 90% de los proyectos usan una estructura determinada para una API, te devolverá esa estructura. Está optimizada para darte la respuesta más probable, no la más innovadora.</p>
</blockquote>
<p>Ante un desafío tecnológico inédito, un problema para el cual no existen tutoriales en internet ni código de entrenamiento, la red neuronal falla o alucina. No puede inventar un paradigma de programación nuevo; solo puede combinar los vectores numéricos de lo que alguien ya escribió antes.</p>
<p>Si las personas que nos dedicamos a la informática delegamos el pensamiento y la evolución de la disciplina en los asistentes de código, congelaremos el desarrollo de la tecnología. Nos estancaremos replicando las mismas arquitecturas y los mismos errores del pasado en un bucle infinito de software autogenerado.</p>
<h2 id="innovacion-frente-a-imitacion">Innovación frente a imitación</h2>
<p>La evolución tecnológica nunca ha llegado por hacer de forma más rápida lo que ya sabíamos hacer. Llegó cuando Alan Turing imaginó una máquina que no existía, cuando se diseñaron los primeros sistemas operativos distribuidos para resolver la saturación de los <em>mainframes</em>, o cuando nacieron arquitecturas web descentralizadas para soportar millones de usuarios simultáneos.</p>
<p>Para que la informática siga avanzando, quienes nos dedicamos a la ingeniería debemos cambiar el enfoque de nuestro trabajo diario:</p>
<ul>
<li><strong>Menos memorización de sintaxis, más pensamiento sistémico:</strong> Dejemos que la IA maneje los tokens mecánicos de la sintaxis y enfoquémonos en comprender los fundamentos lógicos y físicos de los sistemas. El hecho en sí de escribir código es fácil para la IA, conoce las estructuras, los patrones, la sintaxis, pero saber qué usar y cuándo es cosa nuestra.</li>
<li><strong>Enfrentar la incertidumbre:</strong> El verdadero valor de la ingeniería radica en los márgenes de los problemas nuevos, allí donde no hay documentación de StackOverflow ni datos de entrenamiento para el modelo.
  La innovación seguirá siendo humana, si dejamos a la IA diseñar las soluciones, serán siempre las que ya conocemos.</li>
<li><strong>Liderar la orquestación:</strong> Tratar a la IA como lo que es: un traductor universal de patrones existentes que acelera la imitación, permitiéndonos a nosotros liberar tiempo para la verdadera innovación y el diseño de soluciones estructuralmente nuevas. La IA es una herramienta que nos hace el trabajo más fácil, pero no hace nuestro trabajo.</li>
</ul>
<h2 id="conclusion">Conclusión</h2>
<p>Al final, la IA que conocemos hoy es solo eso: una herramienta. Una increíblemente potente, sí, pero una herramienta al fin y al cabo. Bien usada, nos facilita la vida, pero ni nos sustituye ni va a hacerlo en el corto plazo.</p>
<p>No es magia. No convierte a un principiante en un experto, ni a alguien sin criterio estético en un buen diseñador. La IA es un espejo que amplifica lo que ya somos.</p>
<p>El futuro no lo construirán quienes solo sepan hablar con la máquina, sino aquellos que, partiendo del criterio y la visión, dominen la IA como una palanca para ejecutar esa visión. Y entre dos profesionales con la misma visión, quien domine la herramienta para trabajar más rápido y mejor, será quien marque la diferencia.</p>]]></description>
        </item>
    
        <item>
            <title>La Guía de la IA, edición desarrollo de software</title>
            <link>https://psanxiao.com/posts/2026-05-28-la-guia-de-la-IA-version-desarrollo.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-05-28-la-guia-de-la-IA-version-desarrollo.html</guid>
            <pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<div class="toc"><span class="toctitle">Índice de contenidos</span><ul>
<li><a href="#la-infraestructura-agentica-el-nuevo-stack">La Infraestructura Agéntica: El nuevo Stack</a><ul>
<li><a href="#el-motor-de-razonamiento-capa-de-computo">El Motor de Razonamiento (Capa de Cómputo)</a></li>
<li><a href="#el-protocolo-mcp-capa-de-conectividad">El Protocolo MCP (Capa de Conectividad)</a></li>
<li><a href="#las-skills">Las Skills</a></li>
<li><a href="#arquitectura-multi-agente-capa-de-gestion">Arquitectura Multi-Agente (Capa de Gestión)</a></li>
<li><a href="#rag-estructurado-capa-de-memoria">RAG Estructurado (Capa de Memoria)</a></li>
<li><a href="#el-bucle-pev-planificar-ejecutar-verificar">El Bucle PEV: Planificar, Ejecutar, Verificar</a></li>
</ul>
</li>
<li><a href="#las-claves-de-la-ingenieria-agentica">Las claves de la Ingeniería Agéntica</a><ul>
<li><a href="#1-el-llm-como-motor-de-razonamiento">1. El LLM como motor de razonamiento</a><ul>
<li><a href="#el-razonamiento-como-proceso-de-decision-tool-use">El Razonamiento como Proceso de Decisión (Tool Use)</a></li>
</ul>
</li>
<li><a href="#2-la-taxonomia-de-modelos-especializacion-en-2026">2. La Taxonomía de Modelos: Especialización en 2026</a><ul>
<li><a href="#modelos-de-razonamiento-profundo-los-arquitectos">Modelos de Razonamiento Profundo (Los Arquitectos)</a></li>
<li><a href="#modelos-de-codigo-y-flash-los-obreros-especializados">Modelos de Código y "Flash" (Los Obreros Especializados)</a></li>
<li><a href="#modelos-de-gran-contexto-los-bibliotecarios">Modelos de Gran Contexto (Los Bibliotecarios)</a></li>
<li><a href="#el-coste-del-razonamiento">El coste del razonamiento</a></li>
<li><a href="#como-elegirlos">Cómo elegirlos</a></li>
</ul>
</li>
<li><a href="#3-estrategia-de-orquestacion-el-patron-planificador-ejecutor">3. Estrategia de Orquestación: El Patrón Planificador-Ejecutor</a><ul>
<li><a href="#integracion-de-skills-y-evaluacion-de-mcps">Integración de Skills y Evaluación de MCPs</a></li>
<li><a href="#paralelizacion-mediante-agentes-y-subagentes">Paralelización mediante Agentes y Subagentes</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#la-conexion-con-la-ingenieria-de-software-profesional">La Conexión con la Ingeniería de Software Profesional</a><ul>
<li><a href="#spec-driven-development-desarrollo-guiado-por-especificacion">Spec-Driven Development (Desarrollo Guiado por Especificación)</a><ul>
<li><a href="#el-fundamento-tecnico-reduccion-de-entropia-en-la-prediccion-de-tokens">El Fundamento Técnico: Reducción de entropía en la predicción de tokens</a></li>
<li><a href="#anatomia-de-una-especificacion-ejecutable-por-ia">Anatomía de una Especificación Ejecutable por IA</a></li>
<li><a href="#el-ciclo-de-desarrollo-guiado-por-especificaciones">El Ciclo de Desarrollo Guiado por Especificaciones</a></li>
</ul>
</li>
<li><a href="#el-harness-el-arnes-de-pruebas-y-validacion">El Harness (El Arnés de Pruebas y Validación)</a><ul>
<li><a href="#que-es-un-harness-de-ingenieria">¿Qué es un Harness de Ingeniería?</a></li>
<li><a href="#la-arquitectura-del-bucle-de-autocorreccion">La arquitectura del bucle de autocorrección</a></li>
<li><a href="#implementacion-real-y-seguridad">Implementación real y seguridad</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#conclusiones-el-verdadero-papel-del-ingeniero">Conclusiones: El verdadero papel del ingeniero</a></li>
</ul>
</div>
<p>En 2026, el desarrollo de software, con IA, ha evolucionado más allá de la simple generación de fragmentos de código mediante prompts aislados. Estamos en plena evolución, del <em>vibe coding</em> —programar por sensaciones— a una <strong>Ingeniería Agéntica</strong> más rigurosa. La IA ya no es un asistente externo; es un componente central de la arquitectura que requiere diseño, validación y observabilidad.</p>
<p>El <strong>vibe coding</strong> consiste en utilizar la IA de forma intuitiva y no estructurada: lanzar un prompt vago, copiar el código resultante, ver si funciona y, si no, pedirle que "lo arregle". Aunque es bueno para prototipar, falla estrepitosamente al escalar por tres razones técnicas:</p>
<ul>
<li><strong>Falta de Determinismo</strong>: Al no haber un "arnés" de pruebas, dependes de la suerte estadística del modelo en ese momento.</li>
<li><strong>Context Rot (Deterioro del contexto)</strong>: En chats largos, el modelo pierde los requisitos iniciales o las restricciones arquitectónicas, introduciendo bugs sutiles que solo aparecen en runtime.</li>
<li><strong>Deuda Técnica Invisible</strong>: La IA suele priorizar la solución inmediata sobre la mantenibilidad. Sin una supervisión estructural, acabas con un "código espagueti" generado por una máquina.</li>
</ul>
<h2 id="la-infraestructura-agentica-el-nuevo-stack">La Infraestructura Agéntica: El nuevo Stack</h2>
<p>Para crear aplicaciones robustas, hemos pasado de "chatear" a implementar una infraestructura de <strong>Ingeniería Agéntica</strong>, o al menos lo estamos intentado. Esta se basa en algunas capas fundamentales, de forma resumida:</p>
<h3 id="el-motor-de-razonamiento-capa-de-computo">El Motor de Razonamiento (Capa de Cómputo)</h3>
<p>Ya no tratamos al LLM como una enciclopedia, sino como una CPU lógica.</p>
<ul>
<li><strong>Modelos de Razonamiento Profundo</strong>: En 2026, usamos modelos que ejecutan una <strong>Cadena de Pensamiento (CoT)</strong> interna para validar su lógica antes de escribir código.</li>
<li><strong>Evaluaciones Automáticas</strong>: El sistema no acepta el código porque "parezca correcto"; lo pasa por un banco de pruebas (evaluaciones) que miden su precisión técnica.</li>
</ul>
<h3 id="el-protocolo-mcp-capa-de-conectividad">El Protocolo MCP (Capa de Conectividad)</h3>
<p>El <strong>Model Context Protocol (MCP)</strong> es el estándar que permite a la IA interactuar con herramientas reales de forma segura.</p>
<ul>
<li>En lugar de que el desarrollador copie y pegue logs de error, el agente tiene una <strong>Skill</strong> conectada vía MCP que le permite leer los logs del servidor, consultar la base de datos o revisar el historial de Git por sí mismo.</li>
</ul>
<h3 id="las-skills">Las Skills</h3>
<p>Las <strong>skills</strong> (o habilidades) son las funciones deterministas y herramientas específicas que ponemos a disposición del agente para que pueda interactuar con el entorno real. Un modelo de lenguaje por sí solo es puramente predictivo, por lo que una skill actúa como su "brazo ejecutor": un fragmento de código (generalmente funciones en Python o TypeScript) diseñado para realizar una tarea concreta, como ejecutar un test unitario, consultar el esquema de una base de datos o leer los logs de un servidor.</p>
<p>Para que el agente pueda utilizarlas, no basta con programar la función lógica, sino que es imprescindible acompañarla de una descripción semántica muy clara. El modelo lee este "contrato" o definición de la skill, comprende para qué sirve y qué parámetros necesita, y decide de manera autónoma cuándo y cómo invocarla en su bucle de razonamiento según los requerimientos del software que está desarrollando.</p>
<h3 id="arquitectura-multi-agente-capa-de-gestion">Arquitectura Multi-Agente (Capa de Gestión)</h3>
<p>En lugar de un único "super-agente", dividimos el trabajo en agentes especializados.</p>
<ul>
<li><strong>Arquitecto</strong>: Define el plan y las interfaces.</li>
<li><strong>Programador</strong>: Implementa la lógica siguiendo el plan.</li>
<li><strong>QA/Tester</strong>: Intenta romper el código del programador antes de que llegue a revisión humana.</li>
</ul>
<h3 id="rag-estructurado-capa-de-memoria">RAG Estructurado (Capa de Memoria)</h3>
<p>Para que la IA "entienda" un repositorio de miles de archivos, usamos <strong>Retrieval-Augmented Generation (RAG)</strong> avanzado.</p>
<ul>
<li><strong>Embeddings de Código</strong>: El sistema fragmenta el código en vectores semánticos, permitiendo que el agente recupere exactamente el componente necesario para su tarea actual sin saturar su ventana de contexto.</li>
</ul>
<p>Para saber más sobre esto, puedes consultar la versión original de <a href="https://psanxiao.com/posts/2026-03-07-la-guia-de-la-IA.html">La Guía de la IA</a> , donde explicamos este y otros conceptos.</p>
<h3 id="el-bucle-pev-planificar-ejecutar-verificar">El Bucle PEV: Planificar, Ejecutar, Verificar</h3>
<p>La diferencia real con el <em>vibe coding</em> es el rigor en el flujo de trabajo. En la ingeniería agéntica, el proceso es circular y auto-corregido:</p>
<ol>
<li><strong>Planificación</strong>: El agente genera un <code>PLAN.md</code> que detalla los cambios. El humano lo audita.</li>
<li><strong>Ejecución</strong>: El agente aplica los cambios en un entorno aislado (sandbox).</li>
<li><strong>Verificación</strong>: Se ejecutan tests automáticos, linters y análisis de seguridad. Si falla, el agente recibe el feedback y vuelve al paso 2 sin intervención humana.</li>
</ol>
<p>En 2026, el desarrollo profesional ya no va sobre quien escribe mejor el código, sino sobre quien diseña los mejores <strong>prompts sistémicos</strong>, las <strong>herramientas MCP</strong> y los <strong>criterios de aceptación</strong> para que su infraestructura agéntica construya software de forma segura y escalable.</p>
<p>O al menos, esa es la teoría.</p>
<h2 id="las-claves-de-la-ingenieria-agentica">Las claves de la Ingeniería Agéntica</h2>
<h3 id="1-el-llm-como-motor-de-razonamiento">1. El LLM como motor de razonamiento</h3>
<p>Para construir software con IA en 2026, el primer paso es dejar de ver al LLM como una base de datos de conocimiento y empezar a verlo como un <strong>motor de razonamiento probabilístico</strong>. En esta fase de la ingeniería agéntica, el modelo no solo genera texto; actúa como el "cerebro" que evalúa el estado de un sistema, decide qué herramientas invocar y valida sus propios resultados.</p>
<h4 id="el-razonamiento-como-proceso-de-decision-tool-use">El Razonamiento como Proceso de Decisión (Tool Use)</h4>
<p>La gran diferencia entre los modelos de "chat" de años anteriores y los actuales modelos de <strong>razonamiento profundo</strong> es la capacidad de gestionar el <strong>Tool Use</strong> (o Function Calling) con criterio técnico.</p>
<p>Anteriormente, los modelos a menudo sufrían de "precipitación": intentaban responder antes de analizar las pre-condiciones. Hoy, los modelos especializados en razonamiento utilizan un <strong>monólogo interno</strong> o <strong>Cadena de Pensamiento (CoT)</strong> para:</p>
<ul>
<li><strong>Analizar la intención</strong>: ¿Qué está pidiendo realmente el desarrollador?.</li>
<li><strong>Seleccionar la herramienta</strong>: Evaluar si necesita consultar el esquema de la base de datos vía <strong>MCP</strong> o si puede resolverlo con la información en su ventana de contexto.</li>
<li><strong>Anticipar efectos</strong>: Razonar sobre cómo un cambio en un modelo de datos afectará a los controladores y a la UI antes de escribir la primera línea de código.</li>
</ul>
<h3 id="2-la-taxonomia-de-modelos-especializacion-en-2026">2. La Taxonomía de Modelos: Especialización en 2026</h3>
<p>No existe un "modelo único" para todo. La ingeniería moderna se basa en la <strong>orquestación selectiva</strong> según las capacidades y costes de cada familia de modelos:</p>
<h4 id="modelos-de-razonamiento-profundo-los-arquitectos">Modelos de Razonamiento Profundo (Los Arquitectos)</h4>
<p>Estos modelos priorizan el <strong>acierto sobre la velocidad</strong>.</p>
<ul>
<li><strong>Fortaleza</strong>: Excelente capacidad para resolver problemas de lógica pura, matemáticas y diseño de sistemas complejos.</li>
<li><strong>Uso ideal</strong>: Planificación de refactorizaciones masivas, resolución de bugs lógicos profundos y orquestación inicial de tareas agénticas.</li>
</ul>
<h4 id="modelos-de-codigo-y-flash-los-obreros-especializados">Modelos de Código y "Flash" (Los Obreros Especializados)</h4>
<p>Modelos optimizados para baja latencia y alta eficiencia en tareas sintácticas.</p>
<ul>
<li><strong>Fortaleza</strong>: Generación de <em>boilerplate</em>, escritura de tests unitarios y documentación.</li>
<li><strong>Uso ideal</strong>: Autocompletado inteligente dentro del IDE y ejecución de sub-tareas definidas previamente por un modelo arquitecto.</li>
</ul>
<h4 id="modelos-de-gran-contexto-los-bibliotecarios">Modelos de Gran Contexto (Los Bibliotecarios)</h4>
<p>Modelos capaces de ingerir millones de tokens (repositorios enteros) en una sola sesión.</p>
<ul>
<li><strong>Fortaleza</strong>: Capacidad para mantener la coherencia global en proyectos gigantescos sin depender exclusivamente de RAG externo.</li>
<li><strong>Uso ideal</strong>: Auditorías de seguridad de todo el código base o migración de versiones de frameworks en múltiples archivos simultáneamente.</li>
</ul>
<p>Los modelos especializados en desarrollo de software son entrenados específicamente, pero no todos los entrenamientos son iguales. Fruto de ello, la manera en la que se enfrentan a una tarea es diferente. Algunos intentarán realizarla de forma global, pero si es demasiado grande se pueden perder entre el contexto, olvidar cosas durante la ejecución, etc. Hay modelos que son entrenados para realizar un plan previo, a modo de TODO, descomponiendo la tarea en pasos concretos, y luego ejecutarlos. Estos suelen conseguir mejores resultados porque manejan mejor todo el contexto, incluso pueden reevaluar el resultado de la subtarea anterior si ven algún problema.</p>
<h4 id="el-coste-del-razonamiento">El coste del razonamiento</h4>
<p>Como ingenieros, debemos entender que el razonamiento no es gratuito. Los modelos que "piensan más" tienen:</p>
<ol>
<li><strong>Mayor Latencia</strong>: El tiempo de respuesta es más alto porque el modelo genera miles de tokens internos de razonamiento que tú no ves.</li>
<li><strong>Mayor Coste de Inferencia</strong>: Estamos pagando por esos tokens de pensamiento interno.</li>
</ol>
<p>Por tanto, usar un modelo de razonamiento profundo para añadir un comentario a una función es un <strong>anti-patrón de ingeniería</strong>. El criterio técnico consiste en equilibrar la complejidad del problema con la potencia del motor de razonamiento elegido.</p>
<h4 id="como-elegirlos">Cómo elegirlos</h4>
<p>Existen rankings técnicos de referencia que permiten orientar la elección del modelo según la tarea: <strong>LMSYS Arena</strong>destaca en preferencias de programación general, <strong>LiveCodeBench</strong> evalúa lógica pura frente a problemas inéditos, y <strong>SWE-bench</strong> mide la capacidad de resolver <em>issues</em> reales de GitHub, lo cual es crítico para elegir un modelo "Arquitecto". Estas herramientas, junto con el leaderboard de <strong>Aider</strong> para edición de archivos, ofrecen una visión clara de qué modelos lideran en razonamiento y ejecución sintáctica en 2026.</p>
<p>No obstante, es fundamental tomar estos datos con prudencia; los benchmarks son entornos controlados que no siempre reflejan las fricciones de una infraestructura agéntica privada. Para una implementación profesional, los rankings deben servir solo como punto de partida, debiendo ser validados con métricas propias de observabilidad que analicen la latencia, el coste por millón de tokens y la precisión específica dentro de tu propio código base.</p>
<p>En el argot ciclista solemos decir que lo importante es el indio, no la flecha. Un buen ciclista con peor material (la bicicleta) siempre será mejor que uno mediocre aunque este lleve lo mejor de lo mejor. El cómo construyamos herramientas alrededor de un modelo, el cómo le demos contexto, instrucciones, etc. puede hacer que un modelo en teoría más modesto nos consiga mejores resultados.</p>
<h3 id="3-estrategia-de-orquestacion-el-patron-planificador-ejecutor">3. Estrategia de Orquestación: El Patrón Planificador-Ejecutor</h3>
<p>La efectividad de un modelo no depende solo de cuántos miles de millones de parámetros tiene, sino de cómo ha sido entrenado para enfrentarse a una tarea. Mientras que los modelos generalistas intentan resolver peticiones de forma global —lo que a menudo provoca que se "pierdan" en el contexto o ignoren restricciones críticas al final de una respuesta larga—, los modelos de razonamiento profundo actúan bajo una lógica de <strong>planificación previa</strong>. Este entrenamiento les permite generar un "monólogo interno" o un mapa de tareas (TODO) donde descomponen el problema en pasos atómicos antes de escribir la primera línea de código.</p>
<p>Esta capacidad de descomposición es lo que permite manejar proyectos complejos sin que la calidad del código se degrade. Al centrarse en subtareas específicas —como definir primero la interfaz, luego la lógica del repositorio y finalmente los tests—, el modelo mantiene una atención mucho más cerrada sobre las reglas de negocio de cada fragmento. Además, este enfoque permite la <strong>reevaluación dinámica</strong>: si el modelo detecta un error en el paso tres, tiene la capacidad de retroceder y ajustar el paso uno, algo que un modelo de generación directa simplemente no puede hacer porque su proceso es puramente predictivo y hacia adelante.</p>
<p>Por eso, en una infraestructura agéntica profesional, el éxito reside en saber qué "cerebro" asignar a cada fase del desarrollo. Utilizamos modelos de razonamiento profundo, como <strong>OpenAI o1</strong> o <strong>DeepSeek-R1</strong>, para la fase de arquitectura y planificación, donde el acierto y la lógica son innegociables. Una vez que el plan es sólido y las subtareas están definidas, podemos delegar la ejecución mecánica en modelos más rápidos y económicos como <strong>Claude 3.5 Haiku</strong> o <strong>GPT-4o-mini</strong>, que destacan por su precisión sintáctica y velocidad. Esta orquestación no solo optimiza el coste y el tiempo de entrega, sino que garantiza que el resultado final sea fruto de una arquitectura pensada y no de una simple probabilidad estadística.</p>
<h4 id="integracion-de-skills-y-evaluacion-de-mcps">Integración de Skills y Evaluación de MCPs</h4>
<p>Un modelo de lenguaje, por muy especializado que esté en código, vive aislado en un entorno puramente conceptual. Para que pueda operar de forma autónoma en el mundo real, necesita herramientas de interacción directa que actúen como sus manos y sus ojos. Estas herramientas se dividen en dos conceptos clave: las <em>skills</em> y los conectores de contexto.</p>
<p>Con el plan trazado, el sistema debe activar las herramientas necesarias para interactuar con el entorno. Aquí es donde integramos las <strong>skills</strong>: las funciones deterministas escritas en código (Python o TypeScript) que permiten al agente ejecutar acciones concretas como correr un linter o empaquetar un binario.</p>
<p>En paralelo, el ingeniero debe evaluar si la tarea requiere conectar con fuentes de información externas o bases de datos locales; de ser así, se despliegan servidores basados en el protocolo <strong>MCP (Model Context Protocol)</strong>. El MCP actúa como el sistema nervioso del agente, permitiéndole consultar de forma estructurada el esquema de una base de datos PostgreSQL, leer archivos locales o comunicarse con APIs de terceros sin saturar la ventana de contexto con volcados masivos de texto.</p>
<p>Cuando te enfrentas a un problema que puede resolverse tanto con una skill como con un servidor MCP —el acceso a una base de datos es el ejemplo de manual—, la elección debe basarse en un criterio de eficiencia y seguridad. Los servidores MCP son excelentes como conectores universales y exploratorios, pero tienden a consumir mucha más ventana de contexto porque vuelcan metadatos estructurados y relaciones complejas para que el modelo decida de forma abierta. Una skill, en cambio, ofrece un control ultra-específico: tú defines la consulta exacta, ahorrando tokens y forzando al modelo a recibir una respuesta atómica. Sin embargo, hay un factor crítico: el riesgo de ejecución. Mientras que un servidor MCP suele estar limitado por diseño a la lectura del contexto, una skill basada en un script local suele ejecutarse con permisos completos de escritura por defecto. Si vas a usar una skill para interactuar con tus datos, es una buena práctica obligatoria crear usuarios del sistema o de la base de datos con permisos capados exclusivamente a nivel de lectura, impidiendo que una mala interpretación del agente altere accidentalmente los datos de tu entorno.</p>
<h4 id="paralelizacion-mediante-agentes-y-subagentes">Paralelización mediante Agentes y Subagentes</h4>
<p>Para evitar cuellos de botella en proyectos de gran envergadura, la arquitectura debe estructurarse mediante una jerarquía de agentes y subagentes. Un agente supervisor recibe el plan general y distribuye las subtareas de manera síncrona o asíncrona entre subagentes especializados que corren en paralelo. Mientras un subagente desarrolla el componente de autenticación, otro puede estar generando de forma simultánea la lógica de la API de pagos. Esta paralelización no solo acelera el ciclo de desarrollo, sino que compartimenta el contexto, asegurando que un error en un módulo no contamine el razonamiento del resto del sistema.</p>
<h2 id="la-conexion-con-la-ingenieria-de-software-profesional">La Conexión con la Ingeniería de Software Profesional</h2>
<p>Toda esta orquestación agéntica cobra sentido real cuando se conecta con dos metodologías críticas que garantizan que el código generado sea predecible, seguro y mantenible.</p>
<h3 id="spec-driven-development-desarrollo-guiado-por-especificacion">Spec-Driven Development (Desarrollo Guiado por Especificación)</h3>
<p>El mayor error que cometen los desarrolladores al integrar agentes de IA en sus flujos de trabajo es asumir que el modelo "entiende" la arquitectura solo porque puede leer el código. Cuando delegamos tareas complejas a un sistema agéntico basándonos en instrucciones abiertas en lenguaje natural ("implementa el módulo de pasarela de pagos"), exponemos al sistema a la deriva semántica. El resultado suele ser un bucle infinito de correcciones, dependencias rotas y código que funciona de forma aislada pero destruye la consistencia del repositorio.</p>
<p>Para construir software profesional con modelos probabilísticos, necesitamos un marco determinista: el <strong>Spec-Driven Development (SDD)</strong> o Desarrollo Guiado por Especificación.</p>
<h4 id="el-fundamento-tecnico-reduccion-de-entropia-en-la-prediccion-de-tokens">El Fundamento Técnico: Reducción de entropía en la predicción de tokens</h4>
<p>Para entender por qué el SDD es imprescindible, debemos recordar cómo funciona un LLM por debajo. Un modelo de lenguaje no compila lógica; calcula la probabilidad estadística de la siguiente unidad de información o token.</p>
<p>Cuando lanzas una petición abierta en lenguaje natural, el espacio semántico de respuestas válidas tiende al infinito. El modelo se ve obligado a elegir entre miles de formas posibles de estructurar una función, nombrar variables o manejar errores. Cuanto mayor es la libertad del modelo, mayor es la <strong>entropía</strong> (el desorden del sistema) y, por tanto, mayor es la probabilidad de que ocurra una alucinación técnica o una inconsistencia arquitectónica.</p>
<p>El Spec-Driven Development mitiga este problema convirtiendo el lenguaje natural vago en un conjunto de restricciones rígidas e innegociables antes de que el agente escriba una sola línea de código de producción. Al alimentar al agente con una especificación técnica estricta (como un esquema JSON o un contrato OpenAPI), acotamos el espacio matemático de soluciones. El modelo ya no tiene que inventar la estructura; solo tiene que calcular los tokens que mejor se ajustan al contrato predefinido. La indeterminación de la IA se reduce al mínimo porque el margen de error probabilístico queda encajonado por la regla de negocio.</p>
<h4 id="anatomia-de-una-especificacion-ejecutable-por-ia">Anatomía de una Especificación Ejecutable por IA</h4>
<p>Una especificación para consumo agéntico no es un documento de requerimientos tradicional lleno de prosa. Debe ser una <strong>fuente de verdad estructurada y procesable</strong> que sirva como contrato tanto para el programador humano como para la flota de subagentes.</p>
<p>Una <em>spec</em> efectiva debe contener tres capas de aislamiento:</p>
<ul>
<li><strong>El Contrato de Interfaz (Sintaxis Estricta)</strong>: Define las firmas exactas de las funciones, los endpoints de las APIs, los tipos de datos de entrada y salida, y los códigos de respuesta esperados. Utilizar formatos estandarizados como OpenAPI (Swagger) o esquemas de TypeScript TypeScript-first asegura que el modelo no improvise nombres de parámetros o tipos de variables.</li>
<li><strong>Las Reglas de Dominio (Semántica de Negocio)</strong>: Describe el comportamiento lógico esperado bajo condiciones específicas. En lugar de explicarlo con ambigüedad, se define mediante lógica booleana o pseudocódigo declarativo (ej: <code>si el estado del usuario es INACTIVO, la API debe retornar 403 inmediatamente</code>).</li>
<li><strong>Restricciones de Infraestructura y Estilo</strong>: Establece qué librerías específicas están permitidas y cuáles están explícitamente prohibidas (ej: <code>usar Leaflet para mapas, prohibido usar OpenLayers</code>), el patrón arquitectónico obligatorio (ej: clean architecture, inyección de dependencias) y las directrices de manejo de excepciones.</li>
</ul>
<h4 id="el-ciclo-de-desarrollo-guiado-por-especificaciones">El Ciclo de Desarrollo Guiado por Especificaciones</h4>
<p>En un entorno de ingeniería real, el flujo de trabajo sigue una secuencia rígida dividida entre la toma de decisiones estratégicas (humano) y la ejecución sintáctica (IA).</p>
<ul>
<li><strong>Diseño de la Spec</strong>: El desarrollador humano colabora con un modelo de razonamiento profundo para redactar la especificación técnica (<code>SPEC.md</code> u OpenAPI).</li>
<li><strong>Auditoría y Bloqueo</strong>: El humano audita la especificación, asegura que cubre las reglas de negocio y los casos límite, y bloquea el archivo. A partir de este momento, la <em>spec</em> es inmutable para los agentes</li>
<li><strong>Inyección y Ejecución</strong>: La <em>spec</em> se inyecta en el contexto de los subagentes ejecutores. Los subagentes programan las funciones ciñéndose estrictamente a las interfaces definidas.</li>
<li><strong>Validación en el Harness</strong>: El código generado se envía directamente al <strong>harness</strong> (el arnés de pruebas automatizadas). El arnés compila el código, corre linters, ejecuta tests unitarios y estresa la aplicación contra los criterios definidos en la especificación. Si un test falla, los logs se devuelven al agente que autocorrige su código hasta cumplir el contrato.</li>
</ul>
<h3 id="el-harness-el-arnes-de-pruebas-y-validacion">El Harness (El Arnés de Pruebas y Validación)</h3>
<p>Una vez que los subagentes generan el código basándose en la especificación, el sistema no puede dar la tarea por buena sin una validación automática: aquí entra el <strong>harness</strong> (o arnés de ingeniería). El <em>harness</em> es el entorno aislado (sandbox o contenedor) provisto de un banco de pruebas automáticas (tests unitarios, de integración, linters y analizadores estáticos de seguridad) diseñados específicamente para validar el código producido. El agente no interactúa directamente con producción; entrega su código al arnés. Si el código pasa todas las pruebas del <em>harness</em>, se considera válido; si falla, los logs de error se inyectan automáticamente en la ventana de contexto del agente como retroalimentación para que inicie su bucle de autocorrección sin intervención humana. El <em>harness</em> es, en definitiva, la red de seguridad técnica que transforma la probabilidad del LLM en el determinismo que exige el software profesional.</p>
<h4 id="que-es-un-harness-de-ingenieria">¿Qué es un Harness de Ingeniería?</h4>
<p>En el desarrollo de software AI-First, el <strong>harness</strong> (o arnés de validación) es un entorno aislado de ejecución —generalmente implementado mediante sandboxes o contenedores seguros— diseñado para interceptar, ejecutar y evaluar de forma determinista el código producido por un agente antes de que este pueda ser integrado en el repositorio principal.</p>
<p>El arnés actúa como un árbitro neutral. Su filosofía es simple: no importa lo seguro que el modelo afirme estar sobre su propuesta; el código no tiene valor hasta que demuestra su validez en runtime bajo pruebas controladas. El agente no interactúa de forma directa con las ramas productivas ni realiza commits automáticos; su único canal de entrega es el propio arnés.</p>
<h4 id="la-arquitectura-del-bucle-de-autocorreccion">La arquitectura del bucle de autocorrección</h4>
<p>La principal virtud del <em>harness</em> no es solo detener el código defectuoso, sino cerrar el bucle de retroalimentación (<em>feedback loop</em>) para que el sistema se repare a sí mismo sin consumir tiempo del desarrollador humano. Esta infraestructura opera en cuatro etapas secuenciales:</p>
<ul>
<li><strong>Intercepción y Aislamiento</strong>: El agente finaliza la edición de un componente y envía los archivos modificados al arnés. Esta ejecución ocurre dentro de un contenedor efímero (ej. Docker) totalmente aislado de la máquina local y de los servidores de producción para mitigar riesgos de seguridad.</li>
<li><strong>Análisis Estático y Estilo</strong>: El arnés somete los archivos a herramientas automáticas de formateo y estilo (linters como ESLint o Black) y a analizadores estáticos de seguridad. Si el modelo ha inventado una dependencia, ha dejado una credencial expuesta en el código o viola las reglas de tipado estricto, el arnés detiene el proceso.</li>
<li><strong>Ejecución de la Suite de Pruebas</strong>: El arnés lanza de forma automatizada las pruebas unitarias y de integración vinculadas al módulo modificado. Estas pruebas han sido predefinidas por el equipo de ingeniería o generadas a partir de una especificación técnica rígida (<em>Spec-Driven Development</em>).</li>
<li><strong>Enrutamiento del Output (Paso o Corrección)</strong>: Si el código supera todas las pruebas del pipeline de forma determinista, el arnés valida la tarea y genera automáticamente una solicitud de extracción (Pull Request) para la revisión final del ingeniero humano. Si se detecta un fallo, el arnés intercepta la salida estándar de error (<code>stderr</code>), captura los logs detallados del compilador o del framework de pruebas, y los inyecta estructuradamente de vuelta en el contexto del agente.</li>
</ul>
<h4 id="implementacion-real-y-seguridad">Implementación real y seguridad</h4>
<p>Desplegar un arnés profesional requiere tomar decisiones estrictas de infraestructura, poniendo especial atención en dos factores críticos:</p>
<ul>
<li>
<p><strong>Sandboxing estricto:</strong> Permitir que un LLM ejecute código de forma dinámica significa darle la capacidad de correr comandos en el terminal. El arnés debe estar completamente capado a nivel de red (sin acceso a internet a menos que sea estrictamente necesario para descargar dependencias controladas) y con acceso restringido al sistema de archivos para evitar que un bucle defectuoso o una inyección de prompt comprometa la infraestructura de la empresa.</p>
</li>
<li>
<p><strong>Condición de parada y control de costes:</strong> Un agente atrapado en un error lógico complejo puede intentar corregirse a sí mismo infinitamente, consumiendo miles de tokens en el proceso. El arnés debe configurar límites estrictos de ejecución (ej: un máximo de 3 a 5 intentos de autocorrección). Si el agente no logra superar los tests tras el límite fijado, el arnés aborta la operación, congela el estado y alerta al desarrollador humano proporcionando la traza completa para su intervención.</p>
</li>
</ul>
<h2 id="conclusiones-el-verdadero-papel-del-ingeniero">Conclusiones: El verdadero papel del ingeniero</h2>
<p>En esta era de la IA —y ya veremos lo que viene después—, la ingeniería del software seguirá siendo ingeniería del software. No estamos presenciando el fin de nuestra profesión, sino una evolución directa de nuestras responsabilidades. Los ingenieros seguiremos exactamente en nuestro papel de siempre, enfrentados ahora a un nuevo reto arquitectónico: intentar hacer que un modelo probabilístico se comporte de forma determinista.</p>
<p>El tablero se ha movido y el valor ya no está en el acto mecánico de escribir código, sino en crear los sistemas, las especificaciones y los arneses de validación necesarios para garantizar que lo que escriban las máquinas sea bueno, seguro y mantenible. Nuestra función es domar la estadística subyacente de los modelos y transformarla en software predecible de producción.</p>
<p>Seguiremos haciendo lo que sabemos hacer, ingeniería.</p>]]></description>
        </item>
    
        <item>
            <title>Gemma 4 en local: Del chat a la automatización con OpenCode y LM Studio</title>
            <link>https://psanxiao.com/posts/2026-04-22-gemma4-local-con-lmstudio-opencode.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-04-22-gemma4-local-con-lmstudio-opencode.html</guid>
            <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Hasta hace muy poco, los modelos locales eran poco más que una curiosidad técnica o juguetes para tareas extremadamente simples. El lanzamiento reciente de Gemma 4 se presenta como un paso adelante: un modelo que promete capacidades de razonamiento serias en un tamaño lo suficientemente contenido como para correr en un portátil convencional.</p>
<p>Esto no significa necesariamente que vayamos a cancelar nuestras suscripciones hoy mismo. La propuesta de valor de Gemma 4 es, sobre el papel, ayudarnos a ahorrar tokens de nuestras cuentas de pago y ganar privacidad en tareas mecánicas o procesamiento de datos locales. En este post, vamos a comprobar si realmente es capaz de actuar como un agente operativo configurándolo con LM Studio y OpenCode.</p>
<h2 id="el-fundamento-que-significan-los-numeros">El Fundamento: ¿Qué significan los números?</h2>
<p>Al buscar Gemma 4, verás nomenclaturas como "26B A4B". Descifrarlas es vital para no bloquear tu máquina:</p>
<ul>
<li>
<p>Los Parámetros (B): La "B" significa Billions (miles de millones). Son las variables que el modelo ajustó durante su entrenamiento. A más parámetros, mayor capacidad de razonamiento.</p>
</li>
<li>
<p>Arquitectura MoE (Mixture of Experts): El modelo 26B A4B tiene 26 mil millones de parámetros totales, pero solo activa 4 mil millones (Active) por cada token generado. Obtienes la inteligencia de un modelo grande con la velocidad de uno pequeño, aunque necesitas RAM para alojar los 26B enteros.</p>
</li>
</ul>
<h2 id="el-formato-gguf-vs-mlx">El Formato: GGUF vs MLX</h2>
<ul>
<li>
<p><strong>GGUF: El estándar universal</strong>. Es el formato más común para Windows o Linux. Su gran ventaja es el GPU Offloading: si el modelo no cabe entero en tu tarjeta gráfica (VRAM), GGUF permite que la CPU ayude con el trabajo sobrante de forma transparente.</p>
</li>
<li>
<p><strong>MLX: El "traje a medida" para Apple Silicon</strong>. Si tienes un Mac (M1 a M4), el formato MLX es superior. Está diseñado por Apple para aprovechar la memoria unificada, permitiendo que la CPU y la GPU compartan datos instantáneamente sin cuellos de botella. Es más rápido y eficiente que cualquier otro formato en esta arquitectura.</p>
</li>
</ul>
<h2 id="cuantizacion-por-que-hablamos-de-bits">Cuantización: ¿Por qué hablamos de "Bits"?</h2>
<p>Los pesos originales de un modelo ocupan mucha memoria (16 bits). Cuantizar es reducir esos bits para que el modelo quepa en hardware doméstico:</p>
<ul>
<li>
<p><em>8 bits</em>: Casi sin pérdida de inteligencia, pero pesado.</p>
</li>
<li>
<p><em>4 bits (Q4_K_M)</em>: El estándar de oro. El modelo ocupa una cuarta parte del original con una pérdida mínima de razonamiento. Siempre que puedas, apunta a este nivel.</p>
</li>
<li>
<p><em>2 bits</em>: El modelo se vuelve "torpe" y pierde coherencia lógica. Solo como último recurso.</p>
</li>
</ul>
<h2 id="licencia-apache-20-un-cambio-de-paradigma">Licencia Apache 2.0: Un cambio de paradigma</h2>
<p>Uno de los aspectos más disruptivos de Gemma 4 no es técnico, sino legal. Históricamente, modelos como Llama o las versiones previas de Gemma utilizaban licencias personalizadas de "pesos abiertos" que imponían restricciones de uso comercial o límites de usuarios.</p>
<p>Gemma 4 rompe con esto al adoptar la licencia Apache 2.0. A diferencia de los modelos anteriores que eran "abiertos pero con condiciones", Apache 2.0 es una licencia permisiva de software libre real. Esto permite a cualquier desarrollador o empresa modificar, distribuir y usar el modelo con mayor libertad.</p>
<h2 id="mas-alla-del-chat-gemma-4-en-modo-agente">Más allá del chat: Gemma 4 en Modo Agente</h2>
<p>Aquí es donde Gemma 4 brilla frente a sus predecesores. Ha sido diseñada con soporte nativo para function-calling y flujos de trabajo agénticos. Mientras que en LM Studio solo tienes un chat, herramientas como OpenCode permiten que Gemma 4 actúe como un agente de codificación.</p>
<h3 id="que-es-opencode">¿Qué es OpenCode?</h3>
<p>OpenCode es un agente de código abierto para tu terminal o IDE que puede leer tus archivos, ejecutar comandos de shell y aplicar correcciones automáticamente. No solo te da el código; crea el archivo, lo prueba y lo itera hasta que funciona.</p>
<h3 id="configuracion-del-entorno-paso-a-paso">Configuración del entorno (paso a paso)</h3>
<p>Para tener este flujo de trabajo, necesitamos conectar ambas herramientas:</p>
<p><strong>En LM Studio</strong>:</p>
<ul>
<li>
<p>Descarga Gemma 4 26B A4B (o la versión E4B si tienes poca RAM).</p>
</li>
<li>
<p>Ve a la pestaña de Local Server y actívalo en el puerto 1234.</p>
</li>
<li>
<p>Asegúrate de subir el GPU Offload al máximo y ajustar el contexto a un mínimo de 32K.</p>
</li>
</ul>
<p><strong>En OpenCode</strong>:</p>
<p>Configura el archivo opencode.json para que apunte a tu servidor local:</p>
<div class="codehilite"><pre><span></span><code><span class="nt">&quot;lmstudio&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;LM Studio&quot;</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;npm&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;@ai-sdk/openai-compatible&quot;</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;options&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="nt">&quot;baseURL&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:1234/v1&quot;</span><span class="p">,</span>
<span class="w">    </span><span class="nt">&quot;apiKey&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;lm-studio&quot;</span>
<span class="w">  </span><span class="p">},</span>
<span class="w">  </span><span class="nt">&quot;models&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="nt">&quot;gemma-4-e2b&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Gemma 4 Local (LM Studio)&quot;</span>
<span class="w">    </span><span class="p">}</span>
<span class="w">  </span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>

<p>Ahora, desde tu terminal, puedes lanzar comandos como: opencode "refactoriza este componente usando hooks de React" y el agente usará a Gemma 4 para realizar la tarea directamente en tu sistema de archivos.</p>
<p>Aunque sobre el papel todo parece sencillo, suele haber un problema con estas configuraciones. Le pides a opencode que haga algo usando gemma 4 y en lugar de esa acción te entrega un mensaje diciendo como se hace. Las herramientas no se terminan de entender entre sí. Raro en informática verdad?.</p>
<h2 id="que-es-la-paralisis-del-modelo">¿Qué es la parálisis del modelo?</h2>
<p>Aunque Gemma 4 está entrenada para actuar como agente, su entrenamiento de refuerzo (RLHF) a menudo prioriza ser un "asistente servicial de chat". Ante una orden como "lista los archivos", el modelo puede caer en la parálisis de explicar en lugar de ejecutar. Te dirá "Para ver los archivos deberías usar ls" en lugar de emitir el comando técnico que OpenCode necesita procesar.</p>
<h3 id="el-system-prompt-como-protocolo-operativo">El System Prompt como Protocolo Operativo</h3>
<p>Para romper esta inercia, debemos configurar un System Prompt en LM Studio que actúe como un "contrato de ejecución". No le estamos enseñando capacidades nuevas; le estamos indicando qué rol operativo debe asumir en este flujo de trabajo, por ejemplo:</p>
<p>"Eres un asistente de programación integrado en el terminal mediante OpenCode. Obligatorio: Para cualquier acción que requiera el sistema (leer archivos, listar directorios, ejecutar comandos), utiliza siempre el formato de herramientas de OpenCode. No te limites a escribir el comando, ejecútalo."</p>
<p>Este prompt garantiza que el modelo pase del modo "consultor" al modo "ejecutor", emitiendo las señales JSON correctas para que OpenCode actúe sobre tu sistema de archivos.</p>
<h2 id="conclusion">Conclusión</h2>
<p>Gemma 4 es el primer modelo abierto que realmente permite un desarrollo local-first con capacidades agénticas algo serias. Pero seamos realistas, no se puede comparar con los servicios por API de los big players. Es una buena alternativa para no gastar tokens en tareas sencillas. Y Evidentemente, si tienes que trabajar con datos sensibles o necesitas privacidad y trabajar en local, aunque sea limitado, puede ser una gran ayuda.</p>
<p>Esto abre posibilidades interesantes, además, para explorar técnicas de trabajo con IA sin quemar el presupuesto de tokens. Eso sí, no esperes que te permita olvidarte de tus suscripciones actuales, porque las tareas que vas a poder delegar todavía están limitadas. Toca probarla a fondo y ver hasta dónde llega.</p>]]></description>
        </item>
    
        <item>
            <title>Optimización de flujos de trabajo con OpenCode y Ollama: IA local para tareas sencillas</title>
            <link>https://psanxiao.com/posts/2026-03-28-optimiza-flujo-trabajo-ia-local-opencode-ollama.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-03-28-optimiza-flujo-trabajo-ia-local-opencode-ollama.html</guid>
            <pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>En el desarrollo de software, a menudo nos enfrentamos a tareas que, aunque sencillas, resultan tediosas: escribir scripts de automatización, comparar estructuras de archivos en diferentes directorios o realizar transformaciones de datos repetitivas. Aunque herramientas en la nube como Claude o GPT-4 son excelentes para tareas complejas, utilizarlas para estos procesos menores implica un consumo innecesario de tokens y una dependencia constante de servicios de pago.</p>
<p>La alternativa más eficiente hoy en día es el uso de <strong>modelos de lenguaje locales</strong>. Gracias a la integración entre <strong>Ollama</strong> y el proyecto CLI <strong>OpenCode</strong>, es posible ejecutar un asistente potente directamente en tu máquina, sin costes de suscripción y con total privacidad.</p>
<h2 id="1-verificacion-de-hardware-que-puedes-ejecutar">1. Verificación de hardware: ¿Qué puedes ejecutar?</h2>
<p>El primer paso para trabajar en local es conocer la capacidad real de tu equipo. No necesitas una estación de trabajo de última generación para tareas de código básicas, pero sí un mínimo de recursos para que la experiencia sea fluida.</p>
<p>Una herramienta muy recomendable para esto es <a href="https://canirun.ai">canirun.ai</a>. Este sitio analiza tus especificaciones técnicas (especialmente la memoria RAM y la VRAM de tu tarjeta gráfica) y te indica qué modelos podrás ejecutar.</p>
<h2 id="2-el-equilibrio-entre-potencia-y-ligereza">2. El equilibrio entre potencia y ligereza</h2>
<p>Para tareas de automatización y ayuda en el código, la regla general es que un modelo a partir de <strong>7 mil millones de parámetros (7B)</strong> suele ser el punto de equilibrio ideal. Son lo suficientemente inteligentes para entender lógica de programación y lo bastante ligeros para correr rápido en hardware doméstico moderno.</p>
<p>En mi caso personal, estoy utilizando actualmente <strong>Qwen 2.5 Coder 7B</strong>. Para generar pequeños scripts de Python o comparar ficheros JSON de gran tamaño, su respuesta es casi instantánea y la precisión es sorprendente. No obstante, dependiendo de tu hardware (si tienes más de 32GB de RAM o una GPU potente), podrías escalar a modelos de 14B o 32B si buscas un razonamiento más profundo.</p>
<h2 id="3-configuracion-simplificada-el-comando-magico">3. Configuración simplificada: El comando "mágico"</h2>
<p>Aunque OpenCode permite una configuración manual detallada, la forma más rápida y limpia de conectar tus modelos locales con el asistente es utilizar el puente directo que ofrece Ollama.</p>
<p>Una vez tengas instalado Ollama y hayas descargado tu modelo preferido (por ejemplo, con <code>ollama pull qwen2.5-coder</code>), solo tienes que ejecutar:</p>
<div class="codehilite"><pre><span></span><code>ollama<span class="w"> </span>launch<span class="w"> </span>opencode
</code></pre></div>

<p>Este comando es clave porque automatiza toda la configuración: detecta tu instancia local, establece las variables de entorno necesarias y lanza la interfaz de OpenCode lista para trabajar. Evitas así tener que configurar manualmente proveedores externos o servicios en la nube, manteniendo todo el flujo 100% local.</p>
<h2 id="4-casos-de-uso-ideales">4. Casos de uso ideales</h2>
<p>¿Cuándo merece la pena usar este setup en lugar de una IA comercial? Principalmente en tareas de "baja complejidad pero alta fricción":</p>
<ul>
<li><strong>Manipulación de archivos</strong>: "Crea un script que renombre todos los .txt de esta carpeta a .md y les añada la fecha actual".</li>
<li><strong>Comparación lógica</strong>: "Analiza estos dos directorios y dime qué funciones faltan por sincronizar".</li>
<li><strong>Limpieza de datos</strong>: "Tengo este CSV mal formateado, genera un script para normalizar las columnas".</li>
</ul>
<h2 id="conclusion">Conclusión</h2>
<p>La combinación de OpenCode y Ollama no solo es una cuestión de ahorro de costes (que también), sino de agilidad y privacidad. Al delegar las tareas más pesadas y repetitivas a un modelo local de 7B, liberas tu presupuesto de tokens para problemas realmente complejos y mantienes un flujo de trabajo en la terminal mucho más dinámico.</p>]]></description>
        </item>
    
        <item>
            <title>La guía de la IA</title>
            <link>https://psanxiao.com/posts/2026-03-07-la-guia-de-la-IA.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-03-07-la-guia-de-la-IA.html</guid>
            <pubDate>Sat, 07 Mar 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Dedicándome a la tecnología, trabajando con software y manteniendo un blog donde me gusta escribir y lo hago menos de lo que me gustaría, resulta casi imposible no hablar de la Inteligencia Artificial. Durante el último año, la IA ha pasado de ser casi ciencia ficción a inundarlo todo.</p>
<p>Este post, más largo de lo habitual, nace de una necesidad personal: la de poner en orden mis propias notas, investigaciones y aprendizajes. Al final, escribir es la mejor forma que conozco de estructurar las ideas y separar el grano de la paja. Mi intención con esta serie no es venderte la última herramienta de moda, sino bajar a tierra lo que está pasando y cómo podemos entender esta tecnología sin que nos explote la cabeza.</p>
<div class="toc"><span class="toctitle">Índice de contenidos</span><ul>
<li><a href="#ni-magia-ni-robots-solo-computacion-y-patrones">Ni magia, ni robots: Solo computación y patrones</a></li>
<li><a href="#por-que-ahora">¿Por qué ahora?</a></li>
<li><a href="#que-es-un-llm-en-realidad">¿Qué es un LLM en realidad?</a><ul>
<li><a href="#los-tres-pilares-de-lo-que-puede-generar">Los tres pilares de lo que puede generar:</a></li>
</ul>
</li>
<li><a href="#que-no-es-la-ia">¿Qué NO es la IA?</a><ul>
<li><a href="#como-aprende-una-maquina">Cómo aprende una máquina?</a></li>
</ul>
</li>
<li><a href="#el-espejo-humano-el-sesgo-que-nos-complica-la-vida">El espejo humano: El sesgo que nos complica la vida</a></li>
<li><a href="#capitulo-2-el-diccionario-de-supervivencia">Capítulo 2. El Diccionario de Supervivencia</a><ul>
<li><a href="#1-el-token-la-unidad-de-medida">1. El Token: La unidad de medida</a></li>
<li><a href="#2-la-ventana-de-contexto-no-es-un-pozo-sin-fondo">2. La Ventana de Contexto: No es un pozo sin fondo</a></li>
<li><a href="#3-embeddings-el-carnet-de-identidad-de-tus-datos">3. Embeddings: El carnet de identidad de tus datos</a></li>
<li><a href="#4-alucinaciones-cuando-la-probabilidad-falla">4. Alucinaciones: Cuando la probabilidad falla</a></li>
<li><a href="#5-parametros-el-tamano-del-cerebro">5. Parámetros: El tamaño del "cerebro"</a></li>
<li><a href="#6-temperatura-robot-o-artista">6. Temperatura: ¿Robot o Artista?</a></li>
<li><a href="#7-el-rag-como-aprende-la-ia-sobre-tus-datos">7. El RAG: ¿Cómo aprende la IA sobre tus datos?</a><ul>
<li><a href="#como-funciona-el-rag-por-dentro">¿Cómo funciona el RAG por dentro?</a></li>
<li><a href="#por-que-herramientas-como-notebooklm-parecen-acotarse-tanto">¿Por qué herramientas como NotebookLM parecen "acotarse" tanto?</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#capitulo-3-el-traductor-universal">Capítulo 3. El Traductor Universal</a><ul>
<li><a href="#1-el-codigo-como-arquitectura-logica">1. El código como arquitectura lógica</a></li>
<li><a href="#2-por-que-algunos-modelos-programan-mejor-que-otros">2. ¿Por qué algunos modelos programan mejor que otros?</a></li>
<li><a href="#3-imagenes-y-video-traduciendo-palabras-a-pixeles">3. Imágenes y Vídeo: Traduciendo palabras a píxeles</a></li>
<li><a href="#4-la-trampa-del-dibujo-por-que-la-ia-no-sabe-cuantos-dedos-tiene-una-mano">4. La trampa del dibujo: ¿Por qué la IA no sabe cuántos dedos tiene una mano?</a></li>
<li><a href="#5-por-que-unos-modelos-son-mas-rapidos-que-otros">5. ¿Por qué unos modelos son más rápidos que otros?</a></li>
</ul>
</li>
<li><a href="#capitulo-4-instrucciones-operativas-prompting">Capítulo 4. Instrucciones operativas (Prompting)</a><ul>
<li><a href="#1-rompe-el-espejo-de-la-conversacion-a-la-instruccion">1. Rompe el espejo: De la conversación a la instrucción</a></li>
<li><a href="#2-la-anatomia-de-un-prompt-profesional">2. La anatomía de un prompt profesional</a></li>
<li><a href="#3-la-tecnica-de-la-cadena-de-pensamiento">3. La técnica de la "Cadena de Pensamiento"</a></li>
<li><a href="#4-el-few-shot-ensenar-con-ejemplos">4. El "Few-Shot": Enseñar con ejemplos</a></li>
<li><a href="#5-itera-el-prompt-perfecto-no-existe-a-la-primera">5. Itera: El prompt perfecto no existe a la primera</a></li>
</ul>
</li>
<li><a href="#capitulo-5-las-herramientas-de-desarrollo-de-software">Capítulo 5. Las Herramientas de Desarrollo de Software</a><ul>
<li><a href="#el-agente-el-cerebro-con-iniciativa">El Agente: El "Cerebro" con iniciativa</a></li>
<li><a href="#mcp-el-protocolo-que-lo-cambia-todo">MCP: El protocolo que lo cambia todo</a></li>
<li><a href="#las-skills-herramientas-las-manos-del-agente">Las Skills (Herramientas): Las "Manos" del agente</a><ul>
<li><a href="#1-skills-nativas-las-que-ya-vienen-instaladas">1. Skills Nativas (Las que ya vienen "instaladas")</a></li>
<li><a href="#2-skills-de-ecosistema-marketplace-de-conectores">2. Skills de Ecosistema (Marketplace de conectores)</a></li>
<li><a href="#3-skills-a-medida-las-que-tu-programas">3. Skills a medida (Las que tú programas)</a></li>
</ul>
</li>
<li><a href="#como-encaja-todo-esto-ejemplo-practico">¿Cómo encaja todo esto? (Ejemplo práctico)</a></li>
<li><a href="#instrucciones-persistentes-los-archivos-md-y-ficheros-de-configuracion">Instrucciones persistentes: Los archivos .md y ficheros de configuración</a></li>
</ul>
</li>
<li><a href="#capitulo-6-estrategia-de-modelos-a-quien-le-pides-cada-tarea">Capítulo 6. Estrategia de modelos: ¿A quién le pides cada tarea?</a><ul>
<li><a href="#1-modelos-de-razonamiento-o-series-deep-thinking">1. Modelos de Razonamiento (O-series / "Deep Thinking")</a></li>
<li><a href="#2-modelos-de-desarrollo-coding-assistants">2. Modelos de Desarrollo (Coding Assistants)</a></li>
<li><a href="#3-modelos-flash-o-ligeros-velocidad-y-eficiencia">3. Modelos "Flash" o Ligeros (Velocidad y Eficiencia)</a></li>
<li><a href="#4-modelos-de-gran-contexto-la-memoria-infinita">4. Modelos de Gran Contexto (La memoria infinita)</a></li>
</ul>
</li>
<li><a href="#capitulo-7-conclusiones-y-el-camino-a-seguir">Capítulo 7. Conclusiones y el camino a seguir</a><ul>
<li><a href="#1-la-comprension-es-tu-mejor-herramienta">1. La comprensión es tu mejor herramienta</a></li>
<li><a href="#2-solo-estamos-rascando-la-superficie">2. Solo estamos rascando la superficie</a></li>
<li><a href="#3-orquestacion-frente-a-monopolio">3. Orquestación frente a monopolio</a></li>
<li><a href="#reflexion-final">Reflexión final</a></li>
</ul>
</li>
</ul>
</div>
<h2 id="ni-magia-ni-robots-solo-computacion-y-patrones">Ni magia, ni robots: Solo computación y patrones</h2>
<p>A veces parece que hay una especie de "niebla" mental sobre la IA. Parece que estamos ante un oráculo o un cerebro consciente. Lo que veíamos en las películas se ha hecho realidad, y tenemos entre nosotros un <em>Skynet</em> o <em><a href="https://es.wikipedia.org/wiki/HAL_9000">HAL</a></em> de verdad. Pero si abrimos el capó y miramos los engranajes, la realidad es mucho más terrenal.</p>
<p>En esencia, la IA es software diseñado para imitar capacidades humanas, pero con una diferencia fundamental respecto al desarrollo tradicional. Si un programa clásico es una receta rígida donde yo, como programador, defino que <em>"si pasa A, haz B"</em>, la IA es un <strong>aprendiz de patrones</strong>. No necesita que le dé todas las reglas por escrito; ella misma encuentra las regularidades en los datos. Pero ojo, no "piensa". Es pura estadística aplicada a una escala masiva.</p>
<h2 id="por-que-ahora">¿Por qué ahora?</h2>
<p>Algo que solemos ignorar es que las <strong><a href="https://es.wikipedia.org/wiki/Red_neuronal_artificial">redes neuronales</a></strong> no son una novedad de hace dos años. La idea de imitar las conexiones sinápticas para procesar datos es una teoría que ya se manejaba en los años 50. Entonces, ¿por qué no tuvimos este "boom" hace décadas?</p>
<p>Para que estas redes neuronales "despertaran", han necesitado dos ingredientes que solo coinciden ahora:</p>
<ul>
<li><strong>Datos masivos:</strong> Internet se ha convertido en el campo de entrenamiento más grande de la historia.</li>
<li><strong>Hardware (GPUs):</strong> Necesitábamos chips capaces de hacer billones de operaciones por segundo. La receta ya estaba escrita, pero hasta hace poco no teníamos el horno lo bastante potente para cocinarla.</li>
</ul>
<h2 id="que-es-un-llm-en-realidad">¿Qué es un LLM en realidad?</h2>
<p>Los modelos de lenguaje que usamos hoy son redes neuronales gigantescas entrenadas para una sola tarea: <strong>adivinar la siguiente palabra.</strong></p>
<ul>
<li>Si escribes "El cielo está...", la red neuronal ha procesado tanta información que sabe que la palabra más probable es "azul".</li>
<li>No es que "entienda" el concepto de cielo, es que es un maestro de la probabilidad estadística gracias a esa capacidad de computación masiva.</li>
</ul>
<p>Hasta hace nada, la IA se dedicaba a clasificar: te decía si un correo era spam o si en una foto aparecía un gato. Era IA discriminativa. Lo que ha cambiado las reglas del juego es la <strong>IA Generativa</strong>.</p>
<p>Como su nombre indica, su superpoder es crear contenido nuevo. Ha pasado de organizar carpetas a ser capaz de redactar un texto, generar una imagen desde cero o, lo que a muchos nos interesa, escribir una función de código que funciona a la primera. No es que "sepa" lo que hace, es que sabe qué palabra o píxel tiene más probabilidades de ir después del anterior.</p>
<h3 id="los-tres-pilares-de-lo-que-puede-generar">Los tres pilares de lo que puede generar:</h3>
<ol>
<li><strong>Texto (LLMs):</strong> Como ya vimos, son redes neuronales maestras en la probabilidad. No solo escriben poemas; pueden programar software, resumir libros o traducir idiomas captando los matices culturales, no solo palabra por palabra.</li>
<li><strong>Imagen y Arte Visual:</strong> Modelos como Midjourney o DALL-E han aprendido la relación entre las palabras y los píxeles. Saben qué aspecto tiene la "luz de atardecer" o el "estilo cyberpunk" y pueden construir una imagen desde cero (píxel a píxel) a partir de una frase.</li>
<li><strong>Multimodalidad (El presente):</strong> Esto es lo más nuevo y potente. Es la capacidad de la IA para saltar entre formatos. Por ejemplo, una IA que puede "ver" una foto de tu nevera y "escribir" una receta con lo que hay dentro, o una IA que "escucha" un audio y lo convierte en un vídeo.</li>
</ol>
<h2 id="que-no-es-la-ia">¿Qué NO es la IA?</h2>
<ul>
<li><strong>No es un buscador como Google:</strong> Un buscador te lleva a una web; una IA genera una respuesta nueva combinando lo que sabe.</li>
<li><strong>No tiene sentimientos:</strong> Si te pide perdón por un error, no es porque esté arrepentida, es porque ha aprendido que "lo siento" es la respuesta socialmente correcta en esa situación.</li>
<li><strong>No es infalible:</strong> Puede equivocarse (y mucho). Es una herramienta de apoyo, no una verdad absoluta.</li>
</ul>
<h3 id="como-aprende-una-maquina">Cómo aprende una máquina?</h3>
<p>Imagina que quieres enseñarle a un niño a distinguir entre un perro y un gato. No le das un manual de 500 páginas sobre anatomía felina; simplemente ve un perro y le dices: "Esto es un perro", ve un gato y le dices "Esto es un gato". Aprende por repetición y asociación.</p>
<p>Con la IA pasa exactamente lo mismo:</p>
<ol>
<li><strong>Entrenamiento:</strong> Le "alimentamos" con millones de ejemplos (textos, fotos, códigos).</li>
<li><strong>Patrones:</strong> La máquina nota que los gatos suelen tener orejas puntiagudas y los perros hocicos más largos.</li>
<li><strong>Predicción:</strong> Cuando le enseñas una foto nueva, no "sabe" qué es, pero dice: "Hay un <strong>98%</strong> de probabilidades de que esto sea un gato".</li>
</ol>
<h2 id="el-espejo-humano-el-sesgo-que-nos-complica-la-vida">El espejo humano: El sesgo que nos complica la vida</h2>
<p>Aquí entra un tema que me parece clave para entender por qué a veces nos frustramos con estas herramientas. En los años 60, Joseph Weizenbaum creó <strong><a href="https://es.wikipedia.org/wiki/ELIZA">ELIZA</a></strong>, un chatbot básico que imitaba a un terapeuta. Weizenbaum lo programó para imitar a un <strong>terapeuta rogeriano</strong> (una técnica de psicología que consiste en devolverle al paciente sus propias palabras).</p>
<ul>
<li><strong>Si tú decías:</strong> "Me duele la cabeza".</li>
<li><strong>ELIZA buscaba las palabras clave y respondía:</strong> "¿Por qué dices que te duele la cabeza?".</li>
</ul>
<p>Se quedó horrorizado al ver que la gente se abría emocionalmente con la máquina, creyendo que los entendía.</p>
<p>Tenemos una tendencia innata a humanizar la tecnología (<strong><a href="https://es.wikipedia.org/wiki/Antropomorfismo">antropomorfismo</a></strong>). Si algo nos responde con lenguaje fluido, nuestro cerebro asume que "hay alguien ahí". Nos enfadamos con el chat o le hablamos con rodeos. El problema es que, al tratarla como a un humano, perdemos la <strong>especificidad operativa</strong>. Olvidamos que estamos ante una herramienta de cálculo y no ante un oráculo.</p>
<p>Para sacarle partido de verdad a la IA, el primer paso es romper ese espejo: menos charla y más instrucciones precisas. No pienses que "entiende" tu problema, cuando en realidad sólo está haciendo estadística avanzada para darte la respuesta más probable. Entender esto es la clave para saber como sacarle partido, tratándola como lo que es: una herramienta.</p>
<h1 id="capitulo-2-el-diccionario-de-supervivencia">Capítulo 2. El Diccionario de Supervivencia</h1>
<p>En el post anterior hablábamos de que la IA no es magia, sino computación y patrones. Pero para movernos con soltura en este ecosistema y, sobre todo, para no frustrarnos cuando las cosas no salen como esperamos, necesitamos hablar el mismo idioma que la máquina.</p>
<p>Para manejar la IA con criterio, no basta con saber qué botones pulsar. Necesitas entender los mecanismos que definen su comportamiento. Si ignoras estos conceptos, estarás usando la herramienta a ciegas.</p>
<h3 id="1-el-token-la-unidad-de-medida">1. El Token: La unidad de medida</h3>
<p>La IA no procesa palabras completas como nosotros; <a href="https://platform.openai.com/tokenizer">trocea el texto en <strong>tokens</strong></a>. Un token puede ser una palabra corta, una sílaba o incluso un signo de puntuación.</p>
<p><strong>¿Por qué te importa?</strong> Porque todo en este mundo se mide en tokens: desde la capacidad de respuesta hasta lo que te cobran por las APIs. Si entiendes que la IA "trocea" la información, entenderás por qué a veces le cuesta tanto contar letras de una palabra o hacer rimas perfectas: ella no ve letras individuales, ve bloques de datos.</p>
<h3 id="2-la-ventana-de-contexto-no-es-un-pozo-sin-fondo">2. La Ventana de Contexto: No es un pozo sin fondo</h3>
<p>Este es, probablemente, el concepto más crítico. La <strong>Ventana de Contexto</strong> es la "memoria de trabajo" o la capacidad de atención de la IA en una sola sesión. Imagina que es una mesa de escritorio: cuando la mesa se llena, para poner un papel nuevo tienes que tirar uno de los que ya estaban.</p>
<ul>
<li>
<p><strong>El peligro del truncamiento:</strong> Si le pasas un PDF de 200 páginas a una IA que solo tiene capacidad para 50, la IA no te avisará de que no llega. Simplemente <strong>cortará el texto sobrante</strong>. Tú creerás que ha analizado todo el archivo, pero la información del final (donde quizás estaba la conclusión o la cláusula clave) será invisible para ella.</p>
</li>
<li>
<p><strong>La pérdida en el medio:</strong> Incluso si el texto cabe, se ha demostrado que la IA recuerda mejor el principio y el final de lo que lee. Los detalles que quedan enterrados en el centro del documento suelen diluirse.</p>
</li>
</ul>
<h3 id="3-embeddings-el-carnet-de-identidad-de-tus-datos">3. Embeddings: El carnet de identidad de tus datos</h3>
<p>Si la Ventana de Contexto es nuestra "mesa de trabajo", los <strong><a href="https://en.wikipedia.org/wiki/Word_embedding">Embeddings</a></strong> son el sistema de archivado inteligente que nos permite no saturarla.</p>
<p>Para que una IA entienda la relación entre las ideas, utiliza estos "embeddings": una lista de números (vectores) que sitúa cada frase en un mapa gigante de miles de dimensiones. Para entenderlo como desarrolladores, bajémoslo a un ejemplo de solo 3 coordenadas: <strong>[¿Es software?, ¿Es una base de datos?, ¿Es un animal?]</strong></p>
<ul>
<li><strong>"PostgreSQL"</strong> → <code>[0.9, 0.9, 0.0]</code> (Mucho software, mucha DB, nada animal).</li>
<li><strong>"MySQL"</strong> → <code>[0.9, 0.8, 0.0]</code> (Coordenadas casi idénticas; están "pegados" en el mapa).</li>
<li><strong>"Delfín"</strong> → <code>[0.0, 0.0, 0.9]</code> (Vive en un barrio matemático totalmente distinto).</li>
</ul>
<p><strong>¿Por qué te importa esto en la práctica?</strong> Piensa en cuando subes un PDF a una IA. La IA no "lee" las 200 páginas cada vez que le preguntas algo. Lo que hace es:</p>
<ol>
<li><strong>Trocear</strong> el PDF en párrafos.</li>
<li>Generar el <strong>embedding</strong> (las coordenadas) de cada párrafo.</li>
<li>Cuando preguntas algo, busca qué trozos del PDF tienen las coordenadas más parecidas a tu duda y <strong>solo le pasa esos trozos</strong> a la Ventana de Contexto.</li>
</ol>
<p>Es la base de lo que llamamos <strong>RAG</strong>: buscar por "sentido común" matemático para ahorrar tokens y ganar precisión.</p>
<h3 id="4-alucinaciones-cuando-la-probabilidad-falla">4. Alucinaciones: Cuando la probabilidad falla</h3>
<p>La IA Generativa es una máquina de predecir la siguiente palabra más probable. No tiene una base de datos de "verdades".</p>
<ul>
<li>
<p><strong>El riesgo:</strong> Como está diseñada para ser coherente y elocuente, cuando no sabe algo, "rellena" el vacío con información que suena muy profesional pero que es <strong>falsa</strong>. No te miente por maldad; simplemente está cumpliendo su función de completar texto basándose en patrones.</p>
</li>
<li>
<p><strong>Mi consejo:</strong> Nunca la uses como fuente primaria para datos biográficos, leyes o fechas. Úsala para procesar datos que tú le entregues, no para que ella te los traiga de fuera.</p>
</li>
</ul>
<h3 id="5-parametros-el-tamano-del-cerebro">5. Parámetros: El tamaño del "cerebro"</h3>
<p>Seguro que has oído que X modelo tiene "billones de parámetros". Un parámetro es, básicamente, una conexión ajustable en la red neuronal (como los cables en un cuadro de conexiones).</p>
<ul>
<li>
<p><strong>Más parámetros</strong> suelen significar más matices, mejor comprensión de la ironía y más "sabiduría" generalista.</p>
</li>
<li>
<p>Sin embargo, un modelo con menos parámetros pero <strong>mejor entrenado</strong> (con datos de mayor calidad) puede ser mucho más eficaz para tareas específicas, como programar, y además será mucho más rápido y barato.</p>
</li>
</ul>
<h3 id="6-temperatura-robot-o-artista">6. Temperatura: ¿Robot o Artista?</h3>
<p>Aunque a veces está oculto en la interfaz, la mayoría de los modelos tienen un ajuste de <strong>Temperatura</strong>.</p>
<ul>
<li>
<p><strong>Temperatura baja (Cercana a 0):</strong> La IA es conservadora y previsible. Es el modo "ingeniero": ideal para código, resúmenes técnicos o datos.</p>
</li>
<li>
<p><strong>Temperatura alta (Cercana a 1):</strong> La IA se arriesga más, elige palabras menos probables. Es el modo "creativo": ideal para lluvia de ideas o escribir ficción.</p>
</li>
</ul>
<h3 id="7-el-rag-como-aprende-la-ia-sobre-tus-datos">7. El RAG: ¿Cómo aprende la IA sobre tus datos?</h3>
<p>Seguramente has probado herramientas como <strong>NotebookLM</strong> o le has subido un PDF a ChatGPT y te has sorprendido: de repente, la IA sabe todo sobre ese documento técnico de 50 páginas y sus respuestas se "acotan" estrictamente a lo que pone ahí. No se inventa cosas de internet, se centra en <strong>tus</strong> datos.</p>
<p>¿Cómo es posible? ¿Ha "estudiado" la IA tu documento y se lo ha aprendido para siempre? <strong>No.</strong> Lo que estás viendo en acción es una técnica llamada **<a href="https://es.wikipedia.org/wiki/Generación_aumentada_por_recuperación">RAG (Retrieval-Augmented Generation</a></p>
<p>Para entender el RAG, olvida la idea de que la IA "aprende". Imagina que la IA es un <strong>profesor superdotado</strong> que sabe de todo, pero al que le pides que haga un examen sobre un proyecto tuyo que él nunca ha visto.</p>
<ol>
<li>
<p><strong>Sin RAG (Entrenamiento):</strong> Sería como obligar al profesor a memorizar tu proyecto antes del examen. Es costoso, lento y, si mañana cambias una frase del proyecto, el profesor ya tiene información obsoleta en su cabeza.</p>
</li>
<li>
<p><strong>Con RAG:</strong> Es como si el profesor fuera al examen con <strong>tus apuntes en la mano</strong>. No necesita memorizarlos; simplemente, cuando le haces una pregunta, él busca rápidamente en los apuntes, lee el párrafo relevante y te responde usando su inteligencia pero basándose <strong>solo</strong> en lo que pone el papel.</p>
</li>
</ol>
<h4 id="como-funciona-el-rag-por-dentro">¿Cómo funciona el RAG por dentro?</h4>
<p>Cuando subes ese PDF, el sistema hace tres cosas en milisegundos:</p>
<ul>
<li>
<p><strong>Recuperación (Retrieval):</strong> Gracias a los <strong>Embeddings</strong> (los "carnets de identidad numéricos" que vimos antes), el sistema sabe qué párrafos de tu PDF están matemáticamente cerca de tu pregunta. Si preguntas por el "presupuesto", el sistema localiza instantáneamente la página donde están las cifras.</p>
</li>
<li>
<p><strong>Aumento (Augmentation):</strong> El sistema coge esos párrafos y los "pega" en un prompt invisible para ti que dice: <em>"Aquí tienes estos fragmentos de texto. Úsalos como única fuente de verdad"</em>.</p>
</li>
<li>
<p><strong>Generación (Generation):</strong> La IA redacta la respuesta. Sigue usando su "cerebro" (su entrenamiento previo) para entender el lenguaje y redactar bien, pero los datos los saca exclusivamente de los fragmentos que le acabas de pasar.</p>
</li>
</ul>
<h4 id="por-que-herramientas-como-notebooklm-parecen-acotarse-tanto">¿Por qué herramientas como NotebookLM parecen "acotarse" tanto?</h4>
<p>Te habrás fijado en que si le preguntas a <a href="https://notebooklm.google.com/">NotebookLM</a> algo que no está en tus archivos, a veces te dice: <em>"No puedo responder porque esa información no aparece en los documentos"</em>.</p>
<p>Esto no es porque la IA se haya vuelto "tonta" o haya olvidado lo que sabía. Es porque el sistema RAG tiene una <strong>instrucción de seguridad</strong> muy estricta: priorizar siempre el libro que tiene abierto. Esto es lo que nos da la seguridad de que la IA no va a "alucinar" o inventarse datos basándose en información genérica de internet.</p>
<h1 id="capitulo-3-el-traductor-universal">Capítulo 3. El Traductor Universal</h1>
<p>Si has seguido los posts anteriores, ya tienes claro que la IA no es un oráculo, sino un procesador de patrones. Pero aquí es donde la cosa se pone interesante: ¿Cómo es posible que un "Modelo de Lenguaje" (LLM) sea capaz de escribir una función en Python, <a href="https://psanxiao.com/posts/2025-08-15-introduccion-a-leaflet.html">diseñar un mapa web en Leaflet</a> o generar una imagen de un astronauta a caballo?</p>
<p>La respuesta corta es que, para una IA, <strong>todo es lenguaje</strong>. Pero vamos a desglosarlo un poco mejor, porque entender esto es lo que te permite pasar de "jugar" con la IA a usarla como una herramienta de ingeniería real.</p>
<h3 id="1-el-codigo-como-arquitectura-logica">1. El código como arquitectura lógica</h3>
<p>Para nosotros, programar es crear lógica. Para un LLM, aprender a programar no ha sido muy distinto a aprender inglés o gallego. El código tiene una sintaxis, una gramática y, sobre todo, una estructura previsible.</p>
<p>La IA ha sido entrenada con casi todo el código público que existe (pensemos en el volumen de datos de GitHub). Lo que hace no es "entender" informática, sino entender la <strong>secuencia lógica</strong>. Sabe que después de un <code>if</code> suele venir una condición y, tras ella, una indentación con una instrucción. Al ser un entorno tan rígido y con reglas tan claras, a la IA le resulta más fácil ser precisa programando que escribiendo poesía.</p>
<h3 id="2-por-que-algunos-modelos-programan-mejor-que-otros">2. ¿Por qué algunos modelos programan mejor que otros?</h3>
<p>No es que unos sean "más listos" que otros, es una cuestión de <strong>dieta de datos</strong>.</p>
<ul>
<li>
<p><strong>Los generalistas:</strong> Han leído de todo, incluyendo tutoriales obsoletos y código basura de foros olvidados. Por eso a veces te sugieren soluciones que "huelen" a 2010.</p>
</li>
<li>
<p><strong>Los especialistas (Fine-tuning):</strong> Son modelos que han pasado por un "posgrado". Se les ha entrenado específicamente con repositorios de alta calidad y se les ha refinado mediante humanos que les dicen: <em>"Esta solución funciona, pero esta otra es más eficiente y segura"</em>. Es la diferencia entre un aprendiz y un senior.</p>
</li>
</ul>
<h3 id="3-imagenes-y-video-traduciendo-palabras-a-pixeles">3. Imágenes y Vídeo: Traduciendo palabras a píxeles</h3>
<p>Aquí es donde ocurre lo que llamamos <strong>multimodalidad</strong>. Al principio, esto era como un juego de teléfonos descompuestos: tenías un modelo que entendía el texto y le pasaba la orden a otro que generaba la imagen.</p>
<p>Hoy, los modelos más potentes son <strong>nativos multimodales</strong>. Desde el minuto uno de su entrenamiento, han visto imágenes y han leído sus descripciones simultáneamente. Han aprendido que el concepto lingüístico "atardecer" está vinculado a ciertos patrones de color y degradados de píxeles. Ya no "traducen" de un idioma a otro; entienden el mundo en ambos formatos de forma nativa.</p>
<h3 id="4-la-trampa-del-dibujo-por-que-la-ia-no-sabe-cuantos-dedos-tiene-una-mano">4. La trampa del dibujo: ¿Por qué la IA no sabe cuántos dedos tiene una mano?</h3>
<p>Seguro que has visto esas imágenes con manos de seis dedos. Esto explica perfectamente por qué la IA no tiene un modelo mental de la realidad. Ella no sabe qué es una "mano" ni para qué sirve; solo sabe que en las fotos etiquetadas como "mano" suele haber formas alargadas de color carne. Si estadísticamente el patrón es confuso, el resultado visual también lo será.</p>
<h3 id="5-por-que-unos-modelos-son-mas-rapidos-que-otros">5. ¿Por qué unos modelos son más rápidos que otros?</h3>
<p>A veces te encuentras con modelos que parecen un rayo y otros que escriben a paso de tortuga. Esto depende del <strong>número de parámetros</strong> (el tamaño del "cerebro") y del <strong>hardware</strong> que tengan detrás.</p>
<ul>
<li>
<p><strong>Modelos Flash/Mini:</strong> Pocos parámetros, muy rápidos, ideales para tareas sencillas.</p>
</li>
<li>
<p><strong>Modelos de razonamiento:</strong> Son deliberadamente más lentos porque están programados para "pensar antes de hablar", verificando sus propios pasos lógicos internamente.</p>
</li>
</ul>
<p>Entender que la IA es un <strong>motor de razonamiento estadístico</strong> cambia la forma en la que le pides las cosas. Si le pides código, dale la estructura. Si le pides una imagen, describe los patrones. No estás hablando con un artista ni con un colega senior; estás interactuando con un traductor universal de patrones que es tan bueno como la información con la que lo alimentas.</p>
<h1 id="capitulo-4-instrucciones-operativas-prompting">Capítulo 4. Instrucciones operativas (Prompting)</h1>
<p>Si has llegado hasta aquí, ya sabes que la IA no te "entiende" en el sentido humano de la palabra; lo que hace es procesar una instrucción y calcular la respuesta más probable basándose en su entrenamiento. Por eso, el "arte" de dar instrucciones (que algunos llaman pomposamente <em><a href="https://developers.openai.com/api/docs/guides/prompt-engineering">Prompt Engineering</a></em>) no consiste en ser educado, sino en ser <strong>meticuloso</strong>.</p>
<p>En mi día a día con el código o los mapas, si una consulta SQL no devuelve lo que quiero, no me enfado con la base de datos; reviso la sintaxis. Con la IA hay que aplicar la misma mentalidad.</p>
<h3 id="1-rompe-el-espejo-de-la-conversacion-a-la-instruccion">1. Rompe el espejo: De la conversación a la instrucción</h3>
<p>El mayor error es tratar el chat como una charla de café. Escribir <em>"Oye, ¿sería posible que quizás me ayudaras a resumir esto si no es mucha molestia?"</em> solo añade ruido innecesario a la <strong>ventana de contexto</strong>.</p>
<p>La IA no necesita cortesía, necesita <strong>parámetros</strong>. Pasa de la "charla" a la <strong>instrucción operativa</strong>. Sé directo. Usa verbos de acción: "Resume", "Analiza", "Escribe", "Extrae".</p>
<h3 id="2-la-anatomia-de-un-prompt-profesional">2. La anatomía de un prompt profesional</h3>
<p>Para que una instrucción sea robusta, yo suelo usar una estructura de tres capas:</p>
<ul>
<li>
<p><strong>Rol (¿Quién eres?):</strong> Dile a la IA cómo debe comportarse. No es lo mismo pedirle algo a un "asistente genérico" que a un "ingeniero senior experto en PostgreSQL". Definir el rol acota el "espacio" de donde la IA sacará la información.</p>
</li>
<li>
<p><strong>Contexto y Tarea (¿Qué hacemos?):</strong> Sé específico. En lugar de "haz un resumen", usa "resume los 3 puntos clave de este texto técnico para un cliente que no sabe de tecnología".</p>
</li>
<li>
<p><strong>Formato de salida (¿Cómo lo quiero?):</strong> Define el <em>output</em>. ¿Quieres un JSON? ¿Una tabla Markdown? ¿Un párrafo de 50 palabras? Si no lo defines, la IA elegirá por ti, y probablemente no sea lo que necesitas.</p>
</li>
</ul>
<h3 id="3-la-tecnica-de-la-cadena-de-pensamiento">3. La técnica de la "Cadena de Pensamiento"</h3>
<p>Como vimos en el post anterior, algunos modelos programan mejor porque "piensan" antes de hablar. Tú puedes forzar ese comportamiento en cualquier modelo usando una técnica sencilla: <strong><a href="https://www.ibm.com/think/topics/chain-of-thoughts">pídele que razone paso a paso</a></strong>.</p>
<p>Si le lanzas un problema complejo de golpe, es más fácil que alucine. Si le dices: <em>"Analiza el problema, desglósalo en pasos lógicos y, finalmente, dame la solución"</em>, la probabilidad de éxito aumenta drásticamente. Estás obligando a la red neuronal a seguir un camino lógico trazable.</p>
<h3 id="4-el-few-shot-ensenar-con-ejemplos">4. El "Few-Shot": Enseñar con ejemplos</h3>
<p>A veces, una descripción no basta. Si quieres que la IA escriba con un estilo concreto o clasifique datos de una forma específica, <strong>dale ejemplos</strong>.</p>
<ul>
<li><strong>Ejemplo 1:</strong> Entrada -&gt; Salida.</li>
<li><strong>Ejemplo 2:</strong> Entrada -&gt; Salida.</li>
<li><strong>Ahora tú:</strong> Entrada -&gt; ...</li>
</ul>
<p>Es la forma más rápida de que la IA capte el patrón que buscas sin tener que escribir un manual de instrucciones infinito que sature los <strong>tokens</strong> de la sesión.</p>
<h3 id="5-itera-el-prompt-perfecto-no-existe-a-la-primera">5. Itera: El prompt perfecto no existe a la primera</h3>
<p>En el desarrollo de software, raramente algo funciona a la primera versión. Con el prompting es igual.</p>
<ul>
<li>Si el resultado es demasiado largo, pide que lo recorte.</li>
<li>Si es muy técnico, pide que baje el nivel.</li>
<li>Si ha olvidado una parte, es posible que hayas superado la <strong>ventana de contexto</strong> o que la instrucción fuera ambigua.</li>
</ul>
<p>Dominar el prompting no es aprenderse "fórmulas mágicas", es aprender a comunicarte con una máquina de forma estructurada. Es, en esencia, volver a ser un poco <strong>artesano de la palabra</strong> para obtener resultados de <strong>ingeniería.</strong></p>
<h1 id="capitulo-5-las-herramientas-de-desarrollo-de-software">Capítulo 5. Las Herramientas de Desarrollo de Software</h1>
<p>Si eres de los que, como yo, empezó usando la IA solo para preguntarle cómo centrar un <code>div</code> o para que te explicara una función compleja de PostgreSQL, tengo que decirte que te estás quedando en la superficie. En los últimos meses, el ecosistema ha dado un salto gigante: hemos pasado de "hablar con la IA" a "integrar la IA en nuestro entorno de desarrollo".</p>
<p>Como ingeniero, siempre busco soluciones que resuelvan problemas reales. Y aquí el problema real es la fricción: copiar código del chat, pegarlo en el editor, ver que falla porque la IA no conoce mi base de datos, y volver a empezar. Para resolver esto, han aparecido tres conceptos clave: <strong>Agentes, Skills y el protocolo MCP</strong>.</p>
<h3 id="el-agente-el-cerebro-con-iniciativa">El Agente: El "Cerebro" con iniciativa</h3>
<p>Un chat normal es pasivo: tú preguntas, él responde. Un <strong>Agente</strong> es un modelo de lenguaje al que le hemos dado un objetivo y autonomía para usar herramientas.</p>
<ul>
<li>
<p><strong>Diferencia clave:</strong> Si le pides a un chat "arregla este bug", te dará el código. Si se lo pides a un <strong>Agente</strong>, él leerá el archivo, ejecutará el código para ver el error, buscará una solución y aplicará el parche.</p>
</li>
<li>
<p><strong>En resumen:</strong> Es un LLM que puede ejecutar un ciclo de: <em>Pensar -&gt; Actuar -&gt; Observar el resultado</em>.</p>
</li>
</ul>
<h3 id="mcp-el-protocolo-que-lo-cambia-todo">MCP: El protocolo que lo cambia todo</h3>
<p>Hace poco escribí en el blog sobre <a href="https://psanxiao.com/posts/2026-01-14-conectar-postgres-ia-mediante-mcp.html">cómo conectar PostgreSQL a un agente de IA</a> mediante <strong><a href="https://modelcontextprotocol.io/">MCP (Model Context Protocol)</a></strong>. </p>
<ul>
<li>
<p><strong>¿Qué es?</strong> Es un estándar abierto que permite que cualquier IA se conecte de forma segura a tus datos locales.</p>
</li>
<li>
<p><strong>¿Para qué sirve?</strong> En lugar de copiar y pegar el esquema de tu base de datos en el chat (con el riesgo de seguridad y el gasto de <strong>tokens</strong> que eso supone), el agente "habla" directamente con tu base de datos a través de MCP.</p>
</li>
<li><strong>Utilidad real:</strong> Puedes decirle: <em>"Busca en mi tabla de usuarios cuáles no han verificado el email y genera un script para enviarles un recordatorio"</em>. La IA consulta la estructura real, no se la inventa.</li>
</ul>
<p>Los MCP son, en esencia, canales de comunicación entre los modelos de IA y herramientas externas.</p>
<h3 id="las-skills-herramientas-las-manos-del-agente">Las Skills (Herramientas): Las "Manos" del agente</h3>
<p>Una de las dudas más comunes es cómo "aprende" la IA a hacer cosas nuevas. Las Skills (o herramientas) no son algo que la IA traiga de serie (aunque algunas sí) por "saber mucho", sino funciones que tú, como desarrollador, tienes que habilitar o programar.</p>
<p>Podemos dividirlas en tres niveles según su origen:</p>
<h4 id="1-skills-nativas-las-que-ya-vienen-instaladas">1. Skills Nativas (Las que ya vienen "instaladas")</h4>
<p>Muchas herramientas de IA (como ChatGPT, Claude o Gemini) ya traen herramientas de serie. Por ejemplo, el acceso a internet, la ejecución de código Python en un entorno seguro (Code Interpreter) o la generación de imágenes.</p>
<ul>
<li><strong>Cómo se usan:</strong> No tienes que hacer nada. La IA decide usarlas cuando tu petición lo requiere.</li>
</ul>
<h4 id="2-skills-de-ecosistema-marketplace-de-conectores">2. Skills de Ecosistema (Marketplace de conectores)</h4>
<p>Aquí es donde entra lo que comentábamos del <strong>MCP</strong>. Existe ya un ecosistema de servidores MCP creados por la comunidad.</p>
<ul>
<li>
<p><strong>Cómo se instalan:</strong> Es muy parecido a instalar una dependencia en un proyecto. Te descargas un servidor MCP ya hecho (por ejemplo, uno para Google Drive, otro para Slack o el de PostgreSQL que mencioné en mi post ).</p>
</li>
<li>
<p><strong>Configuración:</strong> Simplemente editas un archivo de configuración en tu entorno (como el <code>claude_desktop_config.json</code>) y le dices dónde está ese servidor. A partir de ese momento, la IA "ve" esa nueva habilidad.</p>
</li>
</ul>
<p>Los MCP dotan a los modelos de IA de nuevas Skills.</p>
<h4 id="3-skills-a-medida-las-que-tu-programas">3. Skills a medida (Las que tú programas)</h4>
<p>Si necesitas que la IA haga algo muy específico de tu flujo de trabajo (por ejemplo, "publicar este borrador en mi blog de Hugo"), tienes que crear la Skill tú mismo.</p>
<ul>
<li>
<p><strong>Cómo se hacen:</strong> No es más que una función en Python o TypeScript.</p>
</li>
<li>
<p><strong>El "Contrato":</strong> Lo más importante no es solo el código, sino la <strong>descripción</strong>. Tienes que escribir un pequeño texto explicando a la IA para qué sirve esa función y qué parámetros necesita. La IA lee esa descripción y, cuando ve que tu petición encaja, "llama" a tu función.</p>
</li>
</ul>
<h3 id="como-encaja-todo-esto-ejemplo-practico">¿Cómo encaja todo esto? (Ejemplo práctico)</h3>
<p>Imagina que estás trabajando en un mapa con Leaflet. Quieres añadir marcadores desde una base de datos:</p>
<ol>
<li>El <strong>Agente</strong> es tu interlocutor.</li>
<li>El <strong>MCP</strong> es el puente que le permite leer tu base de datos PostgreSQL local.</li>
<li>La <strong>Skill</strong> es la capacidad que le has dado para "escribir en el archivo <code>mapa.js</code>".</li>
</ol>
<p>Tú solo dices: <em>"Añade al mapa los puntos de la tabla 'eventos' de mi base de datos"</em>. El Agente usa el <strong>MCP</strong> para consultar la tabla, procesa los datos y usa su <strong>Skill</strong> de escritura para actualizar tu código.</p>
<h3 id="instrucciones-persistentes-los-archivos-md-y-ficheros-de-configuracion">Instrucciones persistentes: Los archivos <code>.md</code> y ficheros de configuración</h3>
<p>Si estamos tratando de ser meticulosos y evitar la "charla" innecesaria, no tiene sentido repetirle nuestras preferencias a la IA en cada nuevo chat. Aquí es donde entran los archivos de configuración de contexto, como los <code>ai.md</code>, <code>agents.md</code> o los <code>.cursorrules</code>.</p>
<ul>
<li>
<p><strong>¿Qué son?</strong> Son archivos de texto plano que colocas en la raíz de tu proyecto. En ellos defines las reglas del juego: qué librerías prefieres (por ejemplo, Leaflet sobre OpenLayers ), cómo quieres que se estructure el código o qué estándares de seguridad debe seguir.</p>
</li>
<li>
<p><strong>Instrucciones del modelo (System Prompts):</strong> Muchos modelos permiten ahora adjuntar un archivo de "instrucciones personalizadas". En lugar de un prompt efímero, es un contrato permanente. Si en mi blog hablo de usar PostgreSQL con MCP, en mi archivo de agente definiré que siempre que consulte la base de datos, use ese protocolo específico.</p>
</li>
<li>
<p><strong>La ventaja técnica:</strong> Al tener estas instrucciones en un fichero <code>.md</code>, puedes versionarlas con Git. Si cambias tu forma de trabajar o añades una nueva <strong>Skill</strong> a tu flujo, el Agente se actualiza automáticamente al leer el archivo.</p>
</li>
</ul>
<h1 id="capitulo-6-estrategia-de-modelos-a-quien-le-pides-cada-tarea">Capítulo 6. Estrategia de modelos: ¿A quién le pides cada tarea?</h1>
<p>A estas alturas de la guía, ya tienes el entorno configurado y sabes cómo dar instrucciones. Pero te falta lo más importante para el día a día: saber qué modelo elegir. Hoy en día no hay una sola "IA"; hay un catálogo creciente de modelos con especialidades muy distintas.</p>
<p>Si intentas resolver un problema de lógica compleja con un modelo rápido, te dará una respuesta errónea con mucha seguridad. Si usas un modelo pesado para corregir una falta de ortografía, estás matando moscas a cañonazos. Vamos a poner orden en este ecosistema.</p>
<h3 id="1-modelos-de-razonamiento-o-series-deep-thinking">1. Modelos de Razonamiento (O-series / "Deep Thinking")</h3>
<p>Estos son los modelos "lentos" por diseño (como la serie o1 o los nuevos modelos de pensamiento profundo). Su característica principal es que utilizan una <strong>cadena de pensamiento interna</strong> antes de escribir la primera palabra.</p>
<ul>
<li>
<p><strong>Cuándo usarlos:</strong> Problemas de lógica pura, matemáticas, arquitectura de software compleja o cuando necesitas que la IA verifique su propia respuesta varias veces.</p>
</li>
<li>
<p><strong>La clave:</strong> Úsalos cuando el "qué" es difícil de resolver y requiere un plan previo. No esperes velocidad; espera acierto.</p>
</li>
</ul>
<h3 id="2-modelos-de-desarrollo-coding-assistants">2. Modelos de Desarrollo (Coding Assistants)</h3>
<p>Aunque los generalistas programan bien, existen versiones optimizadas para el código (como los que alimentan a Cursor o versiones específicas "Coder"). Estos modelos han tenido una dieta de entrenamiento basada en repositorios de alta calidad y entienden mejor la <strong>jerarquía de un proyecto</strong>.</p>
<ul>
<li>
<p><strong>Cuándo usarlos:</strong> Para refactorizar código, crear tests unitarios o entender cómo una función en <code>db.py</code> afecta a tu mapa en <code>index.html</code>.</p>
</li>
<li>
<p><strong>El consejo:</strong> Úsalos dentro de tu IDE. Son modelos que brillan cuando tienen acceso a tu sistema de archivos.</p>
</li>
</ul>
<h3 id="3-modelos-flash-o-ligeros-velocidad-y-eficiencia">3. Modelos "Flash" o Ligeros (Velocidad y Eficiencia)</h3>
<p>Son los modelos pequeños (como GPT-4o-mini, Claude Haiku o Gemini Flash). Tienen menos parámetros, lo que los hace increíblemente rápidos y económicos en términos de <strong>tokens</strong>.</p>
<ul>
<li>
<p><strong>Cuándo usarlos:</strong> Tareas mecánicas o de bajo razonamiento. Traducir un texto, resumir un hilo de emails, formatear un JSON o cambiar el tono de un párrafo.</p>
</li>
<li>
<p><strong>La ventaja:</strong> Su latencia es mínima. En el tiempo que un modelo de razonamiento empieza a "pensar", este ya ha terminado la tarea.</p>
</li>
</ul>
<h3 id="4-modelos-de-gran-contexto-la-memoria-infinita">4. Modelos de Gran Contexto (La memoria infinita)</h3>
<p>Hay modelos específicos que destacan por tener una <strong>Ventana de Contexto</strong> gigantesca (capaces de leer libros enteros o repositorios completos de una vez).</p>
<ul>
<li>
<p><strong>Cuándo usarlos:</strong> Cuando tienes que analizar una documentación técnica de 500 páginas, buscar un bug en un proyecto antiguo con cientos de archivos o cruzar datos de múltiples fuentes.</p>
</li>
<li>
<p><strong>Ojo con:</strong> "Lost in the middle". Aunque puedan leer mucho, recuerda lo que vimos en el Capítulo 2: si el dato importante está en la mitad del texto, es mejor usar un modelo de razonamiento para asegurar que no se le pase por alto.</p>
</li>
</ul>
<h1 id="capitulo-7-conclusiones-y-el-camino-a-seguir">Capítulo 7. Conclusiones y el camino a seguir</h1>
<p>Después de haber desgranado desde qué es un token hasta cómo orquestar agentes con MCP, toca hacer una pausa y mirar el mapa completo. Escribir esta serie me ha servido para poner orden a mis investigaciones, pero sobre todo para reafirmar algunas convicciones sobre cómo debemos afrontar este cambio quienes nos dedicamos a la tecnología.</p>
<p>Estas son mis conclusiones tras meses de "cacharrreo", pruebas y algún que otro error de concepto:</p>
<h3 id="1-la-comprension-es-tu-mejor-herramienta">1. La comprensión es tu mejor herramienta</h3>
<p>No basta con saber qué botones pulsar. <strong>Entender cómo funciona la IA por dentro</strong>, su naturaleza estadística, sus límites de contexto y por qué alucina, es lo que marca la diferencia entre quien se frustra y quien sabe trabajar con ella. Como en cualquier otra rama de la ingeniería, conocer los cimientos te permite construir estructuras mucho más sólidas. Si sabes por qué la IA se equivoca, sabrás cómo corregir la instrucción para que no vuelva a suceder.</p>
<h3 id="2-solo-estamos-rascando-la-superficie">2. Solo estamos rascando la superficie</h3>
<p>Lo que hoy nos parece revolucionario, como el Model Context Protocol (MCP) que os comentaba hace unos días, probablemente sea solo el estándar básico de mañana. Estamos en una fase muy temprana de esta tecnología.</p>
<ul>
<li>Mi consejo: mantén la curiosidad activa.</li>
<li>No te conformes con lo que aprendiste el mes pasado.</li>
<li>Investiga, prueba modelos locales, experimenta con nuevos flujos de trabajo y, sobre todo, no te cases con una sola herramienta. La flexibilidad va a ser nuestra mayor ventaja competitiva.</li>
</ul>
<h3 id="3-orquestacion-frente-a-monopolio">3. Orquestación frente a monopolio</h3>
<p>Si algo me preocupa de este "boom" es la tendencia a quedarnos atrapados en un solo ecosistema. Ahora más que nunca, es vital <strong>huir del <em>vendor lock-in</em></strong>.</p>
<ul>
<li>
<p>Usa modelos diferentes según la tarea: razonamiento para la lógica, modelos <em>flash</em> para la velocidad y modelos de código para el desarrollo.</p>
</li>
<li>
<p>Prioriza opciones que te permitan saltar entre proveedores. Herramientas como OpenRouter u OpenCode Zen, o incluso el uso de modelos <em>Open Source</em> en local no son solo una cuestión de preferencia técnica; son una cuestión de <strong><a href="https://es.wikipedia.org/wiki/Soberanía_tecnológica">soberanía tecnológica</a></strong>. En un mundo donde los modelos cambian de la noche a la mañana, tener el control de tus fuentes de inteligencia es fundamental.</p>
</li>
</ul>
<h3 id="reflexion-final">Reflexión final</h3>
<p>La IA no ha venido a sustituir nuestra capacidad de pensar, sino a amplificar nuestra capacidad de hacer. Seguimos siendo artesanos e ingenieros de la tecnología , y nuestra labor sigue siendo la misma: resolver problemas reales con las mejores herramientas a nuestro alcance. La IA es solo un nuevo martillo, muy potente, pero que requiere una mano experta que sepa dónde golpear.</p>
<p>Espero que esta guía te haya servido para despejar un poco la niebla y empezar a usar estas herramientas con más criterio y menos miedo. Nos vemos en los próximos posts, seguramente probando alguna nueva "skill" o integrando mapas en algún flujo de trabajo que hoy ni siquiera imaginamos.</p>]]></description>
        </item>
    
  </channel>
</rss>