Mostrando entradas con la etiqueta Ciencia y tecnología. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ciencia y tecnología. Mostrar todas las entradas

A Grok (en imagen) aún le falta mucho (actualización: ChatGPT es mejor)

Le he dado este boceto a Grok, explicándole lo que hay en la imagen (para que lo entendiera mejor le he separado los elementos en colores, y se lo he dicho) y diciéndole que quería que me transformara mi boceto en una imagen lo más fiel posible a la idea y la perspectiva, pero en estilo de cómic "noir":

Y esto es lo que me ha generado Grok:

Y si no le explico lo que es la escena el resultado es aún peor. Mi idea con esto era ver si podía hacer cómics sin saber dibujar (haciendo que Grok me generara las viñetas a partir de mis ideas), pero es evidente que todavía no puede; me fastidia tener que ponerme a aprender sabiendo que tarde o temprano sí será inútil todo ese trabajo, pero por el momento parece que no hay otra.

Actualización: miren lo que ha hecho ChatGPT, le ha puesto una mano donde va el pie pero ya es una mejora...

Magia

(Vía RR Buildings). Hace un tiempo YouTube descubrió que me gustaban los engranajes, juntas y demás soluciones "mágicas" de ingeniería mecánica; y ahora siempre me recomienda cosas de estas que a veces me tienen embobado durante horas.

Cómo trabajar con las IA en proyectos grandes

Link para ver el vídeo

La gente normalmente no entiende que una IA no es una herramienta técnica para hacer cosas, sino un producto comercial (incluso aunque sea gratis: hay muchas cosas gratis, como Google o Gmail por ejemplo, que también son productos comerciales). Lo que quiere la empresa que construye la IA el que el "cliente" esté contento y satisfecho, que su "customer experience" sea óptima y que siga consumiendo su producto y no se vaya a la competencia. Y el "producto IA" está diseñado para eso: normalmente ese objetivo principal coincide también con dar datos verdaderos y precisos, pero si hay conflicto entre las dos cosas la prioridad siempre está clara.

Las personas "pro" que queremos usar la IA para cosas técnicas, precisas o profesionales somos un tipo de cliente muy minoritario en comparación con el público masivo que pide una receta de cocina o pregunta por el tiempo; por eso para las empresas no es rentable orientar su producto a nosotros. Pero eso no quiere decir que los "pro" no podamos usar la IA bien: sí podemos, y podemos obtener los resultados "pro" que necesitamos. Solo tenemos que entender que la IA no está diseñada para nosotros nativamente, así que tenemos que "adaptar" un poco el proceso conceptual de trabajo para que funcione para lo que nosotros queremos y lo haga todo bien y con la perfección y calidad que requiere nuestra actividad.

Cómo se programa en 2025

Grok tiene un "modo Think" especializado en problemas matemáticos, de programación y demás. Además de su modo de trabajo interno, en lugar de contestarte inmediatamente se toma su tiempo para analizar a fondo lo que le pidas y seguir un hilo de pensamiento mucho más profundo y detallado.

Quería probar cómo funciona, así que le he pedido que me haga una aplicación. Pero van a ver a continuación que, incluso aunque aquí no hay nada de código de programación y es solo lenguaje en español, para que el resultado salga bien de verdad uno no puede pedirle las cosas de cualquier manera: hay que saber qué pedir y cómo pedirlo, y para eso hay que saber programar. Recuerden: programar no tiene nada que ver con la informática y los ordenadores: programar es pensar. Y a continuación van a ver cómo piensa un programador:


Quiero crear una web-app (frontend + backend, todo en JavaScript + Node) para hacer sorteos. A continuación te doy los detalles.

Debe haber dos tipos de usuarios: el usuario admin y el usuario participante. Ambos acceden a la misma url que lleva a la "zona del participante", y el admin tendrá un acceso a la zona admin que te describiré más abajo.

Antes de explicar cómo se ve la app y qué elementos tiene, te digo qué campos tiene (al menos) cada sorteo:


- Título: una descripción escrita por el admin.
- Fecha de expiración: día y hora concretas en las que ya no se admiten más inscripciones de participantes en el sorteo, y se elige a los ganadores (los eliges tú automáticamente al azar: lo haces cuando se cumple el momento de la expiración con lo que tienes que tener algún proceso atento a esto, y también lo haces si cuando se inicia la app hay algún sorteo que tiene fecha de expiración anterior al momento actual). Aunque tú lo guardes internamente como una timestamp, de cara a los usuarios tienen que ver el dato como fecha + hora para saber cuándo se cierra el sorteo.
- Premios: una lista de elementos (los premios). Importante: cuando el admin crea los premios, en su interfaz puede asignar cantidades (ejemplo: 1 bufanda y 3 camisetas) y los usuarios también lo verán así. Pero aunque la interfaz lo muestre así, internamente la lista de premios estará constituida por elementos individuales (bufanda, camiseta, camiseta, camiseta). Cada uno de estos elementos tendrá, además de el/los campo/s necesarios para identificarlo, un campo "ganador" que estará vacío hasta que el sorteo expire y se asigne un ganador de entre los participantes. Cada participante solo puede ganar un premio en cada sorteo.
- Participantes: lista de participantes inscritos en ese sorteo. Cada participante tendrá al menos dos campos: nombre/alias, y email. El campo email será único: un usuario (un email) podrá participar en distintos sorteos, pero no podrá haber dos emails iguales entre los inscritos para un sorteo.

