<?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>Miniguía sobre IA en local</title>
            <link>https://psanxiao.com/posts/2026-09-10-ia-en-local-miniguia.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-09-10-ia-en-local-miniguia.html</guid>
            <pubDate>Thu, 10 Sep 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Este post es una mezcla de experiencia personal y mini guía. Después de llevar un tiempo haciendo pruebas con modelos de IA en local, llega el momento de intentar poner orden, y para mí no hay mejor forma de hacer eso que tratando de ponerlo por escrito.</p>
<p>Usar un modelo en local tiene sentido por cosas bastante prácticas. Cuando trabajas contra una API, el código sale de tu máquina, pagas por token y mañana pueden cambiarte el precio, el modelo o los términos. En local nadie ve lo que le pegas, no hay factura que crezca con cada petición y, si la red se cae, sigues. No nos engañemos, al menos por ahora, esto no va a sustituir a las soluciones de pago, sus modelos frontera y a todo el andamiaje que ya tienen montado alrededor de ellos. Pero para scripts, limpiezas, comparar JSON o preguntarle cosas sobre un fichero sin mandarlo a un tercero, puede valer.</p>
<p>Al principio me perdí en los nombres. Que si 7B, que si Q4_K_M, que si <em>Instruct</em>, que si 26B-A4B. Y luego está lo de siempre, ves un tutorial que te pone los dientes largos, bajas un modelo que en teoría te cabe, lo arrancas, y el equipo se queda frito o va a dos tokens por segundo. ¿A quién no le ha pasado?</p>
<p>En local casi todo lo que puedes bajar son modelos de <strong>pesos abiertos</strong>. Ya <a href="2026-07-25-que-significan-realmente-los-llm-open-source.html">conté qué significa eso</a> y por qué no es <em>open source</em> del todo. Te bajas los pesos, los corres en tu máquina y nadie ve tus datos. Llama, Qwen, Mistral, Gemma, Phi, DeepSeek y compañía. Si lo vas a usar para trabajar conviene mirar la licencia, que no todas son iguales.</p>
<h3 id="con-que-correrlos">Con qué correrlos</h3>
<p>Un modelo, en la práctica, es un fichero grande en el disco. Para usarlo hace falta un programa que lo cargue en memoria y te deje hablar con él. Ese programa puede ser una ventana de chat, o puede dejar que otra herramienta, como opencode, le envíe preguntas y reciba respuestas, en un formato determinado, y en forma de instrucciones para realizar acciones, ejecutar comandos, escribir código, etc. Todo esto sin salir de tu máquina.</p>
<p>Ese formato suele ser el de la API de OpenAI. No es que estés usando nada de OpenAI ni mandando datos a sus servidores. Ellos definieron la primera API que se popularizó para hablar con un modelo, y el resto del ecosistema la copió. LM Studio y Ollama levantan un servidor en tu propio ordenador que responde igual: mismas peticiones, mismas respuestas. Por eso opencode, y casi cualquier cliente, se conecta sin inventar un protocolo nuevo.</p>
<p>Las tres opciones que más se ven son LM Studio, Ollama y llama.cpp. Hacen lo mismo en el fondo: ejecutar el modelo en tu ordenador. Se diferencian en cómo te lo ponen, en si puedes ver y cambiar su código, y sobre todo en el catálogo de modelos que te ofrecen.</p>
<p><strong>LM Studio</strong> es una aplicación de escritorio, con ventanas, buscador de modelos y un chat. Eliges el modelo, lo descargas, lo arrancas y hablas con él. También puede dejarlo escuchando en local para que opencode lo use. Es lo que estoy usando ahora, porque para probar y comparar modelos me resulta más cómodo verlo en pantalla. El catálogo es Hugging Face entero, sin filtro: Hugging Face es el sitio donde la gente publica estos modelos, el GitHub de los LLM digamos, y LM Studio te deja bajar casi cualquiera. Eso está bien para trastear, y también implica que te puedes descargar cosas mal convertidas o que luego no van. Es gratis, pero no es software libre: no publican el código, no puedes estudiarlo ni modificarlo.</p>
<p><strong>Ollama</strong> hace lo mismo, pero desde la terminal. Escribes un comando para bajar el modelo y otro para arrancarlo. No hay tanto que configurar a mano, y para usarlo con opencode va muy bien. El código sí es abierto (licencia MIT), así que puedes ver cómo funciona y tocarlo si quieres. La diferencia gorda respecto a LM Studio es el catálogo: Ollama no te enseña Hugging Face al completo, sólo modelos que ellos han empaquetado y dan por buenos. Menos donde elegir, menos sorpresas. Si te manejas en la terminal, suele ser el camino más simple. Ya <a href="2026-03-28-optimiza-flujo-trabajo-ia-local-opencode-ollama.html">lo usé con opencode</a>. El inconveniente, al menos para mí, es que controlas menos detalles: qué parte del modelo va a la GPU, cuánta memoria reserva, etc.</p>
<p><strong>llama.cpp</strong> no es una aplicación para usuario final. Es el programa que realmente sabe ejecutar el modelo: le pasas el fichero, le dices cuánta memoria usar y si debe aprovechar la gráfica. Más preciso, más pesado de manejar. LM Studio y Ollama existen, entre otras cosas, para no tener que pelearte con eso. También es software libre, licencia MIT.</p>
<p>Hay otras interfaces, pero no las he usado en serio. Como tengo un Mac, suelo usar más LM Studio, porque en teoría está más optimizado para la arquitectura Silicon de Apple (los chips M). Tiene soporte integrado para MLX, el framework que Apple diseñó para exprimir sus chips. Necesitas que los modelos tengan versiones MLX, frente al estándar GGUF que es el habitual. Para los que están disponibles, sólo con eso, puedes duplicar la velocidad del modelo frente a ejecutarlo en Ollama con GGUF. Pero ten en cuenta que es un caso particular para la arquitectura Apple.</p>
<h3 id="que-significan-los-nombres-de-los-modelos">Qué significan los nombres de los modelos</h3>
<p>Un modelo ocupa lo que ocupan sus parámetros por la precisión con la que los guardas. Las B de 7B, 8B o 32B son <em>billions</em>, miles de millones de parámetros. A más parámetros, en general más capacidad de razonar, aunque eso también depende mucho del entrenamiento.</p>
<p>La precisión es la cuantización: apretar esos pesos para que quepan en un equipo normal. El original suele venir en 16 bits, unos 2 bytes por parámetro, así que un 8B se te pone en unos 16 GB sin contar nada más. Demasiado para un portátil normal. Cuantizar es bajar a 8, a 4 o hasta a 2 bits, a costa de perder un poco de finura. Eso de cuantizar lo escucharás mucho hablando de modelos en local. A mí la palabra que más me gusta es <em>lobotizar</em>, porque en el fondo lo que haces con la cuantización es hacer un poco más torpe el modelo. Su entrenamiento es el mismo pero al quitarle precisión a los pesos es como cuando a ti te falta el café del lunes por la mañana. El Q4_K_M que verás habitualmente es el que casi todos usamos: unos 4 bits, medio byte por parámetro. Un 7B-8B se queda en 4 o 5 GB, un 32B en 18 o 20 GB. Si subes a Q8 ocupa casi el doble y apenas ganas inteligencia. Si bajas a 2 bits cabe en cualquier sitio, pero se vuelve torpe y para código no vale. Un 14B en Q4 suele darte más que un 7B en Q8 ocupando parecido.</p>
<p>Los nombres, una vez los desmontas, lo cuentan todo. Por ejemplo, <code>qwen2.5-coder-7b-instruct-q4_K_M</code>: Qwen es la familia, 2.5 la versión, <em>coder</em> que está afinado para código, 7b los parámetros, <em>instruct</em> que está entrenado para obedecer órdenes y no solo completar texto, y Q4_K_M la cuantización. Si ves un 26B-A4B es un <em>Mixture of Experts</em>: 26 mil millones en total pero solo activa 4 por cada token. Más rápido que un denso del mismo tamaño, aunque en disco y en memoria te ocupe como grande. En Mac además verás MLX frente a GGUF. GGUF es el formato más habitual. MLX está pensado para Apple Silicon y la memoria unificada. En el M1, MLX va mejor.</p>
<h3 id="el-equipo">El equipo</h3>
<p>Lo que decide qué modelo máximo puedes cargar es la memoria disponible. Y no todos los equipos funcionan igual.</p>
<p>En un PC con Nvidia dedicada tienes la VRAM de la gráfica, separada y muy rápida, y aparte la RAM del sistema. Si el modelo cabe en la VRAM, vuela. Si no cabe, LM Studio y llama.cpp hacen <em>offload</em> y tiran de CPU para el resto, que funciona pero va mucho más lento. Una 4060 de 8 GB es un mundo distinto a una 4090 de 24 GB.</p>
<p>En un Mac con Apple Silicon no hay VRAM separada, hay memoria unificada que comparten CPU y GPU. Puedes cargar modelos más grandes de lo que sugiere la etiqueta de <em>gráfica</em>: en un Mac de 32 GB metes un 30B cuantizado que en una Nvidia de 12 GB ni arranca. A cambio, esa memoria también se la come macOS, el navegador y todo lo demás, y el ancho de banda es menor que en una dedicada potente.</p>
<p>Luego están los portátiles con integrada Intel o AMD, sin gráfica dedicada. También comparten la RAM con el sistema, como el Mac, pero con peor ancho de banda, peores drivers y más trabajo en CPU. Para un 3B o un 7B pequeño en Q4, con paciencia, valen. Para lo demás, no.</p>
<p>Para hacerme una idea uso dos cuentas. La primera: coge lo que ocupa el modelo en disco, lo que Hugging Face dice que pesa, y multiplícalo por 1,2 si vas a usar contexto corto, de 4K, y por 1,5 o 1,6 si quieres ir a 32K con margen. La segunda: unos 0,6 GB por cada mil millones de parámetros en Q4, cerca de 1 GB por B en Q8, más el contexto.</p>
<p>El peso del fichero no es lo que te va a pedir en memoria. Es el punto de partida. Cuando arrancas el modelo, a esos pesos hay que sumarle la caché de clave-valor, donde guarda la conversación para no recalcularlo todo a cada token. Esa caché crece con la ventana de contexto que configures, con las capas del modelo y con lo largo que sea lo que le pegues. El mismo 8B con 4K te pide medio giga extra y ni lo notas. Con 32K, 2 o 4 GB más. Con 128K se te puede comer 8 GB él solo. Por eso dos personas con el mismo modelo pueden tener experiencias distintas: uno lo usa para chatear corto y le va fino, otro le pasa un repositorio entero con opencode y se le hunde.</p>
<p>Tomando Q4_K_M como referencia, y dejando aparte lo que se come el sistema, me salen más o menos estos números:</p>
<table>
<thead>
<tr>
<th>Modelo en Q4</th>
<th>Pesa en disco</th>
<th>RAM para 4K</th>
<th>RAM para 32K</th>
</tr>
</thead>
<tbody>
<tr>
<td>3B-4B</td>
<td>2-2,5 GB</td>
<td>3-4 GB</td>
<td>5-6 GB</td>
</tr>
<tr>
<td>7B-8B</td>
<td>4-5 GB</td>
<td>6-8 GB</td>
<td>8-10 GB</td>
</tr>
<tr>
<td>14B</td>
<td>8-9 GB</td>
<td>11-12 GB</td>
<td>14-16 GB</td>
</tr>
<tr>
<td>32B</td>
<td>18-20 GB</td>
<td>22-24 GB</td>
<td>26-30 GB</td>
</tr>
</tbody>
</table>
<p>En un M1 de 16 GB, restando lo que se come macOS, quedan 10 o 12 GB de aire. Un 9B en Q4 te cabe, un 14B ya es ir justo y un 32B ni lo intentes. Si apuras, en cuanto le pegas un fichero un poco grande empieza el <em>swap</em> y todo va a pedales. Mejor un modelo un punto más pequeño con contexto de sobra que uno grande justo de memoria.</p>
<p>Lo otro que decide si trabajar es usable es la velocidad de la memoria. No es tanto la potencia de la CPU como cuántos gigas por segundo puede mover. Una RTX de gama alta de Nvidia anda por los 1000 GB/s, un Mac M1 por los 200. Los nuevos M5 Pro y Max pueden llegar hasta los 600 o 700 GB/s. Una arquitectura Intel o AMD integrada raramente podrá dar más de 100. Por eso el mismo modelo va mucho más rápido en una Nvidia buena. En mi equipo, un M1 Pro con 16 GB, Gemma 4B en Q4 se mueve a unos 50 tokens por segundo, que para chat sobra, y Qwen 3.5 9B en Q4 se queda en 20, un poco justo para picar código, pero factible para tareas pequeñas. Si tu <em>prompt</em> empieza por «hazme una aplicación que…» ni sueñes que te va a funcionar.</p>
<h3 id="chat-no-es-lo-mismo-que-herramientas">Chat no es lo mismo que herramientas</h3>
<p>En LM Studio, en modo chat, casi todos los modelos parecen buenos. Les preguntas algo, te contestan con soltura y listo.</p>
<p>Con opencode es otra cosa. Ahí el modelo tiene que llamar a herramientas: leer un fichero, listar un directorio, aplicar un <em>diff</em>. Eso exige que sepa hacer <em>function-calling</em>, que genere el JSON que opencode espera y que no se ponga a explicarte cómo haría la tarea en vez de hacerla.</p>
<p>Me pasó con Gemma 4B en Q4_K_M: en chat perfecto, a 50 tokens por segundo, y en opencode no sabía gestionar las herramientas. Me devolvía un “para listar los ficheros deberías usar ls” en lugar de llamar a la herramienta. Tuve que tocar el <em>system prompt</em> para obligarle a ejecutar y no explicar, y aun así no era muy adecuado. Está afinado para ser asistente de chat, no para usar herramientas.</p>
<p>Qwen 3.5 9B en Q4_K_M sí me funciona con opencode. Llama a las herramientas, aplica el <em>diff</em> y no se pone a dar la charla. El pero es la velocidad: 20 tokens por segundo en el M1, un poco justo. Usable, pero se nota que el equipo va al límite.</p>
<p>Si lo quieres para agente, mira que diga que soporta <em>tools</em> o <em>function-calling</em>, y mejor una variante <em>instruct</em> o <em>coder</em>. Un Qwen de ese tipo está bastante más pensado para esto que un Gemma pequeño de chat. Y aun así puede hacer falta ajustar el <em>system prompt</em> en LM Studio.</p>
<h3 id="en-resumen">En resumen</h3>
<p>¿Qué puedes esperar de esto, al menos con la experiencia que tengo yo? Si quieres un chat, trabajar con documentos que no quieres mandar a un servidor que no controlas, o un asistente pequeño para el tren o para cuando no hay red, bien. A nivel de código la cosa se complica. Para tareas pequeñas, ordenar ficheros, scripts atómicos o cambios muy acotados en un repositorio, vale. Si quieres trabajar igual que con la herramienta de pago, sobre un repositorio grande, pedir análisis complejos, <em>refactorings</em> y demás, necesitas un equipo muy potente, yo diría que mínimo 64 GB de RAM, y afinar bastante la configuración, sea con LM Studio o con Ollama.</p>
<p>Los modelos de pesos abiertos que hay hoy ya son lo suficientemente listos para hacer casi cualquier cosa. Con un equipo potente y un buen <em>harness</em> se pueden hacer muchas cosas en local. El límite, la mayoría de las veces, no es el modelo. Es el ordenador y una buena configuración de herramientas.</p>]]></description>
        </item>
    
        <item>
            <title>Lo que nunca nos explicaron sobre los mapas (y por qué debería importarnos)</title>
            <link>https://psanxiao.com/posts/2026-09-05-el-mapa-mercator-y-por-que-sigue_siendo_el_estandar.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-09-05-el-mapa-mercator-y-por-que-sigue_siendo_el_estandar.html</guid>
            <pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Hace poco la ONU aprobó una resolución el 4 de septiembre de 2026 (resolución A/80/L.104, adoptada por 164 votos a favor, 1 en contra y 6 abstenciones) sobre el uso de proyecciones de mapa en contextos educativos y de política pública. La resolución, promovida por Togo en nombre del Grupo Africano, insta a gobiernos, escuelas y empresas tecnológicas a dejar de usar mapas que distorsionan el tamaño real de los continentes, particularmente el proyección de Mercator, que hace que África aparezca mucho más pequeña de lo que es (Groenlandia parece comparable a África, pero África es 14 veces más grande). La resolución reconoce que ningún mapa es "verdad" absoluta y recomienda que los estudiantes conozcan las limitaciones de cada proyección. Pero, ¿por qué Mercator se impuso como el estándar durante siglos?</p>
