Atareao con Linux

Atareao con Linux

By atareaoTechnology
Download on the App Store

Atareao con Linux episodes

  • ATA 848 ArtCraft: haz que la IA trabaje por ti

    Llevamos meses hablando de lo que la inteligencia artificial está cambiando, y el escritorio de Linux no se ha quedado fuera. En este episodio te hablo de ArtCraft, pero no desde el enfoque de siempre: no vengo a decirte que estas herramientas van a acabar con Photoshop, con Word o con AutoCAD. Ya teníamos GIMP, Inkscape o LibreOffice y no acabaron con nada. La noticia es otra: son herramientas con las que la IA va a trabajar por ti.

    ArtCraft es una organización de GitHub, storytold, con decenas de repositorios. Dentro conviven dos mundos que no se mezclan: el estudio de creación con IA y la Craft App Suite, un conjunto de aplicaciones de escritorio escritas en Rust puro, sin Electron ni vistas web, con licencia dual MIT y Apache 2.0 y sin suscripción. Hay builds para Linux, macOS, Windows, FreeBSD, RISC-V y WebAssembly. Y lo verdaderamente importante: cada aplicación lleva dentro su propio servidor MCP. Eso significa que tu agente puede abrir el documento, escribirlo, darle formato, meter fórmulas, mover gráficos, exportarlo y guardarlo.

    En el episodio te enseño lo que he probado de verdad. Le pedí a OpenCode un documento sobre la desaparición de los dinosaurios y me lo devolvió en dos páginas, con sus encabezados y una línea temporal, sin abrir la aplicación. Con GridCraft salió un cuadro de mando con datos mensuales y gráficos por plataforma. Con FigCraft le dije que mirara atareao.es y me montó una maqueta en modo claro y oscuro. Con DeckCraft, una presentación entera de la que apenas corregí un par de cosas, y con EffectCraft un corto sencillo. También te cuento el detalle que casi nadie menciona: las aplicaciones suman 795 herramientas, y arrancarlas todas de golpe es un consumo de tokens brutal, así que conviene habilitarlas una a una según lo que vayas a hacer.

    Y hay que mirarlo con ojo crítico: todo está en alfa, muy alfa. PhotoCraft se llevó 78.700 estrellas y eso ha disparado el interés, pero a estas apps les falta recorrido, y con CADCraft no conseguí nada que mereciera la pena. Por eso yo sigo igual: mi documentación en Markdown y las presentaciones en Typst. Lo que me llevo es un software de escritorio que se está reescribiendo en lenguajes nativos, que es open source y que, sobre todo, le da manos a nuestros modelos de lenguaje.

    Lo que vas a aprender en este episodio:

    • Qué es ArtCraft y cómo se organiza entre el estudio de IA y la suite de apps nativas.
    • Qué es MCP y por qué tener un servidor dentro de cada aplicación cambia la forma de trabajar.
    • Cómo pedirle a tu agente un documento, una hoja de cálculo o una presentación y revisar el resultado.
    • Por qué conviene conectar las herramientas MCP una a una y no las 795 a la vez.
    • Cómo usar una app de diseño para generar la maqueta de tu web en claro y oscuro.
    • Dónde están los límites reales hoy: versiones alfa, funciones que faltan y tareas que aún se resisten.

    Más información y enlaces en las notas del episodio

    • 🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    • ✈️ Telegram 👉 https://t.me/atareao_con_linux
    • 🐘 Mastodon 👉 https://mastodon.social/@atareao
    • 🐦 Twitter 👉 https://twitter.com/atareao
    • 🐙 GitHub 👉 https://github.com/atareao
    38 min
  • ATA 847 Integra tus notificaciones con tu IA

    Durante los últimos años te he contado cómo gestionaba mis notificaciones: el correo, los avisos de cuándo se cae una web, los feeds RSS... Lo metía en Matrix, por canales. Funcionaba, pero tenía un problema de fondo: era impersonal. Y cuando te llegan 300 avisos de golpe, leerlos uno a uno es una tortura. En este episodio te cuento cómo lo he resuelto integrando todo con un asistente basado en modelos de lenguaje.

    La idea es sencilla: un modelo de lenguaje es fantástico resumiendo y agrupando información. Le pasas muchos avisos y te devuelve solo lo que de verdad importa. Por ejemplo, de 18 alertas de caídas me deja tres: un resumen crítico de sitios que cayeron y volvieron, y dos actualizaciones de contenedores. Lo mismo con el correo: de 12 mensajes me agrupa 5 y me dice si alguno huele a phishing sin abrirlo. Ese es el valor real: recibir mejor, no más.Para lograrlo he partido el trabajo en dos piezas. La primera pieza: tú preguntas al asistente cuando quieres: revisa el correo, mira Strava, resúmeme lo pendiente. La segunda pieza: los servicios le inyectan información solos. El corazón de esta segunda parte es un endpoint, la API Notification, donde cualquier servicio envía un JSON con el mensaje, el origen, el autor, un nivel y la metainformación. Y aquí llega un aprendizaje clave: no parsees nada. El modelo entiende el JSON y convertirlo en lenguaje natural es justo su trabajo.

    Esa API tiene un detalle de seguridad. El endpoint de ingesta no usa sesión, sino una clave de ingesta. El token se muestra una única vez al crearlo, el servidor solo guarda su prefijo y su hash, y se puede revocar cuando quieras. Cualquier intento fallido responde con un 401 idéntico, sin pistas sobre si la clave existe o está revocada. Hay endpoints con sesión para listar lo no leído y marcarlo como leído. Y otras integraciones —ApiMail para el correo, Miniflux para los RSS o Strava para los entrenamientos— siguen la misma filosofía.

    Al final, es un cambio de enfoque: pasar de que las notificaciones te asalten el móvil a un modelo proactivo, donde tú decides cuándo preguntar y el asistente te entrega todo agrupado y priorizado. Un episodio que cierra el arco de memoria, herramientas e integración.

    Capítulos
    0:00 - Introducción: gestionar las notificaciones con IA
    3:26 - El arco de episodios: memoria, herramientas e integración
    5:02 - Dos formas de uso: consultar al asistente e inyectar información
    6:10 - Resumen y agrupación de notificaciones y correos
    8:05 - La API Notification: ingesta con JSON sin parsear
    9:55 - Endpoints y clave de ingesta: sesión frente a integración
    10:29 - Claves de ingesta: token, seguridad y revocación
    13:53 - Estructura del mensaje y el buzón
    15:02 - Servicios integrados: ApiMail, Miniflux y Strava
    16:35 - Discriminar la información y el enfoque proactivo
    19:20 - Cierre y despedida

    Más información y enlaces en las notas del episodio

    • 🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    • ✈️ Telegram 👉 https://t.me/atareao_con_linux
    • 🦣 Mastodon 👉 https://mastodon.social/@atareao
    • 🐦 Twitter 👉 https://twitter.com/atareao
    • 🐙 GitHub 👉 https://github.com/atareao
    21 min
  • ATA 846 Que tu IA te dibuje los diagramas

    Hoy te cuento cómo he dejado de dibujar diagramas a mano. Porque el problema no es dibujar: el problema es que el diagrama envejece. Lo haces un martes con sus cajas de colores y sus flechas bien alineadas, tocas una línea de código el miércoles y el dibujo sigue contando la historia de antes. Una caja que ya no existe, un servicio que se partió en dos y una flecha que apunta a un sitio por el que ya no pasa nadie. Es un mentiroso de museo, impecable y falso.

    En el episodio 845 te hablé de cómo le di manos a mi asistente con 33 herramientas. Hoy le doy una más, pero distinta: un MCP de Excalidraw conectado a OpenCode. No para que genere una imagen bonita, sino para que controle un lienzo vivo, elemento a elemento. El agente dibuja, mira lo que ha dibujado y se corrige: alinea cajas solapadas, mueve etiquetas cortadas y repite hasta que está bien. Es un bucle cerrado en el que el que dibuja es el mismo que revisa.

    Mermaid ya prometió los diagramas como texto y lo cumplió: son reproducibles, diffeables y versionables. Pero tiene una grieta: no hay lienzo. El layout lo decide el motor y para mover una caja dos píxeles te toca editar sintaxis o pelearte con CSS. Excalidraw es lo contrario: arrastras, colocas y ajustas. Y ahora el que arrastra es el modelo de lenguaje, gracias al MCP.

    Hay dos MCP de Excalidraw: el oficial, con dos herramientas, y un toolkit con 26, lienzo con sincronización y exportación a PNG y SVG. Yo uso el toolkit. Lo instalo como skill en OpenCode con un npx, sin cuentas, sin API keys y sin clonar repos, y todo vive en mi equipo. En el episodio lo ves en directo: un cuadrado, un relleno, un triángulo, la evolución del hombre con sus ramas extintas y un diagrama funcional de oxidav, mi calendario CalDAV.

    Y lo importante: el fichero .excalidraw se commitea junto al código, así que cualquier cambio se refleja en el diagrama y se ve en el diff. El PNG se regenera en CI sin navegador y sin phantom diffs. También te cuento los límites sin dramatizar y te doy el criterio para elegir entre Mermaid y Excalidraw MCP.

    Capítulos
    0:00 - Intro: de la imagen muerta al diagrama editable
    2:33 - El diagrama que miente cuando el código evoluciona
    4:24 - Anuncios parroquiales: cambios en los repos
    4:51 - El diagrama no vive con tu código (y Mermaid tampoco lo arregla)
    6:22 - La propuesta: Excalidraw y un MCP con lienzo vivo
    9:12 - El bucle cerrado: dibuja, mira y corrige
    10:29 - Dos MCP y el toolkit de 26 herramientas
    10:58 - Instalarlo en OpenCode: un skill sin cuentas ni API keys
    11:52 - Demos: un cuadrado, la evolución del hombre y oxidav
    16:31 - Git y versionado: el diagrama como un fichero más
    20:43 - Límites y veredicto frente a Mermaid
    20:43 - Límites y veredicto frente a Mermaid
    22:06 - Cierre: dibuja una vez y actualízalo siempre

    Más información y enlaces en las notas del episodio

    • 🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    • ✈️ Telegram 👉 https://t.me/atareao_con_linux
    • 🦣 Mastodon 👉 https://mastodon.social/@atareao
    • 🐦 Twitter 👉 https://twitter.com/atareao
    • 🐙 GitHub 👉 https://github.com/atareao
    24 min
  • ATA 845 ¿Cómo se le dan manos a una IA?

    Hoy te cuento cómo le he dado manos a mi asistente. En el episodio 843 te hablé de la memoria; ahora toca lo otro, porque un asistente que solo habla es un loro. Igual que un chat al uso: parece entenderlo todo y no puede hacer nada. No lee tu correo, no te gestiona el calendario, no te apunta una idea.

    Un modelo de lenguaje no es el problema. Lo que le falta son herramientas: funciones que puede decidir invocar. En mi caso, 33 herramientas repartidas en 12 habilidades o skills: correo, calendario, tareas, diario, notas, RSS, meteorología, búsqueda de lugares, web, Strava, recordatorios y widgets. Cada bloque lleva su ficha y su criterio de activación.

    Pero dar manos tiene un peaje. Las definiciones de esas 33 herramientas suman unos 11.000 tokens que viajan al modelo en cada mensaje. Pedir «hola» cuesta lo mismo que pedir «busca una cafetería cerca». Así que metí un segundo modelo, un enrutador, que decide por intención qué habilidad anunciar en cada turno. Con eso bajé el gasto cerca de un 25 %, y una petición como la de la cafetería se resuelve con seis herramientas.

    Y cuando ya tienes manos aparece el segundo problema: la responsabilidad. No es lo mismo leer tu agenda que borrarla, ni resumir un correo que enviarlo en tu nombre. De ahí los tres niveles de permiso: sin preguntar, avisándote, y pidiendo tu sí explícito. La regla que resume todo: el silencio no es un permiso. Si te pide borrar y no contestas, en cinco minutos expira y se toma como un no.

    Cierro con las integraciones que están por llegar —Strava, notificaciones, noticias— y el avance del último episodio de la trilogía. Si quieres montar tu propio asistente, en el repositorio lo tienes en Docker.

    Capítulos
    0:00 - Introducción y repaso: de la memoria del 843 a las manos del asistente
    1:26 - Anuncios parroquiales: err-serve, valet, podtrack y el MCP de atareao.es
    6:03 - Del loro al asistente: por qué un chat sin manos no sirve
    7:26 - Las 33 herramientas repartidas en fichas y skills
    9:52 - El coste oculto: 11.000 tokens por un «hola»
    12:35 - El enrutador de herramientas: decidir qué enviar en cada mensaje
    14:32 - Agenda, tareas, recuerdos y las herramientas fijas de hora y ubicación
    18:13 - Ejemplo real: «busca una cafetería cerca» y el ahorro del 25 %
    19:40 - Permisos y responsabilidad: avisar, preguntar y el silencio que no es un permiso
    23:05 - Integraciones (Strava, notificaciones, noticias) y cierre del episodio

    Más información y enlaces en las notas del episodio

    • 🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    • ✈️ Telegram 👉 https://t.me/atareao_con_linux
    • 🦣 Mastodon 👉 https://mastodon.social/@atareao
    • 🐦 Twitter 👉 https://twitter.com/atareao
    • 🐙 GitHub 👉 https://github.com/atareao
    27 min
  • ATA 844 Podman, IPs reales y La Liga

    Hoy te cuento una historia que empieza bien y acaba dándote un susto. Llevo tiempo moviendo atareao.es a contenedores y ha ido por fases. En casa ya solo tengo Podman rootless, sin demonio y sin pedirle permiso a root para nada. En el servidor donde vive atareao.es, en cambio, seguía con Docker en modo root y con demonio. Dos filosofías distintas.

    Cuanto menos permisos tenga un contenedor, mejor. Si algo se escapa de uno montado como root, el destrozo puede ser de aúpa. Así que me pasé a rootless, aunque tuviera que repensar medio montaje.

    Y aquí llega lo que me da rabia. Hace un par de años atareao.es se caía, se disparaba el consumo de CPU y se venía abajo. Sin mirar un log, sin una gráfica, sin una prueba desde fuera, decidí que el problema era del proveedor y me lo llevé a otro. Ya con los datos delante descubrí que el culpable estaba dentro: Redis, que hoy es Valkey.

    En el servidor monto un Traefik delante y detrás WordPress, MariaDB, Valkey, Umami y OpenGist. Uso Umami por una razón concreta: no pone cookies, no recoge datos personales y no sigue al visitante entre sitios. Que no necesite banner de consentimiento ya es bastante.

    Pero había un agujero que no veía. Fue Víctor quien me lo puso delante: con Podman rootless la visita llega al contenedor, sí, pero con la IP de origen cambiada por el camino. Sin IP real, Umami no sabe ni de qué país viene quien te lee. Lo apañé poniendo Cloudflare delante y fiándome de su cabecera. Fantástico, hasta que un sábado por la tarde dejó de funcionar.

    Perdí un par de horas hasta que lo entendí: no era rootless, ni Traefik, ni nada de mi montaje. Era un bloqueo por rangos enteros de IP, de los que dejan media internet sin servicio. Así que me quité el apaño y puse un HAProxy en bare metal en el 443 para mandar todo a Traefik rootless en un puerto alto. Ni puertos privilegiados, ni setcap, ni iptables: la IP real de vuelta y las redes aisladas.

    Si te toca, esto es lo que puedes hacer. Guarda el dominio, el operador, la hora y el error. Mide con dig, con mtr y con OONI Probe, publica lo que sale y denuncia. Solo así se da la vuelta. Y quédate con una idea: casi nunca falla lo que crees, falla lo que no mides.

    Capítulos
    00:00 - De Docker a Podman: el planteamiento
    02:34 - Dos mundos: Podman rootless en casa y Docker root en el servidor
    04:34 - atareao.es se caía y culpé a Contabo sin medir
    05:23 - El culpable estaba dentro: Redis y Valkey
    06:59 - Traefik, WordPress y Umami: cómo monto la infraestructura
    09:35 - Víctor me abre los ojos: las IPs reales no llegan
    11:56 - Rootless y la IP de origen: el parche de Cloudflare
    14:08 - La Liga bloquea rangos de IP: qué puedes hacer
    16:19 - HAProxy al 443 y Traefik bajando al 8443
    19:13 - Sin setcap ni iptables: por qué Traefik sigue en contenedor
    22:13 - Cierre: casi nunca falla lo que crees, falla lo que no mides

    Más información y enlaces en las notas del episodio

    • 🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    • ✈️ Telegram 👉 https://t.me/atareao_con_linux
    • 🦣 Mastodon 👉 https://mastodon.social/@atareao
    • 🐦 Twitter 👉 https://twitter.com/atareao
    • 🐙 GitHub 👉 https://github.com/atareao
    25 min
  • ATA 843 ¿Cómo se le da memoria a una IA?

    Hoy te cuento cómo le he dado memoria a mi asistente. No es un tutorial, son las ideas que he ido montando por si te sirven. La IA no recuerda nada: le pasas toda la conversación una y otra vez y cada sesión nueva empieza de cero.

    Hace unos episodios te hablé del asistente que monté para el viaje al sur de Italia. Allí me topé con dos paredes: la pieza que hacía de centro se quedaba corta y la memoria, que en cuanto me descuidaba ya no sabía qué había hecho un momento antes. Un asistente que no recuerda nada es un buscador con modales. Así que lo monté todo: herramientas y varias memorias, en Docker con Rust y React.

    Y una memoria no es un cajón: si metes datos y no decides qué hacer con ellos, no vale para nada. De ahí salen las cinco capas. La primera es lo que dije, la conversación en bruto en SQLite. La segunda es lo que pasó: cada 2.000 tokens genero una ficha del contexto y la convierto con un RAG para buscarla de forma semántica. Guardo toda la conversación, pero busco en las fichas.

    La tercera es cómo soy: otro proceso extrae lo que puede de mí y construye un retrato, quién eres, qué te gusta, cómo quieres que te traten. Cosas como que a mí no me gusta el cilantro. La cuarta son los hechos sueltos con fecha. Y la quinta, la que más me ha gustado, el diario que se escribe solo. Siempre he fallado el primer día, así que ahora lo escribe el asistente.

    Cuando busco traigo los 20 recuerdos relacionados con lo que hablo y los pondero por fecha: lo reciente pesa más. Solo las fichas, el retrato y algún detalle van en el system prompt, y eso son 15.000 tokens por llamada. Hay unas 20 herramientas y 11 skills, y se activan las que tocan.

    Y te lo confieso: no hay botón de olvidar. El asistente recuerda lo que tiene dentro y no puedo hacer que se le olvide nada, solo ponderar por tiempo. La herramienta se llama Valet y está en GitHub con licencia MIT. Las estadísticas: nueve millones de tokens por un euro, 0,16 dólares en siete días, 1.355 llamadas y 563 mensajes guardados. Quédate con la idea: usar el modelo para las tareas sistemáticas de cada día, como el diario 😊

    Capítulos
    0:00 - Presentación: dar memoria a una IA y decidir qué hacer con ella
    2:15 - El asistente POC del viaje al sur de Italia
    4:10 - Un asistente sin memoria es un buscador con modales
    5:20 - Un paso más: contenedor Docker con Rust y React
    6:25 - Corto plazo y largo plazo: las distintas memorias
    9:40 - Lo que dije, lo que pasó y cuándo: conversación en bruto en SQLite y fichas con búsqueda semántica
    12:12 - Hechos sueltos, el retrato y los procesos en paralelo
    15:00 - El diario que se escribe solo
    17:05 - El proceso completo y el peso del tiempo en los recuerdos
    19:15 - Valet: en GitHub con licencia MIT, modelos y consumo de tokens
    22:45 - Los prompts de cada memoria: archivista, colapsador, consolidador, timeline y diario
    24:26 - Cierre y despedida: la red de Sospechosos Habituales y el grupo de Telegram

    Más información y enlaces en las notas del episodio

    • 🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    • ✈️ Telegram 👉 https://t.me/atareao_con_linux
    • 🦣 Mastodon 👉 https://mastodon.social/@atareao
    • 🐦 Twitter 👉 https://twitter.com/atareao
    • 🐙 GitHub 👉 https://github.com/atareao
    27 min
  • ATA 842 ffmpeg, afina el oído de tu IA

    Arrancamos la serie de los sentidos de la IA por el más básico. Después de darle a tu modelo de lenguaje una memoria para buscar entre tus 6.000 o 7.000 documentos, toca darle sentidos, y el primero es el oído. Hoy te hablo de FFmpeg, la pieza que hace que lo demás funcione.

    FFmpeg es la navaja suiza del audio y el vídeo: está dentro de YouTube, VLC, Blender o del vídeo que ves en el navegador. Lo instalas con un apt install o un pacman y tienes un taller multimedia en un solo binario. Convertir de MP3 a WAV o a FLAC sin pérdida te cuesta una línea.

    El meollo es que Whisper no traga cualquier audio. Se entrenó con 680.000 horas de audio limpio a 16 kHz y en mono, así que espera PCM de 16 bits, un solo canal y 16 kHz, sin compresión. Si le das un MP3 a 44,1 kHz en estéreo y con silencios largos te lo puede transcribir, pero se arriesga a alucinar y a rellenar los silencios. Casi nunca el problema es el modelo, es cómo le das la entrada.

    Con un alias que convierta a ese formato ya tienes medio camino. Luego están loudnorm para normalizar el volumen y el filtro que quita los silencios de más de un segundo, la causa número uno del texto inventado, y una trampa con silenceremove que te cuento con detalle. También hablamos de cortar y unir con -ss, -t y concat.

    Y no solo sirve para preparar el audio que entra, también para postprocesar el que sale del TTS. Un motor local como Piper o Kokoro devuelve una voz plana, sin dinámica, que suena a robot con resaca. Con un paso alto, un compresor y un loudnorm final pasas de sonar a radio AM a sonar a FM, todo dentro de la pipeline de micrófono a altavoz con los scripts en Python.

    Para cuando el audio llega muy sucio hay tres filtros que salvan la grabación: afftdn contra el ruido constante del ventilador, adeclick para chasquidos y pops, y un equalizer que sube la banda de presencia de la voz. Una grabación en una cafetería queda usable para Whisper. Limpiar siempre antes de normalizar, porque si amplificas primero también amplificas el ruido.

    Sin FFmpeg, Whisper falla, el texto a voz suena a lata y la pipeline de voz no existe. Hoy hemos puesto los cimientos, y ahora llegan Whisper, el texto a voz, la visión artificial y un extra sobre OCR 😊

    Capítulos
    0:00 - De la memoria de tu IA a los sentidos: la nueva serie
    1:33 - La serie de los sentidos y el audio sucio que llega a tu IA
    3:14 - FFmpeg, la navaja suiza del audio y el vídeo
    5:57 - Instalar FFmpeg y convertir formatos en una línea
    7:27 - El meollo: cómo espera Whisper el audio (16 kHz, mono, 16 bits)
    10:01 - El alias whisperize, loudnorm a -23 LUFS y quitar silencios
    11:19 - Cortar y unir audio: -ss, -t, concat y fundidos
    13:14 - Postprocesar la voz del TTS: de radio AM a FM
    15:25 - La pipeline completa de voz y los scripts en Python
    17:05 - Audio muy sucio: afftdn, adeclick y equalizer
    18:29 - Conclusiones, despedida y comunidad

    Más información y enlaces en las notas del episodio

    • 🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    • ✈️ Telegram 👉 https://t.me/atareao_con_linux
    • 🦣 Mastodon 👉 https://mastodon.social/@atareao
    • 🐦 Twitter 👉 https://twitter.com/atareao
    • 🐙 GitHub 👉 https://github.com/atareao
    21 min
  • ATA 841 GraphRAG, tus notas por fin responden (y sin inventarse nada)

    Te tengo que confesar una cosa. En el episodio anterior, haciendo pruebas, me ventilé toda la información del GraphRAG y me tocó reindexarlo entero. Casi 6.300 notas otra vez, con el Slimbook echando humo. Me ha costado lo suyo, pero ya está. Y ahora toca lo bueno, porque el grafo está montado y solo falta interrogarlo. Este es el cierre de la trilogía, donde el grafo deja de ser un mueble y por fin responde.

    Lo primero es por qué no basta con una sola técnica. El vector te dice qué se parece a tu pregunta, y el grafo te dice qué está conectado. Si buscas un servidor web seguro, el vector acierta de pleno con la nota de hardening. Pero la nota de Certbot no dice esas palabras, así que un RAG clásico la pierde. El grafo la rescata porque está conectada con Nginx y https. Ni grep ni ripgrep te habrían dado eso.

    También te doy las cifras reales del grafo, más de 20.000 nodos, unas 6.300 notas, 15.000 entidades y 46.000 trozos con embeddings. Y la arquitectura híbrida, en tres pasos, primero lo vectorial, después el re-ranking por peso y por último la expansión por grafo, que recupera vecinos a uno o dos saltos. Todo lo modula el parámetro alfa, por defecto en 0,7, donde el significado manda y la conexión complementa.

    Y lo probamos con comandos de verdad. Con graphrag search lanzas la búsqueda y ves cómo cambian los resultados al mover el alfa. Con la profundidad controlas los vecinos que recuperas, con 0 te quedas en lo vectorial y con 2 abres dos saltos de grafo. Te enseño a filtrar por peso mínimo, por metadatos y por tipo de elemento.

    Después viene lo que más me gusta, graphrag ask. No te devuelve notas sueltas, te devuelve una respuesta redactada con Ollama en local y con las fuentes citadas al pie. Le preguntas cómo configurar Traefik y te da los pasos apoyándose en tus notas. Y cuando no tiene información, no se la inventa. En el ejemplo con GIMP solo encontró una nota y te lo dice tal cual. Hablo también de las comunidades y del build incremental, que solo procesa lo que has tocado, ideal para un cron.

    Capítulos
    0:00 - Introducción: el cierre de la trilogía GraphRAG y el reindexado del grafo
    2:13 - Repaso de la trilogía: qué es un GraphRAG y para qué sirve
    4:14 - Vector frente a grafo: por qué necesitas las dos cosas
    6:53 - Las cifras del grafo: nodos, notas, entidades y comunidades
    7:52 - La arquitectura híbrida en tres pasos y el parámetro alfa
    9:17 - Primera búsqueda: cómo montar un proxy inverso y el efecto del alfa
    11:21 - Profundidad de vecinos, Ollama y cómo interpretar los resultados
    13:53 - Filtros: min-weight, metadatos y tipos de elemento
    14:52 - graphrag ask: preguntas con fuentes citadas (cómo configuro Traefik)
    16:54 - Comunidades: build incremental y automatización con cron
    17:42 - Ejemplo con GIMP: búsqueda, ask y la ventaja de no alucinar
    17:42 - Ejemplo con GIMP: búsqueda, ask y la ventaja de no alucinar
    20:28 - Flecos pendientes: integración MCP con Neovim, bot de Obsidian y despedida

    Más información y enlaces en las notas del episodio: https://atareao.es/podcast/841

    🌐 Todo en https://atareao.es · ✈️ Telegram https://t.me/atareao_con_linux · 🦣 Mastodon https://mastodon.social/@atareao · 🐦 Twitter https://twitter.com/atareao · 🐙 GitHub https://github.com/atareao

    23 min
  • ATA 840 sqlite-utils, tu navaja suiza para SQLite

    Llevo varias semanas construyendo un grafo de conocimiento con GraphRAG sobre SQLite, y en ese día a día me he topado con sqlite-utils, una herramienta que se ha convertido en mi navaja suiza para trabajar con bases de datos SQLite sin complicarme la vida. Es de esas utilidades que no sabías que necesitabas hasta que la pruebas.

    Te preguntarás por qué SQLite y no PostgreSQL o cualquier solución más seria. La respuesta es sencilla, porque necesito algo que quepa en mi equipo, que sea portátil y que pueda llevarme en un USB sin montar un servidor. Todo tu conocimiento, en un solo archivo que abres donde quieras.

    El problema de siempre ha sido inspeccionar esas bases. Abrir DBeaver o tirar de Python solo para mirar qué hay dentro da una pereza enorme, y al final acabas dejándolo. sqlite-utils, creada por Simon Willison, resuelve justo eso, y te permite consultar, filtrar, transformar y exportar sin escribir una línea de SQL ni de Python.

    Para que te hagas una idea, aquí hay dos cosas en una sola herramienta, una utilidad de línea de comandos y una librería de Python que no pretende ser un ORM. Nació dentro del ecosistema de Datasette, y busca que crear una base desde cero y poblarla con datos sea rápido y sin fricción. En mi caso ha acabado sustituyendo a los comandos sueltos de sqlite3 que tenía repartidos por las notas.

    Otro terreno donde se nota la mano es la ingesta. Con insert metes un JSON que llega por la tubería, un CSV de los que exportas de cualquier sitio, o la respuesta de una API con un curl delante. Con upsert y bulk actualizas registros que ya existían o metes miles de filas de golpe, y todo eso se encadena con jq en una sola tubería.

    Luego está la parte de cambiar las cosas sin dolor, renombrar una columna, borrar la que sobra o cambiar un tipo de dato. En SQL puro eso es un baile de create table, copiar los datos y borrar la tabla vieja, con el riesgo de liarla a mitad de camino. Aquí es un transform, se ejecuta dentro de una transacción y el esquema queda reescrito como si lo hubieras diseñado así desde el principio.

    En este episodio te cuento cómo instalarla con uv, cómo explorar tablas y esquemas, cómo navegar los datos con rows, cómo filtrar de forma segura con parámetros con nombre y cómo montar consultas complejas con joins. Además verás el combo que más me ha enganchado, sqlite-utils encadenado con jq y con llm para pasar el contexto de tu base directamente a un modelo de lenguaje. Y de propina, los detalles de mantenimiento que marcan la diferencia, como WAL, Vacuum, Optimize y la búsqueda full-text.

    Si tienes una base SQLite por ahí y nunca te has atrevido a mirar dentro, este es tu episodio 👍

    Capítulos
    0:00 - Presentación: sqlite-utils, la navaja suiza de SQLite
    2:20 - Por qué SQLite: GraphRAG, portabilidad y contexto de la serie
    4:20 - El problema de DBeaver y qué resuelve sqlite-utils
    6:00 - Instalación con UV y primeros pasos
    8:30 - Explorar tablas, columnas y esquemas
    11:30 - Navegar los datos con rows
    14:00 - Filtrar con where, ordenar y evitar inyección SQL
    16:30 - Consultas complejas, joins y selects a medida
    18:30 - El combo killer: sqlite-utils + jq + LLM
    20:30 - Escribir y transformar: insertar, crear, exportar y renombrar
    23:00 - El módulo Python y los consejos: WAL, Vacuum, Optimize y FTS
    25:20 - Conclusiones y lo que viene en el 841

    Más información y enlaces en las notas del episodio: https://atareao.es/podcast/840

    🌐 Todo en https://atareao.es · ✈️ Telegram https://t.me/atareao_con_linux · 🦣 Mastodon https://mastodon.social/@atareao · 🐦 Twitter https://twitter.com/atareao · 🐙 GitHub https://github.com/atareao

    28 min
  • ATA839 Convierte 6000 notas en un cerebro conectado

    Llevo más de 6.000 notas en Markdown acumuladas desde 2008, y siempre he estado convencido de que ahí estaba todo lo que he aprendido. Hasta que busco y no encuentro. Busco particiones y no aparece nada sobre redimensionar un volumen. Busco monitorización de red y mis notas hablan de ntopng e iftop sin usar esas palabras. El conocimiento estaba ahí, pero yo no sabía que estaba.

    En el episodio 837 te conté la teoría del GraphRAG. En este 839 vamos a lo práctico, a convertir esas 6.000 notas en un grafo de conocimiento con IA 100 % local, sin nube, sin claves API y sin que ninguna nota salga de tu equipo.

    Lo primero es el chunking, trocear cada nota en ideas autónomas. Y no se trocea por número de caracteres, sino por estructura. Cada sección o subcapítulo es un fragmento, el frontmatter se separa como metadatos, los bloques de código viajan enteros y lo que baja de 50 caracteres se descarta. Trocear por caracteres solo rompe un bloque de código o una lista justo por la mitad.

    Después viene el NER (Named Entity Recognition), que convierte texto libre en entidades con etiqueta, tipo y confianza. Uso llama3.2:3b con Ollama y solo conservo lo que supera 0,5 de confianza. Prefiero perder una entidad dudosa antes que llenar el grafo de ruido, porque un grafo con ruido no te sirve.

    Con eso se construyen nodos y aristas. La nota es el documento entero, la entidad puede ser Nginx, Certbot o SSL, y las etiquetas salen de las carpetas y del frontmatter. Hay cuatro tipos de arista y cada una lleva su peso. La co-ocurrencia usa el mínimo de las dos confianzas, no la media.

    Para construir todo esto ejecutas graphrag build. No empieza de cero, cada nota guarda un hash SHA256 y solo reprocesa lo que ha cambiado. En mi caso encontró 6.333 archivos y le faltaban 81, unos seis minutos, con cuatro hilos y un único escritor sobre SQLite. Y luego están las comunidades, la visión global. El algoritmo Leiden agrupa los conceptos muy conectados entre sí, porque los amigos de mis amigos tienden a formar un grupo.

    Todo esto es graphrag-search, un único binario en Rust que instalas con cargo install graphrag-search. Ni Python, ni NPM, ni servidores. Con dos modelos pequeños de Ollama, bge-m3 para embeddings y llama3.2:3b para el NER, tienes tu propio cerebro conectado para encontrar episodios y conceptos relacionados.

    Capítulos del episodio:
    0:00 - Introducción: convertir 6.000 notas en un cerebro conectado
    2:45 - Qué veremos hoy y la trilogía GraphRAG
    4:20 - Chunking: trocear las notas en ideas autónomas
    7:50 - NER: extraer entidades con un modelo local
    7:50 - NER: extraer entidades con un modelo local
    11:20 - Etiqueta, tipo y confianza: qué guardamos de cada entidad
    13:50 - Nodos y aristas: conectar tus notas con semántica
    17:10 - Construir el grafo con graphrag build
    20:20 - SQLite e incrementalidad: el grafo que se actualiza solo
    24:10 - Comunidades con el algoritmo Leiden
    27:00 - Cierre y avance del siguiente episodio


    Más información y enlaces en las notas del episodio

    • 🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    • ✈️ Telegram (el grupo) 👉 https://t.me/atareao_con_linux
    • ✈️ Telegram (el canal) 👉 https://t.me/canal_atareao
    • 🦣 Mastodon 👉 https://mastodon.social/@atareao
    • 🐦 Twitter 👉 https://twitter.com/atareao
    • 🐙 GitHub 👉 https://github.com/atareao

    29 min

