Introducción
Como sabréis por la entrada anterior, finalmente me he hecho con un equipo lo suficientemente potente como para mover modelos de I.A. Open Source.
A día de hoy hay objetivos que he podido cumplir y otros que aún necesitan trabajo, y algunos que, con la experiencia obtenida, quizá no valen la pena.
Intentaré no hacerlo excesivamente técnico y, por eso, he decidido que el mejor enfoque es repasar cuáles eran mis expectativas y ver si se han cumplido, si se podrán cumplir a corto plazo o si estaban totalmente equivocadas.
Objetivos
Crear un asistente para el trabajo
Este ya os puedo adelantar que es uno de los puntos donde he conseguido más avances. Obviamente, era el que más prisa me corría, ya que trabajo un mínimo de 8 h al día, así que era útil desde el primer momento. Lo he diseñado e implementado… bueno, ha sido implementado totalmente por LLMs mediante VibeCoding (si han mejorado mucho respecto al post que escribi hace tiempo).

Aún no lo tengo tan avanzado como me habría gustado, porque la idea es que no sólo tuviera conocimiento de manuales, listas de distribución y contenido diverso, sino también de reuniones y notas tomadas. Pero aquí me estoy encontrando con varias limitaciones. Primero, tendría que grabar las reuniones. Si lo hago desde mi ordenador, tendría que avisar de que lo estoy haciendo y queda raro. Si activo la grabación de Teams, necesitaría poder descargar el vídeo y usar un modelo para transcribirlo. Y para que fuera realmente útil, debería entrenarlo para que identifique quién habla en cada momento. Técnicamente no sería un problema, pero es incómodo y poco escalable. Por otro lado, aunque me va muy bien tomar notas en Microsoft OneNote, porque las tengo disponibles en cualquier sitio y puedo adjuntar cualquier tipo de contenido… aún no me he puesto en serio a exportarlas, ya que es un programa privativo y el método de exportación es difícil de automatizar.
Aun con estas limitaciones, y pese a la documentación deficiente, estoy satisfecho con el resultado. No trabaja por mí, pero me ayuda a encontrar las causas de los errores y a desbloquearme cuando estoy atascado. Seguramente más adelante (sobre todo en vacaciones) intentaré entrenarlo con el código de la aplicación para que me pueda indicar qué modificaciones se deben hacer a una implementación para adaptarla a las necesidades que le describa (soñar es gratis, de momento…)
Este proyecto también ha servido para crear el “esqueleto” que uso para todos los agentes que quiera desarrollar (agente personal, agente financiero…).
Asistente personal
Este no ha avanzado tanto como pensaba, y para explicarlo os tengo que dar un poco de contexto sobre el entorno que me he encontrado al adentrarme en el fantástico (sí, sin comillas, aunque también complicado) mundo de los LLMs Open Source tipo DIY.
Como en el resto del mundo Open Source, hay mucha variedad, es modular, adaptable, económico… pero tiene un precio: la dispersión y la complejidad de hacer que todo encaje. He tenido y tengo muchos problemas de compatibilidad entre versiones de librerías. Salen nuevos modelos con capacidades no soportadas por los programas de inferencia. Cuando por fin estos programas añaden esas funcionalidades, resulta que son incompatibles con tus drivers, o si son compatibles con la última versión, esa versión rompe otra parte del flujo… Después de invertir un montón de tiempo, acabas dándote por vencido y conformándote con menos funcionalidades, dejando el asunto para más adelante.
Este problema, sumado a otros que explico más abajo, hace que la distancia entre los servicios privados y lo que puedes hacer localmente sea mayor de lo que pensaba, porque no sólo existe la limitación esperable de los recursos computacionales.

Y no es sólo un tema de compatibilidad: los modelos que puedes ejecutar en una máquina personal, por muy potente que sea, son modelos pequeños, poco capaces y poco inteligentes. Una parte la puedes compensar afinando las instrucciones, pero llega un punto en el que no se puede hacer más. No descarto que parte de la culpa sea mía, que esté haciendo algo mal, pero estas limitaciones coinciden con pruebas que había hecho con modelos Open Source en la nube (Qwen, DeepSeek…). Son económicos, sí, pero al cabo de pocas preguntas ya echaba de menos ChatGPT: muchas respuestas incorrectas, callejones sin salida al corregirlos… Podríais pensar que no hace falta que descubran medicinas nuevas, pero hablamos de modelos que a veces ni siquiera generan un JSON bien formado. Si es para mostrarte algo en pantalla, lo corriges tú. Si es para interactuar con un servicio externo, equivale a perder la información. Y como veréis más adelante, esto afecta a más ámbitos de lo que parece.
A todo esto hay que sumarle que me he dado cuenta de que en los servicios privados hay mucha más ingeniería de la que imaginaba, más allá del propio modelo. Sin ir más lejos, la primera funcionalidad que lanzaron y sin la cual un LLM es poco más que un juguete: la búsqueda en internet. He implementado la función y funciona razonablemente bien, pero aunque sigo el mismo flujo, los servicios en la nube tienen algo más que los hace fallar muy poco, mientras que mi código funciona, pero no brilla. Parece algo simple, pero os aseguro que no lo es, y que el nivel de inteligencia del modelo vuelve a ser clave.