<h2 id="por-que-mercator-se-convirtio-en-el-estandar">¿Por qué Mercator se convirtió en el estándar?</h2>
<p>La proyección de Mercator nació en 1569, cuando Gerardus Mercator publicó su mapa para navegantes. Su propósito original era facilitar la navegación marítima: en una proyección conforma, cualquier rumbo (línea de rumbo constante) se representa como una recta. Para los navegantes de la Edad de los Descubrimientos, eso era invaluable: podían trazar una línea recta entre dos puntos y mantener ese rumbo para llegar a destino.</p>
<p>Además, Mercator coincidió con el auge del comercio entre Europa y América, y su formato cilíndrico hacía que las regiones cercanas al ecuador se representaran con proporciones relativamente correctas. No es casualidad que el poder económico y naval de Europa en ese momento adoptara y difundiera esta proyección: la necesidad práctica de navegación la convirtió en el estándar marítimo.</p>
<p>Una vez que una herramienta demuestra su utilidad práctica y se extiende por la industria, desbancarla cuesta mucho. Los armadores, las marinas de guerra y los imperios coloniales ya tenían sus cartas de navegación, sus instrumentos y sus protocolos basados en Mercator. Cuando en los siglos posteriores surgieron nuevas proyecciones más precisas —como la de Lambert o la de Mollweide—, ya era tarde: la inercia institucional era demasiado fuerte. Los libros de texto, las colecciones cartográficas y la tradición náutica perpetuaron su uso durante siglos.</p>
<p>Hoy, la razón técnica que explica que Mercator siga presente en servicios como Google Maps o OpenStreetMap no es estética ni política: se debe a que en una proyección conforme, las líneas de rumbo constante se representan como rectas y las escalas locales se mantienen uniformes, lo que facilita enormemente el renderizado por teselas y los cálculos de routing. Pero ojo: lo que ves en tu móvil no es la Mercator original de 1569, sino <strong>Web Mercator</strong> (EPSG:3857), una adaptación moderna que usa las mismas fórmulas pero simplificadas: asume la Tierra como una esfera (no un elipsoide) para acelerar los cálculos de renderizado por teselas. Es técnicamente Mercator, pero no es la Mercator de los navegantes del siglo XVI.</p>
<p>Para trabajos que requieren precisión métrica —topografía, ingeniería, catastro, SIG profesional—, la cosa cambia: se usa <strong>UTM (Universal Transverse Mercator)</strong>. UTM no es una proyección global como Mercator o Web Mercator. Divide la Tierra en 60 husos de 6° de ancho, cada uno con su propia proyección Mercator transversal local. Dentro de cada huso, la distorsión es mínima, lo que permite medir distancias y áreas con la precisión necesaria para obras civiles, planes de ordenación del territorio o emergencias. En España, por ejemplo, se usan los husos 29, 30 y 31 UTM (EPSG:25829, EPSG:25830 y EPSG:25831), y cada país tiene su propio CRS de referencia.</p>
<p>Lo cierto es que Mercator, y sus variantes, es una proyección excelente para medir el mundo, pero quizás no es la mejor cuando quieres ver cómo realmente es.</p>
<h2 id="nadie-representa-la-realidad-tal-como-es">Nadie representa la realidad "tal como es"</h2>
<p>El punto clave que la resolución de la ONU toca es que <strong>ninguna proyección cartográfica es perfecta</strong>. Es matemáticamente imposible proyectar una esfera en un plano sin distorsionar algo: ya sea área, forma, distancia o rumbo. Cada proyección sacrifica unas propiedades para preservar otras. Si quieres profundizar en este tema, ya traté antes <a href="/posts/2025-08-14-de-la-tierra-al-navegador.html">de la Tierra al navegador</a> en otro artículo del blog, donde expliqué cómo funcionan las proyecciones y por qué Web Mercator se convirtió en el estándar para los mapas web.</p>
<p>Por eso verás que en Mercator:</p>
<ul>
<li>Áreas se distorsionan cerca de los polos (Groenlandia aparece del tamaño de África, cuando en realidad es 14 veces más pequeña).</li>
<li>Las formas se preservan localmente, pero la disposición global cambia.</li>
<li>Las distancias son correctas solo entre puntos muy cercanos.</li>
</ul>
<p>La proyección de Peters (o Gall-Peters) surgió como respuesta en 1970 justamente para denunciar esas distorsiones de área, pero desde el punto de vista técnico tampoco está "libre" de errores: la escala y las distancias no están correctamente representadas matemáticamente en todo el mapa.</p>
<p>Los mapas, como hace tiempo me enseñaron, nunca son neutros, son un elemento de comunicación, y como tal siempre tienen una intención. Lo bueno, es que hay muchas proyecciones para elegir. Por ejemplo, National Geographic lleva décadas apostando por una alternativa que equilibra mejor las formas y los tamaños de los continentes...</p>
<p>La <em>National Geographic Society</em> ha defendido consistentemente la proyección de <strong>Winkel Tripel</strong> para sus mapas mundiales desde la década de 1990. Winkel Tripel busca un compromiso: reduce las distorsiones de área cerca de los polos comparado con Mercator, y preserva mejor las formas que la proyección de Robinson. No es perfecta (ninguna lo es), pero para propósitos educativos y de representación global equilibrada, probablemente sea una buena elección.</p>
<p>La resolución de la ONU se alinea con este espíritu: fomentar que las personas entiendan que los mapas son herramientas diseñadas para fines específicos, no verdades absolutas. Mercator no es "malo", es simplemente una herramienta con más de 450 años de historia, diseñada para navegantes y heredera de las dinámicas de poder de su tiempo. Hoy, la elección de una proyección u otra debe responder a la tarea que tengamos entre manos, no a la imagen que el mapa proyecta de poder o territorio.</p>
<h2 id="la-importancia-de-ensenar-que-es-un-mapa">La importancia de enseñar qué es un mapa</h2>
<p>Cuando voy a dar charlas a colegios y hablo de este tema, la reacción más habitual es sorpresa. El alumnado descubre que la Tierra no se parece al mapa que tienen en la pared del aula, y muchos profesores también se sorprenden. Y es que, aunque usamos mapas desde que tenemos uso de razón —en el móvil, en el cole, en la tele—, casi nunca nos enseñan qué es realmente un mapa: una representación parcial, decidida por alguien, con un propósito concreto.</p>
<p>Enseñar geografía sin explicar qué es una proyección es dejar a medias la formación. Los mapas son herramientas poderosas, pero solo si entendemos sus limitaciones. Si no, corremos el riesgo de creer que Groenlandia es del tamaño de África, que Europa es el centro del mundo o que los mapas son fotos fijas de la realidad.</p>
<p>La resolución de la ONU no pide prohibir Mercator. Pide educación. Y eso es lo más valioso que puede salir de todo esto: que la próxima generación no solo sepa usar un mapa, sino que entienda por qué ese mapa se dibujó así.</p>]]></description>
        </item>
    
        <item>
            <title>Qué modelo para cada tarea (con OpenCode Go)</title>
            <link>https://psanxiao.com/posts/2026-07-26-que-modelo-para-cada-tarea-opencode-go.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-07-26-que-modelo-para-cada-tarea-opencode-go.html</guid>
            <pubDate>Sun, 26 Jul 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Llevo meses con la misma manía: cambiar de modelo a mitad de sesión. No por aburrimiento, sino porque me he convencido de que <strong>no hay un modelo para todo</strong>, igual que no hay un solo destornillador en el cajón. Hay tareas que piden cabeza fría y contexto largo, otras que piden velocidad y no gastar el cupo del mes en tres <em>prompts</em> de más.</p>