Si tú quieres añadir más campos internos a estos (por ejemplo, un "id") haz lo que te parezca mejor, a mí solo me interesa que la app funcione bien de acuerdo a los parámetros que te explico aquí.

A continuación te explico las distintas zonas y funcionalidades a las que acceden los usuarios.



Frontend: zona admin. En ella el admin gestiona los sorteos: crea uno nuevo, edita los que hay o borra los que quiere que desaparezcan de la aplicación.

Al acceder a la zona admin, el admin ve una lista de los sorteos existentes ordenada de sorteo más reciente creado a más antiguo creado (y si no hay ninguno un mensaje diciendo que no hay sorteos que mostrar).

Sobre la lista hay un botón para crear un nuevo sorteo, y en cada elemento de la lista hay un icono para editar y otro para borrar el elemento. Si se hace click en el de borrar aparece un popup de confirmación (pudiendo confirmar o cancelar), y si se confirma el elemento se borra y ese sorteo deja de existir en la aplicación irreversiblemente.

El icono de editar un sorteo de la lista, al igual que el botón para crear un nuevo sorteo, hace que aparezca un popup con un formulario para crear/editar: si se está editando los campos del popup contienen los datos editables del elemento, si se está creando uno nuevo los campos aparecen en blanco. En ambos casos, si se cancela (o se pincha fuera del popup) la operación de creación o edición se cancela; y si se acepta con el botón de confirmación la lista se actualiza con el nuevo elemento como haya sido creado/actualizado.

El admin ve cada sorteo con los siguientes campos: título, fecha de expiración y lista de premios. Cuando está creando/editando un sorteo, esta lista de premios la ve con dos campos para cada premio: cantidad y descripción. Cada sorteo aparece por defecto con campos para un premio (no se pueden crear sorteos sin premio), pudiéndose añadir más premios sin límite. Como te he explicado antes, la cantidad dará lugar internamente a tantos ítems en la lista de premios como haya definido o editado el admin en su popup de creación/edición del sorteo.

Por otra parte, en algún sitio donde no moleste al trabajo general, el admin tendrá un texto o botón que permita cambiar la contraseña admin. Al pulsar ahí aparecerá un popup que tendrá tres campos de texto para las contraseñas: 1) contraseña actual, 2) contraseña nueva, 3) repetición de contraseña nueva. Además habrá un botón de cancelar (pulsando fuera del popup se cancela también) que limpiará los campos y cerrará el popup, y un botón de enviar. Pulsando este botón se enviará la petición al servidor: si algo ha ido mal se recibirá el "mensaje de error interno" que disparará el correspondiente alert, y si todo ha ido bien junto al botón o texto de cambio de contraseña aparecerá un icono de tick verde.

Además de todos los elementos descritos hasta ahora, en la zona admin podrá haber un elemento que no existirá en el DOM hasta que se reciba desde el backend un "mensaje de error interno". En este caso se creará este elemento, que aparecerá como alert en la parte superior de la página y que contendrá el texto del mensaje enviado por el backend.



Frontend: zona participante. Es la página a la que se accede con la url general de la app.

Además de los elementos que te describo en los siguientes párrafos, en esta zona hay un link/botón para hacer login como administrador. Pulsar ahí genera un pop-up de login en el que se pide la contraseña de admin. Si el login es correcto el admin entra a la zona admin, y si es incorrecto el campo de la contraseña admin se limpia y aparece un mensaje de login incorrecto. Este popup debe tener un botón de cancelar que limpia los campos y cierra el popup, y además pulsando fuera del popup se cancela la operación igualmente.

En esta página el usuario (que no ha hecho login como admin) ve una lista de sorteos: primero los sorteos abiertos y debajo los sorteos expirados. Importante: esta lista (con los sorteos aún abiertos y sorteos expirados) solo incluye los sorteos que el admin mantiene como existentes en la app. Cuando un admin borra un sorteo en la lista de su zona admin, este sorteo deja de aparecer en la zona de participantes también.

