Este año me he decidido empezar a meterme con el tema de la IA asi que he decidido crear artículos pequeños (15-20min) para aprender cosas sobre la IA con .net. En esta primera sesión voy a empezar por lo básico.
¿Qué es realmente la IA en este contexto?
Lo primero que hay que tener claro que cuando hablamos de aplicaciones de IA realmente estamos hablando de software que pueda realizar tareas que normalmente requerirían inteligencia humana. Pero aquí viene la parte importante que no se debe malinterpretar. No estas creando la ia desde 0, estas consumiendo y orquestando capacidades inteligentes que ya existen.
Piensa en ello como la diferencia entre fabricar un motor a usar ese motor en un coche, por ejemplo. Como desarrollador .NET que construye aplicaciones de IA, tu trabajo es integrar, configurar y orquestar estos componentes «inteligentes» para resolver problemas específicos. No necesitas una formación en matemáticas o estudiando teoría. Necesitas entender como funcionan sus componentes, cómo conectarlos y cómo construir aplicaciones robustas.
Las tres familias principales de la IA
Modelos de Lenguaje Grande (LLMs)
Son como contratar a una asistente que se ha leído prácticamente todo internet. Puedes pedirle que escriba código, que explique conceptos, resuma documentos, genere contenido creativo o responder a preguntas. La caracteristica distintiva es que trabajas con lenguaje natural. Le dices «léete este contrato y sácame las fechas importantes» y lo hace sin que tú hayas programado reglas de que pueden ser fechas importantes.
Estos modelos pueden estar en muchos lugares. En el cloud, como Azure OpenAI o Anthropic Claude, donde envías un texto y recibes respuestas a través de internet. Otros puedes ejecutarlos en tu propio servidor o maquina de desarrollo, como los modelos de Llama de Meta o Mistral. La ubicación física donde se ejecuta ese modelo tiene implicaciones de privacidad, coste y rendimiento, algo que hay que explorar con detalle.
Machine Learning Tradicional con ML.NET
Es como entrenar a un especialista muy específico. Imagina que tienes miles de correos históricos etiquetados como spam o no spam. Con ML.NET, puedes entrenar un modelo que aprende los patrones que distinguen spam de correo legítimo basándose en tus datos específicos. Este modelo será extremadamente bueno en esa tarea particular, será rápido, y solo necesitará los recursos de tu servidor .NET sin llamadas externas.
La diferencia clave con los LLMs es que estos modelos hacen una cosa muy bien, pero solo esa cosa. No puedes pedirle a tu clasificador de spam que de repente escriba poesía. Pero para lo que fue entrenado, será más rápido, más barato y más predecible que usar un LLM general. Además, como el entrenamiento y la ejecución suceden completamente en tu código .NET, tienes control absoluto sobre cada aspecto.
Embeddings y Búsqueda Semántica
Son como crear un bibliotecario que entiende el significado de los libros, no solo sus títulos. Tradicionalmente, si buscabas «vehículo motorizado» en una base de datos, no encontrarías documentos sobre «automóviles» porque las palabras no coinciden exactamente. Los embeddings convierten texto en representaciones numéricas que capturan significado, así que «vehículo motorizado» y «automóvil» terminan cerca uno del otro en un espacio matemático.
Esta tecnología es el fundamento de sistemas modernos de búsqueda y recuperación de información. Puedes tomar toda la documentación interna de tu empresa, convertirla en embeddings, y luego cuando alguien hace una pregunta, encuentras los fragmentos de documentación más relevantes semánticamente, no solo por coincidencia de palabras clave. Esto también puedes hacerlo completamente local usando modelos ONNX, sin enviar tus documentos propietarios a ningún servicio externo.
Control y Privacidad
Aquí es donde tu comentario sobre políticas empresariales se vuelve cruciales. Imagina un extremo tienes máximo control y privacidad, pero también máxima responsabilidad operativa. En el otro extremo tienes mínimo control pero también mínima carga operativa.
En el extremo de máximo control, ejecutas todo localmente. Descargas un modelo open source como Llama o Mistral, lo instalas en un servidor dentro de tu red corporativa usando herramientas como Ollama, y tu aplicación .NET se comunica con ese servidor. Tus datos nunca salen de tu infraestructura. No pagas por token o por uso. No dependes de que un servicio externo esté disponible. Pero tú eres responsable del hardware, del monitoreo, de las actualizaciones, del escalado, etc. Si necesitas gestionar mil usuarios concurrentes, necesitas servidores suficientes con la potencia computacional adecuada.
En el extremo de mínimo control, usas un servicio completamente gestionado como Azure OpenAI. Simplemente haces llamadas HTTP a una API, envías tu texto, recibes respuestas generadas por modelos. Azure maneja toda la infraestructura, el escalado, las actualizaciones. Pero tus datos viajan por internet hacia servidores de Azure. Pagas por cada token procesado. Estás sujeto a límites de tasa que el proveedor establece. Dependes de su disponibilidad.
Lo fascinante es que hay muchos puntos intermedios. Puedes usar Azure OpenAI pero con tu propia clave de encriptación y «garantías» de que tus datos no se usan para entrenar modelos. Puedes desplegar modelos en tu propia cuenta de Azure dentro de tu región geográfica preferida. Puedes usar servicios que procesan todo en memoria sin persistir nada. El arte está en entender estos matices para elegir la opción correcta para cada situación.
Cómo .NET se Integra en Este Mundo
Ahora viene la parte emocionante para ti como desarrollador .NET. El ecosistema .NET ha evolucionado significativamente para hacer que trabajar con IA sea natural y productivo. No necesitas cambiar a Python o aprender nuevas plataformas. Puedes quedarte en el ambiente que conoces.
Semantic Kernel es la biblioteca oficial de Microsoft que actúa como un puente entre .NET y los modelos de IA. Piensa en ello como el Entity Framework de la IA: así como Entity Framework te abstrae de las diferencias entre SQL Server, PostgreSQL y MySQL, Semantic Kernel te abstrae de las diferencias entre OpenAI, Azure OpenAI, Hugging Face, Ollama y otros proveedores. Escribes tu lógica de negocio una vez, y puedes intercambiar proveedores mediante configuración.
La biblioteca proporciona conceptos como kernels, que son el contenedor principal de tu configuración; plugins, que son colecciones de funciones que la IA puede llamar; y prompts semánticos, que son plantillas reutilizables para interactuar con modelos. Todo esto con inyección de dependencias nativa, logging integrado, y patrones familiares para cualquier desarrollador .NET moderno.
ML.NET es el framework de Microsoft para machine learning tradicional, completamente integrado en el ecosistema .NET. Puedes entrenar modelos usando LINQ para manipular datos, usar tipos fuertemente tipados en lugar de arrays numéricos sin tipo, y depurar tu pipeline de entrenamiento con el debugger de Visual Studio.
Esta combinación es la que puedes mezclar y combinar. Quizás uses ML.NET para clasificación rápida de categorías, un modelo local en Ollama para generación de texto sensible, y Azure OpenAI para tareas complejas que requieren los modelos más avanzados. Todo orquestado desde el mismo código C# con patrones consistentes.
Tu Primera Decisión Arquitectónica
Antes de escribir código, necesitas tomar una decisión fundamental que afectará todo lo demás: ¿qué nivel de acoplamiento con proveedores específicos estás dispuesto a aceptar?
Si escribes código directamente contra las APIs de OpenAI, tu aplicación quedará atada a OpenAI. Migrar a otro proveedor requerirá reescribir código. Pero obtendrás acceso a características específicas de OpenAI que abstracciones genéricas quizás no expongan.
Si usas Semantic Kernel desde el inicio, te toma un poco más de tiempo configurar inicialmente, pero ganas flexibilidad extraordinaria. Puedes empezar con un modelo local gratuito para desarrollo y pruebas, luego cambiar a Azure OpenAI para producción, y más tarde migrar a un modelo open source ejecutándose en tu datacenter cuando las políticas empresariales cambien, todo sin reescribir tu lógica de negocio.
Conceptos Fundamentales que Necesitas Dominar
Déjame darte un mapa mental de los conceptos técnicos que encontrarás constantemente y que necesitas entender profundamente.
Tokens son las unidades en que los modelos de lenguaje procesan texto. No son exactamente palabras; son fragmentos de texto que pueden ser palabras completas, partes de palabras, o puntuación. El texto «desarrollo de software» podría ser tres tokens: «desarrollo», » de», » software». Por qué importa esto: los modelos tienen límites de cuántos tokens pueden procesar a la vez (su ventana de contexto), y los servicios cloud cobran por token. Entender tokens te ayuda a optimizar costos y diseñar prompts efectivos.
Temperatura es un parámetro que controla qué tan «creativa» o «determinística» es la salida del modelo. Una temperatura de cero significa que el modelo siempre elegirá la respuesta más probable, resultando en salidas consistentes y predecibles. Una temperatura alta introduce más aleatoriedad, útil para contenido creativo pero problemática para extracción de datos estructurados y probabilidad más alta de que alucine, por cierto que un modelo alucine significa que se inventa la respuesta. Saber cuándo usar cada configuración es crucial para aplicaciones profesionales.
Prompts son las instrucciones que le das al modelo. Pero no son simples comandos; son arte y ciencia combinados. Un prompt bien diseñado incluye contexto sobre el rol del modelo, instrucciones claras sobre la tarea, ejemplos de lo que esperas, y formato deseado de la salida. La calidad de tus prompts impacta dramáticamente la calidad de los resultados.
Embeddings son vectores numéricos de dimensión fija que representan significado semántico. Un embedding típico podría ser un array de 768 números flotantes. No necesitas entender las matemáticas profundamente, pero sí necesitas entender que textos similares en significado tendrán embeddings similares matemáticamente, permitiéndote hacer búsquedas y comparaciones semánticas.
El Flujo de Trabajo Típico
Déjame pintarte cómo se ve un flujo de trabajo típico al desarrollar una aplicación de IA en .NET, para que tengas una visión antes de sumergirnos en código específico.
Primero, identificas un problema de negocio que la IA puede resolver. Digamos que quieres automatizar respuestas a preguntas frecuentes de clientes. Analizas si necesitas un LLM general, si puedes entrenar un modelo específico con ML.NET, o si es una combinación de ambos.
Segundo, seleccionas tu proveedor basándote en restricciones de privacidad, presupuesto y rendimiento. Quizás decides empezar con Ollama ejecutando un modelo localmente porque tus preguntas frecuentes contienen información sensible.
Tercero, diseñas la arquitectura de tu aplicación usando patrones de inyección de dependencias para mantener flexibilidad. Creas interfaces que abstraen la comunicación con el modelo, servicios que manejan la lógica de negocio, y controladores que exponen funcionalidad vía API.
Cuarto, implementas el sistema de prompts. Para preguntas frecuentes, probablemente uses RAG (Retrieval Augmented Generation): buscas las preguntas y respuestas más similares en tu base de conocimiento usando embeddings, luego las pasas al modelo junto con la pregunta del usuario para generar una respuesta contextualizada.
Quinto, implementas observabilidad: logging de cada interacción con el modelo, métricas de latencia, monitoreo de calidad de respuestas. Esto es crucial porque los modelos de IA pueden fallar de maneras diferentes a software tradicional, y necesitas visibilidad para diagnosticar problemas.
Finalmente, iteras basándote en feedback real. Quizás descubres que ciertas categorías de preguntas se responden mal, entonces refinas tus prompts, añades más ejemplos a tu base de conocimiento, o cambias a un modelo más capaz para esos casos específicos.
¿Por Qué Esto Importa para Tu Carrera?
Permíteme cerrar esta sesión fundamental con algo de perspectiva sobre por qué dominar IA en .NET es una inversión valiosa de tu tiempo.
La industria del software está en un punto de inflexión. Las aplicaciones que no incorporan IA de alguna manera están empezando a parecer anticuadas, similar a cómo hace quince años las aplicaciones sin interfaces web parecían obsoletas. Pero hay una escasez crítica de desarrolladores que entienden tanto desarrollo de software robusto como integración de IA.
Tu ventaja como desarrollador .NET es que vienes del mundo empresarial donde el software tiene que funcionar en producción bajo escrutinio, manejar datos sensibles apropiadamente, y ser mantenible por equipos durante años. Estas habilidades son exactamente lo que se necesita para llevar IA de prototipos interesantes a sistemas productivos confiables.
Además, el enfoque de mantener opciones abiertas y no depender de un solo proveedor te posiciona perfectamente para organizaciones que valoran soberanía de datos y flexibilidad estratégica. Muchos desarrolladores solo conocen cómo usar APIs de OpenAI; tú vas a saber cómo construir sistemas que pueden funcionar con cualquier proveedor o incluso completamente offline.
¿Listo para el Siguiente Paso?
Ahora que tienes este mapa mental de cómo se ve el panorama completo, en la siguiente sesión vamos a ensuciarnos las manos configurando tu entorno de desarrollo. Instalaremos Visual Studio Code o Visual Studio, configuraremos Ollama para ejecutar modelos localmente, y crearemos tu primer proyecto .NET que puede comunicarse con un modelo de lenguaje.
