Foundry Playground es un framework acelerador para la construcción de agentes inteligentes basados en Azure AI Foundry. Este marco de trabajo permite transformar contratos OpenAPI existentes en agentes conversacionales completamente funcionales con sus respectivos backends (BFF - Backend for Frontend), reduciendo drásticamente el tiempo de desarrollo y estandarizando la arquitectura de soluciones basadas en IA Generativa.
El framework aborda el desafío de integrar servicios existentes con agentes de IA mediante:
- Automatización de Generación de Código: Transformación automática de contratos OpenAPI en system prompts y funciones invocables
- Estandarización de Arquitectura: Patrones consistentes para BFFs que actúan como intermediarios entre clientes y agentes
- Aceleración de Desarrollo: Comandos VS Code (
/new-agent,/new-bff) que generan código listo para producción - Integración con Azure AI Foundry: Aprovechamiento nativo de capacidades de Azure AI para orquestación de agentes
- Flexibilidad de Implementación: Dos tipos de herramientas (function y openapi) para diferentes necesidades
El framework soporta dos tipos de herramientas (tools) para agentes, seleccionables mediante el parámetro functionType:
Características:
- ✅ Requiere generación de BFF con
/new-bff - ✅ Mayor control sobre lógica de negocio
- ✅ Permite validación personalizada y transformación de datos
- ✅ Implementación en Java como clases
FunctionTool - ✅ Registro automático mediante
@ServiceyFunctionToolRunner
Cuándo usar:
- Necesitas validar o transformar datos antes de invocar servicios
- Requieres lógica de negocio intermedia
- Necesitas manejo de errores personalizado
- El servicio externo necesita autenticación compleja o propagación de tokens
Flujo:
Usuario → BFF → Azure AI Agent → BFF (ejecuta FunctionTools) → Servicio Externo
Características:
- ✅ NO requiere generación de BFF
- ✅ Invocación directa del servicio externo desde Azure AI Foundry
- ✅ Más rápido de implementar
- ✅ Ideal para APIs simples sin lógica intermedia
- ✅ Menor overhead operacional
Cuándo usar:
- API externa simple sin necesidad de transformaciones
- No requieres lógica de negocio intermedia
- El servicio externo es accesible directamente desde Azure AI Foundry
- Quieres minimizar componentes en la arquitectura
Flujo:
Usuario → Azure AI Agent → Servicio Externo (invocación directa)
foundry-playground/
├── .github/prompts/ # Plantillas de generación de código basado en Github Copilot Promptfile
│ ├── new-agent.prompt.md # Promptfile que da soporte al comando /new-agent
│ ├── new-bff.prompt.md # Promptfile que da soporte al comando /new-bff
│ └── SYSTEM_PROMPT_TEMPLATE.md
├── agents-backend/ # ⭐ BFF Central que sirve de plantilla para incorporación de nuevas `tools`
│ ├── agents-api.yaml # Contrato OpenAPI del BFF
│ └── src/main/java/
│ └── org/microsoft/ai/
│ ├── api/ # Controllers REST
│ └── domain/agents/
│ └── functions/ # ⚡ Function Tools de contexto
├── infra/
│ ├── agents/ # 🛠️ Herramientas TypeScript para crear agentes
│ │ ├── index.ts # Script principal de creación
│ │ └── package.json # Dependencias del SDK de Azure AI
│ └── agent-demos/ # 📁 Agentes generados
│ ├── {agentGenerado}/
│ │ ├── {systemPromptName}.md # System Prompt generado
│ │ └── {agentNameConf}.yaml # Configuración generada
│ └── todos/
└── documentation/ # Documentación del framework
Nota Importante:
agents-backend/es el BFF central que sirve contexto para la generación de los nuevos BFF que siguen el arquetipo propuesto. Este da soporte al comando new-bff (solo para functionType: "function")infra/agents/contiene herramientas TypeScript automatizadas para crear agentes en Azure AI Foundry vía SDK- Los comandos
/new-agenty/new-bffleen OpenAPI de servicios externos y generan código - Con functionType: "function": se genera código en
agents-backend/(BFF completo) - Con functionType: "openapi": NO se genera BFF, el agente invoca directamente el servicio externo
Nota: El flujo varía según el functionType seleccionado en /new-agent:
- functionType: "function": Requiere generación de BFF con
/new-bff - functionType: "openapi": NO requiere BFF, invocación directa al servicio
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#107C10','primaryTextColor':'#fff','primaryBorderColor':'#0B5A08','lineColor':'#0B5A08'}}}%%
graph LR
A["📄 OpenAPI<br/>Contract<br/>Existente"]
B["⚡ /new-agent<br/>functionType"]
C["📝 System Prompt<br/>⚙️ Agent Config<br/>📖 README"]
D["⚡ /new-bff<br/>solo function"]
E["💻 WebClients<br/>🔧 Functions<br/>⚙️ Configs"]
F["🛠️ Herramienta<br/>TypeScript<br/>infra/agents"]
G["☁️ Azure AI<br/>Foundry<br/>Agent"]
H["✅ Agente<br/>Funcional"]
A -->|Analiza| B
B -->|Genera| C
B -.->|Si functionType<br/>function| D
D -.->|Genera| E
C -->|Lee YAML| F
E -.->|Configs BFF<br/>si existe| F
F -->|Crea Agente| G
G -->|Agent ID| H
style A fill:#0078D4,stroke:#005A9E,color:#fff
style B fill:#FFB900,stroke:#D39300,color:#000
style D fill:#FFB900,stroke:#D39300,color:#000,stroke-dasharray: 5 5
style E fill:#E8E8E8,stroke:#999,color:#000,stroke-dasharray: 5 5
style F fill:#107C10,stroke:#0B5A08,color:#fff
style G fill:#50E6FF,stroke:#00B7C3,color:#000
style H fill:#FF6B9D,stroke:#E60072,color:#fff
Leyenda:
- Líneas continuas: Flujo obligatorio
- Líneas punteadas: Flujo condicional (solo para functionType: "function")
graph TB
A[📄 Contrato OpenAPI<br/>del Servicio Existente]
B["⚡ /new-agent<br/>(con functionType)"]
C["📝 System Prompt MD<br/>(con clausuras)"]
D["⚙️ Agent Config YAML<br/>(tools según tipo)"]
E["📖 README.md<br/>(ejemplos de prueba)"]
F{"functionType?"}
G["⚡ /new-bff<br/>(solo si 'function')"]
H["💻 WebClient por Tag"]
I["🔧 FunctionTool por operationId"]
J["⚙️ Configs Auto-generadas"]
K["⏭️ Saltar al<br/>Deploy"]
A -->|Paso 1| B
B -->|Genera| C
B -->|Genera| D
B -->|Genera| E
D --> F
F -->|"function"| G
G -->|Genera| H
G -->|Genera| I
G -->|Genera| J
F -.->|"openapi"| K
style A fill:#0078D4,stroke:#005A9E,color:#fff
style B fill:#FFB900,stroke:#D39300,color:#000
style F fill:#FF6B9D,stroke:#E60072,color:#fff
style G fill:#2196f3,stroke:#1565c0,stroke-width:3px,color:#fff
style K fill:#4caf50,stroke:#2e7d32,stroke-width:2px,color:#fff
style H fill:#E8E8E8,stroke:#666,color:#000
style I fill:#E8E8E8,stroke:#666,color:#000
style J fill:#E8E8E8,stroke:#666,color:#000
Diferencias Clave por Tipo:
| Aspecto | functionType: "function" | functionType: "openapi" |
|---|---|---|
Comando /new-bff |
✅ Requerido | ❌ No necesario |
| BFF Generado | ✅ Sí (proyecto completo) | ❌ No |
| WebClients | ✅ Generados por Tag | ❌ No aplica |
| FunctionTool Classes | ✅ Una por operationId | ❌ No aplica |
| Invocación Servicio | A través del BFF | Directa desde Azure AI |
| Complejidad | Mayor control y lógica | Más simple y directo |
Entrada: Contrato OpenAPI de un servicio existente
Parámetros Clave:
- agentName: Nombre descriptivo del agente (camelCase o kebab-case)
- functionType: Tipo de herramientas del agente
function: Tools tipo function con parámetros detallados (requiere BFF implementando FunctionTool)openapi: Tools tipo OpenAPI que referencian directamente el contrato OpenAPI
- folderName: Directorio donde se generarán los archivos
- openApiFile: Ruta al archivo OpenAPI 3.x del servicio externo
Proceso:
- Validaciones Automáticas: Formato de parámetros, validez del OpenAPI, presencia de operationIds
- Filtrado de Operaciones: Solo operaciones relevantes para clientes (excluye administrativas)
- Análisis del OpenAPI: Extracción de operationIds, tags, parámetros y respuestas
- Generación de System Prompt: Creación de instrucciones especializadas con tono de comunicación y clausuras de protección
- Configuración del Agente: Definición de herramientas según
functionTypeen YAML - Mapeo de Responsabilidades: Transformación de endpoints en funciones invocables
- Todo el código se genera dentro de: infra/agent-demos/{agentGenerado}
Salida: (generado en infra/agent-demos/{agentGenerado}/)
{agentName}_SYSTEM_PROMPT.md- System prompt con instrucciones, tono y clausuras de protección del agente{agentName}.yaml- Configuración completa del agente con tools según functionTypeREADME.md- Documentación del agente con ejemplos de uso y casos de prueba- Especificación de functions que debe implementar el BFF (solo si functionType es "function")
functionType: function. Si usaste functionType: openapi, el agente invocará directamente el servicio externo sin necesidad de un BFF intermedio.
Entrada: Contrato OpenAPI del servicio externo que sera usado como Custom Function o Tool del agente.
Validaciones Automáticas:
- Existencia y accesibilidad del archivo OpenAPI
- Extensión válida (.yaml, .yml o .json)
- Estructura OpenAPI 3.x válida
- Presencia de operationIds y tags
Proceso:
- Generación de WebClients: Un WebClient especializado por cada Tag del OpenAPI
- Implementación de Function Tools: Una clase Java por cada operationId
- Configuración Automática: Actualización de AgentConfiguration.java, application-*.yaml y example.env
- Registro Automático: Integración con FunctionToolRunner para descubrimiento dinámico
- Todo el código se genera dentro de
agents-backend/src/main/java/org/microsoft/ai/domain/agents/functions/
Salida (generado en agents-backend/):
functions/{tag}/{Tag}WebClient.java- Cliente HTTP especializado por dominiofunctions/{tag}/{OperationId}Function.java- Implementaciones de FunctionTool (una por operationId)config/AgentConfiguration.java- Con propiedades actualizadas para URLs de backendsresources/application-local.yaml- Con nuevas propiedades de configuraciónresources/application-azure.yaml- Con nuevas propiedades de configuraciónexample.env- Documentación de variables de entorno requeridas- Código listo para compilar y desplegar como parte del BFF central
¿Por qué dos tipos de tools?
- function: Mayor control, permite validación personalizada, transformación de datos y lógica de negocio en el BFF. Agrega la capacidad de comunicación con backends privados a diferencia de la OpenAPI tool en la version actual.
- openapi: Más rápido para APIs simples que no requieren lógica intermedia, Azure AI Foundry invoca directamente el servicio
Herramienta: Scripts TypeScript automatizados en infra/agents/
Requisitos:
- Variables de entorno configuradas (AZURE_AI_PROJECT_ENDPOINT, MODEL_DEPLOYMENT_NAME)
- Dependencias instaladas (
npm installeninfra/agents/)
Proceso:
- Configuración: Variables de entorno para Azure AI Project endpoint y modelo
- Ejecución:
npm run createAgent ../agent-demos/{agente}/{agente}.yaml - Validación: Verificación de esquemas OpenAPI (si aplica) y system prompts
- Procesamiento según tipo:
- function tools: Genera esquemas de parámetros detallados
- openapi tools: Valida el esquema OpenAPI y referencia el archivo
- Creación: Uso del SDK
@azure/ai-agentspara crear agente en Azure AI Foundry - Resultado: Agent ID generado para uso en el BFF (si aplica)
Salida:
- Agente creado en Azure AI Foundry
- Agent ID para configuración del BFF (si functionType es "function")
- Tools registradas automáticamente según el tipo:
- function: Aparecen como funciones individuales con parámetros explícitos
- openapi: Aparece como referencia al archivo OpenAPI para invocación directa
- Angular 21 para interfaz de usuario
- TypeScript para tipado fuerte
- SCSS + Tailwind para estilos
- Java 17/21+ con Spring Boot
- Spring WebFlux para operaciones reactivas
- Azure AI SDK para integración con Azure AI Foundry (Este mismo enfoque buscaremos de migrarlo a Microsoft Agent Framework)
- OpenAPI 3.0 para contratos de API
- Gradle como herramienta de construcción
- TypeScript para scripts de automatización
- Node.js 18+ como runtime
- @azure/ai-agents SDK oficial de Azure
- js-yaml para procesamiento de configuración
- swagger-parser para validación de OpenAPI
- Azure API Management para exposición de servicios públicos y protección de recursos
- Azure AI Foundry para orquestación de agentes
- Azure Container Apps para despliegue de microservicios
- Azure Entra ID para autenticación y autorización
- Azure Database for PostgreSQL - Flexible Server
- Quick Start ⚡
- Crea tu primer agente en 30 minutos (15-20 min con functionType: "openapi")
- Configuración inicial paso a paso
- Ejemplo práctico completo con Games Backend
- Uso de herramientas automatizadas de creación
- Guía completa para ambos tipos de tools: function y openapi
- Empieza aquí si es tu primera vez usando este marco de trabajo
- Arquitectura 🏛️
- Visión general: Dos modalidades arquitectónicas (Function Tools vs OpenAPI Tools)
- Arquitectura de alto nivel: Diagramas y flujos según functionType
- Componentes del sistema: Frontend, BFF, Azure AI Foundry, Backend Services
- Flujos de datos completos: 4 flujos detallados con diagramas Mermaid
- Flujo de mensajes (Function Tools y OpenAPI Tools)
- Generación de código con /new-agent
- Generación de BFF con /new-bff
- Creación automatizada del agente en Azure AI Foundry
- Patrones de diseño: Strategy, Registry, Adapter y Facade
- Seguridad: Propagación de tokens, validación en capas, clausuras de protección
- Escalabilidad y rendimiento: Programación reactiva, microservicios, caché
- Diagrama de despliegue: Infraestructura completa en Azure
- Guía de decisiones: Cuándo usar cada tipo de tool con tabla comparativa
Este framework está diseñado para ser extensible. Para agregar nuevas capacidades:
- Extiende las plantillas en
.github/prompts/ - Agrega nuevos patrones de Function Tools
- Mejora las herramientas de creación en
infra/agents/ - Documenta casos de uso en
documentation/
[Especificar licencia del proyecto]
Versión: 1.0.0
Última Actualización: Octubre 2025
Mantenido por: Microsoft Apps & AI Platforms Team - MCSA