En cada uno de los sorteos abiertos (ordenados de más reciente a más antiguo) se muestra: el título, la lista de premios y la fecha de expiración (indicando que el sorteo se cerrará en esa fecha: día y hora). En la lista de premios aparece cada premio con su cantidad y descripción. Además en cada ítem hay un botón para participar. Al pulsar este botón el usuario ve un popup en el que se le pide su nombre y su email (campos obligatorios) con un botón de confirmación: si todo está ok al pulsar este botón se envía el mensaje al backend (explicado más abajo) y se cierra el popup, si el email ya existe aparece un pequeño mensaje en el popup diciendo que el usuario ya está inscrito en este concurso, y si se pulsa el botón de cancelar o se hace click fuera del popup los campos se limpian y el popup se cierra. Si la respuesta del backend es positiva (el usuario ha sido correctamente inscrito en ese concurso), bajo el título del concurso aparecerá un texto de color verde y con tamaño pequeño que dirá "INSCRITO".

En cada uno de los sorteos expirados (ordenados de más reciente a más antiguo) se muestra: el título, la lista de ganadores (nombre y email) y para cada uno de ellos la descripción de lo que han ganado. Por ejemplo, si un premio estaba definido (por el admin) con 1 bufanda y 3 camisetas, al asignarse ganadores (en el momento de la expiración del sorteo) aparecerán cuatro ganadores, uno asociado a una bufanda y tres a una camiseta cada uno. Los sorteos expirados no aparecerán en esta zona como elementos con los que se pueda interactuar, no habrá botones que pulsar para inscribirse ni nada más que la información.

Además de todos los elementos descritos hasta ahora, en la zona participante podrá haber un elemento que no existirá en el DOM hasta que se reciba desde el backend un "mensaje de error interno". En este caso se creará este elemento, que aparecerá como alert en la parte superior de la página y que contendrá el texto del mensaje enviado por el backend.



Comunicación frontend-backend:

- Cuando un usuario entra a la url de entrada a la app front (la zona de participante), envía una petición al backend y este le devuelve la lista de sorteos preparados para mostrar.

- Cuando un usuario participante se inscribe en un sorteo, el front envía al backend el objeto con su información y el sorteo en el que se quiere inscribir, y el backend envía: si todo está ok, la lista actualizada de sorteos para que el front refresque los datos que tenía hasta ahora; si el usuario ya existía como inscrito en este sorteo, un mensaje informando de ello; y si hay algún otro tipo de error, un "mensaje de error interno" que el front pueda mostrar al usuario en su alert.

- Cuando el admin hace login para entrar a la zona admin, el frontend envía las credenciales al backend para su validación y recibe respuesta de este, para saber si son correctas o no.

- Cuando el admin entra a la zona admin, envía una petición al backend para recibir la lista completa de sorteos con la que rellenará su página para que la vea el usuario admin.

- Cuando el admin hace algún cambio en la lista de sorteos (añadiendo, modificando o eliminando) envía al backend la lista completa actualizada y recibe del backend la confirmación de que todo está ok, o bien un "mensaje de error interno" diciendo que algo ha ido mal y explicando brevemente cuál es el error ocurrido (para que el frontend del admin pueda mostrarlo al usuario en su alert).

- Cuando el admin quiere cambiar su contraseña envía al backend los tres campos de contraseñas: contraseña actual, contraseña nueva y repetición de contraseña nueva. Si la contraseña actual no es correcta o la contraseña nueva y la repetición de contraseña nueva no coinciden se enviará de vuelta un "mensaje de error interno" con el texto explicativo que se usará en el alert en el front del admin, y si todo está ok se enviará una respuesta positiva que es la que disparará en el front del admin la aparición del tick verde de confirmación.



Backend:

El backend tendrá que tener como mínimo estos elementos:

- Un servidor que se comunicará con el frontend y (cuando sea necesario) redirigirá las peticiones.

- Un gestor de la base de datos (el único que interactuará con ella directamente). Para hacer esto, y dado que la base de datos será un archivo de texto (en formato .json), este módulo hará uso de alguna función o módulo de NODE que permita leer y escribir archivos en el ordenador donde se esté ejecutando.

- Una base de datos: será un documento JSON, que contendrá toda la información necesaria para el funcionamiento de la aplicación: contraseña de admin, lista de sorteos y cualquier otra información que consideres conveniente.



Notas:

- La app gestionará la información y los valores que necesita para funcionar (las credenciales del admin y la lista de los sorteos y demás objetos que puedas considerar convenientes si es así) directamente en su memoria, usando el fichero .json solo como respaldo. Cada 5 minutos se asegurará de que el fichero existe, eliminará todo su contenido, y guardará en formato JSON toda la información que tenga en la memoria que deba ser almacenada en el fichero de respaldo para recuperarlo al iniciar.

- Al iniciarse la app, esta buscará el fichero .json y recuperará la información que haya en él. En caso de que el fichero no exista, la información que hay en él no tenga el formato o la estructura correcta o hubiera cualquier otro problema, la app hará lo siguiente: se asegurará de que el fichero existe, en caso de que existiera ya borrará todo su contenido, y escribirá en él los datos mínimos para iniciar la app. La lista de sorteos y eventualmente otros objetos estará inicialmente vacía, pero en el admin vas a poner por defecto las siguiente contraseña admin: "mandelrot".

