La combinación de capacidades de IA local (como modelos ONNX) con APIs del sistema de Windows abre la puerta al desarrollo de asistentes inteligentes capaces de entender el contexto del usuario y reaccionar en consecuencia. En este artículo se describe cómo crear un asistente de escritorio moderno con WinUI 3 que escuche el contenido del portapapeles, analice el texto localmente mediante inferencia con IA, y sugiera acciones o realice comandos con base en el resultado.
Este enfoque funciona completamente offline, preservando privacidad y respondiendo en tiempo real.
Escenario
Se construye una app tipo widget flotante que:
- Detecta texto nuevo en el portapapeles
- Usa un modelo ONNX de clasificación de intención
- Sugiere acciones como: buscar, traducir, abrir app, copiar info, etc.
- Accede a procesos del sistema para acciones automatizadas
Requisitos
- Windows 11
- Visual Studio 2022
- Windows App SDK + WinUI 3
- Microsoft.AI.MachineLearning + acceso a Windows.ApplicationModel.DataTransfer
- Modelo ONNX de clasificación (intención o NLP embebido)
- Permiso para acceder a procesos (System.Diagnostics)
Paso 1: Crear ventana persistente estilo Widget
Basado en el artículo anterior, crear ventana flotante:
var hwnd = WindowNative.GetWindowHandle(this);
var appWindow = AppWindow.GetFromWindowId(GetWindowIdForWindow(this));
appWindow.SetPresenter(AppWindowPresenterKind.CompactOverlay);
Paso 2: Capturar texto del portapapeles
DispatcherQueueTimer timer = DispatcherQueue.CreateTimer();
string anterior = "";
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += async (s, e) =>
{
var data = Clipboard.GetContent();
if (data.Contains(StandardDataFormats.Text))
{
string texto = await data.GetTextAsync();
if (texto != anterior)
{
anterior = texto;
await EvaluarTexto(texto);
}
}
};
timer.Start();
Paso 3: Evaluar intención con modelo ONNX
Cargar modelo preentrenado de intención o clasificación:
var model = LearningModel.LoadFromFilePath("Assets/Modelos/clasificador.onnx");
var session = new LearningModelSession(model);
var tensor = TensorString.CreateFromArray(new[] { 1u }, new[] { texto });
var binding = new LearningModelBinding(session);
binding.Bind("input_text", tensor);
Ejecutar:
var resultado = await session.EvaluateAsync(binding, "Inferencia");
var salida = resultado.Outputs["output_label"] as TensorString;
var prediccion = salida.GetAsVectorView().FirstOrDefault();
Paso 4: Mostrar sugerencia en UI
SugerenciaText.Text = $"¿Deseás {prediccion}?";
Agregar botón según intención:
if (prediccion == "traducir")
{
Traducir(texto);
}
else if (prediccion == "buscar")
{
Process.Start(new ProcessStartInfo("https://www.bing.com/search?q=" + Uri.EscapeDataString(texto)) { UseShellExecute = true });
}
Paso 5: Automatización de acciones
Acceder a procesos abiertos:
var procesos = Process.GetProcesses();
foreach (var proc in procesos)
{
if (proc.ProcessName.Contains("notepad"))
{
proc.Kill(); // o traer al frente
}
}
Ejemplo: copiar texto detectado como nombre de archivo → abrir archivo.
Paso 6: UI simplificada con feedback
En XAML:
<StackPanel>
<TextBlock x:Name="TextoDetectado"/>
<TextBlock x:Name="SugerenciaText"/>
<Button Content="Ejecutar acción" Click="Ejecutar_Click"/>
</StackPanel>
Actualizar en tiempo real:
TextoDetectado.Text = texto;
Casos de uso reales
- Asistentes de productividad (resumen, acción sugerida)
- IA contextual para tareas repetitivas
- Reemplazo de accesos rápidos con comandos inteligentes
- Interfaces adaptativas para entornos sin conectividad
Buenas prácticas
- Permitir desactivar portapapeles automático
- Evitar acciones destructivas (confirmar antes de cerrar apps)
- Mostrar claramente el resultado de la inferencia
- Ejecutar tareas en background sin bloquear la UI
- No ejecutar si la confianza es baja (basado en score)
Conclusión
La construcción de un asistente inteligente de escritorio que combine IA local con APIs del sistema permite ofrecer experiencias proactivas, eficientes y altamente personalizadas. WinUI 3 junto con Windows ML y la integración con funcionalidades como el portapapeles, procesos y UI flotante, ofrece un entorno ideal para crear agentes inteligentes que funcionan sin depender de la nube.
Ver también
- Integración de inferencia local ONNX con Windows ML en apps modernas
- Integración con servicios locales vía App Services y extensión de funcionalidades entre apps
- Implementación de Background Tasks persistentes en apps modernas
- Empaquetado de apps modernas con MSIX y configuración avanzada del manifiesto
- Creación de ventanas flotantes estilo Widget con posicionamiento persistente en pantalla