Introducción a Semantic Kernel con C# – Curso de Udemy

El curso aborda desde los conceptos básicos de Semantic Kernel hasta su aplicación avanzada con modelos locales.

A continuación, un resumen general de los temas tratados:

  1. Introducción a Semantic Kernel y LLMs
  2. Uso de Prompts en Semantic Kernel
  3. Historial de Chat y Manejo de Contexto
  4. Funciones del Kernel (Kernel Functions)
  5. Extensión mediante Plugins
  6. Uso de Modelos de IA Locales

https://www.udemy.com/course/semantic-kernel

Proceso de Creación:

  1. Introducción a Semantic Kernel y LLMs
    • Explicación de los modelos de lenguaje (LLM) y su funcionamiento.
    • Integración de la IA con código mediante Semantic Kernel.
    • Diferencias entre modelos y cómo se pueden conectar con distintas APIs.
  2. Uso de Prompts en Semantic Kernel
    • Creación de un kernel en .NET9.
    • Configuración de OpenAI y prueba de prompts para generar código.
    • Estrategias para mejorar los prompts y la importancia de su precisión.
  3. Historial de Chat y Manejo de Contexto
    • Implementación de un sistema de historial de chat en .NET.
    • Cómo el historial afecta el consumo de tokens y el contexto de generación.
    • Impacto del crecimiento del historial en costos y rendimiento.
  4. Funciones del Kernel (Kernel Functions)
    • Cómo el modelo de IA puede ejecutar código a través del Kernel.
    • Uso de plugins y funciones personalizadas para enriquecer respuestas.
    • Integración con APIs externas como datos de clima o análisis de texto.
  5. Extensión mediante Plugins
    • Creación de plugins matemáticos y de procesamiento de lenguaje natural.
    • Uso de filtros de invocación para validar funciones antes de ejecutarlas.
    • Aplicaciones en interfaces gráficas y generación de documentos.
  6. Uso de Modelos de IA Locales
    • Configuración de Semantic Kernel con modelos alojados en servidores locales.
    • Ejemplo práctico con Llama 3.2 y LM Studio.
    • Comparación de beneficios y desventajas frente a modelos en la nube.

1.1 ¿Qué es Semantic Kernel?

📝 Resumen

  • 🌍 Introducción a los Modelos de Lenguaje (LLM): Explicación de qué son los Large Language Models (LLM) y cómo procesan grandes volúmenes de texto para generar respuestas similares a las humanas.
  • 🔄 GPT y Transformadores: Se describe el concepto de Generative Pretrained Transformer (GPT) y su capacidad para transformar texto en otros formatos como imágenes, videos o traducciones.
  • 🧩 Distribución de Probabilidades de Tokens: Explicación de cómo los modelos de IA no entienden el lenguaje directamente, sino que asignan probabilidades a los tokens para generar texto.
  • 🔢 Tokenización y Procesamiento: Se muestra cómo GPT divide las palabras en tokens y usa probabilidades para predecir la siguiente palabra, influenciado por configuraciones y contexto.
  • 🔥 Casos de Uso de la IA: Aplicaciones como asistentes virtuales, redacción de textos, marketing, traducción, análisis de datos y generación de contenido creativo.
  • 🚧 Limitaciones de los Modelos de IA: Aunque los modelos entienden el lenguaje, tienen dificultades en matemáticas, datos en tiempo real y memoria contextual.
  • 🏗️ Necesidad de integrar IA con Código: Se plantea cómo solventar estas limitaciones permitiendo que los modelos llamen a APIs externas, como una API de clima para obtener datos actuales.
  • 🖥️ Microsoft y la IA: Se describe cómo Microsoft ha integrado IA en productos como Bing, Office, Windows y GitHub Copilot.
  • 🔗 Semantic Kernel como Orquestador: Se presenta Semantic Kernel como un SDK de código abierto que permite integrar modelos de IA con código real, facilitando la automatización de tareas en .NET, Java y Python.
  • Flexibilidad del Kernel: Se demuestra cómo Semantic Kernel permite cambiar entre diferentes modelos (OpenAI, Google Gemini, Hugging Face) sin alterar la lógica del código.
  • 🛠️ Introducción al Prompt Engineering: Concepto de cómo diseñar prompts efectivos para mejorar la calidad de las respuestas generadas por IA.