Por ejemplo, tuve que especificarle que, si le pido comparar dos cosas y no tiene suficiente información, debe hacer una búsqueda distinta para cada una. Hasta que no se lo dije, buscaba directamente páginas donde se compararan esos dos objetos. Si le pedía comparar un Mercedes Clase A y un Audi A5, buscaba comparativas directas en internet. Ahora lo hace más o menos bien, pero muchas veces no. Y si primero debe averiguar la fecha actual para decidir qué información es la más reciente, tampoco siempre lo hace.
Otra parte del problema creo que está en las limitaciones de mi ordenador: me restringe el número de resultados que puedo solicitar, procesar… y de todos esos, sólo unos pocos llegan al modelo. Además, por privacidad (y por ahorro), no uso Google, sino Brave API…
Entiendo además que los servicios profesionales deben guardar resultados de búsquedas, porque tienen un volumen enorme de usuarios y habrá muchas consultas similares. En mi caso, cada búsqueda sale a internet de cero, y eso implica pelearme con qué resultados son buenos, cuáles accesibles, etc.

También hay que comentar que no hay muchos modelos multimodales buenos (que acepten al menos texto e imágenes). Los que hay son antiguos o demasiado grandes para moverlos localmente. Hace poco vi que vLLM permite —en beta— poner en suspensión y reactivar modelos cargados en la GPU. Esto podría facilitar cambiar de modelo según la consulta, pero como la calidad individual tampoco es buena, no lo he probado.
Además, sospecho que, más allá de los benchmarks, los modelos privados están mucho más afinados que los Open Source. Tal vez sólo sea cuestión de instrucciones, pero la experiencia me dice que no es únicamente eso.

Y sinceramente, aquí me he atascado. Es simple: no consigo acercarme a la calidad de respuesta de los servicios privados, incluso pidiendo cosas relativamente sencillas. En algunas consultas no sería importante y podría hacerlas en local, pero como a menudo termino pasando a los privados cuando la cosa se complica un poco, la inercia hace que me olvide de que puedo usar el asistente local.
No me he dado por vencido. Hay muchas cosas que puedo probar o mejorar (cambiar el modelo, repensar las instrucciones, el flujo de datos…). Pero es un punto donde no esperaba una diferencia tan grande y me ha decepcionado.
Evitar la censura
Aquí tampoco ha habido muchos avances, y esta ha sido una sorpresa desagradable. No hay muchos modelos sin censura. Sólo he encontrado uno decente (sorprendentemente de Google) y no he conseguido integrarlo en mi proyecto. Resulta llamativo que en un entorno tan libre y alternativo como el Open Source sea tan difícil encontrar este tipo de material. En cualquier caso, como decía, la falta de inteligencia penaliza todo lo demás. ¿Para qué quiero un modelo sin censura si no me puedo fiar de que la búsqueda en internet sea suficiente?
Asistente para Vibe Coding
Este era el segundo asistente que quería crear y ahora mismo es el que menos ha avanzado. La idea era que funcionara como las aplicaciones de Vibe Coding de Claude CLI o Codex, mediante una interfaz de terminal con acceso a todos los archivos del proyecto. Pero no he conseguido que estas interfaces se comuniquen con mi proyecto. Hay que aclarar que también son Open Source, así que podría ser un problema de integración. Y aunque llegara a funcionar, con los modelos Qwen que uso normalmente, tampoco los aprovecharía mucho por los problemas mencionados antes. Tal vez servirían para moverse por el sistema (copiar archivos, borrarlos, levantar contenedores Docker, gestionar repositorios…), pero difícilmente para programar algo serio.

Aprendizaje
Terminamos con un objetivo cumplido. Con estos proyectos estoy aprendiendo mucho y, aunque las posibilidades no son todas las que imaginaba, sí tienen muchas aplicaciones. Si miramos sólo los LLMs, sólo me falta aprender a entrenar superficialmente (“finetune”) algún modelo para que no tenga que buscar en documentación, sino que tenga cierto conocimiento específico memorizado.
Conclusión
Los asistentes que tengo saben resumir textos, pero todavía no son lo bastante inteligentes como para resultar útiles. Resumir puede ser suficiente para algunas cosas, pero no para dejar de usar los servicios privados. Por tanto, de momento uso el proyecto para consultar información de distintas fuentes sobre temas laborales, pero a nivel personal no me resulta útil.
Quizá dentro de unos meses o años, si los modelos Open Source mejoran y las respuestas de los servicios privados se “contaminan” con propuestas comerciales no deseadas o pierden imparcialidad (que ya la han perdido), tendría sentido montar tu propio agente. Pero hoy, con el precio de las suscripciones, no tiene demasiado sentido usar un asistente propio cuando la privacidad no es esencial.
Pasa algo similar con los servicios que usan I.A. para ayudar a invertir (bolsa, criptomonedas…). Podría ser un proyecto interesante, pero si los LLM que puedo ejecutar no son lo bastante inteligentes para tareas menores, no los voy a poner a darme consejos de inversión. Hay servicios económicos que hacen que no valga la pena reinventar la rueda.
En resumen, o los usas para una tarea muy mecánica y sencilla que no puedas resolver de otra forma, o a día de hoy te dará más utilidad cualquier servicio en la nube.