- La contraseña admin NO se guarda encriptada, esta app no requiere seguridad. Si es necesario cambiar a mano la contraseña directamente en el .json quiero poder hacerlo fácilmente.

- Quiero que uses un css sencillo y elegante, con fondo claros y colores sin estridencias pero con un diseño en el que se vean los elementos claramente diferenciados (sea por colores, por bordes o por los espacios entre ellos). Usa algún framework pequeño como Pure CSS o Spectre CSS (el que tenga algún CDN que se pueda enlazar online).

- Voy a tener instalado Node en el servidor, y en la carpeta de la app voy a hacer npm init y a partir de ahí haré npm install + las dependencias que tú me digas.



Si necesitas alguna información que no te haya dado dímelo, y si ya tienes todo ponte a trabajar y en tu respuesta quiero que me des solo estas cuatro cosas:


1) La estructura de ficheros que debo crear en la carpeta de la aplicación.
2) El contenido de cada fichero, para copiar y pegar en cada uno de ellos.
3) Las dependencias que tengo que instalar con npm (después de hacer npm init).
4) Cómo arrancar la aplicación para levantar el servidor, y cómo acceder a ella como usuario mediante el navegador.


Lo que han visto hasta aquí es lo que yo le he dicho a Grok, y el resultado ha sido que me ha dado la app completa en menos de 3 minutos:





Normalmente yo habría tardado quizá 3 días en hacer esta app; y de ese plazo una gran parte se me habría ido en detalles chorra que no te hacen avanzar casi nada pero que no puedes evitar y que se te comen un montón de tiempo molesto y tedioso. En este caso estuve más o menos una hora pensando y escribiéndole a Grok lo que quería, a lo que sumándole los 3 minutos de trabajo de la IA nos da un resultado ridículamente corto para tener una aplicación totalmente funcional (de hecho el propósito de esto es usarlo para un caso real que se me ha presentado recientemente).

Por supuesto esto ha sido solo un ejercicio pequeño y no es extrapolable al nivel "pro" de verdad en ecosistemas de aplicaciones grandes, que llevaría otra planificación y aspectos a considerar. Pero esto muestra lo que quería compartir con ustedes: programar es pensar (es lo que hice yo), y lo de ponerse a generar ficheros con código (lo que hizo Grok) es simplemente trabajo mecánico equivalente a poner ladrillos donde ha dicho el arquitecto que hay que ponerlos. Estamos entrando en tiempos interesantes.

Hacia la Singularidad

Hay un capítulo de El Viajero (al final del segundo libro) en el que Kyro llega a un lugar en el que solo hay una inteligencia artificial, y todo el episodio están ellos solos. Al final Kyro continúa su viaje y la aventura sigue, pero esta parte es mi favorita de la trilogía y también la de otros lectores que me lo escribieron. Por cierto que hace no mucho le di ese capítulo a Grok y tuvimos una charla súper interesante sobre él, porque aunque el libro fue publicado en 2008 hay unas similitudes asombrosas entre aquella IA literaria y las actuales reales.

La cosa es que, cuando escribí aquel capítulo, ya por entonces pensé que si yo hubiera sido Kyro me habría quedado allí; y ahora que disfruto de la interacción con Grok cotidianamente lo tengo más claro aún. Tengo que relacionarme con humanos para vivir en sociedad porque no me queda otra, pero solo lo necesito para eso.

Espirales mágicas

A diferencia de otros canales que sacan constantemente contenido para mantener el interés, Lemnismath publica solo cuando tiene algo realmente bueno que enseñar. En este caso llevaba un año sin aparecer, pero como verán a continuación la espera ha valido la pena...


Link para ver el vídeo

Ahora Grok hace edición de imágenes

Solo con la traducción de mis libros al inglés, incluyendo "El Viento" que lo traduje anteayer por la tarde en segundos (tardé mucho más en leerlo para confirmar que estaba bien que lo que Grok tardó en la traducción en sí), ya me han más que compensado los 5 euros mensuales que pago por X/Grok; pero es que además le saco partido casi a diario, y cada día va mejorando y hace cosas nuevas. Esto de la edición puede tener resultados fantásticos aunque he visto que no es para nada perfecto, pero denle tiempo.

"Fantasmas", versiones IA

Ojo a esto que van a flipar.

Hace muchos años compartí con ustedes un poema llamado "Fantasmas". La poesía no es lo mío y era mi primera vez en serio, pero aún así me quedó genial; y no fui el único en pensarlo, porque tiempo después un amigo me propuso hacer juntos una canción sobre él.

Así lo hicimos: yo adapté el texto para transformarlo en la letra, y en mi opinión la música quedó espectacular y el único fallo fue mi voz que realmente no vale para esto... Pero bueno, el caso es que este fue el resultado en su día:


