{"id":193,"date":"2025-12-16T13:15:45","date_gmt":"2025-12-16T13:15:45","guid":{"rendered":"https:\/\/elbrinner.com\/?p=193"},"modified":"2025-12-16T20:25:36","modified_gmt":"2025-12-16T20:25:36","slug":"devui-depura-agentes-en-tu-propio-proyecto","status":"publish","type":"post","link":"https:\/\/elbrinner.com\/index.php\/2025\/12\/16\/devui-depura-agentes-en-tu-propio-proyecto\/","title":{"rendered":"DevUI: depura agentes en tu propio proyecto"},"content":{"rendered":"<h2><strong><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-202\" src=\"https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/tools-1024x519.png\" alt=\"\" width=\"1024\" height=\"519\" srcset=\"https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/tools-1024x519.png 1024w, https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/tools-300x152.png 300w, https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/tools-768x389.png 768w, https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/tools-1536x779.png 1536w, https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/tools-2048x1038.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\u00bfQu\u00e9 es DevUI?<\/strong><\/h2>\n<p>La ventana al interior de los agentes.<\/p>\n<h2><strong>\ud83c\udf10 El contexto actual<\/strong><\/h2>\n<p>Hoy convivimos con un ecosistema cada vez m\u00e1s complejo de <strong>agentes inteligentes<\/strong>:<\/p>\n<ul>\n<li>Agentes que hablan con otros agentes (<strong>A2A<\/strong>).<\/li>\n<li>Agentes que se conectan con <strong>herramientas externas<\/strong> mediante protocolos como <strong>MCP<\/strong>.<\/li>\n<li>Agentes que ejecutan <strong>funciones internas<\/strong> (callFunction).<\/li>\n<li>Agentes que env\u00edan <strong>eventos UI-Agent<\/strong> hacia el frontend.<\/li>\n<li>Y agentes que, adem\u00e1s, act\u00faan como <strong>orquestadores de otros agentes<\/strong>, coordinando flujos completos de trabajo.<\/li>\n<li>Entre otros&#8230;<\/li>\n<\/ul>\n<p>Con tantas piezas movi\u00e9ndose al mismo tiempo, surge una pregunta inevitable: <strong>\u00bfqu\u00e9 est\u00e1 ocurriendo realmente dentro de este sistema multiagente?<\/strong><\/p>\n<p>&nbsp;<\/p>\n<h2><strong>\ud83d\udd0e La necesidad de transparencia<\/strong><\/h2>\n<p>Los sistemas multiagente son potentes, pero tambi\u00e9n opacos. Para los desarrolladores, depurar y entender qu\u00e9 sucede dentro de ellos era como mirar una caja negra:<\/p>\n<ul>\n<li>\u00bfQu\u00e9 agentes est\u00e1n activos?<\/li>\n<li>\u00bfQu\u00e9 herramientas invocan y en qu\u00e9 orden?<\/li>\n<li>\u00bfC\u00f3mo fluyen los mensajes y las respuestas del modelo?<\/li>\n<li>\u00bfQu\u00e9 decisiones toma el supervisor al distribuir tareas?<\/li>\n<\/ul>\n<p>De esa necesidad nace <strong>DevUI<\/strong>: una interfaz que expone, en tiempo real, la vida interior de los agentes y sus workflows.<\/p>\n<p>&nbsp;<\/p>\n<h2><strong>\ud83d\udda5\ufe0f \u00bfQu\u00e9 ofrece DevUI?<\/strong><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-194\" src=\"https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/lista_archivo-1024x522.png\" alt=\"DEVUI Agent Framework\" width=\"1024\" height=\"522\" srcset=\"https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/lista_archivo-1024x522.png 1024w, https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/lista_archivo-300x153.png 300w, https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/lista_archivo-768x392.png 768w, https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/lista_archivo-1536x784.png 1536w, https:\/\/elbrinner.com\/wp-content\/uploads\/2025\/12\/lista_archivo-2048x1045.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p><strong>DevUI<\/strong> no es solo un panel visual:<\/p>\n<ul>\n<li><strong>Panel de agentes<\/strong>: lista de los agentes registrados en tu aplicaci\u00f3n.<\/li>\n<li><strong>Logs en tiempo real<\/strong>: trazas de ejecuci\u00f3n y coordinaci\u00f3n.<\/li>\n<li><strong>Streaming de respuestas<\/strong>: visualizaci\u00f3n paso a paso del modelo.<\/li>\n<li><strong>Controles de entorno<\/strong>: cambiar credenciales y despliegues sin modificar el c\u00f3digo.<\/li>\n<li><strong>Visibilidad de tokens<\/strong>: m\u00e9tricas claras de <strong>tokens de entrada y salida<\/strong>, \u00fatiles para depurar y optimizar consumo.<\/li>\n<\/ul>\n<div tabindex=\"0\" role=\"article\" data-tabster=\"{&quot;groupper&quot;:{&quot;tabbability&quot;:2},&quot;focusable&quot;:{}}\" data-content=\"ai-message\" aria-labelledby=\"yHnPCTahaeWPgGbR3JUzi-author yHnPCTahaeWPgGbR3JUzi-content-0\">\n<div class=\"space-y-3 mt-3\">\n<div id=\"yHnPCTahaeWPgGbR3JUzi-content-0\">\n<div><\/div>\n<h2>\u2699\ufe0f Configuraci\u00f3n simples<\/h2>\n<p>No necesitas clonar repositorios ni ejecutar c\u00f3digo externos. Solo instala el paquete NuGet en tu proyecto:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">dotnet add package Microsoft.Agents.AI.DevUI<\/pre>\n<\/div>\n<p>Configuraci\u00f3n en pocas l\u00edneas.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\">\/\/ Registra en el contenedor de servicios la capacidad de generar respuestas.\r\n\/\/ Esto habilita que el agente pueda procesar peticiones y devolver resultados.\r\nbuilder.Services.AddOpenAIResponses();\r\n\r\n\/\/ Registra en el contenedor de servicios la capacidad de manejar conversaciones.\r\n\/\/ Permite que el agente gestione di\u00e1logos con estado, incluyendo historial y contexto.\r\nbuilder.Services.AddOpenAIConversations();\r\n\r\n\r\n\/\/ Expone los endpoints HTTP para las respuestas.\r\n\/\/ Con esto, el agente puede recibir solicitudes externas y responder de forma directa.\r\napp.MapOpenAIResponses();\r\n\r\n\/\/ Expone los endpoints HTTP para las conversaciones.\r\n\/\/ Esto habilita la interacci\u00f3n continua con el agente a trav\u00e9s de un API REST.\r\napp.MapOpenAIConversations();\r\n\r\n\r\n\/\/ Solo en entorno de desarrollo se habilita la interfaz DevUI.\r\n\/\/ DevUI es una herramienta visual para probar, depurar y explorar los agentes,\r\n\/\/ mostrando endpoints, configuraciones y permitiendo interacci\u00f3n r\u00e1pida.\r\nif (builder.Environment.IsDevelopment())\r\n{\r\n    app.MapDevUI();\r\n}\r\n<\/pre>\n<\/div>\n<p>Puedes usar tu proveedor de modelo preferido ejemplo Azure OpenAi y Ollama.<\/p>\n<p><strong>Azure OpenAI<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">var builder = WebApplication.CreateBuilder(args);\r\n\/\/ Configurar Azure OpenAI Client\r\n AzureOpenAIConfig.Register(builder);\r\n\r\n<\/pre>\n<p><strong>Ollama<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">var builder = WebApplication.CreateBuilder(args);\r\n\/\/ Configurar Ollama Client\r\nOllamaConfig.Register(builder);<\/pre>\n<p>&nbsp;<\/p>\n<div class=\"space-y-3 mt-3\">\n<p>Con esto, tu proyecto ya expone DevUI en <strong>http:\/\/localhost:8001\/devui<\/strong><\/p>\n<h2>\ud83e\uddea Ejemplo r\u00e1pido con agentes de prueba<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">builder.Services.AddAgent(\"EchoAgent\", async (ctx, input) =&gt; $\"Echo -&gt; {input}\");\r\nbuilder.Services.AddAgent(\"UpperAgent\", async (ctx, input) =&gt; input?.ToUpperInvariant() ?? \"\");\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Al abrir DevUI ver\u00e1s ambos agentes listados, podr\u00e1s enviarles mensajes y observar c\u00f3mo responden y se trazan sus pasos en tiempo real.<\/p>\n<p>Puedes bajar la prueba de concepto que hice en mi github: <a href=\"https:\/\/github.com\/elbrinner\/DEV-UI-AGENT\">https:\/\/github.com\/elbrinner\/DEV-UI-AGENT<\/a><\/p>\n<p><strong>Referencias:<\/strong><\/p>\n<p><a href=\"https:\/\/github.com\/microsoft\/agent-framework\/tree\/main\/dotnet\/samples\/GettingStarted\/DevUI\">https:\/\/github.com\/microsoft\/agent-framework\/tree\/main\/dotnet\/samples\/GettingStarted\/DevUI<\/a><\/p>\n<p><iframe loading=\"lazy\" title=\"DevUI for .NET: Debugging Agents Like Magic \u2728\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/NBkB8faHS9w?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<p>Felices fiestas<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 es DevUI? La ventana al interior de los agentes. \ud83c\udf10 El contexto actual Hoy convivimos con un ecosistema cada vez m\u00e1s complejo de agentes inteligentes: Agentes que hablan con otros agentes (A2A). Agentes que se conectan con herramientas externas mediante protocolos como MCP. Agentes que ejecutan funciones internas (callFunction). Agentes que env\u00edan eventos UI-Agent &#8230; <a title=\"DevUI: depura agentes en tu propio proyecto\" class=\"read-more\" href=\"https:\/\/elbrinner.com\/index.php\/2025\/12\/16\/devui-depura-agentes-en-tu-propio-proyecto\/\" aria-label=\"Leer m\u00e1s sobre DevUI: depura agentes en tu propio proyecto\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[72,61],"tags":[78],"class_list":["post-193","post","type-post","status-publish","format-standard","hentry","category-agent-framework","category-mcp","tag-devui"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/posts\/193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/comments?post=193"}],"version-history":[{"count":10,"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/posts\/193\/revisions"}],"predecessor-version":[{"id":206,"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/posts\/193\/revisions\/206"}],"wp:attachment":[{"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/media?parent=193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/categories?post=193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/elbrinner.com\/index.php\/wp-json\/wp\/v2\/tags?post=193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}