<p>En <a href="https://psanxiao.com/posts/2026-06-22-mi-setup-ia.html">mi setup de IA</a> ya contaba que <a href="https://opencode.ai/docs/go/">OpenCode Go</a> es el canal del día a día: una suscripción barata a modelos <em>open weight</em> bien servidos, sin pelearte con la lotería de cada proveedor. En <a href="https://psanxiao.com/posts/2026-07-14-por-que-opencode.html">por qué OpenCode</a> hablaba de la herramienta. Aquí va la otra mitad: <strong>con qué modelo entro a cada pelea</strong>, al menos en el momento en que escribo esto, y sabiendo que la lista de Go se mueve.</p>
<p>No es una tabla de <em>benchmarks</em>. Es el mapa mental que me ha salido de usarlo para picar código, planear cambios, revisar <em>diffs</em>, escribir posts y trastear con mapas y agentes. Donde creo que sé algo, aunque tampoco mucho.</p>
<h2 id="el-truco-no-es-el-modelo-es-el-reparto">El truco no es el modelo, es el reparto</h2>
<p>Antes de nombres: la gracia de OpenCode no es casarte con uno. Es poder decir “esto va a plan con uno gordo y a construir con uno barato”, o “esto lo revisa otro que no ha escrito el código”. Los <em>sub-agentes</em> y el cambio de modelo en caliente no son florituras; son la forma de no quemar el cupo en basura y de no pedir poesía a un modelo de <em>flash</em>.</p>
<p>También ayuda recordar <a href="https://psanxiao.com/posts/2026-07-25-que-significan-realmente-los-llm-open-source.html">qué son de verdad estos “open source”</a>: en la práctica, pesos abiertos con licencias variadas. Útiles, sí. Mágicos, no. La diferencia la marca más el <em>prompt</em>, el <code>AGENTS.md</code> del proyecto y lo que le dejas tocar, que dos décimas en un <em>leaderboard</em>.</p>
<p>Dicho esto, el catálogo de Go ahora mismo ronda familias como <strong>DeepSeek V4</strong>, <strong>Qwen 3.6/3.7</strong>, <strong>Kimi</strong> (K2.6, K2.7 Code, K3), <strong>GLM 5.1/5.2</strong>, <strong>MiniMax</strong>, <strong>MiMo</strong>, <strong>Grok 4.5</strong> e <strong>Hy3</strong>. No uso todos al mismo nivel. Uso un núcleo y el resto entra cuando el núcleo se queda corto o caro.</p>
<h2 id="escribir-codigo-el-dia-a-dia">Escribir código (el día a día)</h2>
<p>Para implementar, refactorizar, arreglar un <em>bug</em> con el repo delante y dejar un <em>diff</em> razonable, me sigo encontrando muy a gusto con <strong>DeepSeek V4 Pro</strong> y con <strong>Kimi K2.7 Code</strong>. El primero me parece el caballo de tiro cuando la tarea es “entiende este proyecto y toca lo justo”. El segundo, cuando quiero un modelo que ya viene con cara de agente de código y no se pierde tanto en monólogos.</p>
<p>Si la cosa es mecánica —renombrar, rellenar <em>boilerplate</em>, un <em>script</em> corto, un test que ya sé cómo tiene que ser— bajo a <strong>DeepSeek V4 Flash</strong> o a <strong>MiniMax M2.7 / M3</strong>. Gastan poco, responden rápido y para el 60 % de lo que hago en un día de desarrollo sobran. Ahí el error típico es mandar al Pro lo que podría hacer el Flash: al final del mes notas el cupo, no la calidad.</p>
<p><strong>Qwen 3.7 Plus</strong> (y el 3.6 Plus cuando toca) me salva cuando el stack se sale del camino trillado o necesito un poco más de “sentido común” de producto dentro del código. No es que DeepSeek falle; es que a veces Qwen propone un diseño menos rígido y me evita pelearme con una solución demasiado literal.</p>
<h2 id="planear-antes-de-tocar">Planear antes de tocar</h2>
<p>En modo plan —el de OpenCode que no escribe archivos, solo razona— no quiero al más barato. Quiero al que aguante contexto, no se invente módulos que no existen y sepa decir “esto son tres <em>commits</em>, no uno”.</p>
<p>Para el día a día de planear, suelo tirar de <strong>Grok 4.5</strong>, <strong>Qwen 3.7 Max</strong> o <strong>Kimi K3</strong>. Grok me funciona bien cuando el problema es ambiguo y hay que ordenar ideas (“¿qué harías tú con este <em>bug</em> de permisos y este MCP?”). Qwen Max cuando el plan es más de arquitectura o de desglosar un <em>feature</em> gordo. Kimi cuando el hilo es largo y el repo es denso: se le nota el entrenamiento en contextos largos.</p>
<p>Y luego está <strong>GLM 5.2</strong>. En mi experiencia se acerca mucho a un modelo frontera: cuando el lío es de verdad complejo, desatasca lo que los otros dejan a medias o empiezan a enquistar —dar vueltas, soluciones cosméticas, planes que no cierran. El pero es claro: <strong>es caro</strong>. En OpenCode Go me come los créditos a una velocidad que no me puedo permitir como default. Así que no entro con él. Lo saco cuando ya sé que voy a analizar un problema gordo, o cuando llevo un rato con Pro/Code/Max y veo que la sesión se atasca. Es el comodín de “ahora sí, piénsalo en serio”, no el destornillador de todas las mañanas.</p>
<p>El truco práctico: plan normal con Grok/Qwen/Kimi, escalada a GLM 5.2 solo si hace falta, y build con DeepSeek Pro o K2.7 Code. Mezclar las dos cosas en el mismo modelo “porque total…” es cómo acabas con un plan mediocre o con un <em>diff</em> carísimo —y si ese modelo es el GLM, además sin cupo a mitad de semana.</p>
<h2 id="revisar-codigo-el-que-no-has-escrito-tu-o-si">Revisar código (el que no has escrito tú… o sí)</h2>
<p>Revisar es otra tarea. No es generar. Es leer con mala leche amable: <em>offs-by-one</em>, permisos, nombres, lo que el autor daba por sentado.</p>
<p>Para revisión me va mejor un modelo <strong>que no sea el mismo que acaba de escribir el parche</strong>, si puedo. <strong>DeepSeek V4 Pro</strong> y <strong>Qwen Max</strong> me han pillado tonterías que el generador daba por buenas; el Max sobre todo cuando la revisión es más de diseño (“¿tiene sentido esta capa?”) que de <em>lint</em> humano. Si el <em>diff</em> es delicado o el fallo se me resiste, a veces subo a <strong>GLM 5.2</strong>, con la misma regla de oro que en el plan: solo cuando compensa el gasto.</p>
<p>Lo que no hago es mandar a un Flash a “revisar en profundidad” un <em>diff</em> de trescientas líneas. Sale checklist genérico y sensación de seguridad falsa. Para un vistazo rápido sí; para mergear, no.</p>
<h2 id="redactar-posts-correos-textos-que-tienen-que-sonar-a-persona">Redactar (posts, correos, textos que tienen que sonar a persona)</h2>
<p>Aquí el mapa cambia. Un modelo excelente picando Python puede dejarte un párrafo que parece manual de microondas. Para escribir en español con tono —un post, una respuesta larga, un texto que luego vas a reescribir a mano— me quedo con <strong>Grok 4.5</strong> o con <strong>Qwen 3.7</strong> en sus variantes más capaces.</p>
<p>No es que redacten “como yo” solos. Nadie lo hace. Pero se dejan llevar mejor a un registro conversacional, admiten matices y no insisten tanto en el esquema de <em>cinco puntos clave y conclusión</em>. DeepSeek, en cambio, me empuja más al tono de documentación técnica aunque le pida crónica; útil a veces, rígido otras.</p>
<p>Para borradores basura —resumir una reunión, pasar apuntes a lista, traducir un <em>README</em>— Flash o MiMo y listo. No gastes el Max en poner títulos a un <em>changelog</em>.</p>
<h2 id="explorar-preguntar-explicame-este-lio">Explorar, preguntar, “explícame este lío”</h2>
<p>Cuando abro el repo ajeno o un rincón que no toco desde hace meses, quiero charla con herramientas: buscar, leer, volver a preguntar. <strong>Kimi K2.6 / K3</strong> y <strong>Qwen Plus</strong> me cuadran. Si la pregunta es corta y no quiero contexto de media hora, <strong>DeepSeek Flash</strong> o <strong>MiMo V2.5</strong>: baratos, suficientes, y no me duele iterar diez veces.</p>
<p>Grok también entra aquí cuando la duda es más de criterio que de API (“¿merece la pena este enfoque o estoy sobreingenierizando?”). A veces necesitas un interlocutor, no un autocompletado con ego.</p>
<h2 id="agentes-largos-mcp-muchas-herramientas">Agentes largos, MCP, muchas herramientas</h2>
<p>Cuando la sesión es de verdad agéntica —muchas idas y venidas, MCP de QGIS, <em>skills</em>, permisos, subagentes— noto más las costuras. No todos los modelos “hablan herramientas” igual de bien aunque el <em>harness</em> sea el mismo.</p>
<p>En ese terreno me fío más de <strong>Kimi K2.7 Code</strong>, <strong>DeepSeek V4 Pro</strong> y <strong>MiniMax</strong> para flujos de ingeniería con varios pasos. Si el agente se pone tonto (llama mal a una herramienta, inventa rutas, se olvida del plan), no insisto veinte veces con el mismo: cambio de modelo o acorto el objetivo. La obstinación sale cara en tokens y en paciencia.</p>
<p>Los muy baratos (Flash, MiMo base, Hy3) los uso de apoyo o de subagente acotado, no de cerebro único de una sesión de dos horas.</p>
<h2 id="una-chuleta-que-yo-si-usaria">Una chuleta que yo sí usaría</h2>
<p>Sin pretender ciencia, el atajo mental me queda más o menos así:</p>
<table>
<thead>
<tr>
<th>Si voy a…</th>
<th>Entro con…</th>
<th>Y bajo / subo si…</th>
</tr>
</thead>
<tbody>
<tr>
<td>Implementar en un repo conocido</td>
<td>DeepSeek V4 Pro, Kimi K2.7 Code</td>
<td>Flash / MiniMax si es cambio chico</td>
</tr>
<tr>
<td>Planear (lo normal)</td>
<td>Grok 4.5, Qwen 3.7 Max, Kimi K3</td>
<td>—</td>
</tr>
<tr>
<td>Planear o desatascar lo complejo</td>
<td><strong>GLM 5.2</strong></td>
<td>solo si ya sé que es gordo o los otros se enroscan</td>
</tr>
<tr>
<td>Revisar un <em>diff</em></td>
<td>DeepSeek Pro, Qwen Max</td>
<td>Flash para un vistazo; GLM 5.2 si es crítico</td>
</tr>
<tr>
<td>Redactar con tono</td>
<td>Grok 4.5, Qwen 3.7</td>
<td>Flash para borrador sucio</td>
</tr>
<tr>
<td>Explorar / preguntar</td>
<td>Kimi, Qwen Plus, Grok</td>
<td>Flash / MiMo si es pregunta corta</td>
</tr>
<tr>
<td>Muchas herramientas / MCP</td>
<td>Kimi Code, DeepSeek Pro, MiniMax</td>
<td>un solo objetivo más pequeño</td>
</tr>
<tr>
<td>Quemar el día sin quemar el cupo</td>
<td>DeepSeek Flash, MiMo, MiniMax, Hy3</td>
<td>y <strong>no</strong> el GLM de primeras</td>
</tr>
</tbody>
</table>
<p>La fila de abajo importa más de lo que parece. Go te da un techo de uso en dinero, no en “peticiones infinitas del modelo más caro”. Quien vive siempre en el Max —o peor, en el GLM 5.2— descubre el límite a mitad de semana. Quien reparte, llega a fin de mes y encima trabaja mejor, porque no usa un cañón para clavar una chincheta.</p>
<h2 id="lo-que-no-te-va-a-decir-ninguna-guia">Lo que no te va a decir ninguna guía</h2>
<p>Primero: <strong>tu stack no es el mío</strong>. Yo vivo entre Python, geo, administración a ratos, terminal y blogs. Si tu mundo es otro, el ranking se mueve. Prueba en tus repos, no en los míos.</p>
<p>Segundo: el modelo de moda de esta semana no tiene por qué ser tu default. En Go la lista cambia; lo estable es el hábito de <strong>elegir por tarea</strong> y de separar plan / build / review.</p>
<p>Tercero: el techo de calidad no lo pone solo el LLM. Lo pone el contexto del proyecto, las reglas, los <em>skills</em> y que tú sepas decir “no, eso no”. Sin eso, el Pro alucina con elegancia y el Flash alucina deprisa. Misma enfermedad, distinta velocidad.</p>
<p>Yo, de momento, me quedo con un mapa mental corto: <strong>Flash para el ruido</strong>, <strong>Pro/Code para el oficio</strong>, <strong>Max/Grok/K3 para pensar antes de romper nada</strong>, y <strong>GLM 5.2 en la reserva</strong> —casi frontera, casi de pago por placer, solo cuando el problema lo pide o la sesión se enquista. El resto del catálogo son variantes y recambios. Y si dentro de dos meses esta chuleta envejece, mejor: significará que los pesos abiertos siguen moviéndose, y que nosotros también.</p>
<p>Menos modelo fetiche, mejor reparto. Eso, al menos a mí, me está funcionando.</p>]]></description>
        </item>
    
        <item>
            <title>Qué significan realmente los LLM open source</title>
            <link>https://psanxiao.com/posts/2026-07-25-que-significan-realmente-los-llm-open-source.html</link>
            <guid isPermaLink="true">https://psanxiao.com/posts/2026-07-25-que-significan-realmente-los-llm-open-source.html</guid>
            <pubDate>Fri, 24 Jul 2026 00:00:00 +0000</pubDate>
            <description><![CDATA[<p>Hace ya tiempo que aprendí que cuando una empresa grande dice que algo es <em>open</em>, conviene parar un segundo y preguntar: <strong>open, ¿respecto a qué?</strong>. El mundo geo aún recordamos aquel mantra de que <em>ESRI is open</em>, y me está pasando ahora, a otra escala, con los modelos de lenguaje. Casi cada semana aparece un anuncio de un LLM <em>open source</em> que, en la práctica, no lo es del todo. O no lo es en el sentido en el que quienes venimos del software libre entendemos esa palabra.</p>
<p>Y es que el problema no es que se liberen cosas. El problema es que se vacía el significado de una palabra que nos costó décadas construir.</p>
<h2 id="cuatro-libertades-otra-vez">Cuatro libertades, otra vez</h2>
<p>En el software libre la brújula siempre fueron las <a href="https://www.gnu.org/philosophy/free-sw.es.html">cuatro libertades</a>: usar el programa para cualquier propósito, estudiarlo, modificarlo y compartirlo, con o sin cambios. La <a href="https://opensource.org/osd">Open Source Initiative</a> tradujo esa idea a una definición práctica de licencias. No es un eslogan. Es un contrato social: si no puedes estudiar y cambiar lo esencial, no es libre aunque diga <em>open</em> en la caja.</p>
<p>Con la IA pasó lo previsible. Empezaron a circular modelos con licencias permisivas sobre los ficheros de pesos, y de ahí al titular de “modelo open source” había un paso muy corto y muy tentador. La OSI, después de un proceso largo y ruidoso, publicó la <a href="https://opensource.org/ai/open-source-ai-definition">Open Source AI Definition 1.0</a>. No inventa una filosofía nueva: aplica las mismas libertades a un sistema de IA.</p>
<p>Para que un sistema de IA se considere <em>Open Source AI</em>, tiene que permitirte usarlo, estudiarlo, modificarlo y compartirlo <strong>sin pedir permiso</strong>. Y aquí viene la parte que a mucha gente le molesta: una precondición de esas libertades es tener acceso a <strong>la forma preferida de hacer modificaciones</strong>. En software clásico eso es, básicamente, el código fuente. En aprendizaje automático no basta con un binario bonito.</p>
<h2 id="de-que-esta-hecho-un-modelo-y-que-habria-que-liberar">De qué está hecho un modelo (y qué habría que liberar)</h2>
<p>Un LLM no es un programa al uso. Es más bien el resultado de un proceso industrial: datos, código, cómputo y parámetros. Si uno se pregunta qué habría que liberar para que las cuatro libertades sean reales, la OSI lo deja bastante claro en tres bloques.</p>
<p><strong>Información sobre los datos.</strong> No siempre se puede redistribuir el dataset entero —hay derechos de terceros, datos personales, contratos— y la definición no es ingenua al respecto. Pero sí exige información suficientemente detallada como para que una persona competente pueda construir un sistema sustancialmente equivalente: procedencia, alcance, cómo se obtuvieron y seleccionaron los datos, etiquetado, filtrado, qué partes son públicas y dónde están, qué partes se compran a terceros y a quién. Sin eso, “estudiar el sistema” se queda en mirar el escaparate.</p>
<p><strong>Código.</strong> El código completo para entrenar y ejecutar el sistema. Procesado y filtrado de datos, entrenamiento con sus argumentos y ajustes, validación, librerías de apoyo, tokenizadores, código de inferencia, arquitectura. Es decir: no solo el <em>script</em> de demo que carga el modelo y te contesta en el terminal.</p>
<p><strong>Parámetros.</strong> Los pesos y demás configuración aprendida. Idealmente también <em>checkpoints</em> intermedios y estado del optimizador cuando aplique. Esto es lo que la gente descarga cuando dice “me he bajado el modelo”.</p>
<p>Si te fijas, liberar solo el último de los tres es como publicar el ejecutable compilado y decir que el software es libre porque cualquiera puede copiar el binario. Puedes usarlo, a veces incluso adaptarlo un poco, pero no puedes reconstruir el camino. Y sin el camino, la libertad de estudiar y modificar de verdad se queda a medias.</p>
<p>Hay otra forma de verlo, más de oficio: el valor de un modelo grande no está solo en el fichero final. Está en la receta, en las decisiones de filtrado, en lo que se dejó fuera, en lo que se reforzó en el alineado, en los fallos que se corrigieron a mitad de entrenamiento. Esa es la parte que casi nunca se abre del todo. Y es justo la parte que permitiría auditar sesgos, reproducir resultados o mejorar el sistema desde fuera sin empezar de cero cada vez.</p>
<h2 id="entonces-que-son-los-open-weights">Entonces, ¿qué son los <em>open weights</em>?</h2>
<p>Pues eso: <strong>pesos abiertos</strong>. Modelos en los que se publican los parámetros finales —a veces bajo Apache 2.0, MIT u otra licencia razonable; a veces bajo licencias propias con condiciones extra— para que cualquiera pueda descargarlos, ejecutarlos, hacer <em>fine-tuning</em> o montar un servicio encima.</p>
<p>No es poca cosa. Respecto a un modelo solo accesible por API, la diferencia es enorme. Puedes correrlo en tu máquina, no mandar tu código a un tercero, elegir el hardware, afinarlo para un dominio, o montar infraestructura propia. En un país, en una empresa o en una administración, eso cambia el tablero de la dependencia. Yo, que estos meses he estado usando modelos en local para escribir, programar y trastear con mapas, lo noto cada día: no es lo mismo alquilar inteligencia por token que tener el artefacto en casa.</p>
<p>Pero <em>open weight</em> <strong>no es</strong> <em>open source</em> en el sentido de la definición de la OSI. La propia OSI lo explica sin rodeos: los pesos abiertos no incluyen, por lo general, el código de entrenamiento completo ni la transparencia fuerte sobre los datos. Te dan el resultado del entrenamiento, no el proceso. Sirven para desplegar y adaptar; sirven mucho menos para reproducir, auditar de verdad o colaborar en la raíz del sistema.</p>
<p>Es un término útil, siempre que no se use como disfraz. El problema empieza cuando el marketing convierte “pesos abiertos” en “open source” y nos vamos acostumbrando a la trampa. <em>Verdades a medias</em>, otra vez: sí, es más abierto que un modelo cerrado; no, no es software libre con otro nombre.</p>
<h2 id="licencias-que-parecen-libres-y-no-siempre-lo-son">Licencias que parecen libres (y no siempre lo son)</h2>
<p>Aquí el software libre también tiene memoria. Hay licencias que parecen permisivas y luego meten una cláusula que rompe la libertad de uso para cualquier propósito, o la de compartir sin pedir permiso. En modelos pasa igual. Hay familias muy populares cuya licencia permite mucho… hasta que superas un umbral de usuarios o compites en cierto terreno. Otras son genuinamente permisivas sobre los pesos, y aún así el entrenamiento sigue siendo secreto industrial.</p>
<p>Desde el punto de vista ético del software libre, la pregunta no es solo “¿puedo descargarlo?”. Es “¿puedo usarlo para lo que me dé la gana, entender cómo se hizo, cambiarlo de verdad y pasar ese cambio a otra persona sin negociar con el dueño original?”. Si alguna de esas puertas está cerrada o solo entreabierta, llamarlo <em>open source</em> es, como mínimo, un abuso del diccionario.</p>
<p>Y conste que el modelo de negocio de no abrir el entrenamiento es lícito. Faltaría más. Igual que es lícito vender software privativo. Lo que no me parece de recibo es apropiarse del prestigio moral y técnico que el movimiento libre construyó, para vender como libertad lo que en realidad es una distribución controlada de un artefacto.</p>
<h2 id="por-que-importa-mas-alla-del-purismo">Por qué importa, más allá del purismo</h2>
<p>Se puede pensar que esto es discusión de puristas. Yo creo que no. Cuando una administración pública o una empresa estratégica apuesta por un modelo “abierto”, la letra pequeña decide si estás reduciendo dependencias o solo cambiando de dueño. Si solo tienes pesos, puedes ejecutar y adaptar; si mañana necesitas reentrenar desde una base auditable, entender un fallo sistemático o demostrar cómo se construyó el sistema, te encuentras otra vez pidiendo permiso o reinventando la rueda.</p>
<p>En software libre aprendimos que la conveniencia mueve más que la filosofía. Por eso el <em>statu quo</em> siempre es frágil. Ahora mismo conviene a bastantes actores soltar pesos y quedarse el resto: ganan adopción, narrativa de apertura y una comunidad que mejora el producto en la capa de arriba, sin tocar la fábrica. Es un avance respecto al secretismo total. También es un techo de cristal si nos dormimos en la etiqueta.</p>
<p>A mí los pesos abiertos me parecen una buena noticia, y los uso. Me parece mejor un Llama, un Qwen, un Gemma o un DeepSeek descargable que un muro de API con términos que cambian cada trimestre. Pero no confundo el alivio con la llegada a destino. <strong>Open weight es un paso. Open source AI, de verdad, es otra cosa.</strong></p>
<h2 id="mientras-tanto-en-los-despachos">Mientras tanto, en los despachos</h2>
<p>Y mientras debatimos esto en blogs y foros, gobiernos y agencias de supervisión de la IA hablan sin parar de ética, de confianza, de IA centrada en las personas. La pregunta es en qué se están fijando de verdad.</p>
<p>La respuesta, simplificando, es casi siempre la misma: <strong>en el uso</strong>. El <a href="https://eur-lex.europa.eu/legal-content/ES/TXT/?uri=CELEX%3A32024R1689">Reglamento europeo de IA</a> es el ejemplo más claro. Clasifica sistemas por riesgo, prohíbe prácticas inaceptables, exige supervisión humana, documentación, trazabilidad, etiquetado de contenido generado y, para los modelos de propósito general, transparencia y ciertas obligaciones sobre derechos de autor y seguridad. La <a href="https://digital-strategy.ec.europa.eu/en/policies/ai-office">Oficina Europea de IA</a> y, aquí en España, la <a href="https://aesia.digital.gob.es/">AESIA</a>, nacen sobre todo para vigilar eso: que no se despliegue cualquier cosa en sanidad, empleo, fronteras o justicia; que la ciudadanía sepa cuándo habla con una máquina; que haya alguien a quien reclamar cuando el sistema falla.</p>
<p>Todo eso es necesario. Faltaría más. Un modelo libre mal usado también puede hacer daño, y el derecho a no ser discriminado por un algoritmo no se resuelve solo con una licencia OSI. Pero si miras el tablero con gafas de software libre, se ve el hueco enseguida: <strong>se regula el comportamiento del sistema en producción mucho más que la libertad de estudiarlo y reconstruirlo</strong>.</p>
<p>Cuando el reglamento pide un resumen público del contenido de entrenamiento de los modelos de propósito general, no está pidiendo el dataset ni la receta completa. Pide un mapa a grandes rasgos: fuentes, dominios, algo de procesado. Útil para ejercer derechos y para periodistas o investigadores con paciencia. Insuficiente para lo que la OSI llama la forma preferida de hacer modificaciones. Transparencia de cumplimiento no es lo mismo que apertura radical. Se parece más a la ficha técnica de un electrodoméstico que al código fuente de un compilador.</p>
<p>Lo mismo pasa con buena parte de las estrategias nacionales y de las “agencias de IA ética”. El centro de gravedad está en el riesgo del despliegue, en la gobernanza del proveedor, en la evaluación de impacto, en no comprar sistemas prohibidos. Casi nunca en exigir —ni siquiera en priorizar de verdad en la compra pública— modelos que uno pueda auditar de extremo a extremo, reentrenar con datos propios o mantener sin volver a pasar por caja del fabricante. Se habla de soberanía tecnológica, y a veces se financia un modelo europeo “abierto”; luego, al mirar la letra pequeña, vuelves a encontrarte pesos, licencias a medias y poca fábrica a la vista.</p>
<p>No es que no se mueva nada. Hay iniciativas de modelos abiertos con dinero público, hay excepciones o tratos más suaves para ciertos sistemas de código abierto en el propio reglamento, hay gente dentro de la administración que entiende la diferencia. Pero la corriente principal sigue siendo otra: <strong>ética del uso, no ética de la libertad del artefacto</strong>. Como si bastara con poner guardarraíles al coche sin preguntar si podemos abrir el capó, fabricar recambios o enseñar a otra persona a arreglarlo.</p>
<p>Desde el mundo del software libre, esa frontera es vieja. Llevamos años diciendo que no basta con que el programa “haga las cosas bien” si no puedes mirar cómo las hace y cambiarlas cuando dejen de hacerlas bien. Con la IA el argumento se vuelve más urgente, no menos: si el Estado y las agencias se conforman con fichas de transparencia y evaluaciones de riesgo sobre cajas negras —aunque sean cajas negras con pesos descargables—, estaremos domesticando el relato ético sin acercarnos de verdad a modelos que se parezcan al software libre.</p>
<p>En nuestras manos está, también como ciudadanía y como sector técnico, empujar la conversación un poco más lejos. No solo <em>¿se usa bien esta IA?</em>, sino <em>¿podemos estudiar, modificar y compartir de verdad el sistema con el que nos gobiernan o nos atienden?</em>. Porque si la respuesta es no, la ética se queda en el manual de instrucciones. Y el manual, ya se sabe, lo escribe quien tiene la llave de la fábrica.</p>]]></description>
        </item>
    
        <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>
    
  </channel>
</rss>