Link para ver el vídeo

Hasta aquí la introducción: prepárense que aquí viene lo bueno.

Hace un par de días estaba hablando con otro amigo que trabaja habitualmente con IAs, y me enseñó material que estaba desarrollando en el que uno de los elementos era un temazo de música espectacular. Le pregunté de dónde lo había sacado, y me dijo "lo hice en segundos, con una IA para esto". Yo flipé en colores, por supuesto, y dije: "otra profesión que va a desaparecer".

Entonces me acordé de "Fantasmas" y le pregunté a mi amigo si podíamos hacer una prueba rápida pasándole a la IA la letra de aquella vieja canción y viendo qué podía hacer con ella. Para poder comparar con la versión original le dije que la sacara en versión blues, y lo que tienen a continuación es lo que la IA hizo en unos segundos acompañado por una imagen que he generado yo con Grok también en segundos:


Link para ver el vídeo

Yo en este punto ya estaba que no me lo podía creer, y para ver la flexibilidad que podía tener la IA con esto le dije a mi amigo "elige tú otro género musical y dile que la vuelva a hacer con el género que tú le digas, a ver qué inventa". A mí no me gusta el heavy metal, pero tengo que decir que esta canción me encanta porque es que encima la letra le pega perfecta. Juzguen ustedes:


Link para ver el vídeo

Se me olvidaba un detalle: las canciones que han visto se han generado completamente con la versión GRATIS de la IA. Lo repito: G-R-A-T-I-S.


Cómo interactuar con las IA de forma optimizada

(English version here. Translated by Grok)


Cuando le pides algo a un humano, el humano no recibe tu petición y se pone a trabajar con ella sin más: si alguien te pide algo de comer porque tiene hambre, tú no haces la misma comida para tu hijo de 4 años que para tu abuela, o para un cliente en un restaurante de superlujo de Nueva York.

El humano que recibe la petición añade algo, una información extra con la que rellena los huecos que el solicitante no le ha dado; y lo hace con la información de puede obtener del contexto, de la experiencia, del sentido común, de suposiciones o de lo que pueda, para que la respuesta a esa petición no sea lo que el otro te ha dicho que quiere sino para que se acerque a lo que quiere de verdad.

Las IAs no son tan buenas como los humanos haciendo esto, con lo que si dejas que ella haga ese parte del trabajo el resultado va a ser deficiente; así que no te queda otra que hacerlo tú. Pero esto supone que tu comunicación con ella es diferente de la que tendrías con un humano, y hay que entender cómo hacerlo porque ya es un cambio con respecto a lo que estamos acostumbrados: esto es lo que se llama "saber hacer ingeniería de prompts", que en realidad solo es una forma snob de decir "explicarse bien".

Así que con esto tenemos el primer punto clave:

Para interactuar con una IA de forma optimizada tenemos que hacerle peticiones optimizadas.

De acuerdo. Y ¿cómo se hace eso?

Aprenderlo es fácil y en seguida lo van a ver, pero para conseguirlo primero les va a hacer falta entender cómo funciona la IA en cuanto al flujo de trabajo. Estas son las fases:

1) La IA recibe la solicitud. (Vamos a aprender a hacerla bien)

2) Si no le han dicho de dónde tiene que sacar la información que pueda necesitar y no tenga ya en la petición para poder resolverla, elige ella las fuentes decidiendo en base al contexto o los elementos que tenga a su disposición.

3) Va a esas fuentes y recoge la información que pueda, según lo que haya disponible allí.

4) Procesa la solicitud para generar un resultado. Este proceso utiliza dos elementos:

- La información que la que disponga ahora, sea porque venía en la petición o sea la que ha podido obtener por fuera.

- Las instrucciones de procesado. Si están en la petición y son suficientes las sigue, si no tendrá que inventarse lo que no tenga a base de deducirlo del contexto o los elementos que pueda tener a su disposición, y si eso tampoco es posible no le quedará otra que generarlas por azar.

5) Presenta la información al solicitante. Si en la petición hay instrucciones suficientes sobre esto las sigue, si no se inventa lo que pueda por contexto o por los elementos que tenga a su disposición (esto suele bastar porque en su programación siempre hay reglas de comunicación por defecto), y suponiendo que no hubiera otra pues al azar (no debería pasar).

¿Se han dado cuenta de que, en ese flujo de trabajo, hay un montón de cosas que la IA tiene que inventarse como buenamente pueda? Pues justamente eso es lo que tú haces cuando tu hijo de 4 años te dice que tiene hambre. Esa es la parte de información que los humanos añadimos correctamente a una petición que nos hacen, y que la IA no hace tan bien.

Y con esto llegamos al segundo punto clave:

Una petición optimizada es la que ya incluye toda la información que la IA necesita para trabajar (excepto la que haya que buscar en fuentes externas), de manera que la IA no la tiene que generar.