📈 Perspectivas basadas en números

  • 🔢 Probabilidades de Tokens: Ejemplo de cómo un modelo asigna mayor probabilidad a palabras relacionadas (ej. “late” → “leche”, “café”, “té”).
  • 📜 Tokenización en GPT: Se muestra cómo una frase como “Bienvenido a nuestro curso” se divide en múltiples tokens numéricos, impactando en el costo y el procesamiento del modelo.
  • 🏗️ Ahorro de costos en modelos: Semantic Kernel permite probar diferentes modelos con solo cambiar la configuración inicial, sin necesidad de reescribir código.

❓ Preguntas exploratorias

  1. 🤔 ¿Cómo afectan las distribuciones de probabilidad de tokens a la generación de texto en los modelos de IA?
  2. 🔄 ¿Cuáles son las ventajas de utilizar Semantic Kernel para integrar modelos de IA con código personalizado?
  3. 🧩 ¿Cómo puede optimizarse el uso de prompts para mejorar la generación de respuestas en IA?

2 Prompts

📝 Resumen

  • 🎯 Creación del primer kernel: Se desarrolla una aplicación de consola en .NET9 sin declaraciones de nivel superior.
  • 🛠️ Configuración del entorno: Se añaden referencias necesarias, como Semantic Kernel, para manejar la IA.
  • 🔗 Conexión con OpenAI: Se establece un modelo de chat completion, utilizando una clave API para la comunicación con los servidores de OpenAI o Azure OpenAI.
  • 🏗️ Primeros prompts básicos: Se ejecuta un prompt simple para generar un código básico en C# que imprime “Hello World”.
  • 🎨 Mejorando los prompts: Se prueba un prompt más detallado que cambia el color de la consola a verde antes de imprimir el mensaje.
  • 🚀 Mayor complejidad en los prompts: Se incluye manejo de errores (try-catch) y estructuras de control más detalladas en los programas generados.
  • 🔁 Comparación de resultados: Se observa cómo prompts más detallados generan código más avanzado, demostrando la importancia de la precisión en la redacción de instrucciones.
  • 🧠 Limitaciones de los prompts: Se experimenta con la conversión de código entre lenguajes, descubriendo que los prompts no tienen memoria entre ejecuciones.
  • 📜 Introducción al chat history: Se plantea la necesidad de almacenar el historial de conversación para superar las limitaciones de memoria en los modelos de IA.

📈 Perspectivas basadas en números

  • 🔢 4 iteraciones de prompts: Cada una con mayor nivel de detalle, demostrando que la precisión del prompt afecta el resultado.
  • 🏗️ Diferencia entre programas: Un prompt básico genera 1 línea de código, mientras que un prompt detallado produce un programa más elaborado con múltiples funcionalidades.
  • 🛠️ Múltiples lenguajes soportados: OpenAI permite escribir prompts en idiomas como español, inglés, francés, chino y ruso.

❓ Preguntas exploratorias

  1. 🤔 ¿Cómo influye la estructura de un prompt en la calidad del código generado?
  2. 🔄 ¿Qué estrategias se pueden usar para optimizar prompts en diferentes lenguajes de programación?
  3. 🧩 ¿Cómo afecta la falta de memoria en los modelos a la interacción en tareas complejas?

3 ChatHistory

📝 Resumen

  • 🏗️ Creación de la aplicación ChatHistory: Se construye una aplicación de consola en .NET9 para trabajar con el historial de chat en IA.
  • 🔗 Configuración de Semantic Kernel: Se añade la referencia de Semantic Kernel y se ajusta la firma del método Main para manejar llamadas asíncronas a servidores web.
  • ⚙️ Implementación del kernel: Se configura GPT-4o con OpenAI para gestionar la generación de respuestas.
  • 🛠️ Manejo de tokens: Se desarrolla un método para contabilizar tokens utilizados en la conversación y analizar su impacto en costos y rendimiento.
  • 📜 Almacenamiento del historial de chat: Se crea una variable chat history para almacenar los mensajes y clasificar respuestas de usuario y asistente.
  • 🔁 Procesamiento del historial: Cada vez que se realiza una consulta, el historial se pasa al modelo, ya que los modelos de IA no tienen memoria propia.
  • 🧩 Conversión de código con contexto: Se prueba la conversión de un código de C# a Visual Basic .NET, destacando cómo el historial de chat permite manejar referencias a respuestas previas.
  • 🔢 Impacto del contexto en los tokens: Se observa que a medida que se acumulan mensajes, el número de tokens procesados aumenta, afectando los costos y el tiempo de respuesta.