About Atareao con Linux

From the publisher's feed

Disfruta conmigo de Linux y del Open Source.

More shows like Atareao con Linux

Emilcar Daily by Emilcar

Emilcar Daily

24 Listeners

Nadie Sabe Nada by SER Podcast

Nadie Sabe Nada

401 Listeners

Coffee Break: Señal y Ruido by Coffee Break: Señal y Ruido

Coffee Break: Señal y Ruido

46 Listeners

Podcast DekNet by Dek

Podcast DekNet

8 Listeners

RETROMATICA by RETROMATICA

RETROMATICA

6 Listeners

Apple Coding Daily by Julio César Fernández Muñoz

Apple Coding Daily

24 Listeners

Relfon daily podcast by Relfon

Relfon daily podcast

0 Listeners

La Sotana by La Sotana

La Sotana

11 Listeners

La Ruina by La Ruina

La Ruina

68 Listeners

Loop Infinito (by Xataka) by Webedia

Loop Infinito (by Xataka)

57 Listeners

Reflex Podcast by Carlos Castillo y Pistón

Reflex Podcast

2 Listeners

Tierra de Hackers by Martin Vigo

Tierra de Hackers

15 Listeners

Desde el reloj by Jacobo Vidal Pascual

Desde el reloj

9 Listeners

monos estocásticos by Antonio Ortiz, Matías S. Zavia

monos estocásticos

3 Listeners