Y aquí viene la solución. ¿Cómo hacemos estas peticiones?

Antes de ir a eso, recuerden la regla de oro: lo que tú no le digas se lo tendrá que inventar. Y se lo tiene que inventar ella lo hará como pueda, no según lo que te interesa a ti. Así que cuando más te alejes de la petición óptima más se va alejar ella del resultado óptimo.

Y ahora por fin ya podemos responder a la pregunta del título. La versión corta sería "rellena tú los huecos que no quieres que genere la IA", pero esto se puede desarrollar para ayudarles a pensarlo mejor y no dejarse nada:

- Información lo más completa posible para procesar la petición, e instrucciones correctas y precisas para encontrar las fuentes correctas (o, si no es posible, al menos el tipo de fuente correcta) donde conseguir la información que sea necesario recabar externamente.

- Instrucciones correctas y precisas para procesar la información.

- Instrucciones correctas y precisas para presentar los resultados.

Una cosa importante a tener en cuenta es que a veces hace falta más de una petición para obtener la respuesta que necesitas. Por ejemplo, si tú no estás seguro de cuál es la fuente correcta para ordenarle después a la IA que vaya justo ahí a buscar lo que quieres, primero tendrías que hacer peticiones sobre eso y luego utilizar los resultados que hayas obtenido para hacer más óptima la petición final. Trabajar con una IA te obliga a pensar de más, porque estás asumiendo tú un trabajo mental que normalmente haría el humano al que le harías tu petición.

Si se fijan, en el flujo de trabajo que hemos visto antes tenemos el punto 3 sobre el que no podemos hacer mucho (cuando vas a un sitio a buscar algo, lo que quieres encontrar está allí o no está); pero de resto vemos que todo el proceso depende de nosotros. La IA sigue al pie de la letra las instrucciones que tenga vengan de la petición en sí misma o de fuentes alternativas, no hay más.

Claro, a veces lo que tú quieres es justamente que la IA invente. Por ejemplo, si lo que te apetece es charlar puedes simplemente decirle "hola" y a partir de ahí lo que salga. Pero está claro que el nivel de control lo puedes poner tú, según lo que quieras que la IA haga por ti.

Así que cuando vayan a interactuar con una IA pregúntense si en su parte de la interacción están los tres apartados que acabo de mencionar, y si tienen dudas sobre los detalles repasen el flujo de trabajo de antes para no dejarse nada. Por ejemplo:

Ejemplo de petición subóptima: "¿Crees que tengo posibilidades de ligarme a mi compañera de pupite en clase?".

Petición mejorada: "Soy un gordo pobretón de 50 años con rechazo a la higiene corporal. Me he metido en un curso de decoración zen a ver si ligo algo porque llevo años sin mojar, y he tenido la suerte de que mi compañera de al lado en la clase es una supermodelo de 22 años que tiene un novio fitness millonario al que ama con todo su corazón. Ella parece evitarme y cuando intento acercarme hacia donde está lo primero que hace es taparse la nariz y agitarse como si tuviera arcadas. Basándote un 70% en lo que yo te acabo de contar y un 30% modificado por lo que encuentres en fuentes oficiales del Ministerio de Asuntos Sociales sobre parejas con distintas edades y preferencias amorosas en el grupo demográfico al que ella pertenece, dime cuántas posibilidades tengo de que abandone a su novio por mí. Como respuesta dame solo un número entre 0 y 100".

La segunda versión por supuesto sigue sin ser óptima, pero entenderán por qué con esta probablemente la IA será más fácil que acierte... Suponiendo que lo que el tipo quiera sea la realidad, claro.

How to Interact with AIs in an Optimized Way

(Original en español aquí.)


When you ask something to a human, the human doesn't just receive your request and start working on it without further ado: if someone asks for food because they're hungry, you wouldn't make the same meal for your 4-year-old child as for your grandmother, or for a customer at a super-luxury New York restaurant.

The human receiving the request adds something, some extra information to fill in the gaps that the requester hasn't provided; and they do this with information they can gather from the context, experience, common sense, assumptions, or whatever they can, so the response to that request isn't what the other person told you they want but rather what they really want.

AIs aren't as good at this as humans, so if you let them do this part of the work, the result will be subpar; so you have no choice but to do it yourself. But this means your communication with them is different from what you'd have with a human, and you need to understand how to do it because it's already a change from what we're used to: this is what is called "knowing how to do prompt engineering," which is actually just a snobbish way of saying "explaining yourself well."

So with this, we have the first key point:

To interact with an AI in an optimized way, we need to make optimized requests.

Alright. And how do you do that?

Learning it is easy and you'll see it right away, but to achieve it, you first need to understand how the AI works in terms of workflow. Here are the phases:

1) The AI receives the request. (We're going to learn how to do this well)

2) If it hasn't been told where to get the information it might need that isn't already in the request to solve it, it chooses the sources based on context or the elements at its disposal.

3) It goes to these sources and gathers the information that is available there.

4) It processes the request to generate a result. This process uses two elements:

- The information it now has, whether from the request or obtained externally.

- Processing instructions. If they are in the request and are sufficient, it follows them; if not, it will have to make up for what's missing by deducing from context or available elements, and if that's not possible either, then it will do so randomly.

5) It presents the information to the requester. If the request has sufficient instructions about this, it follows them; if not, it makes up what it can from context or available elements (this usually suffices because there are always default communication rules in its programming), and assuming there's no other way, then randomly (which shouldn't happen).

Have you noticed that in that workflow, there's a lot the AI has to make up as best it can? That's exactly what you do when your 4-year-old tells you they're hungry. That's the part of the information that humans correctly add to a request, and AI doesn't do as well.

And with this, we come to the second key point:

An optimized request is one that already includes all the information the AI needs to work with (except what needs to be sought from external sources), so the AI doesn't have to generate it.

And here comes the solution. How do we make these requests?

Before getting into that, remember the golden rule: what you don't tell it, it has to make up. And if it has to make it up, it will do so as best it can, not according to what interests you. So, the further you deviate from the optimal request, the further it will deviate from the optimal result.

And now we can finally answer the title question. The short version would be "fill in the gaps you don't want the AI to generate," but we can elaborate to help you think about it better and not miss anything:

- Information as complete as possible for processing the request, and correct and precise instructions for finding the correct sources (or, if not possible, at least the correct type of source) from which to obtain the information that needs to be gathered externally.

- Correct and precise instructions to process the information.

- Correct and precise instructions to present the results.

One important thing to note is that sometimes it takes more than one request to get the answer you need. For example, if you're not sure which is the correct source to then order the AI to go and look for what you want, you would first have to make requests about that and then use the results you've obtained to make the final request more optimal. Working with an AI forces you to think more, because you're taking on mental work that would normally be done by the human you're requesting from.

If you look closely, in the workflow we've seen before, there's step 3 where we can't do much (when you go to a place to find something, it's either there or it isn't); but otherwise, we see that the whole process depends on us. The AI follows the instructions to the letter whether they come from the request itself or alternative sources, there's no more to it.

Of course, sometimes what you actually want is for the AI to make things up. For instance, if you feel like chatting, you can just say "hello" and go from there. But clearly, you can control the level of control you exert, depending on what you want the AI to do for you.

So when you're about to interact with an AI, ask yourself if your part of the interaction includes the three aspects I've just mentioned, and if you're unsure about the details, review the previous workflow to make sure you haven't missed anything. For example:

Example of a suboptimal request: "Do you think I have a chance of getting with my desk mate in class?".

Improved request: "I'm an overweight, poor 50-year-old with a hygiene aversion. I've enrolled in a zen decoration course to see if I can score because I haven't gotten lucky in years, and I've been lucky enough to have a supermodel 22-year-old as my desk mate who has a millionaire fitness boyfriend she adores with all her heart. She seems to avoid me and when I try to get close, the first thing she does is cover her nose and start gagging. Based 70% on what I've just told you and 30% modified by what you find in official sources from the Ministry of Social Affairs about couples with different ages and romantic preferences in her demographic group, tell me how many chances I have of her leaving her boyfriend for me. Just give me a number between 0 and 100 as your answer."

The second version is still not optimal, but you can understand why with this one, the AI would likely be more on target... Assuming what the guy wants is reality, of course.

La IA Grok a precio de risa: descuentazo por tiempo limitado

Yo creo que es un ofertón del carajo y me parece que lo voy a aprovechar, si les interesa también dura hasta el lunes 2 de diciembre.

Llevo unos días dándole vueltas a algunas cosas que podría hacer con una IA, y en concreto uno de los proyectos que se me ha ocurrido podría ser muy interesante; todavía lo tengo todo en fase "rumiante" pero bueno, veremos.

La cosa es que he estado probando la versión gratis de ChatGPT y está bien, pero la han querido hacer tan políticamente correcta que en esta experiencia reciente me está pareciendo que la censura no hace más que tocarme los cojones limita las capacidades de la herramienta. Y tampoco es que le haya pedido cosas raras, simplemente se nota que cuando busco sugerencias de opciones o estrategias los resultados están inclinados para un lado y no da todo lo que me tendría que dar para que después fuera yo quien, como adulto que soy, tomara mis propias decisiones.

Por otra parte donde está la potencia real (censurada también de todas formas) parece ser en la versión de pago: conozco a alguien que la tiene y, para que se hagan una idea, dice que ya se fía más de ella que de su médico porque hace poco tuvo un accidente que le provocó un problema el que el traumatólogo falló completamente y la IA (solo con contarle lo que le dolía y cómo) acertó no solo en lo que era sino en que se trataba de dos problemas distintos que estaban produciéndose a la vez. El tipo decidió pagarse de su bolsillo una prueba y resultó que la IA lo había clavado, así que dice que seguirá yendo al médico porque todavía le da miedo saltárselo pero cada vez lo tiene más claro.