📈 Perspectivas basadas en números

  • 🔢 15 tokens de entrada → 213 tokens de salida en la primera interacción.
  • 🔁 214 tokens en la segunda consulta, al incluir el historial previo.
  • 📊 399 tokens en la tercera interacción, reflejando el crecimiento acumulativo del contexto.
  • 🏗️ El uso de tokens sigue aumentando con cada consulta adicional, lo que puede afectar la eficiencia del modelo.

❓ Preguntas exploratorias

  1. 🤔 ¿Cómo puede optimizarse el uso del historial de chat para reducir el consumo de tokens? (Escribe E1 para preguntar).
  2. 🔄 ¿Cuáles son las ventajas y desventajas de almacenar conversaciones en modelos de IA? (Escribe E2 para preguntar).
  3. 🧩 ¿Cómo puede mejorarse la conversión de código entre lenguajes utilizando el historial de chat? (Escribe E3 para preguntar).

4 Kernel Function

📝 Resumen

  • 🔍 Concepto de Kernel Function: Es una funcionalidad que permite a un modelo de IA llamar a su propio código cuando no tiene la respuesta directamente. Esto permite integraciones con APIs, funciones personalizadas y otros sistemas.
  • 🚀 Ejemplo práctico: Se configura una consola con ajustes para controlar la aleatoriedad de respuestas, la cantidad de tokens y la penalización de repeticiones. Esto evita respuestas redundantes y controla los costos asociados al uso de modelos de IA.
  • 📌 Creación de funciones semánticas: Se muestra un método para definir funciones utilizando plantillas (templates). Un ejemplo es la creación de una función para generar una historia basada en longitud y tópico determinado.
  • 🏗️ Flujo de ejecución de una función: Cuando se invoca una función, el sistema serializa la función en formato JSON, la pasa junto con el historial del chat al modelo, y el modelo decide si ejecutarla o no.
  • 🧠 Uso del contexto y memoria: Un problema común en modelos sin memoria es que no pueden recordar información previa. Se demuestra cómo se pueden crear funciones adicionales para almacenar historial y consultar APIs externas, como una API del clima para recuperar datos de temperatura.
  • 🛠️ Uso de Plugins y Funciones: Se introduce el concepto de Plugins, que agrupan funciones relacionadas. Se ejemplifica con un plugin de análisis de texto que incluye funciones para contar palabras y detectar sentimientos.
  • ⚙️ Integración con el Kernel: Se ilustra cómo importar plugins al kernel y usarlos en la IA, permitiendo análisis de texto más avanzado.
  • 📊 Ejemplo práctico de análisis de texto: Se prueba el conteo de palabras en una oración sobre Yuri Gagarin, así como la detección del sentimiento del texto.

📈 Perspectivas basadas en números

  • 🔢 4000 tokens: Límite común para muchos modelos de IA, lo que afecta la cantidad de información procesada en una única consulta.
  • 🔄 41 palabras: Se obtiene esta cantidad tras aplicar una función de conteo sobre una oración de prueba, mostrando la efectividad del plugin de análisis de texto.
  • 🌡️ API del clima: Se ilustra cómo la IA puede invocar varias funciones en cadena para generar respuestas completas basadas en múltiples fuentes de datos.

❓ Preguntas exploratorias

  1. 🤔 ¿Cómo afecta el uso de funciones en el comportamiento de un modelo de IA?
  2. 🔄 ¿Cuáles son las diferencias entre invocar funciones manualmente y permitir que el modelo lo haga automáticamente?
  3. 🧩 ¿Cómo se pueden mejorar los plugins para ofrecer respuestas más precisas en un sistema de IA?

5 Plugins

