- Los agentes modernos de C# combinan el razonamiento LLM con herramientas, memoria y flujos de trabajo para gestionar tareas complejas orientadas a objetivos.
- Azure OpenAI Assistants y Microsoft Agent Framework proporcionan elementos básicos para asistentes, sesiones, herramientas y ejecuciones en .NET.
- Las arquitecturas robustas separan los agentes especializados, conservan el estado, orquestan los flujos de trabajo y garantizan pruebas estrictas, observabilidad y seguridad.
- Las herramientas en la nube, como Azure AI Foundry y las extensiones de IA para VS Code, agilizan el desarrollo, la evaluación y la implementación de agentes de nivel de producción.

La creación de agentes de IA con herramientas en C# ha pasado de ser un experimento de investigación a una forma muy práctica de añadir inteligencia real a las aplicaciones empresariales. Los marcos de trabajo modernos de Microsoft y los últimos SDK de OpenAI y Azure OpenAI permiten ir mucho más allá de los simples chatbots, conectando grandes modelos de lenguaje con código, archivos, flujos de trabajo y sistemas empresariales, manteniendo al mismo tiempo el control sobre la seguridad, el coste y la fiabilidad.
Esta guía le explicará los conceptos básicos, las decisiones de arquitectura y los ejemplos concretos de .NET que necesita para diseñar agentes listos para producción en C#. Reuniremos ideas de Azure OpenAI Assistants, Microsoft Agent Framework, patrones de orquestación, pruebas, observabilidad e implementación en la nube, explicando cómo todo encaja en una estrategia coherente para aplicaciones del mundo real.
Qué es realmente un agente de IA (y por qué es importante en .NET)
En el ecosistema .NET, un agente de IA se entiende mejor como un componente de software orientado a objetivos, impulsado por un LLM (Lenguaje de Aprendizaje Automático), que puede razonar, elegir herramientas y actuar dentro de su aplicación. En lugar de un guion rígido que siempre sigue el mismo camino, un agente acepta información abierta, decide qué hacer a continuación y utiliza tu código y tus datos para avanzar hacia un resultado.
Los agentes se vuelven mucho más útiles cuando se les añaden tres capacidades además de la generación de texto plano. Les proporcionas razonamiento y toma de decisiones (mediante modelos de lógica descriptiva, algoritmos de búsqueda o planificación), la capacidad de llamar a herramientas (funciones locales de C#, servidores MCP, API, ejecución de código) y conocimiento del contexto (historial de chat, hilos, almacenes de vectores, grafos de conocimiento empresarial o búsqueda de archivos). Esto es lo que convierte una simple función de autocompletar un chat en un componente capaz de coordinar de forma autónoma tareas de varios pasos.
A medida que tus objetivos se vuelven más complejos, rara vez ejecutas todo como una única instrucción opaca; descompones el trabajo en flujos de trabajo. Un flujo de trabajo es una secuencia o diagrama de pasos necesarios para alcanzar un objetivo: recopilar requisitos, diseñar, implementar, probar y desplegar una funcionalidad, por ejemplo. Cada paso puede contener subtareas y puede repetirse en caso de errores o nueva información, por lo que la orquestación se convierte rápidamente en una prioridad.
Cuando colocas agentes dentro de estos flujos de trabajo, obtienes flujos de trabajo de agentes: flujos en los que los agentes colaboran para ejecutar, adaptar y optimizar tareas. Es posible que tengas un agente que analice los registros, otro que redacte correcciones de código y un tercero que prepare informes para las partes interesadas. Lo importante es cómo se transmiten la información, cómo se coordinan y cómo se mantiene todo el sistema visible y auditable.
Componentes básicos de los asistentes y agentes de IA
La mayoría de las plataformas modernas de agentes de IA dirigidas a C# y .NET comparten un pequeño conjunto de componentes básicos, aunque la nomenclatura difiera ligeramente entre Azure OpenAI Assistants y Microsoft Agent Framework. Comprender estos bloques te ayuda a diseñar tu propia arquitectura en lugar de copiar fragmentos a ciegas.
Un asistente o agente es el cliente central de IA que utiliza una configuración LLM plus para procesar instrucciones, gestionar conversaciones e invocar herramientas. En Azure OpenAI Assistants, este objeto encapsula la configuración del modelo, las instrucciones y la configuración de la herramienta. En Microsoft Agent Framework, un AIAgent Integra un cliente de chat (OpenAI o Azure OpenAI), además de herramientas e instrucciones, y es intencionalmente sin estado para poder gestionar varias conversaciones en paralelo.
Un hilo o sesión representa una única conversación entre un usuario y el agente, incluyendo todos los mensajes y el estado relevante. Los asistentes de Azure OpenAI hablan sobre threads, que poseen mensajes y manejan el truncamiento automático para ajustarse al contexto del modelo. Microsoft Agent Framework habla sobre Sesión de agente, que contiene el historial y puede serializarse y almacenarse. Ambos cumplen la misma función: rastrear el contexto a lo largo de múltiples turnos.
Los mensajes son las contribuciones individuales dentro de un hilo o sesión, producidas ya sea por los usuarios o por el asistente. Los mensajes pueden contener texto plano, imágenes o archivos, y en las API de Assistant se almacenan como listas ordenadas dentro de un hilo. En C#, normalmente se recuperan como colecciones fuertemente tipadas donde se puede inspeccionar el texto, las anotaciones y las referencias a archivos.
Una ejecución, invocación o activación es una única activación del agente sobre un hilo o sesión determinados. Se toma el contexto existente, se envía al modelo junto con las herramientas y la configuración, y se espera hasta que la ejecución alcance un estado final. Durante la ejecución, el agente puede generar nuevos mensajes, llamar a herramientas y actualizar el estado del hilo o de la sesión.
Los pasos de ejecución conforman un registro detallado de todo lo que sucedió durante la ejecución de un agente. Un asistente puede llamar a una herramienta de búsqueda de archivos, activar el intérprete de código o invocar una función personalizada varias veces mientras analiza la tarea. Tener una visión estructurada de estos pasos es sumamente útil para comprender por qué se produjo una respuesta en particular y para depurar o auditar el comportamiento posteriormente.
Creación de un agente de consola mínimo en C# con Azure OpenAI Assistants
Para ver estos conceptos en acción, puede crear una aplicación de consola .NET mínima que utilice los SDK oficiales de OpenAI o Azure OpenAI para construir un asistente que lea datos de archivos y genere visualizaciones. La idea es conectar un sistema de gestión del lenguaje natural (LLM) tanto a la búsqueda de archivos como a la ejecución de código, y luego permitirle responder preguntas analíticas en lenguaje natural.
El primer paso es la configuración del proyecto: cree una nueva aplicación de consola .NET y agregue los paquetes NuGet para OpenAI y Azure.AI.OpenAI. Luego se instancian los clientes principales en Program.cs, ya sea para OpenAI directamente o para Azure OpenAI utilizando una credencial como DefaultAzureCredentialDesde el cliente OpenAI se obtiene un AssistantClient para gestionar asistentes y un separado OpenAIFileClient para subir archivos.
A continuación, se preparan datos realistas con los que el agente podrá trabajar, creando un documento en memoria, serializándolo como JSON y transmitiéndolo al cliente de archivos. En la muestra, este JSON codifica varios meses de ventas de productos para una empresa ficticia, asignando meses a cantidades por producto. Al cargarlo con el Assistants Para fines de archivo, márquelo como material que el agente puede buscar.
Una vez que los datos existen en el sistema, configura el asistente a través de AssistantCreationOptions para habilitar tanto la búsqueda de archivos como la herramienta de interpretación de código. Usted especifica un nombre, un conjunto de instrucciones claras ("usted es un asistente que busca datos de ventas y produce visualizaciones cuando se le solicita") y luego adjunta herramientas: un FileSearchToolDefinition para que el asistente pueda consultar archivos, además de un CodeInterpreterToolDefinition De esta forma, puede escribir y ejecutar código en un entorno aislado para su análisis o para la generación de gráficos.
Para que la búsqueda de archivos utilice realmente su documento de ventas cargado, debe asociarlo con un nuevo almacén de vectores dentro ToolResources. El ayudante VectorStoreCreationHelper Vincula el ID del archivo subido a un almacén vectorial que el asistente puede consultar semánticamente en lugar de escanear el texto sin formato. Esta es una forma sencilla pero potente de añadir un comportamiento de generación con recuperación de información.
Con las opciones configuradas, se crea el asistente pasando el modelo de destino (por ejemplo gpt-4o) y la configuración, y luego se inicia un hilo de conversación con un mensaje inicial del usuario. Esa primera pregunta podría ser algo como "¿Cómo se desempeñó el producto 113045 en febrero? Grafique su tendencia a lo largo del tiempo". Finalmente, usted llama CreateThreadAndRun, que crea el hilo y da inicio a una ejecución.
Debido a que las ejecuciones son asíncronas por naturaleza, la aplicación de consola normalmente consulta el estado de la ejecución hasta que este cambia a estado terminal. Después, se extraen los mensajes del hilo en orden ascendente y se recorren iterativamente: se imprime el texto auxiliar, se generan anotaciones para las citas de archivos o los archivos generados, y se descargan las imágenes de salida mediante el cliente de archivos para poder guardar los gráficos producidos por el intérprete de código en el disco como archivos PNG.
El resultado final es una aplicación de consola C# autónoma donde un único asistente puede buscar datos de ventas estructurados, realizar cálculos mediante código y devolver tanto información textual como gráficos visuales en un bucle totalmente automatizado. Este patrón se adapta perfectamente a los sistemas backend web o a los servicios en segundo plano una vez que se añaden la persistencia y la autenticación.
Diseño de una arquitectura de agente robusta en C#
Al pasar de una demostración a una aplicación real, la forma en que estructuras tus agentes es tan importante como el modelo que elijas. Una buena arquitectura facilita las pruebas, la escalabilidad, la seguridad y la evolución de la solución, evitando así que se genere una maraña inmanejable de solicitudes y funciones de devolución de llamada.
Una estrategia probada consiste en tratar a los agentes como componentes especializados en lugar de como un único cerebro que "lo hace todo". Por ejemplo, se podría definir un agente enfocado en la recuperación y verificación de información, otro dedicado a la redacción y resumen de contenido, y un tercero cuya única función sea interactuar con API o bases de datos externas. Esta separación permite realizar pruebas unitarias específicas, implementaciones independientes y establecer límites de seguridad y tokens más precisos.
El estado y la memoria se convierten rápidamente en cuellos de botella si se les trata como algo secundario. Los historiales de conversación crecen con el tiempo, y enviar la transcripción completa al modelo en cada turno aumenta tanto la latencia como el coste. Entre las estrategias prácticas se incluyen la elaboración de resúmenes periódicos de mensajes anteriores, la segmentación de las conversaciones en hilos separados por usuario o caso de uso, y la implementación de políticas de compactación basadas en la importancia semántica para que solo se conserven en detalle las partes más relevantes del pasado.
En entornos de producción, también se necesita un almacenamiento persistente para la memoria, de modo que las conversaciones puedan sobrevivir a reinicios de procesos, fallos o redistribuciones. Los marcos de agentes como Microsoft Agent Framework hacen que las sesiones sean serializables a un JsonElement, que puedes almacenar en SQL Server, Redis o cualquier base de datos NoSQL. Esta misma capacidad permite crear registros de auditoría y cumplir con las normativas, ya que puedes reconstruir con exactitud el estado que tenía el agente cuando tomó una decisión.
Es en las herramientas y las llamadas a funciones donde los agentes dejan de ser pasivos y comienzan a realizar un trabajo útil. Al exponer los métodos nativos de C# como herramientas, el modelo puede invocar comportamientos como consultar un CRM, ejecutar análisis de datos o activar flujos de trabajo. Cada herramienta debe estar anotada con metadatos claros (descripciones y documentación de parámetros) para que el LLM sepa cuándo llamarla y con qué argumentos.
Dado que una herramienta que funciona mal puede interrumpir toda una interacción, se necesita una ingeniería sólida a su alrededor: validación de entrada, tiempos de espera, manejo de excepciones y medidas de seguridad. No asuma que el modelo siempre recibe argumentos perfectos; valide los parámetros y revise cuidadosamente cualquier llamada externa. Considere también establecer cuotas y límites de uso por herramienta para evitar costos excesivos o sobrecargas accidentales en los sistemas posteriores.
En escenarios ambiciosos, la orquestación multiagente puede desbloquear capacidades difíciles de lograr con un único agente monolítico. Puedes configurar un agente "investigador" que recopile y verifique información, un "analista" que interprete los resultados y un "redactor" que los convierta en informes. Cada uno se comunica mediante mensajes estructurados y comparte un espacio de trabajo (como un documento compartido o un repositorio de conocimiento). Este patrón aumenta la especialización y facilita el seguimiento del proceso de toma de decisiones cuando sea necesario revisar o auditar los resultados posteriormente.
Desde Semantic Kernel y AutoGen hasta Microsoft Agent Framework
Microsoft ha estado unificando sus herramientas de agente para .NET, reuniendo ideas de Semantic Kernel y del proyecto AutoGen en un nuevo marco de trabajo unificado para agentes de Microsoft (MAF). Este marco de trabajo tiene como objetivo brindarle estabilidad y funcionalidades de nivel empresarial, al tiempo que simplifica la forma en que crea agentes de múltiples turnos y flujos de trabajo basados en gráficos.
MAF se encuentra actualmente en fase de vista previa pública y está disponible tanto para .NET como para Python bajo una licencia MIT. Aunque algunas API aún están en desarrollo entre las versiones candidatas, la dirección general es clara: AIAgents para un comportamiento inteligente, AgentSessions para la gestión del estado y un sistema de flujo de trabajo basado en gráficos y ejecutores para procesos más deterministas.
En esencia, el marco distingue entre agentes y flujos de trabajo, cada uno diseñado para diferentes tipos de problemas. Los agentes son sistemas dinámicos que utilizan modelos lógicos para interpretar la información de entrada, decidir qué herramientas usar y generar respuestas. Son especialmente útiles en entornos impredecibles, como las conversaciones de soporte técnico, donde los usuarios pueden preguntar cualquier cosa. Los flujos de trabajo, en cambio, son secuencias de pasos explícitas representadas mediante grafos y se utilizan cuando se requiere un procesamiento determinista y bien definido, como en el caso de canalizaciones de datos o cadenas de aprobación.
La guía oficial se puede resumir así: "si puedes implementar una tarea como una función estándar, probablemente no necesites un agente para ella". En otras palabras, reserva los agentes para los dominios donde realmente no puedas predefinir todos los pasos, y confía en los flujos de trabajo o el código clásico para flujos repetibles y deterministas. Combinar ambos enfoques en los lugares adecuados es clave para construir sistemas mantenibles.
Para ilustrarlo mejor, imaginemos un chatbot de soporte creado como una API de ASP.NET Core 10 utilizando Microsoft Agent Framework. El agente utiliza un cliente de chat (con soporte de Azure OpenAI u OpenAI) como motor de razonamiento, y su objetivo principal es responder preguntas sobre documentación interna almacenada en archivos Markdown, manteniendo el contexto entre varios mensajes del mismo usuario.
Curiosamente, el ejemplo puede omitir deliberadamente RAG con incrustaciones y aun así mantenerse realista utilizando la búsqueda por palabras clave en archivos planos como punto de partida. Esto permite mantener la atención en cómo MAF estructura el agente, las herramientas y las sesiones, en lugar de perderse en la configuración de la base de datos vectorial, al tiempo que se siguen admitiendo interacciones de soporte muy plausibles.
Los cinco conceptos clave en Microsoft Agent Framework
Los tutoriales oficiales de MAF organizan el aprendizaje en cinco ideas progresivas que se corresponden perfectamente con la forma en que los desarrolladores de C# ya conciben los servicios y el estado. Familiarizarte con estos conceptos te proporciona una base sólida para cualquier agente que desarrolles en .NET.
Primero viene su agente inicial: un AIAgent Creado a partir de un cliente de chat, instrucciones y un nombre. Usted le indica al agente un modelo de chat proporcionado por AzureOpenAIClient u OpenAI, le brinda orientación a nivel del sistema ("usted es un asistente de soporte útil") y luego llama. RunAsync con la entrada del usuario. El detalle crucial es que la instancia del agente no tiene estado y puede atender varias conversaciones independientes a la vez.
En segundo lugar están las herramientas, que son simplemente métodos de C# decorados con atributos y convertidos en funciones invocables mediante AIFunctionFactory.Create(). Cuando el agente se ejecuta, el LLM recibe un esquema derivado de esos atributos y puede decidir de forma autónoma cuándo y cómo llamar a cada herramienta, incluidos los argumentos. Aquí es donde su propia lógica de negocio e integraciones externas se convierten en parte del espacio de acción del agente.
En tercer lugar, está la compatibilidad con conversaciones de varios turnos, que MAF gestiona a través de AgentSession objetos. Gracias AIAgent en sí mismo no recuerda nada, cada conversación en curso vive dentro de una sesión creada con CreateSessionAsync(). En las llamadas posteriores, se reutiliza esa sesión, lo que permite al agente llevar un registro de los mensajes anteriores, las preferencias del usuario y los problemas sin resolver.
En cuarto lugar está la memoria y la persistencia, posibilitadas por el hecho de que las sesiones se pueden serializar en un JsonElement. Eso hace que sea sencillo almacenarlos en memoria, Redis, una tabla SQL o cualquier otro almacenamiento que prefiera, y luego reconstruirlos con DeserializeSessionAsync()En el caso de situaciones de soporte, esto significa que un usuario puede cerrar su navegador y reanudar la misma conversación más tarde, o que una instancia de servicio diferente puede tomar el control sin problemas después de un reinicio.
En quinto lugar están los flujos de trabajo, construidos con WorkflowBuilder cuando necesites orquestar explícitamente varios agentes o pasos de procesamiento secuenciales. Se definen los ejecutores como unidades de procesamiento, se conectan mediante aristas y el motor de flujo de trabajo se encarga del enrutamiento y las transiciones. En muchos casos conversacionales no se necesitan flujos de trabajo, pero resultan extremadamente útiles cuando se requiere enrutamiento estructurado, clasificación o pasos con intervención humana para los agentes.
Implementación de un bot de soporte real con MAF, herramientas y sesiones
Un ejemplo concreto que ilustra los conceptos anteriores es una API de SupportBot respaldada por un proyecto ASP.NET Core 10. Este servicio expone un punto final HTTP que acepta mensajes de usuario y un identificador de sesión, delega el razonamiento a un AIAgent y mantiene la sesión activa para que el contexto se conserve entre solicitudes.
La herramienta central en este escenario es una herramienta de documentación que sabe cómo buscar en archivos Markdown internos. Su función es localizar guías, preguntas frecuentes o manuales de módulos relevantes y devolver segmentos de texto que ayuden al agente a elaborar una respuesta. Los atributos aplicados a sus métodos no son meramente decorativos; MAF los utiliza para construir el esquema de funciones que lee el LLM, y la claridad de esas descripciones influye notablemente en la eficacia con la que el modelo selecciona y llama a la herramienta.
Una decisión de diseño pragmática dentro de esta herramienta es recurrir a la devolución de todos los documentos si ninguno coincide suficientemente con el tema solicitado. En lugar de dejar al agente sin ningún material, es preferible proporcionarle demasiado contexto y dejar que el modelo seleccione las mejores piezas, en vez de que genere ideas erróneas en el vacío. Este patrón de "recursos de reserva seguros" aparece con frecuencia en implementaciones de agentes robustos.
Luego, SupportAgentFactory conecta todo tomando un AzureOpenAIClient, extrayendo un cliente de chat a través de GetChatClient(), adaptándolo con AsIChatClient() y luego convertirlo en un AIAgent con AsAIAgent(). Durante este último paso, las herramientas e instrucciones registradas pasan a formar parte de la configuración del agente que se utiliza en cada conversación. Normalmente, este agente configurado se registra como un singleton en el contenedor DI para que pueda atender varias sesiones simultáneamente.
La gestión de sesiones se abstrae detrás de un InMemorySessionStore durante el desarrollo, que celebra sesiones como JsonElement valores. Un sistema seguro para subprocesos ConcurrentDictionary Aquí basta con evitar el bloqueo manual. En una implementación real, se reemplazaría esta implementación por un almacenamiento basado en Redis o en una base de datos, manteniendo la interfaz intacta pero obteniendo almacenamiento duradero y escalabilidad horizontal.
La superficie de la API en Program.cs se mantiene deliberadamente simple: un solo POST /chat Punto final que acepta el ID de sesión y el mensaje del usuario. El controlador de solicitudes carga o crea la sesión, ejecuta el agente, serializa la sesión actualizada de forma asíncrona (tenga en cuenta que SerializeSessionAsync (es asíncrono en RC1, aunque la documentación inicial sugería lo contrario), lo persiste y devuelve la respuesta del asistente al cliente. Desde el punto de vista de una interfaz, "mantenerse en la misma conversación" simplemente significa enviar el mismo ID de sesión en cada llamada.
Cuando ejecutas la API y chateas con ella, puedes observar cómo el agente mantiene el contexto entre turnos, al igual que un representante de soporte humano. Un primer mensaje podría describir un problema de inicio de sesión; una segunda pregunta, enviada con el mismo ID de sesión, puede referirse a "ese error otra vez" sin repetir todos los detalles, y el agente sigue respondiendo de forma coherente porque el estado está vinculado al almacenamiento de la sesión.
Los flujos de trabajo solo empezarían a ser útiles si se añadieran funciones como la clasificación automática de intenciones, el enrutamiento a agentes especializados (facturación, acceso, informes) o la derivación a personal humano. Podría entonces introducir un ejecutor de clasificación al principio de un gráfico de flujo de trabajo y conectarlo a agentes específicos del tema, o agregar un nodo de intervención humana que detenga la automatización y transfiera el contexto a una persona cuando la confianza sea baja.
Flujos de trabajo, modos de orquestación y colaboración multiagente
Incluso fuera de MAF, resulta útil pensar en cómo se orquestan los flujos de trabajo que contienen agentes, ya que su estructura afecta a la latencia, el coste y la trazabilidad. Existen varios patrones comunes que se repiten en diferentes proyectos y marcos de trabajo.
La orquestación secuencial implica que los agentes gestionan las tareas una tras otra, transmitiendo los resultados. Por ejemplo, un agente de recuperación primero recopila la documentación relevante y luego la pasa a un agente de análisis, que a su vez entrega sus hallazgos a un agente de informes. Esto es fácil de entender y de depurar, aunque a costa de una mayor latencia de extremo a extremo.
La orquestación concurrente ejecuta varios agentes en paralelo, cada uno centrado en un aspecto diferente del problema. Un agente podría calcular métricas, otro buscar incidentes recientes y un tercero evaluar el impacto en el cumplimiento normativo, todo al mismo tiempo. Una vez que finalizan, un coordinador agrega sus resultados en una única respuesta. Este patrón reduce la latencia, pero exige un control riguroso de los recursos y una gestión eficaz de los conflictos.
Los flujos de transferencia cambian explícitamente la propiedad de la tarea de un agente a otro en función de ciertas condiciones o resultados intermedios. Si un agente de soporte detecta que una pregunta está relacionada con ventas, puede transferir la conversación a un agente de ventas especializado, conservando opcionalmente el historial de chat y los metadatos. Esto resulta especialmente útil en procesos complejos de atención al cliente, donde la responsabilidad se transfiere legítimamente entre equipos.
Las configuraciones de chat grupal permiten que varios agentes colaboren en un canal de conversación compartido, intercambiando mensajes en tiempo real. Cada agente aporta su propia perspectiva o conjunto de herramientas, y un coordinador central o moderador de LLM puede gestionar la conversación para que converja en lugar de quedarse estancada indefinidamente. Este modelo es potente, pero requiere estrictas medidas de seguridad para evitar el ruido y los costes innecesarios.
Finalmente, la orquestación magnética pone a un "líder" o agente director a cargo de dirigir a los demás. El agente principal descompone la tarea, asigna las subtareas a los especialistas adecuados y, a continuación, sintetiza sus resultados. Esto se asemeja a un gerente de ingeniería que coordina un equipo de desarrolladores y puede generar flujos de trabajo claros y auditables en ámbitos complejos.
Pruebas, observabilidad, control de costes y seguridad
Implementar agentes de IA en producción sin un plan de pruebas, monitoreo, costos y seguridad es una receta para sorpresas desagradables. El mismo rigor que aplicas a cualquier servicio .NET crítico debe extenderse a tu capa de agente, simplemente adaptándola a la naturaleza probabilística de los LLM.
Comience por probar las herramientas y las rutas de orquestación con pruebas unitarias y de integración clásicas antes de preocuparse por el comportamiento del modelo. Cada función de C# que un agente pueda llamar debe poder probarse de forma independiente, con entradas y salidas deterministas. A continuación, diseñe guiones de conversación controlados que recorran todas las rutas de interacción, verificando no solo la respuesta final, sino también qué herramientas se utilizaron y cómo evolucionó el estado.
La observabilidad debe realizar un seguimiento de la latencia, el consumo de tokens y las tasas de éxito en las diferentes rutas de ejecución. Resulta sumamente útil medir tanto los tokens de aviso como los de finalización por interacción, desglosados por flujo de trabajo, herramienta o tipo de usuario, para detectar regresiones y picos de costos. Las conversaciones largas son particularmente costosas, por lo que conviene invertir en estrategias de resumen automático y truncamiento inteligente para mantener los contextos concisos.
La seguridad es innegociable una vez que sus agentes tienen acceso a datos confidenciales o de clientes. Debes implementar un control de acceso estricto sobre las herramientas y los conjuntos de datos que un agente puede ver, registrar cada uso de las herramientas con fines de auditoría y procesar todas las llamadas externas mediante capas de saneamiento. Las credenciales nunca deben estar integradas en el código; utiliza identidades gestionadas, almacenes de secretos y las prácticas de seguridad en la nube habituales que ya aplicas a los microservicios que no son de IA.
Los requisitos de cumplimiento también afectan a la forma en que se almacena y procesa el historial de conversaciones. Dado que las sesiones y los hilos pueden contener información personal identificable o contenido confidencial, es fundamental definir desde el principio las políticas de retención, las estrategias de anonimización y las reglas de minimización de datos. La capacidad de serializar y deserializar las sesiones de los agentes es muy útil, pero debe sopesarse con las obligaciones legales y normativas.
En lo que respecta a los costes, no subestime el impacto que tienen incluso las pequeñas ineficiencias a gran escala. Pequeños cambios en el tamaño de las indicaciones, la frecuencia de las llamadas a las herramientas o el número de agentes concurrentes pueden traducirse en facturas mensuales elevadas. Instrumentar el sistema, revisar periódicamente la telemetría y ajustar las indicaciones, las políticas de memoria y la selección de modelos es fundamental para mantener los costos sostenibles a lo largo del tiempo.
La implementación y el escalado son más sencillos cuando se separa el plano de control (donde se configuran los agentes y los flujos de trabajo) del plano de inferencia (donde se ejecutan las llamadas al modelo). La orquestación basada en contenedores, las colas de mensajes para operaciones de larga duración y los servicios gestionados en la nube para el alojamiento de LLM contribuyen a la resiliencia. Los resultados pueden integrarse en paneles de control o herramientas de inteligencia empresarial como Power BI para cerrar el ciclo de retroalimentación analítica y demostrar el valor para el negocio.
Las herramientas integradas, como las extensiones AI Toolkit y Azure AI Foundry para Visual Studio Code, pueden simplificar gran parte de este ciclo de vida. Desde el editor, puede explorar catálogos de modelos, implementar modelos locales o alojados en GitHub mediante Ollama, comparar resultados en paralelo, crear y ejecutar evaluadores, visualizar resultados en Data Wrangler, diseñar agentes con indicaciones del sistema, conectar servidores MCP para la integración de herramientas y depurar las interacciones de los agentes. Azure AI Foundry añade diseñadores visuales, sincronización de YAML, generación de código para el acceso a modelos de Azure e integración de primera clase con herramientas como Bing Search e intérpretes de código.
Cuando se combinan estos ingredientes (una sólida arquitectura de agentes, una gestión de estado bien pensada, herramientas robustas, flujos de trabajo basados en gráficos cuando sea necesario, una profunda capacidad de observación y una implementación nativa en la nube), se obtienen agentes de IA en C# que no son solo demostraciones ingeniosas, sino partes fiables de sistemas empresariales más grandes. Con un diseño cuidadoso y el uso adecuado de Azure OpenAI Assistants y Microsoft Agent Framework, estos agentes pueden mejorar notablemente la eficiencia, la calidad de la información y la automatización en toda su organización, al tiempo que se mantienen seguros y fáciles de mantener.