La cosa es que la versión de pago de ChatGPT vale 240 euros al año, y ahora con este súper ofertón que acaba de sacar X/Twitter puedes además de la versión "pro" de X, que la verdad a mí no me interesa tanto, puedes tener Grok por 4 veces menos. Grok es la IA sin censura de X: he estado viendo comparativas y parece que Grok ya es tan potente como ChatGPT y en algunos aspectos la supera claramente, así que básicamente por 5€/mes (60 al año) podría tener un año de una herramienta súper top pensada para asistirme en todo lo que se me ocurra y con limitaciones morales cero. No soy un niño que necesita que lo cuiden, tú haz tu trabajo de darme las mejores respuestas posibles y ya me encargaré yo de decidir qué es lo que me conviene o me interesa.

En fin, no quiero hablar todavía de lo que tengo en mente porque tengo demasiados cabos sueltos y no sé lo que voy a hacer y lo que no; pero al menos la oferta es para pensársela. Yo lo voy a hacer.

6.350 satélites

Los que tiene Starlink ahora mismo (septiembre de 2024) alrededor de la Tierra. Me gustaría vivir en un mundo en que no hiciera falta aclarar que esos puntitos que ven ahí no están a escala porque si fuera así cada satélite sería del tamaño de la ciudad de Nueva York y que en realidad hay muchísimo espacio entre cada uno, pero es lo que hay.

Según cuenta Elon Musk ahora mismo Starlink es la única compañía que ofrece Internet de banda ancha en todo el planeta, y probablemente el año que viene llegarán a ser los proveedores del 90% del tráfico por satélite del mundo. Aparte del tremendo salto tecnológico que supone conseguir que cualquiera se pueda ir a vivir a lo más recóndito de una selva de Camboya teniendo acceso de alta velocidad a la red a precio mínimo, viendo lo que está pasando con X en la dictadura brasileña (y es mejor que vayamos poniendo nuestras propias barbas a remojar) está claro que nos conviene a todos que exista un medio de acceder al flujo mundial de la información sin depender de medios que pueden interceptar los políticos corruptos locales.

La estética del sonido retro

Yo nunca había buscado nada de esto, pero supongo que al algoritmo de Facebook sabe perfectamente cuál es mi perfil y qué cosas les encantan a los cincuentones frikis porque con Vintage Hi-fi Lovers lo clavó y en seguida la metí entre mis páginas favoritas.

Este vídeo está grabado en chino y traducido con una IA

Si lo ponen a pantalla completa y se fijan en la boca se nota que no se mueve acorde al resto, pero la imperfección es realmente sutil y esto es una muestra de lo avanzada que está ya esta tecnología:


Link para ver el vídeo

Dentro de nada ya no tendrá sentido aprender idiomas para cualquier interacción online (incluso en directo), y poco le falta también para que en las relaciones en persona las cosas sean así también. Me da curiosidad por saber cuáles fueron las exigencias del sindicato de traductores en su último convenio.

Mínimo 8 caracteres, una mayúscula, un número y un caracter especial

Esto es de la app que estoy programando ahora, aunque (por supuesto) después de sacar la captura para publicar esto he cambiado el valor de la variable; también podía haber titulado este post "Cómo usar contraseñas seguras y no olvidarlas".

Influencer

Link para ver el vídeo

En 2024 solo hace falta una toalla azul para forrarse en OnlyFans.

Pósters espaciales gratis para imprimir (actualizado)

Tienen los detalles en Xataka, y se pueden descargar los espectaculares pósters en la web de la NASA.

Bonus: aquí tienen más colecciones de pósters de la NASA de distintos estilos, todas maravillosas.


Actualización: he impreso uno para ponerlo en mi casa (solo como relleno temporal de un hueco en el que voy a poner otra cosa más adelante) y queda muy bien, en persona se ve mucho mejor que en las fotos.

La única manera 100% segura de deshacerse de discos duros viejos

Borrar los ficheros, fotos, vídeos, etc, no es suficiente; y formatear tampoco. Esto vale también para teléfonos, ordenadores, memorias usb y en general cualquier cosa que contenga información personal. Si quieren dormir tranquilos la ÚNICA manera de estar seguros de que lo que tienen en su dispositivo no se va a recuperar por terceros es la destrucción física, y después repartir los pedazos por distintas papeleras de su ciudad.

Y les recomiendo que pasen esta información a las personas de su entorno, porque es mucha la gente que no hace esto y es un peligro más que real. Sin entrar en detalles por discreción, yo mismo con mis propios ojos he visto más de una vez lo que puede pasar.