Construcción de un asistente contextual para escritorio usando IA local con acceso al sistema


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

comments powered by Disqus