📝 Resumen

  • 🔌 Introducción a los Plugins: Se explora cómo extender las funcionalidades del kernel utilizando plugins en una aplicación de consola.
  • 🧮 Creación de un Plugin de Matemáticas: Se desarrolla un plugin con dos funciones: sumar y multiplicar, permitiendo que el modelo las invoque automáticamente si lo considera necesario.
  • ⚙️ Auto-invocación de funciones: Se configura el tool call behavior, permitiendo que el modelo decida cuándo invocar una función si no tiene una respuesta directa.
  • 🔍 Uso de filtros de invocación: Se implementa un filtro de invocación de funciones (I function invocation filter), que permite verificar y registrar cada invocación antes y después de ejecutarse.
  • 💡 Ejemplo de validación: Se muestra cómo un filtro puede preguntar al usuario antes de ejecutar una función sensible, como una compra con cargo a tarjeta.
  • 🔄 Pruebas con cálculos matemáticos: Se ejecuta un cálculo combinando sumas y multiplicaciones, verificando que el modelo detecta y ejecuta las funciones disponibles automáticamente.
  • 🖥️ Aplicación en interfaces gráficas: Se lleva el mismo concepto de plugins a una interfaz gráfica en Blazor, permitiendo generar facturas dinámicamente con datos ingresados por el usuario.
  • 📜 Ejemplo de generación de facturas: Se muestra cómo un usuario puede escribir en texto libre la creación de una factura, y el sistema extrae la información, valida los productos y genera el documento.
  • 📅 Automatización con Semantic Kernel: Se demuestra la posibilidad de crear eventos en un calendario usando los plugins de Semantic Kernel, simplemente escribiendo la solicitud en lenguaje natural.
  • 🌍 Potencial de los Plugins: Se enfatiza cómo estos métodos permiten construir agentes inteligentes capaces de ejecutar tareas como reservar citas, generar documentos y responder preguntas con integración a código personalizado.

📈 Perspectivas basadas en números

  • 🔢 37 + 7 = 44: Ejemplo de cómo el plugin matemático realiza sumas automáticamente.
  • ✖️ (37 + 7) × 2 + 5 = 93: Se demuestra la capacidad del sistema para encadenar múltiples operaciones matemáticas sin intervención manual.
  • 🧾 Facturación automática: Un usuario puede describir una factura en lenguaje natural, y el sistema extrae productos, cantidades y descuentos automáticamente.
  • 🗓️ Eventos programados: Se genera un evento en Blazor Calendar con solo indicar la fecha, hora y duración en texto.

❓ Preguntas exploratorias

  1. 🤔 ¿Cuáles son los beneficios de permitir que los modelos de IA auto-invoquen funciones?
  2. 🔄 ¿Cómo se puede optimizar el uso de filtros de invocación en plugins sensibles como pagos en línea?
  3. 🛠️ ¿Qué otras funcionalidades podrían agregarse a los plugins para mejorar la interacción en interfaces gráficas?

6 Usando Modelos Locales

📝 Resumen

  • 🏗️ Uso de modelos locales en lugar de la nube: Se muestra cómo configurar modelos de IA locales, en vez de utilizar servidores en la nube.
  • 🛠️ Creación de una aplicación de consola: Se desarrolla una aplicación en .NET 9, siguiendo el mismo procedimiento que en videos anteriores.
  • 🔗 Configuración del manejador HTTP: Se implementa un handler personalizado que redirige las llamadas de la nube a un modelo alojado localmente.
  • 🖥️ Ejemplo con Llama 3.2: Se utiliza LM Studio para servir un modelo Llama 3.2 en un servidor local con una dirección localhost:134.
  • 🔄 Integración con Semantic Kernel: Se adapta Semantic Kernel para que pueda comunicarse con el modelo local en vez de OpenAI.
  • 🚀 Ejecución de un Prompt en un modelo local: Se realiza una prueba ejecutando un prompt, mostrando la respuesta directamente desde el modelo local.
  • 🔍 Ventajas de modelos locales: Permite mayor privacidad, ahorro de costos y desarrollo offline, siendo útil para pruebas sin depender de servicios externos.

📈 Perspectivas basadas en números

  • 🔢 Redirección de llamadas: El código modifica la URL para redirigir la petición al servidor local, eliminando la necesidad de usar claves API.
  • Ejecución eficiente: Se observa cómo el modelo procesa respuestas en la consola de LM Studio antes de imprimirlas en la aplicación.

❓ Preguntas exploratorias

  1. 🤔 ¿Cuáles son los beneficios y desventajas de usar modelos de IA locales en comparación con modelos en la nube?
  2. 🔄 ¿Cómo se puede optimizar el rendimiento de modelos locales en aplicaciones empresariales?
  3. 🛠️ ¿Qué diferencias clave existen entre servir un modelo en LM Studio y hacerlo en un entorno de producción?

Leave a Reply

Your email address will not be published.