(function() {
  var extra = [ /* questions */
    {
      id: 'ai103-101', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which resource setting should you use to enforce Microsoft Entra ID-only authentication for an Azure AI resource?', de: 'Welche Ressourceneinstellung sollten Sie verwenden, um für eine Azure AI-Ressource ausschließlich Microsoft Entra ID-Authentifizierung zu erzwingen?' },
      options: [
        { id: 'A', text: { en: 'Set disableLocalAuth to true', de: 'disableLocalAuth auf true setzen' } },
        { id: 'B', text: { en: 'Disable public network access', de: 'Öffentlichen Netzwerkzugriff deaktivieren' } },
        { id: 'C', text: { en: 'Rotate the admin key monthly', de: 'Den Administratorschlüssel monatlich rotieren' } },
        { id: 'D', text: { en: 'A cost budget alert', de: 'Eine Kostenbudgetwarnung' } }
      ],
      correct: ['A'],
      explanation: { en: 'Set disableLocalAuth to true is correct because it disables local key-based access.', de: 'disableLocalAuth auf true setzen ist richtig, weil dadurch der lokale schlüsselbasierte Zugriff deaktiviert wird.' },
      hint: { en: 'Think about removing keys, not changing the network path.', de: 'Denken Sie daran, Schlüssel zu entfernen und nicht den Netzwerkpfad zu ändern.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/disable-local-auth'
    },
    {
      id: 'ai103-102', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which App Service capability should you use so an Azure AI secret is resolved from Key Vault at runtime without code changes?', de: 'Welche App Service-Funktion sollten Sie verwenden, damit ein Azure AI-Geheimnis zur Laufzeit ohne Codeänderungen aus Key Vault aufgelöst wird?' },
      options: [
        { id: 'A', text: { en: 'App Service Key Vault references', de: 'App Service-Key Vault-Verweise' } },
        { id: 'B', text: { en: 'Azure Key Vault', de: 'Azure Key Vault' } },
        { id: 'C', text: { en: 'A local settings file', de: 'Eine lokale Einstellungsdatei' } },
        { id: 'D', text: { en: 'A Foundry connection object', de: 'Ein Foundry-Verbindungsobjekt' } }
      ],
      correct: ['A'],
      explanation: { en: 'App Service Key Vault references is correct because it lets the app resolve a secret through configuration.', de: 'App Service-Key Vault-Verweise ist richtig, weil sie es der App ermöglicht, ein Geheimnis über die Konfiguration aufzulösen.' },
      hint: { en: 'Look for the feature that keeps your application code unchanged.', de: 'Suchen Sie nach der Funktion, die Ihren Anwendungscode unverändert lässt.' },
      reference: 'https://learn.microsoft.com/en-us/azure/app-service/app-service-key-vault-references'
    },
    {
      id: 'ai103-103', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Where should you send Azure AI diagnostic settings for centralized retention, querying, and alerting?', de: 'Wohin sollten Sie Azure AI-Diagnoseeinstellungen für zentrale Aufbewahrung, Abfragen und Warnungen senden?' },
      options: [
        { id: 'A', text: { en: 'A Log Analytics workspace', de: 'Ein Log Analytics-Arbeitsbereich' } },
        { id: 'B', text: { en: 'Azure Key Vault', de: 'Azure Key Vault' } },
        { id: 'C', text: { en: 'An Azure AI Foundry project', de: 'Ein Azure AI Foundry-Projekt' } },
        { id: 'D', text: { en: 'A cost budget alert', de: 'Eine Kostenbudgetwarnung' } }
      ],
      correct: ['A'],
      explanation: { en: 'A Log Analytics workspace is correct because it is the Azure Monitor destination designed for log retention and query-based analysis.', de: 'Ein Log Analytics-Arbeitsbereich ist richtig, weil es sich um das Azure Monitor-Ziel für Protokollaufbewahrung und analysebasierte Abfragen handelt.' },
      hint: { en: 'Choose the destination optimized for logs, not secrets or project collaboration.', de: 'Wählen Sie das für Protokolle optimierte Ziel und nicht die Option für Geheimnisse oder Projektzusammenarbeit.' },
      reference: 'https://learn.microsoft.com/en-us/azure/azure-monitor/overview'
    },
    {
      id: 'ai103-104', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'After you add a private endpoint to an Azure AI resource, which DNS component should clients use to resolve the private IP address?', de: 'Welche DNS-Komponente sollten Clients verwenden, nachdem Sie einer Azure AI-Ressource einen privaten Endpunkt hinzugefügt haben, um die private IP-Adresse aufzulösen?' },
      options: [
        { id: 'A', text: { en: 'A linked private DNS zone', de: 'Eine verknüpfte private DNS-Zone' } },
        { id: 'B', text: { en: 'A private endpoint', de: 'Ein privater Endpunkt' } },
        { id: 'C', text: { en: 'A Log Analytics workspace', de: 'Ein Log Analytics-Arbeitsbereich' } },
        { id: 'D', text: { en: 'A browser cookie', de: 'Ein Browser-Cookie' } }
      ],
      correct: ['A'],
      explanation: { en: 'A linked private DNS zone is correct because private name resolution is required so the hostname maps to the private endpoint address.', de: 'Eine verknüpfte private DNS-Zone ist richtig, weil private Namensauflösung erforderlich ist, damit der Hostname auf die Adresse des privaten Endpunkts verweist.' },
      hint: { en: 'The missing piece is name resolution, not another endpoint.', de: 'Das fehlende Element ist die Namensauflösung und nicht ein weiterer Endpunkt.' },
      reference: 'https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-overview'
    },
    {
      id: 'ai103-105', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which identity should an Azure-hosted app use first when it must call an Azure AI service without storing credentials?', de: 'Welche Identität sollte eine in Azure gehostete App zuerst verwenden, wenn sie einen Azure AI-Dienst ohne gespeicherte Anmeldeinformationen aufrufen muss?' },
      options: [
        { id: 'A', text: { en: 'A system-assigned managed identity', de: 'Eine systemseitig zugewiesene verwaltete Identität' } },
        { id: 'B', text: { en: 'An API key in app settings', de: 'Einen API-Schlüssel in den App-Einstellungen' } },
        { id: 'C', text: { en: 'Anonymous access', de: 'Anonymen Zugriff' } },
        { id: 'D', text: { en: 'A shared password file', de: 'Eine gemeinsam genutzte Kennwortdatei' } }
      ],
      correct: ['A'],
      explanation: { en: 'A system-assigned managed identity is correct because it provides secretless authentication from the hosting platform.', de: 'Eine systemseitig zugewiesene verwaltete Identität ist richtig, weil sie eine Authentifizierung ohne gespeicherte Geheimnisse über die Hostingplattform bereitstellt.' },
      hint: { en: 'Use the built-in platform identity instead of a stored secret.', de: 'Verwenden Sie die integrierte Plattformidentität statt eines gespeicherten Geheimnisses.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/authentication'
    },
    {
      id: 'ai103-106', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which governance control should enforce that Azure AI resources are created only in approved regions?', de: 'Welche Governance-Kontrolle sollte erzwingen, dass Azure AI-Ressourcen nur in genehmigten Regionen erstellt werden?' },
      options: [
        { id: 'A', text: { en: 'Azure Policy', de: 'Azure Policy' } },
        { id: 'B', text: { en: 'A Log Analytics workspace', de: 'Ein Log Analytics-Arbeitsbereich' } },
        { id: 'C', text: { en: 'A cost budget alert', de: 'Eine Kostenbudgetwarnung' } },
        { id: 'D', text: { en: 'An Azure AI Foundry project', de: 'Ein Azure AI Foundry-Projekt' } }
      ],
      correct: ['A'],
      explanation: { en: 'Azure Policy is correct because it can deny deployments that violate region rules.', de: 'Azure Policy ist richtig, weil sie Bereitstellungen ablehnen kann, die gegen Regionsregeln verstoßen.' },
      hint: { en: 'Choose the service that evaluates and enforces deployment rules.', de: 'Wählen Sie den Dienst, der Bereitstellungsregeln auswertet und erzwingt.' },
      reference: 'https://learn.microsoft.com/en-us/azure/governance/policy/overview'
    },
    {
      id: 'ai103-107', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which throughput model is best for a steady, high-volume Azure OpenAI workload that needs predictable latency?', de: 'Welches Durchsatzmodell eignet sich am besten für eine gleichmäßige, volumenstarke Azure OpenAI-Workload mit vorhersehbarer Latenz?' },
      options: [
        { id: 'A', text: { en: 'Provisioned throughput', de: 'Bereitgestellter Durchsatz' } },
        { id: 'B', text: { en: 'A standard shared deployment', de: 'Eine standardmäßige geteilte Bereitstellung' } },
        { id: 'C', text: { en: 'Streaming only', de: 'Nur Streaming' } },
        { id: 'D', text: { en: 'A cost budget alert', de: 'Eine Kostenbudgetwarnung' } }
      ],
      correct: ['A'],
      explanation: { en: 'Provisioned throughput is correct because capacity is reserved for the workload and supports more predictable performance.', de: 'Bereitgestellter Durchsatz ist richtig, weil Kapazität für die Workload reserviert wird und eine besser vorhersehbare Leistung unterstützt.' },
      hint: { en: 'Think reserved capacity rather than best-effort sharing.', de: 'Denken Sie an reservierte Kapazität statt an geteilte Best-Effort-Ressourcen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/provisioned-throughput'
    },
    {
      id: 'ai103-108', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which signal most directly indicates throttling pressure on an Azure OpenAI deployment?', de: 'Welches Signal weist am unmittelbarsten auf Drosselungsdruck bei einer Azure OpenAI-Bereitstellung hin?' },
      options: [
        { id: 'A', text: { en: 'HTTP 429 rate', de: 'HTTP-429-Rate' } },
        { id: 'B', text: { en: 'CPU usage on the client browser', de: 'CPU-Auslastung im Clientbrowser' } },
        { id: 'C', text: { en: 'A cost budget alert', de: 'Eine Kostenbudgetwarnung' } },
        { id: 'D', text: { en: 'Font size changes', de: 'Änderungen der Schriftgröße' } }
      ],
      correct: ['A'],
      explanation: { en: 'HTTP 429 rate is correct because HTTP 429 responses show the service is rate limiting or quota constrained.', de: 'HTTP-429-Rate ist richtig, weil HTTP-429-Antworten zeigen, dass der Dienst Ratenbegrenzungen oder Quotengrenzen erreicht.' },
      hint: { en: 'Look for the signal emitted when requests are actively limited.', de: 'Achten Sie auf das Signal, das bei aktiver Begrenzung von Anforderungen auftritt.' },
      reference: 'https://learn.microsoft.com/en-us/azure/azure-monitor/overview'
    },
    {
      id: 'ai103-109', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which release practice should you use to expose a new prompt or model configuration to only a small percentage of production traffic first?', de: 'Welche Release-Praxis sollten Sie verwenden, um eine neue Prompt- oder Modellkonfiguration zunächst nur einem kleinen Prozentsatz des Produktionstraffics bereitzustellen?' },
      options: [
        { id: 'A', text: { en: 'A canary release', de: 'Eine Canary-Bereitstellung' } },
        { id: 'B', text: { en: 'A full cutover', de: 'Eine vollständige Umstellung' } },
        { id: 'C', text: { en: 'A cost budget alert', de: 'Eine Kostenbudgetwarnung' } },
        { id: 'D', text: { en: 'A static wiki page', de: 'Eine statische Wiki-Seite' } }
      ],
      correct: ['A'],
      explanation: { en: 'A canary release is correct because it limits blast radius while giving you real production feedback.', de: 'Eine Canary-Bereitstellung ist richtig, weil sie den Wirkungsbereich begrenzt und zugleich echtes Produktionsfeedback liefert.' },
      hint: { en: 'Choose the rollout strategy that starts with a small audience.', de: 'Wählen Sie die Rollout-Strategie, die mit einer kleinen Zielgruppe beginnt.' },
      reference: 'https://learn.microsoft.com/en-us/azure/well-architected/operational-excellence/safe-deployments'
    },
    {
      id: 'ai103-110', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which Azure service should centrally store and rotate secrets shared by several AI applications?', de: 'Welcher Azure-Dienst sollte Geheimnisse, die von mehreren KI-Anwendungen gemeinsam genutzt werden, zentral speichern und rotieren?' },
      options: [
        { id: 'A', text: { en: 'Azure Key Vault', de: 'Azure Key Vault' } },
        { id: 'B', text: { en: 'A Log Analytics workspace', de: 'Ein Log Analytics-Arbeitsbereich' } },
        { id: 'C', text: { en: 'An Azure AI Foundry project', de: 'Ein Azure AI Foundry-Projekt' } },
        { id: 'D', text: { en: 'A linked private DNS zone', de: 'Eine verknüpfte private DNS-Zone' } }
      ],
      correct: ['A'],
      explanation: { en: 'Azure Key Vault is correct because it is designed for secure secret storage, rotation, and access policies.', de: 'Azure Key Vault ist richtig, weil er für sichere Geheimnisspeicherung, Rotation und Zugriffsrichtlinien konzipiert ist.' },
      hint: { en: 'This service manages secrets, not logs or DNS.', de: 'Dieser Dienst verwaltet Geheimnisse und nicht Protokolle oder DNS.' },
      reference: 'https://learn.microsoft.com/en-us/azure/app-service/app-service-key-vault-references'
    },
    {
      id: 'ai103-111', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which deployment practice best prevents surprise behavior changes when a provider publishes a newer model version?', de: 'Welche Bereitstellungspraxis verhindert am besten überraschende Verhaltensänderungen, wenn ein Anbieter eine neuere Modellversion veröffentlicht?' },
      options: [
        { id: 'A', text: { en: 'Pin the deployment to a tested model version', de: 'Die Bereitstellung an eine getestete Modellversion binden' } },
        { id: 'B', text: { en: 'A canary release', de: 'Eine Canary-Bereitstellung' } },
        { id: 'C', text: { en: 'Disable public network access', de: 'Öffentlichen Netzwerkzugriff deaktivieren' } },
        { id: 'D', text: { en: 'HTTP 429 rate', de: 'HTTP-429-Rate' } }
      ],
      correct: ['A'],
      explanation: { en: 'Pin the deployment to a tested model version is correct because it keeps production on the version you explicitly validated.', de: 'Die Bereitstellung an eine getestete Modellversion binden ist richtig, weil sie die Produktion auf der Version hält, die Sie ausdrücklich validiert haben.' },
      hint: { en: 'The goal is version control, not traffic shaping.', de: 'Das Ziel ist Versionskontrolle und nicht Verkehrssteuerung.' },
      reference: 'https://learn.microsoft.com/en-us/azure/well-architected/operational-excellence/safe-deployments'
    },
    {
      id: 'ai103-112', type: 'single',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which Azure AI Foundry construct should isolate prompts, assets, and collaborators for one solution team?', de: 'Welche Azure AI Foundry-Konstruktion sollte Prompts, Artefakte und Mitwirkende für ein Lösungsteam isolieren?' },
      options: [
        { id: 'A', text: { en: 'An Azure AI Foundry project', de: 'Ein Azure AI Foundry-Projekt' } },
        { id: 'B', text: { en: 'A single shared resource group', de: 'Eine einzelne gemeinsam genutzte Ressourcengruppe' } },
        { id: 'C', text: { en: 'A hub-level connection', de: 'Eine Verbindung auf Hub-Ebene' } },
        { id: 'D', text: { en: 'A Log Analytics workspace', de: 'Ein Log Analytics-Arbeitsbereich' } }
      ],
      correct: ['A'],
      explanation: { en: 'An Azure AI Foundry project is correct because projects provide team-level isolation for assets and collaboration.', de: 'Ein Azure AI Foundry-Projekt ist richtig, weil Projekte Isolation auf Teamebene für Artefakte und Zusammenarbeit bereitstellen.' },
      hint: { en: 'Choose the collaboration boundary, not the shared governance layer.', de: 'Wählen Sie die Grenze für Zusammenarbeit und nicht die gemeinsame Governance-Ebene.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/create-projects'
    },
    {
      id: 'ai103-113', type: 'multiple',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which TWO actions help keep Azure AI traffic off the public internet?', de: 'Welche ZWEI Maßnahmen helfen dabei, Azure AI-Datenverkehr aus dem öffentlichen Internet herauszuhalten?' },
      options: [
        { id: 'A', text: { en: 'A private endpoint', de: 'Ein privater Endpunkt' } },
        { id: 'B', text: { en: 'Disable public network access', de: 'Öffentlichen Netzwerkzugriff deaktivieren' } },
        { id: 'C', text: { en: 'A cost budget alert', de: 'Eine Kostenbudgetwarnung' } },
        { id: 'D', text: { en: 'A canary release', de: 'Eine Canary-Bereitstellung' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'A private endpoint, Disable public network access are correct because they create private connectivity and remove public endpoint exposure.', de: 'Ein privater Endpunkt, Öffentlichen Netzwerkzugriff deaktivieren sind richtig, weil sie private Konnektivität schaffen und die Freigabe des öffentlichen Endpunkts entfernen.' },
      hint: { en: 'Choose the two controls that affect network exposure directly.', de: 'Wählen Sie die beiden Kontrollen, die die Netzfreigabe direkt beeinflussen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-overview'
    },
    {
      id: 'ai103-114', type: 'multiple',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which TWO changes are required for a secretless Azure-hosted app to access an Azure AI service?', de: 'Welche ZWEI Änderungen sind erforderlich, damit eine in Azure gehostete App ohne Geheimnisse auf einen Azure AI-Dienst zugreifen kann?' },
      options: [
        { id: 'A', text: { en: 'A system-assigned managed identity', de: 'Eine systemseitig zugewiesene verwaltete Identität' } },
        { id: 'B', text: { en: 'An Azure RBAC assignment', de: 'Eine Azure RBAC-Zuweisung' } },
        { id: 'C', text: { en: 'A second admin key', de: 'Einen zweiten Administratorschlüssel' } },
        { id: 'D', text: { en: 'Anonymous access', de: 'Anonymen Zugriff' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'A system-assigned managed identity, An Azure RBAC assignment are correct because the app needs an identity and that identity needs authorization on the target resource.', de: 'Eine systemseitig zugewiesene verwaltete Identität, Eine Azure RBAC-Zuweisung sind richtig, weil die App eine Identität benötigt und diese Identität eine Berechtigung für die Zielressource braucht.' },
      hint: { en: 'Think identity plus authorization.', de: 'Denken Sie an Identität plus Autorisierung.' },
      reference: 'https://learn.microsoft.com/en-us/azure/role-based-access-control/overview'
    },
    {
      id: 'ai103-115', type: 'multiple',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which THREE preparations improve operational readiness before a production rollout?', de: 'Welche DREI Vorbereitungen verbessern die Betriebsbereitschaft vor einem Produktiv-Rollout?' },
      options: [
        { id: 'A', text: { en: 'A cost budget alert', de: 'Eine Kostenbudgetwarnung' } },
        { id: 'B', text: { en: 'An Azure Policy with required tags', de: 'Eine Azure Policy mit erforderlichen Tags' } },
        { id: 'C', text: { en: 'A Log Analytics workspace', de: 'Ein Log Analytics-Arbeitsbereich' } },
        { id: 'D', text: { en: 'Store keys in the repository', de: 'Schlüssel im Repository speichern' } },
        { id: 'E', text: { en: 'Enable unrestricted public access', de: 'Uneingeschränkten öffentlichen Zugriff aktivieren' } }
      ],
      correct: ['A', 'B', 'C'],
      explanation: { en: 'A cost budget alert, An Azure Policy with required tags, A Log Analytics workspace are correct because they strengthen cost governance, resource governance, and observability.', de: 'Eine Kostenbudgetwarnung, Eine Azure Policy mit erforderlichen Tags, Ein Log Analytics-Arbeitsbereich sind richtig, weil sie Kostengovernance, Ressourcengovernance und Beobachtbarkeit stärken.' },
      hint: { en: 'Pick the options that support governance and monitoring, not convenience shortcuts.', de: 'Wählen Sie die Optionen, die Governance und Monitoring unterstützen und keine bequemen Abkürzungen darstellen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/azure-monitor/overview'
    },
    {
      id: 'ai103-116', type: 'multiple',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which TWO architecture choices match Azure AI Foundry hub-and-project design?', de: 'Welche ZWEI Architekturentscheidungen entsprechen dem Hub-und-Projekt-Design von Azure AI Foundry?' },
      options: [
        { id: 'A', text: { en: 'A hub-level connection', de: 'Eine Verbindung auf Hub-Ebene' } },
        { id: 'B', text: { en: 'Separate Azure AI Foundry projects', de: 'Getrennte Azure AI Foundry-Projekte' } },
        { id: 'C', text: { en: 'Store all environments in one shared project', de: 'Alle Umgebungen in einem gemeinsamen Projekt speichern' } },
        { id: 'D', text: { en: 'Embed endpoint secrets directly in prompts', de: 'Endpunktgeheimnisse direkt in Prompts einbetten' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'A hub-level connection, Separate Azure AI Foundry projects are correct because shared connections belong at the hub level and environment isolation belongs in projects.', de: 'Eine Verbindung auf Hub-Ebene, Getrennte Azure AI Foundry-Projekte sind richtig, weil gemeinsame Verbindungen auf die Hub-Ebene gehören und Umgebungsisolation in Projekte.' },
      hint: { en: 'Separate what is shared from what should be isolated.', de: 'Trennen Sie gemeinsam Genutztes von dem, was isoliert werden sollte.' },
      reference: 'https://learn.microsoft.com/en-us/azure/foundry/concepts/architecture'
    },
    {
      id: 'ai103-117', type: 'multiple',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which TWO practices reduce rollout risk for model changes?', de: 'Welche ZWEI Praktiken verringern das Rollout-Risiko bei Modelländerungen?' },
      options: [
        { id: 'A', text: { en: 'A benchmark evaluation run', de: 'Ein Benchmark-Evaluierungslauf' } },
        { id: 'B', text: { en: 'A canary release', de: 'Eine Canary-Bereitstellung' } },
        { id: 'C', text: { en: 'A linked private DNS zone', de: 'Eine verknüpfte private DNS-Zone' } },
        { id: 'D', text: { en: 'Set disableLocalAuth to true', de: 'disableLocalAuth auf true setzen' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'A benchmark evaluation run, A canary release are correct because you validate the new behavior first and then expose it gradually.', de: 'Ein Benchmark-Evaluierungslauf, Eine Canary-Bereitstellung sind richtig, weil Sie das neue Verhalten zuerst validieren und anschließend schrittweise bereitstellen.' },
      hint: { en: 'Combine evidence before release with gradual exposure after release.', de: 'Kombinieren Sie Nachweise vor der Freigabe mit schrittweiser Bereitstellung danach.' },
      reference: 'https://learn.microsoft.com/en-us/azure/well-architected/operational-excellence/safe-deployments'
    },
    {
      id: 'ai103-118', type: 'scenario',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'medium',
      scenario: { en: 'Contoso is rolling out a multilingual support copilot built on Azure AI Search. The web app already uses DefaultAzureCredential, but requests still fail with 403 errors. The security team forbids API keys and requires least-privilege access. The developers want the smallest change that unblocks production testing.', de: 'Contoso führt einen mehrsprachigen Support-Copiloten auf Basis von Azure AI Search ein. Die Web-App verwendet bereits DefaultAzureCredential, aber Anforderungen schlagen weiterhin mit 403-Fehlern fehl. Das Sicherheitsteam verbietet API-Schlüssel und verlangt Least-Privilege-Zugriff. Die Entwickler möchten die kleinste Änderung, die Produktionstests ermöglicht.' },
      question: { en: 'What should the team configure first?', de: 'Was sollte das Team zuerst konfigurieren?' },
      options: [
        { id: 'A', text: { en: 'Enable a managed identity for the app and assign the required Azure role', de: 'Eine verwaltete Identität für die App aktivieren und die erforderliche Azure-Rolle zuweisen' } },
        { id: 'B', text: { en: 'Store an admin key in application settings', de: 'Einen Administratorschlüssel in den Anwendungseinstellungen speichern' } },
        { id: 'C', text: { en: 'Allow anonymous access for initial testing', de: 'Für erste Tests anonymen Zugriff zulassen' } },
        { id: 'D', text: { en: 'Route traffic through a public endpoint only', de: 'Datenverkehr ausschließlich über einen öffentlichen Endpunkt leiten' } }
      ],
      correct: ['A'],
      explanation: { en: 'Enable a managed identity for the app and assign the required Azure role is correct because the code already uses token-based authentication, so the missing pieces are identity enablement and authorization.', de: 'Eine verwaltete Identität für die App aktivieren und die erforderliche Azure-Rolle zuweisen ist richtig, weil der Code bereits tokenbasierte Authentifizierung verwendet und daher nur die Aktivierung der Identität sowie die Berechtigung fehlen.' },
      hint: { en: 'The issue is authorization, not SDK support.', de: 'Das Problem ist die Autorisierung und nicht die SDK-Unterstützung.' },
      reference: 'https://learn.microsoft.com/en-us/azure/role-based-access-control/overview'
    },
    {
      id: 'ai103-119', type: 'scenario',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'hard',
      scenario: { en: 'Fabrikam has already created a private endpoint for an Azure OpenAI resource. Clients inside the virtual network still resolve the service name to the public IP address and time out. The networking team confirms that routing is correct and the endpoint is approved. Operations needs the minimum additional configuration that makes private name resolution work.', de: 'Fabrikam hat bereits einen privaten Endpunkt für eine Azure OpenAI-Ressource erstellt. Clients im virtuellen Netzwerk lösen den Dienstnamen weiterhin auf die öffentliche IP-Adresse auf und erhalten Timeouts. Das Netzwerkteam bestätigt, dass Routing und Genehmigung des Endpunkts korrekt sind. Der Betrieb benötigt die minimale zusätzliche Konfiguration, damit die private Namensauflösung funktioniert.' },
      question: { en: 'What should Fabrikam add next?', de: 'Was sollte Fabrikam als Nächstes hinzufügen?' },
      options: [
        { id: 'A', text: { en: 'A linked private DNS zone', de: 'Eine verknüpfte private DNS-Zone' } },
        { id: 'B', text: { en: 'A larger SKU', de: 'Eine größere SKU' } },
        { id: 'C', text: { en: 'Another private endpoint in a different subnet', de: 'Einen weiteren privaten Endpunkt in einem anderen Subnetz' } },
        { id: 'D', text: { en: 'Client-side caching', de: 'Clientseitiges Caching' } }
      ],
      correct: ['A'],
      explanation: { en: 'A linked private DNS zone is correct because private connectivity fails if the hostname still resolves to the public address.', de: 'Eine verknüpfte private DNS-Zone ist richtig, weil private Konnektivität fehlschlägt, wenn der Hostname weiterhin auf die öffentliche Adresse aufgelöst wird.' },
      hint: { en: 'The network path exists; name resolution is still wrong.', de: 'Der Netzwerkpfad existiert; die Namensauflösung ist noch falsch.' },
      reference: 'https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-overview'
    },
    {
      id: 'ai103-120', type: 'scenario',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'hard',
      scenario: { en: 'Tailwind Traders runs a customer support assistant that receives a predictable level of requests all day. During business peaks, the app records bursts of HTTP 429 responses and customer-visible delays. The product owner is willing to reserve capacity if that improves consistency. The team wants the option that most directly aligns capacity with a steady production workload.', de: 'Tailwind Traders betreibt einen Kundensupport-Assistenten mit den ganzen Tag über vorhersehbarer Anforderungslast. Während geschäftlicher Spitzenzeiten zeichnet die App Häufungen von HTTP-429-Antworten und für Kunden sichtbare Verzögerungen auf. Der Product Owner ist bereit, Kapazität zu reservieren, wenn dadurch die Konsistenz verbessert wird. Das Team möchte die Option, die Kapazität am direktesten auf eine gleichmäßige Produktions-Workload ausrichtet.' },
      question: { en: 'Which capacity option should Tailwind Traders adopt?', de: 'Welche Kapazitätsoption sollte Tailwind Traders einführen?' },
      options: [
        { id: 'A', text: { en: 'Provisioned throughput', de: 'Bereitgestellter Durchsatz' } },
        { id: 'B', text: { en: 'A standard shared deployment', de: 'Eine standardmäßige geteilte Bereitstellung' } },
        { id: 'C', text: { en: 'A nightly batch job only', de: 'Ausschließlich einen nächtlichen Batchauftrag' } },
        { id: 'D', text: { en: 'A browser-side cache', de: 'Einen browserseitigen Cache' } }
      ],
      correct: ['A'],
      explanation: { en: 'Provisioned throughput is correct because the workload is steady and latency-sensitive, so reserved capacity is the best fit.', de: 'Bereitgestellter Durchsatz ist richtig, weil die Workload gleichmäßig und latenzsensitiv ist und daher reservierte Kapazität am besten passt.' },
      hint: { en: 'Match the answer to predictable sustained demand.', de: 'Ordnen Sie die Antwort einer vorhersehbaren, dauerhaft hohen Auslastung zu.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/provisioned-throughput'
    },
    {
      id: 'ai103-121', type: 'scenario',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'medium',
      scenario: { en: 'Litware has an App Service that still stores an Azure AI key directly in application settings. Security now requires central secret storage and rotation without rewriting the application. The team will continue using key-based authentication for the current release. Engineering wants the smallest platform change that meets the policy.', de: 'Litware hat einen App Service, der einen Azure AI-Schlüssel noch direkt in den Anwendungseinstellungen speichert. Die Sicherheit verlangt nun zentrale Geheimnisspeicherung und Rotation, ohne die Anwendung neu zu schreiben. Das Team wird in der aktuellen Version weiterhin schlüsselbasierte Authentifizierung verwenden. Das Engineering möchte die kleinste Plattformänderung, die die Richtlinie erfüllt.' },
      question: { en: 'What should Litware use?', de: 'Was sollte Litware verwenden?' },
      options: [
        { id: 'A', text: { en: 'App Service Key Vault references', de: 'App Service-Key Vault-Verweise' } },
        { id: 'B', text: { en: 'A plain-text environment variable', de: 'Eine Klartext-Umgebungsvariable' } },
        { id: 'C', text: { en: 'A shared wiki page', de: 'Eine gemeinsame Wiki-Seite' } },
        { id: 'D', text: { en: 'A local configuration file', de: 'Eine lokale Konfigurationsdatei' } }
      ],
      correct: ['A'],
      explanation: { en: 'App Service Key Vault references is correct because it centralizes secret storage while allowing the app configuration to reference the current secret value.', de: 'App Service-Key Vault-Verweise ist richtig, weil es die Geheimnisspeicherung zentralisiert und der App-Konfiguration erlaubt, auf den aktuellen Geheimniswert zu verweisen.' },
      hint: { en: 'The goal is central secret resolution with minimal code change.', de: 'Das Ziel ist eine zentrale Geheimnisauflösung mit minimaler Codeänderung.' },
      reference: 'https://learn.microsoft.com/en-us/azure/app-service/app-service-key-vault-references'
    },
    {
      id: 'ai103-122', type: 'scenario',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'medium',
      scenario: { en: 'Woodgrove Bank is standardizing AI deployments across several subscriptions. Only approved regions may be used for regulated workloads, and exceptions are tightly controlled. The bank wants enforcement at deployment time rather than after-the-fact reporting. The cloud governance team needs a control that scales across the tenant.', de: 'Woodgrove Bank standardisiert KI-Bereitstellungen über mehrere Abonnements hinweg. Für regulierte Workloads dürfen nur genehmigte Regionen verwendet werden, und Ausnahmen sind streng geregelt. Die Bank möchte Durchsetzung zum Bereitstellungszeitpunkt statt nachträglicher Berichte. Das Cloud-Governance-Team benötigt eine Kontrolle, die im gesamten Mandanten skaliert.' },
      question: { en: 'Which governance control should Woodgrove Bank implement?', de: 'Welche Governance-Kontrolle sollte Woodgrove Bank implementieren?' },
      options: [
        { id: 'A', text: { en: 'Azure Policy', de: 'Azure Policy' } },
        { id: 'B', text: { en: 'A dashboard bookmark', de: 'Ein Dashboard-Lesezeichen' } },
        { id: 'C', text: { en: 'A one-time script', de: 'Ein einmaliges Skript' } },
        { id: 'D', text: { en: 'A local spreadsheet review', de: 'Eine lokale Tabellenprüfung' } }
      ],
      correct: ['A'],
      explanation: { en: 'Azure Policy is correct because policy can continuously enforce region rules across subscriptions.', de: 'Azure Policy ist richtig, weil Richtlinien Regionsregeln kontinuierlich über mehrere Abonnements hinweg erzwingen können.' },
      hint: { en: 'The requirement is preventive governance, not a manual checklist.', de: 'Die Anforderung ist präventive Governance und keine manuelle Checkliste.' },
      reference: 'https://learn.microsoft.com/en-us/azure/governance/policy/overview'
    },
    {
      id: 'ai103-123', type: 'scenario',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'hard',
      scenario: { en: 'Datum Corporation operates several Azure AI projects that support different internal products. The SRE team wants one place to query failures, latency trends, and throttling across the estate. Alert rules must be based on centralized telemetry rather than ad hoc screenshots. Operations is looking for the standard Azure monitoring pattern.', de: 'Datum Corporation betreibt mehrere Azure AI-Projekte zur Unterstützung verschiedener interner Produkte. Das SRE-Team möchte einen zentralen Ort, um Fehler, Latenztrends und Drosselung im gesamten Bestand abzufragen. Warnregeln sollen auf zentralisierter Telemetrie statt auf Ad-hoc-Screenshots basieren. Der Betrieb sucht nach dem Standardmuster für Azure-Monitoring.' },
      question: { en: 'What should Datum Corporation configure?', de: 'Was sollte Datum Corporation konfigurieren?' },
      options: [
        { id: 'A', text: { en: 'Send diagnostic settings from each resource to a shared Log Analytics workspace', de: 'Diagnoseeinstellungen jeder Ressource an einen gemeinsamen Log Analytics-Arbeitsbereich senden' } },
        { id: 'B', text: { en: 'Store logs in local text files', de: 'Protokolle in lokalen Textdateien speichern' } },
        { id: 'C', text: { en: 'Disable all monitoring to reduce cost', de: 'Sämtliches Monitoring zur Kostensenkung deaktivieren' } },
        { id: 'D', text: { en: 'Create a separate browser bookmark for each resource', de: 'Für jede Ressource ein separates Browser-Lesezeichen erstellen' } }
      ],
      correct: ['A'],
      explanation: { en: 'Send diagnostic settings from each resource to a shared Log Analytics workspace is correct because centralized diagnostic collection is the Azure-native pattern for cross-resource monitoring and alerting.', de: 'Diagnoseeinstellungen jeder Ressource an einen gemeinsamen Log Analytics-Arbeitsbereich senden ist richtig, weil zentralisierte Diagnosesammlung das Azure-native Muster für ressourcenübergreifendes Monitoring und Alarmierung ist.' },
      hint: { en: 'Think central observability, not per-resource manual checks.', de: 'Denken Sie an zentrale Beobachtbarkeit und nicht an manuelle Prüfungen je Ressource.' },
      reference: 'https://learn.microsoft.com/en-us/azure/azure-monitor/overview'
    },
    {
      id: 'ai103-124', type: 'scenario',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'hard',
      scenario: { en: 'Northwind Traders is updating a production prompt flow used by customer service agents. The business wants evidence from live traffic but does not want to expose the change to everyone at once. Support leaders are prepared to watch metrics closely during the rollout. Engineering needs the rollout method that limits blast radius while using real requests.', de: 'Northwind Traders aktualisiert einen produktiven Prompt Flow, der von Kundendienstmitarbeitern genutzt wird. Das Unternehmen möchte Erkenntnisse aus Live-Traffic, die Änderung aber nicht sofort allen Benutzern aussetzen. Support-Leiter sind bereit, Metriken während des Rollouts eng zu überwachen. Das Engineering benötigt die Rollout-Methode, die den Wirkungsbereich begrenzt und gleichzeitig echte Anforderungen nutzt.' },
      question: { en: 'Which release strategy should Northwind Traders choose?', de: 'Welche Release-Strategie sollte Northwind Traders wählen?' },
      options: [
        { id: 'A', text: { en: 'A canary release', de: 'Eine Canary-Bereitstellung' } },
        { id: 'B', text: { en: 'An immediate full production swap', de: 'Einen sofortigen vollständigen Produktionswechsel' } },
        { id: 'C', text: { en: 'A private DNS zone', de: 'Eine private DNS-Zone' } },
        { id: 'D', text: { en: 'A budget alert', de: 'Eine Budgetwarnung' } }
      ],
      correct: ['A'],
      explanation: { en: 'A canary release is correct because it exposes the change to a controlled slice of real traffic before broad rollout.', de: 'Eine Canary-Bereitstellung ist richtig, weil sie die Änderung einem kontrollierten Anteil des echten Datenverkehrs vor dem breiten Rollout aussetzt.' },
      hint: { en: 'They want gradual exposure, not invisible parallel testing.', de: 'Sie möchten schrittweise Exponierung und kein unsichtbares Paralleltesten.' },
      reference: 'https://learn.microsoft.com/en-us/azure/well-architected/operational-excellence/safe-deployments'
    },
    {
      id: 'ai103-125', type: 'scenario',
      domain: { en: 'Plan and manage Azure AI solutions', de: 'Azure KI-Lösungen planen und verwalten' }, difficulty: 'hard',
      scenario: { en: 'Humongous Insurance uses a hosted model deployment for claims correspondence. A previous automatic model update changed wording and escalation behavior over a weekend. Compliance now requires that production stays on explicitly approved behavior until a review is complete. The platform team wants the preventive control that best enforces this outcome.', de: 'Humongous Insurance verwendet eine gehostete Modellbereitstellung für die Schadenkorrespondenz. Eine frühere automatische Modellaktualisierung änderte Wortlaut und Eskalationsverhalten über ein Wochenende. Die Compliance verlangt nun, dass die Produktion auf ausdrücklich freigegebenem Verhalten bleibt, bis eine Prüfung abgeschlossen ist. Das Plattformteam möchte die präventive Kontrolle, die dieses Ergebnis am besten erzwingt.' },
      question: { en: 'What should Humongous Insurance change?', de: 'Was sollte Humongous Insurance ändern?' },
      options: [
        { id: 'A', text: { en: 'Pin the deployment to a tested model version', de: 'Die Bereitstellung an eine getestete Modellversion binden' } },
        { id: 'B', text: { en: 'Increase the request timeout', de: 'Das Anforderungstimeout erhöhen' } },
        { id: 'C', text: { en: 'Enable public network access', de: 'Öffentlichen Netzwerkzugriff aktivieren' } },
        { id: 'D', text: { en: 'Rotate the storage account key', de: 'Den Speicherkontoschlüssel rotieren' } }
      ],
      correct: ['A'],
      explanation: { en: 'Pin the deployment to a tested model version is correct because pinning keeps production behavior tied to the version the team already validated.', de: 'Die Bereitstellung an eine getestete Modellversion binden ist richtig, weil das Binden das Produktionsverhalten an die Version koppelt, die das Team bereits validiert hat.' },
      hint: { en: 'The issue is uncontrolled version drift.', de: 'Das Problem ist unkontrollierte Versionsdrift.' },
      reference: 'https://learn.microsoft.com/en-us/azure/well-architected/operational-excellence/safe-deployments'
    },
    {
      id: 'ai103-126', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which output pattern should you use when a downstream workflow requires the model to emit JSON that matches a fixed schema?', de: 'Welches Ausgabemuster sollten Sie verwenden, wenn ein nachgelagerter Workflow verlangt, dass das Modell JSON entsprechend einem festen Schema ausgibt?' },
      options: [
        { id: 'A', text: { en: 'Structured outputs with a JSON schema', de: 'Strukturierte Ausgaben mit JSON-Schema' } },
        { id: 'B', text: { en: 'Natural-language prose', de: 'Natürlichsprachigen Fließtext' } },
        { id: 'C', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } },
        { id: 'D', text: { en: 'Relevance', de: 'Relevanz' } }
      ],
      correct: ['A'],
      explanation: { en: 'Structured outputs with a JSON schema is correct because it constrains the response to a defined JSON structure.', de: 'Strukturierte Ausgaben mit JSON-Schema ist richtig, weil es die Antwort auf eine definierte JSON-Struktur begrenzt.' },
      hint: { en: 'Choose the option that enforces shape, not style.', de: 'Wählen Sie die Option, die die Struktur und nicht den Stil erzwingt.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs'
    },
    {
      id: 'ai103-127', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which setting lets the model decide whether a tool should be invoked for a given user request?', de: 'Welche Einstellung lässt das Modell entscheiden, ob für eine bestimmte Benutzeranforderung ein Tool aufgerufen werden soll?' },
      options: [
        { id: 'A', text: { en: 'Set function_choice to auto', de: 'function_choice auf auto setzen' } },
        { id: 'B', text: { en: 'Set function_choice to none', de: 'function_choice auf none setzen' } },
        { id: 'C', text: { en: 'A low temperature value', de: 'Ein niedriger Temperaturwert' } },
        { id: 'D', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } }
      ],
      correct: ['A'],
      explanation: { en: 'Set function_choice to auto is correct because the service can choose a tool automatically when tool use is appropriate.', de: 'function_choice auf auto setzen ist richtig, weil der Dienst bei Bedarf automatisch ein Tool auswählen kann.' },
      hint: { en: 'Look for the setting that delegiert the decision to the model.', de: 'Suchen Sie nach der Einstellung, die die Entscheidung an das Modell delegiert.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/function-calling'
    },
    {
      id: 'ai103-128', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which Semantic Kernel asset should you use to reuse a parameterized prompt across several workflows?', de: 'Welches Semantic Kernel-Artefakt sollten Sie verwenden, um einen parametrisierten Prompt über mehrere Workflows hinweg wiederzuverwenden?' },
      options: [
        { id: 'A', text: { en: 'A Semantic Kernel prompt template', de: 'Eine Semantic Kernel-Promptvorlage' } },
        { id: 'B', text: { en: 'A native Semantic Kernel plugin', de: 'Ein natives Semantic Kernel-Plugin' } },
        { id: 'C', text: { en: 'An OpenAPI Semantic Kernel plugin', de: 'Ein OpenAPI-Semantic Kernel-Plugin' } },
        { id: 'D', text: { en: 'An Azure AI Foundry evaluation run', de: 'Ein Azure AI Foundry-Evaluierungslauf' } }
      ],
      correct: ['A'],
      explanation: { en: 'A Semantic Kernel prompt template is correct because prompt templates are built for reusable prompt text with variables.', de: 'Eine Semantic Kernel-Promptvorlage ist richtig, weil Promptvorlagen für wiederverwendbaren Prompt-Text mit Variablen vorgesehen sind.' },
      hint: { en: 'Choose the artifact that stores prompt text and placeholders.', de: 'Wählen Sie das Artefakt, das Prompt-Text und Platzhalter speichert.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/concepts/prompts/prompt-template-syntax'
    },
    {
      id: 'ai103-129', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which evaluation metric most directly checks whether an answer is supported by supplied sources?', de: 'Welche Evaluierungsmetrik prüft am direktesten, ob eine Antwort durch bereitgestellte Quellen gestützt wird?' },
      options: [
        { id: 'A', text: { en: 'Groundedness', de: 'Groundedness' } },
        { id: 'B', text: { en: 'Relevance', de: 'Relevanz' } },
        { id: 'C', text: { en: 'A low temperature value', de: 'Ein niedriger Temperaturwert' } },
        { id: 'D', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } }
      ],
      correct: ['A'],
      explanation: { en: 'Groundedness is correct because groundedness focuses on support from the provided context.', de: 'Groundedness ist richtig, weil Groundedness sich auf die Stützung durch den bereitgestellten Kontext konzentriert.' },
      hint: { en: 'Look for the metric about source support, not style.', de: 'Suchen Sie nach der Metrik für Quellenstützung und nicht für Stil.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/evaluation-approach-gen-ai'
    },
    {
      id: 'ai103-130', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which technique should you use when long chat history starts exceeding the model context window?', de: 'Welche Technik sollten Sie verwenden, wenn ein langer Chatverlauf das Kontextfenster des Modells zu überschreiten beginnt?' },
      options: [
        { id: 'A', text: { en: 'Summarize older chat turns', de: 'Ältere Chatverläufe zusammenfassen' } },
        { id: 'B', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } },
        { id: 'C', text: { en: 'An OpenAPI Semantic Kernel plugin', de: 'Ein OpenAPI-Semantic Kernel-Plugin' } },
        { id: 'D', text: { en: 'The Batch API', de: 'Die Batch-API' } }
      ],
      correct: ['A'],
      explanation: { en: 'Summarize older chat turns is correct because summarizing older turns preserves context while reducing tokens.', de: 'Ältere Chatverläufe zusammenfassen ist richtig, weil das Zusammenfassen älterer Gesprächsteile Kontext bewahrt und gleichzeitig Token reduziert.' },
      hint: { en: 'The problem is token volume, not transport.', de: 'Das Problem ist die Tokenmenge und nicht der Transport.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/concepts/ai-services/chat-completion/chat-history'
    },
    {
      id: 'ai103-131', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which Azure OpenAI capability is best for large asynchronous jobs that process many prompts overnight?', de: 'Welche Azure OpenAI-Funktion eignet sich am besten für große asynchrone Aufträge, die über Nacht viele Prompts verarbeiten?' },
      options: [
        { id: 'A', text: { en: 'The Batch API', de: 'Die Batch-API' } },
        { id: 'B', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } },
        { id: 'C', text: { en: 'A browser extension', de: 'Eine Browser-Erweiterung' } },
        { id: 'D', text: { en: 'A local cache file', de: 'Eine lokale Cache-Datei' } }
      ],
      correct: ['A'],
      explanation: { en: 'The Batch API is correct because it is designed for high-volume asynchronous processing.', de: 'Die Batch-API ist richtig, weil sie für hochvolumige asynchrone Verarbeitung ausgelegt ist.' },
      hint: { en: 'This workload is not interactive.', de: 'Diese Workload ist nicht interaktiv.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/batch'
    },
    {
      id: 'ai103-132', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which setting is most appropriate when internal FAQ answers must be short and less random across repeated runs?', de: 'Welche Einstellung ist am geeignetsten, wenn Antworten auf interne FAQs kurz sein und bei wiederholten Ausführungen weniger zufällig ausfallen sollen?' },
      options: [
        { id: 'A', text: { en: 'A low temperature value', de: 'Ein niedriger Temperaturwert' } },
        { id: 'B', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } },
        { id: 'C', text: { en: 'Relevance', de: 'Relevanz' } },
        { id: 'D', text: { en: 'The Batch API', de: 'Die Batch-API' } }
      ],
      correct: ['A'],
      explanation: { en: 'A low temperature value is correct because lower temperature reduces output variability.', de: 'Ein niedriger Temperaturwert ist richtig, weil eine niedrigere Temperatur die Variabilität der Ausgabe verringert.' },
      hint: { en: 'Focus on response determinism.', de: 'Konzentrieren Sie sich auf die Determiniertheit der Antwort.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/chatgpt'
    },
    {
      id: 'ai103-133', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which Semantic Kernel component should expose existing in-process business logic as callable functions?', de: 'Welche Semantic Kernel-Komponente sollte bestehende In-Process-Geschäftslogik als aufrufbare Funktionen bereitstellen?' },
      options: [
        { id: 'A', text: { en: 'A native Semantic Kernel plugin', de: 'Ein natives Semantic Kernel-Plugin' } },
        { id: 'B', text: { en: 'An OpenAPI Semantic Kernel plugin', de: 'Ein OpenAPI-Semantic Kernel-Plugin' } },
        { id: 'C', text: { en: 'A Semantic Kernel prompt template', de: 'Eine Semantic Kernel-Promptvorlage' } },
        { id: 'D', text: { en: 'An Azure AI Foundry evaluation run', de: 'Ein Azure AI Foundry-Evaluierungslauf' } }
      ],
      correct: ['A'],
      explanation: { en: 'A native Semantic Kernel plugin is correct because native plugins wrap local code as functions that the kernel can invoke.', de: 'Ein natives Semantic Kernel-Plugin ist richtig, weil native Plugins lokalen Code als Funktionen kapseln, die der Kernel aufrufen kann.' },
      hint: { en: 'Choose the plugin type for code already inside your application.', de: 'Wählen Sie den Plugin-Typ für Code, der sich bereits in Ihrer Anwendung befindet.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/concepts/plugins/adding-native-plugins'
    },
    {
      id: 'ai103-134', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which Semantic Kernel component should expose a REST service that is already described by OpenAPI?', de: 'Welche Semantic Kernel-Komponente sollte einen REST-Dienst bereitstellen, der bereits durch OpenAPI beschrieben ist?' },
      options: [
        { id: 'A', text: { en: 'An OpenAPI Semantic Kernel plugin', de: 'Ein OpenAPI-Semantic Kernel-Plugin' } },
        { id: 'B', text: { en: 'A native Semantic Kernel plugin', de: 'Ein natives Semantic Kernel-Plugin' } },
        { id: 'C', text: { en: 'A Semantic Kernel prompt template', de: 'Eine Semantic Kernel-Promptvorlage' } },
        { id: 'D', text: { en: 'A low temperature value', de: 'Ein niedriger Temperaturwert' } }
      ],
      correct: ['A'],
      explanation: { en: 'An OpenAPI Semantic Kernel plugin is correct because OpenAPI plugins can import and expose an existing API description.', de: 'Ein OpenAPI-Semantic Kernel-Plugin ist richtig, weil OpenAPI-Plugins eine vorhandene API-Beschreibung importieren und bereitstellen können.' },
      hint: { en: 'The API contract already exists.', de: 'Der API-Vertrag existiert bereits.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/concepts/plugins/adding-openapi-plugins'
    },
    {
      id: 'ai103-135', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which request style should you use when a model must reason over both an image and user text in one turn?', de: 'Welchen Anforderungsstil sollten Sie verwenden, wenn ein Modell in einem Schritt sowohl über ein Bild als auch über Benutzertext nachdenken muss?' },
      options: [
        { id: 'A', text: { en: 'A multimodal chat request', de: 'Eine multimodale Chat-Anforderung' } },
        { id: 'B', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } },
        { id: 'C', text: { en: 'The Batch API', de: 'Die Batch-API' } },
        { id: 'D', text: { en: 'An Azure AI Foundry evaluation run', de: 'Ein Azure AI Foundry-Evaluierungslauf' } }
      ],
      correct: ['A'],
      explanation: { en: 'A multimodal chat request is correct because multimodal requests include image and text inputs together for one response.', de: 'Eine multimodale Chat-Anforderung ist richtig, weil multimodale Anforderungen Bild- und Texteingaben gemeinsam für eine Antwort enthalten.' },
      hint: { en: 'Choose the pattern that combines modalities in a single request.', de: 'Wählen Sie das Muster, das Modalitäten in einer einzigen Anforderung kombiniert.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/chatgpt'
    },
    {
      id: 'ai103-136', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which Azure AI Foundry capability should compare prompt variants on a benchmark dataset before release?', de: 'Welche Azure AI Foundry-Funktion sollte Prompt-Varianten vor der Freigabe anhand eines Benchmark-Datensatzes vergleichen?' },
      options: [
        { id: 'A', text: { en: 'An Azure AI Foundry evaluation run', de: 'Ein Azure AI Foundry-Evaluierungslauf' } },
        { id: 'B', text: { en: 'The Batch API', de: 'Die Batch-API' } },
        { id: 'C', text: { en: 'A private DNS test', de: 'Ein Test der privaten DNS-Auflösung' } },
        { id: 'D', text: { en: 'A budget alert', de: 'Eine Budgetwarnung' } }
      ],
      correct: ['A'],
      explanation: { en: 'An Azure AI Foundry evaluation run is correct because evaluation runs automate comparison of outputs and metrics across test cases.', de: 'Ein Azure AI Foundry-Evaluierungslauf ist richtig, weil Evaluierungsläufe den Vergleich von Ausgaben und Metriken über Testfälle hinweg automatisieren.' },
      hint: { en: 'Look for the feature intended for measured comparison before release.', de: 'Suchen Sie nach der Funktion für einen gemessenen Vergleich vor der Freigabe.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/evaluation-approach-gen-ai'
    },
    {
      id: 'ai103-137', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which application step should occur before model output is rendered when content filtering might block or truncate the response?', de: 'Welcher Anwendungsschritt sollte erfolgen, bevor eine Modellausgabe dargestellt wird, wenn Inhaltsfilterung die Antwort blockieren oder kürzen könnte?' },
      options: [
        { id: 'A', text: { en: 'Inspect content filtering results before rendering', de: 'Ergebnisse der Inhaltsfilterung vor der Ausgabe prüfen' } },
        { id: 'B', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } },
        { id: 'C', text: { en: 'The Batch API', de: 'Die Batch-API' } },
        { id: 'D', text: { en: 'An OpenAPI Semantic Kernel plugin', de: 'Ein OpenAPI-Semantic Kernel-Plugin' } }
      ],
      correct: ['A'],
      explanation: { en: 'Inspect content filtering results before rendering is correct because the UI should inspect filtering results and then decide whether to show a safe fallback.', de: 'Ergebnisse der Inhaltsfilterung vor der Ausgabe prüfen ist richtig, weil die Benutzeroberfläche Filterergebnisse prüfen und dann entscheiden sollte, ob eine sichere Fallback-Antwort angezeigt wird.' },
      hint: { en: 'Never assume every response is displayable as-is.', de: 'Gehen Sie nie davon aus, dass jede Antwort unverändert angezeigt werden darf.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/content-filter'
    },
    {
      id: 'ai103-138', type: 'single',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which Azure OpenAI endpoint should you evaluate when you want a unified pattern for tools, multimodal input, and structured responses?', de: 'Welchen Azure OpenAI-Endpunkt sollten Sie evaluieren, wenn Sie ein einheitliches Muster für Tools, multimodale Eingaben und strukturierte Antworten wünschen?' },
      options: [
        { id: 'A', text: { en: 'The Responses API', de: 'Die Responses-API' } },
        { id: 'B', text: { en: 'The legacy text completions endpoint', de: 'Den älteren Text-Completions-Endpunkt' } },
        { id: 'C', text: { en: 'The Batch API', de: 'Die Batch-API' } },
        { id: 'D', text: { en: 'A metrics API only', de: 'Nur eine Metrik-API' } }
      ],
      correct: ['A'],
      explanation: { en: 'The Responses API is correct because it is designed for newer response workflows that combine several interaction capabilities.', de: 'Die Responses-API ist richtig, weil er für neuere Antwort-Workflows konzipiert ist, die mehrere Interaktionsfähigkeiten kombinieren.' },
      hint: { en: 'Choose the newer unified interaction model.', de: 'Wählen Sie das neuere vereinheitlichte Interaktionsmodell.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/responses'
    },
    {
      id: 'ai103-139', type: 'multiple',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which TWO controls help ensure a downstream workflow receives valid JSON?', de: 'Welche ZWEI Kontrollen helfen dabei, dass ein nachgelagerter Workflow gültiges JSON erhält?' },
      options: [
        { id: 'A', text: { en: 'Structured outputs with a JSON schema', de: 'Strukturierte Ausgaben mit JSON-Schema' } },
        { id: 'B', text: { en: 'Downstream JSON schema validation', de: 'Nachgelagerte JSON-Schema-Prüfung' } },
        { id: 'C', text: { en: 'A low temperature value', de: 'Ein niedriger Temperaturwert' } },
        { id: 'D', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'Structured outputs with a JSON schema, Downstream JSON schema validation are correct because one constrains the model output and the other verifies that the payload still matches expectations.', de: 'Strukturierte Ausgaben mit JSON-Schema, Nachgelagerte JSON-Schema-Prüfung sind richtig, weil eine die Modellausgabe beschränkt und die andere überprüft, ob die Nutzlast weiterhin den Erwartungen entspricht.' },
      hint: { en: 'Use one control at generation time and one at consumption time.', de: 'Verwenden Sie eine Kontrolle bei der Generierung und eine beim Verbrauch.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs'
    },
    {
      id: 'ai103-140', type: 'multiple',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which TWO actions help reduce token consumption in a chat application?', de: 'Welche ZWEI Maßnahmen helfen, den Tokenverbrauch in einer Chat-Anwendung zu senken?' },
      options: [
        { id: 'A', text: { en: 'Summarize older chat turns', de: 'Ältere Chatverläufe zusammenfassen' } },
        { id: 'B', text: { en: 'Retrieve fewer but more relevant chunks', de: 'Weniger, aber relevantere Chunks abrufen' } },
        { id: 'C', text: { en: 'A provisioned deployment', de: 'Eine bereitgestellte Bereitstellung' } },
        { id: 'D', text: { en: 'An OpenAPI Semantic Kernel plugin', de: 'Ein OpenAPI-Semantic Kernel-Plugin' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'Summarize older chat turns, Retrieve fewer but more relevant chunks are correct because they reduce how much text is sent to the model while preserving the most useful context.', de: 'Ältere Chatverläufe zusammenfassen, Weniger, aber relevantere Chunks abrufen sind richtig, weil sie die Textmenge reduzieren, die an das Modell gesendet wird, und gleichzeitig den nützlichsten Kontext bewahren.' },
      hint: { en: 'Think about shrinking the prompt, not changing capacity.', de: 'Denken Sie daran, den Prompt zu verkleinern und nicht die Kapazität zu ändern.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/concepts/ai-services/chat-completion/chat-history'
    },
    {
      id: 'ai103-141', type: 'multiple',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which THREE practices improve prompt evaluation quality before release?', de: 'Welche DREI Praktiken verbessern die Qualität der Prompt-Evaluierung vor der Freigabe?' },
      options: [
        { id: 'A', text: { en: 'A representative evaluation dataset', de: 'Ein repräsentativer Evaluierungsdatensatz' } },
        { id: 'B', text: { en: 'An Azure AI Foundry evaluation run', de: 'Ein Azure AI Foundry-Evaluierungslauf' } },
        { id: 'C', text: { en: 'Groundedness', de: 'Groundedness' } },
        { id: 'D', text: { en: 'Rely only on ad hoc demos', de: 'Sich nur auf Ad-hoc-Demos verlassen' } },
        { id: 'E', text: { en: 'Skip failure cases', de: 'Fehlerfälle auslassen' } }
      ],
      correct: ['A', 'B', 'C'],
      explanation: { en: 'A representative evaluation dataset, An Azure AI Foundry evaluation run, Groundedness are correct because they provide realistic test data, repeatable execution, and objective scoring signals.', de: 'Ein repräsentativer Evaluierungsdatensatz, Ein Azure AI Foundry-Evaluierungslauf, Groundedness sind richtig, weil sie realistische Testdaten, wiederholbare Ausführung und objektive Bewertungssignale liefern.' },
      hint: { en: 'Choose the options that produce repeatable evidence.', de: 'Wählen Sie die Optionen, die wiederholbare Nachweise liefern.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/evaluation-approach-gen-ai'
    },
    {
      id: 'ai103-142', type: 'multiple',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which TWO capabilities should you combine when model output must trigger business logic and return schema-valid arguments?', de: 'Welche ZWEI Fähigkeiten sollten Sie kombinieren, wenn Modellausgaben Geschäftslogik auslösen und schemagültige Argumente zurückgeben müssen?' },
      options: [
        { id: 'A', text: { en: 'Function calling', de: 'Function Calling' } },
        { id: 'B', text: { en: 'Structured outputs with a JSON schema', de: 'Strukturierte Ausgaben mit JSON-Schema' } },
        { id: 'C', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } },
        { id: 'D', text: { en: 'Instruct the model to cite supplied sources', de: 'Das Modell anweisen, bereitgestellte Quellen zu zitieren' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'Function calling, Structured outputs with a JSON schema are correct because tool invocation handles the action path, and structured outputs constrain the argument shape.', de: 'Function Calling, Strukturierte Ausgaben mit JSON-Schema sind richtig, weil Tool-Aufruf den Aktionspfad übernimmt und strukturierte Ausgaben die Form der Argumente beschränken.' },
      hint: { en: 'You need one feature for actions and one for structure.', de: 'Sie benötigen eine Funktion für Aktionen und eine für Struktur.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/function-calling'
    },
    {
      id: 'ai103-143', type: 'multiple',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which TWO prompt-design techniques strengthen instruction hierarchy when retrieved text may be untrusted?', de: 'Welche ZWEI Prompt-Design-Techniken stärken die Anweisungshierarchie, wenn abgerufener Text nicht vertrauenswürdig sein kann?' },
      options: [
        { id: 'A', text: { en: 'Delimit retrieved content as untrusted context', de: 'Abgerufene Inhalte als nicht vertrauenswürdigen Kontext abgrenzen' } },
        { id: 'B', text: { en: 'A concise system prompt', de: 'Ein prägnanter Systemprompt' } },
        { id: 'C', text: { en: 'The Batch API', de: 'Die Batch-API' } },
        { id: 'D', text: { en: 'A low temperature value', de: 'Ein niedriger Temperaturwert' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'Delimit retrieved content as untrusted context, A concise system prompt are correct because they separate authoritative instructions from retrieved text and keep the governing behavior clear.', de: 'Abgerufene Inhalte als nicht vertrauenswürdigen Kontext abgrenzen, Ein prägnanter Systemprompt sind richtig, weil sie maßgebliche Anweisungen von abgerufenem Text trennen und das steuernde Verhalten klar halten.' },
      hint: { en: 'Protect the boundary between instructions and retrieved data.', de: 'Schützen Sie die Grenze zwischen Anweisungen und abgerufenen Daten.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/prompt-engineering'
    },
    {
      id: 'ai103-144', type: 'scenario',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: { en: 'Contoso is building a support workflow that automatically opens service tickets. The current prototype returns natural-language summaries, and downstream parsing breaks whenever the wording changes. The ticketing system accepts only JSON that matches a predefined contract. The team wants the model layer to enforce that contract as directly as possible.', de: 'Contoso entwickelt einen Support-Workflow, der automatisch Service-Tickets eröffnet. Der aktuelle Prototyp liefert natürlichsprachige Zusammenfassungen, und das nachgelagerte Parsing bricht bei jeder Formulierungsänderung. Das Ticketsystem akzeptiert nur JSON, das einem vordefinierten Vertrag entspricht. Das Team möchte, dass die Modellebene diesen Vertrag so direkt wie möglich erzwingt.' },
      question: { en: 'What should Contoso implement?', de: 'Was sollte Contoso implementieren?' },
      options: [
        { id: 'A', text: { en: 'Structured outputs with a JSON schema', de: 'Strukturierte Ausgaben mit JSON-Schema' } },
        { id: 'B', text: { en: 'Free-form markdown responses', de: 'Frei formatierte Markdown-Antworten' } },
        { id: 'C', text: { en: 'Only a lower temperature', de: 'Nur eine niedrigere Temperatur' } },
        { id: 'D', text: { en: 'Client-side regex parsing', de: 'Clientseitiges Regex-Parsing' } }
      ],
      correct: ['A'],
      explanation: { en: 'Structured outputs with a JSON schema is correct because the workflow engine expects a fixed schema, so the model response must be constrained structurally.', de: 'Strukturierte Ausgaben mit JSON-Schema ist richtig, weil die Workflow-Engine ein festes Schema erwartet und die Modellantwort deshalb strukturell eingeschränkt werden muss.' },
      hint: { en: 'The problem is schema conformance, not readability.', de: 'Das Problem ist die Schemakonformität und nicht die Lesbarkeit.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs'
    },
    {
      id: 'ai103-145', type: 'scenario',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: { en: 'Fabrikam has created two prompt candidates for a customer-facing copilot. In short demos, both variants seem useful, but product leaders disagree about which one is more reliable. The release process requires a benchmark set with objective quality signals before launch. The team needs the built-in Foundry capability that supports this comparison.', de: 'Fabrikam hat zwei Prompt-Kandidaten für einen kundengerichteten Copiloten erstellt. In kurzen Demos wirken beide Varianten nützlich, aber die Produktverantwortlichen sind sich uneinig, welche verlässlicher ist. Der Freigabeprozess verlangt vor dem Start einen Benchmark-Satz mit objektiven Qualitätssignalen. Das Team benötigt die integrierte Foundry-Funktion, die diesen Vergleich unterstützt.' },
      question: { en: 'What should Fabrikam run before go-live?', de: 'Was sollte Fabrikam vor dem Go-Live ausführen?' },
      options: [
        { id: 'A', text: { en: 'An Azure AI Foundry evaluation run', de: 'Ein Azure AI Foundry-Evaluierungslauf' } },
        { id: 'B', text: { en: 'A manual hallway demo', de: 'Eine informelle Flur-Demo' } },
        { id: 'C', text: { en: 'A budget alert', de: 'Eine Budgetwarnung' } },
        { id: 'D', text: { en: 'A private DNS test', de: 'Einen Test der privaten DNS-Auflösung' } }
      ],
      correct: ['A'],
      explanation: { en: 'An Azure AI Foundry evaluation run is correct because the team needs measured comparison across the same benchmark questions and metrics.', de: 'Ein Azure AI Foundry-Evaluierungslauf ist richtig, weil das Team einen gemessenen Vergleich über dieselben Benchmark-Fragen und Metriken hinweg benötigt.' },
      hint: { en: 'They need repeatable evidence, not impressions.', de: 'Sie benötigen wiederholbare Nachweise und keine Eindrücke.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/evaluation-approach-gen-ai'
    },
    {
      id: 'ai103-146', type: 'scenario',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'hard',
      scenario: { en: 'Tailwind Traders runs a customer service chat application with long multi-turn conversations. Each new request appends the full conversation history, and the app eventually exceeds the model context window. The product owner wants to preserve important context without sending every previous token. Engineering is looking for the most direct mitigation in the prompt pipeline.', de: 'Tailwind Traders betreibt eine Kundendienst-Chat-Anwendung mit langen mehrstufigen Gesprächen. Jede neue Anforderung hängt den vollständigen Gesprächsverlauf an, und die App überschreitet schließlich das Kontextfenster des Modells. Der Product Owner möchte wichtigen Kontext beibehalten, ohne jedes frühere Token zu senden. Das Engineering sucht nach der direktesten Abhilfe in der Prompt-Pipeline.' },
      question: { en: 'What should Tailwind Traders change?', de: 'Was sollte Tailwind Traders ändern?' },
      options: [
        { id: 'A', text: { en: 'Summarize older chat turns', de: 'Ältere Chatverläufe zusammenfassen' } },
        { id: 'B', text: { en: 'Increase browser cache size', de: 'Die Größe des Browser-Caches erhöhen' } },
        { id: 'C', text: { en: 'Move prompts into CSS files', de: 'Prompts in CSS-Dateien verschieben' } },
        { id: 'D', text: { en: 'Disable authentication', de: 'Authentifizierung deaktivieren' } }
      ],
      correct: ['A'],
      explanation: { en: 'Summarize older chat turns is correct because older turns should be compressed so the conversation stays within the context window.', de: 'Ältere Chatverläufe zusammenfassen ist richtig, weil ältere Gesprächsteile verdichtet werden sollten, damit die Unterhaltung innerhalb des Kontextfensters bleibt.' },
      hint: { en: 'The failure is caused by prompt growth.', de: 'Der Fehler wird durch das Wachstum des Prompts verursacht.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/concepts/ai-services/chat-completion/chat-history'
    },
    {
      id: 'ai103-147', type: 'scenario',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'hard',
      scenario: { en: 'Litware is building an assistant that can look up shipping status by calling an internal API. The team wants the model to decide when the API is needed instead of calling it on every turn. Arguments must also be passed in a machine-readable form so the application can validate them. The developers need the built-in model interaction pattern for this behavior.', de: 'Litware entwickelt einen Assistenten, der den Versandstatus über eine interne API abrufen kann. Das Team möchte, dass das Modell entscheidet, wann die API benötigt wird, statt sie in jeder Runde aufzurufen. Argumente müssen außerdem in maschinenlesbarer Form übergeben werden, damit die Anwendung sie validieren kann. Die Entwickler benötigen das integrierte Interaktionsmuster des Modells für dieses Verhalten.' },
      question: { en: 'Which capability should Litware add?', de: 'Welche Funktion sollte Litware hinzufügen?' },
      options: [
        { id: 'A', text: { en: 'Function calling', de: 'Function Calling' } },
        { id: 'B', text: { en: 'A larger browser font', de: 'Eine größere Browser-Schriftart' } },
        { id: 'C', text: { en: 'A local cache of API keys', de: 'Einen lokalen Cache für API-Schlüssel' } },
        { id: 'D', text: { en: 'A private DNS zone', de: 'Eine private DNS-Zone' } }
      ],
      correct: ['A'],
      explanation: { en: 'Function calling is correct because the assistant needs a structured way to request a business API only when appropriate.', de: 'Function Calling ist richtig, weil der Assistent eine strukturierte Möglichkeit benötigt, nur bei Bedarf eine Geschäfts-API anzufordern.' },
      hint: { en: 'This is about selective tool use, not networking.', de: 'Es geht um selektive Tool-Nutzung und nicht um Netzwerke.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/function-calling'
    },
    {
      id: 'ai103-148', type: 'scenario',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: { en: 'Woodgrove Bank must summarize hundreds of thousands of internal messages every night. Latency per item is not user-facing, but throughput and operational simplicity are important. The team does not want to keep thousands of interactive sessions open for hours. Architecture is looking for the Azure OpenAI pattern that fits large asynchronous jobs.', de: 'Woodgrove Bank muss jede Nacht Hunderttausende interne Nachrichten zusammenfassen. Die Latenz pro Element ist nicht benutzerrelevant, aber Durchsatz und betriebliche Einfachheit sind wichtig. Das Team möchte nicht über Stunden Tausende interaktive Sitzungen offen halten. Die Architektur sucht nach dem Azure OpenAI-Muster, das zu großen asynchronen Aufträgen passt.' },
      question: { en: 'Which approach should Woodgrove Bank choose?', de: 'Welchen Ansatz sollte Woodgrove Bank wählen?' },
      options: [
        { id: 'A', text: { en: 'The Batch API', de: 'Die Batch-API' } },
        { id: 'B', text: { en: 'Streaming responses to the browser', de: 'Streaming-Antworten an den Browser' } },
        { id: 'C', text: { en: 'A canary deployment only', de: 'Nur eine Canary-Bereitstellung' } },
        { id: 'D', text: { en: 'A private endpoint', de: 'Einen privaten Endpunkt' } }
      ],
      correct: ['A'],
      explanation: { en: 'The Batch API is correct because the workload is large, asynchronous, and not user-interactive.', de: 'Die Batch-API ist richtig, weil die Workload groß, asynchron und nicht benutzerinteraktiv ist.' },
      hint: { en: 'This is an overnight processing problem.', de: 'Dies ist ein Problem der nächtlichen Verarbeitung.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/batch'
    },
    {
      id: 'ai103-149', type: 'scenario',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'medium',
      scenario: { en: 'Trey Research is testing an internal FAQ assistant for laboratory staff. The same question produces noticeably different phrasings and levels of detail across repeated runs. Stakeholders want shorter and more stable answers before broader rollout. The team wants the simplest model setting change that supports this outcome.', de: 'Trey Research testet einen internen FAQ-Assistenten für Labormitarbeiter. Dieselbe Frage erzeugt bei wiederholten Ausführungen deutlich unterschiedliche Formulierungen und Detailgrade. Die Stakeholder wünschen vor einem breiteren Rollout kürzere und stabilere Antworten. Das Team möchte die einfachste Änderung an den Modelleinstellungen, die dieses Ergebnis unterstützt.' },
      question: { en: 'What should Trey Research adjust first?', de: 'Was sollte Trey Research zuerst anpassen?' },
      options: [
        { id: 'A', text: { en: 'A low temperature value', de: 'Ein niedriger Temperaturwert' } },
        { id: 'B', text: { en: 'A private endpoint', de: 'Einen privaten Endpunkt' } },
        { id: 'C', text: { en: 'A larger browser cache', de: 'Einen größeren Browser-Cache' } },
        { id: 'D', text: { en: 'A Log Analytics workspace', de: 'Einen Log Analytics-Arbeitsbereich' } }
      ],
      correct: ['A'],
      explanation: { en: 'A low temperature value is correct because lower temperature usually reduces response variability for concise factual answers.', de: 'Ein niedriger Temperaturwert ist richtig, weil eine niedrigere Temperatur in der Regel die Antwortvariabilität bei kurzen faktischen Antworten reduziert.' },
      hint: { en: 'The issue is stability of wording, not connectivity.', de: 'Das Problem ist die Stabilität der Formulierung und nicht die Konnektivität.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/chatgpt'
    },
    {
      id: 'ai103-150', type: 'scenario',
      domain: { en: 'Build generative AI applications', de: 'Generative KI-Anwendungen erstellen' }, difficulty: 'hard',
      scenario: { en: 'Proseware is building a field-service assistant for damaged equipment. Users upload a photo of the damaged part and also describe the symptoms in text. The assistant must consider both inputs before suggesting a repair path. Developers need the request pattern that natively supports this interaction.', de: 'Proseware entwickelt einen Field-Service-Assistenten für beschädigte Geräte. Benutzer laden ein Foto des beschädigten Teils hoch und beschreiben die Symptome zusätzlich in Textform. Der Assistent muss beide Eingaben berücksichtigen, bevor er einen Reparaturweg vorschlägt. Die Entwickler benötigen das Anforderungsmuster, das diese Interaktion nativ unterstützt.' },
      question: { en: 'Which request pattern should Proseware adopt?', de: 'Welches Anforderungsmuster sollte Proseware einführen?' },
      options: [
        { id: 'A', text: { en: 'A multimodal chat request', de: 'Eine multimodale Chat-Anforderung' } },
        { id: 'B', text: { en: 'A text-only prompt', de: 'Einen rein textbasierten Prompt' } },
        { id: 'C', text: { en: 'An indexer reset', de: 'Einen Indexer-Reset' } },
        { id: 'D', text: { en: 'A retry policy only', de: 'Nur eine Wiederholungsrichtlinie' } }
      ],
      correct: ['A'],
      explanation: { en: 'A multimodal chat request is correct because the assistant must combine image and text in the same model turn.', de: 'Eine multimodale Chat-Anforderung ist richtig, weil der Assistent Bild und Text im selben Modellschritt kombinieren muss.' },
      hint: { en: 'The requirement spans two input modalities.', de: 'Die Anforderung umfasst zwei Eingabemodalitäten.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/chatgpt'
    },
    {
      id: 'ai103-151', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which agent pattern should coordinate specialized workers and consolidate their outputs?', de: 'Welches Agentenmuster sollte spezialisierte Worker koordinieren und deren Ergebnisse konsolidieren?' },
      options: [
        { id: 'A', text: { en: 'A supervisor agent', de: 'Ein Supervisor-Agent' } },
        { id: 'B', text: { en: 'A worker agent', de: 'Ein Worker-Agent' } },
        { id: 'C', text: { en: 'An agent thread', de: 'Ein Agententhread' } },
        { id: 'D', text: { en: 'A code interpreter tool', de: 'Ein Code-Interpreter-Tool' } }
      ],
      correct: ['A'],
      explanation: { en: 'A supervisor agent is correct because a supervisor delegates work and assembles the final response.', de: 'Ein Supervisor-Agent ist richtig, weil ein Supervisor Arbeit delegiert und die endgültige Antwort zusammenstellt.' },
      hint: { en: 'Choose the coordinator, not the specialist.', de: 'Wählen Sie den Koordinator und nicht den Spezialisten.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-152', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which artifact persists conversation state for an agent across turns?', de: 'Welches Artefakt hält den Gesprächszustand eines Agenten über mehrere Runden hinweg fest?' },
      options: [
        { id: 'A', text: { en: 'An agent thread', de: 'Ein Agententhread' } },
        { id: 'B', text: { en: 'An agent run', de: 'Ein Agentenlauf' } },
        { id: 'C', text: { en: 'A correlation ID', de: 'Eine Korrelations-ID' } },
        { id: 'D', text: { en: 'A retry policy with backoff', de: 'Eine Wiederholungsrichtlinie mit Backoff' } }
      ],
      correct: ['A'],
      explanation: { en: 'An agent thread is correct because threads hold the running conversation context.', de: 'Ein Agententhread ist richtig, weil Threads den laufenden Gesprächskontext halten.' },
      hint: { en: 'The answer is the container for conversation state.', de: 'Die Antwort ist der Container für den Gesprächszustand.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/agents/overview'
    },
    {
      id: 'ai103-153', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which execution unit runs an agent against a thread?', de: 'Welche Ausführungseinheit führt einen Agenten gegen einen Thread aus?' },
      options: [
        { id: 'A', text: { en: 'An agent run', de: 'Ein Agentenlauf' } },
        { id: 'B', text: { en: 'An agent thread', de: 'Ein Agententhread' } },
        { id: 'C', text: { en: 'A minimal tool allowlist', de: 'Eine minimale Tool-Allowlist' } },
        { id: 'D', text: { en: 'An idempotency key', de: 'Ein Idempotenzschlüssel' } }
      ],
      correct: ['A'],
      explanation: { en: 'An agent run is correct because a run is the execution of the agent on the conversation context.', de: 'Ein Agentenlauf ist richtig, weil ein Lauf die Ausführung des Agenten auf dem Gesprächskontext ist.' },
      hint: { en: 'Choose the unit of execution, not storage.', de: 'Wählen Sie die Ausführungseinheit und nicht den Speicher.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/agents/overview'
    },
    {
      id: 'ai103-154', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which tool type should an agent use to call a business API through a defined interface?', de: 'Welchen Tool-Typ sollte ein Agent verwenden, um über eine definierte Schnittstelle eine Geschäfts-API aufzurufen?' },
      options: [
        { id: 'A', text: { en: 'A function tool', de: 'Ein Function-Tool' } },
        { id: 'B', text: { en: 'A code interpreter tool', de: 'Ein Code-Interpreter-Tool' } },
        { id: 'C', text: { en: 'An agent thread', de: 'Ein Agententhread' } },
        { id: 'D', text: { en: 'A browser macro', de: 'Ein Browser-Makro' } }
      ],
      correct: ['A'],
      explanation: { en: 'A function tool is correct because function tools expose callable operations with explicit inputs and outputs.', de: 'Ein Function-Tool ist richtig, weil Function-Tools aufrufbare Operationen mit expliziten Ein- und Ausgaben bereitstellen.' },
      hint: { en: 'Look for the tool that maps to an application function.', de: 'Suchen Sie nach dem Tool, das einer Anwendungsfunktion entspricht.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/agents/overview'
    },
    {
      id: 'ai103-155', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which tool is best when an agent must inspect a CSV file and run Python code to analyze it?', de: 'Welches Tool ist am besten geeignet, wenn ein Agent eine CSV-Datei untersuchen und Python-Code zu ihrer Analyse ausführen muss?' },
      options: [
        { id: 'A', text: { en: 'A code interpreter tool', de: 'Ein Code-Interpreter-Tool' } },
        { id: 'B', text: { en: 'A function tool', de: 'Ein Function-Tool' } },
        { id: 'C', text: { en: 'A correlation ID', de: 'Eine Korrelations-ID' } },
        { id: 'D', text: { en: 'A human approval checkpoint', de: 'Ein menschlicher Genehmigungspunkt' } }
      ],
      correct: ['A'],
      explanation: { en: 'A code interpreter tool is correct because it is designed for iterative file analysis and code execution.', de: 'Ein Code-Interpreter-Tool ist richtig, weil es für iterative Dateianalyse und Codeausführung ausgelegt ist.' },
      hint: { en: 'This task needs computation on uploaded data.', de: 'Diese Aufgabe erfordert Berechnungen auf hochgeladenen Daten.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/agents/overview'
    },
    {
      id: 'ai103-156', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which design element should protect high-risk actions that must be reviewed by a person before execution?', de: 'Welches Designelement sollte risikoreiche Aktionen schützen, die vor der Ausführung von einer Person geprüft werden müssen?' },
      options: [
        { id: 'A', text: { en: 'A human approval checkpoint', de: 'Ein menschlicher Genehmigungspunkt' } },
        { id: 'B', text: { en: 'A retry policy with backoff', de: 'Eine Wiederholungsrichtlinie mit Backoff' } },
        { id: 'C', text: { en: 'An agent thread', de: 'Ein Agententhread' } },
        { id: 'D', text: { en: 'A semantic caption', de: 'Eine semantische Beschriftung' } }
      ],
      correct: ['A'],
      explanation: { en: 'A human approval checkpoint is correct because it inserts a human decision point before the side effect occurs.', de: 'Ein menschlicher Genehmigungspunkt ist richtig, weil es einen menschlichen Entscheidungspunkt einfügt, bevor der Seiteneffekt auftritt.' },
      hint: { en: 'You need an approval gate, not a resiliency feature.', de: 'Sie benötigen ein Genehmigungsgate und keine Resilienzfunktion.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-157', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Where should durable workflow state live when an agent must resume reliably after failures or restarts?', de: 'Wo sollte dauerhafter Workflow-Zustand liegen, wenn ein Agent nach Fehlern oder Neustarts zuverlässig fortsetzen muss?' },
      options: [
        { id: 'A', text: { en: 'An external state store', de: 'Ein externer Zustandspeicher' } },
        { id: 'B', text: { en: 'An agent thread', de: 'Ein Agententhread' } },
        { id: 'C', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } },
        { id: 'D', text: { en: 'A DNS record', de: 'Ein DNS-Eintrag' } }
      ],
      correct: ['A'],
      explanation: { en: 'An external state store is correct because durable application state should be persisted outside transient model context.', de: 'Ein externer Zustandspeicher ist richtig, weil dauerhafter Anwendungszustand außerhalb des flüchtigen Modellkontexts gespeichert werden sollte.' },
      hint: { en: 'Chat memory is not a system of record.', de: 'Chat-Speicher ist kein führendes System.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/'
    },
    {
      id: 'ai103-158', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which telemetry field most directly links one user request across an orchestrator, workers, and tools?', de: 'Welches Telemetrieattribut verbindet eine Benutzeranforderung am direktesten über Orchestrator, Worker und Tools hinweg?' },
      options: [
        { id: 'A', text: { en: 'A correlation ID', de: 'Eine Korrelations-ID' } },
        { id: 'B', text: { en: 'An agent thread', de: 'Ein Agententhread' } },
        { id: 'C', text: { en: 'A function tool', de: 'Ein Function-Tool' } },
        { id: 'D', text: { en: 'A CSS class name', de: 'Einen CSS-Klassennamen' } }
      ],
      correct: ['A'],
      explanation: { en: 'A correlation ID is correct because the same correlation identifier lets you trace one logical request through distributed components.', de: 'Eine Korrelations-ID ist richtig, weil dieselbe Korrelationskennung es ermöglicht, eine logische Anforderung durch verteilte Komponenten nachzuverfolgen.' },
      hint: { en: 'You need a shared identifier across components.', de: 'Sie benötigen eine gemeinsame Kennung über Komponenten hinweg.' },
      reference: 'https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-overview'
    },
    {
      id: 'ai103-159', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which resiliency pattern should stop an agent from repeatedly hammering a failing downstream dependency?', de: 'Welches Resilienzmuster sollte verhindern, dass ein Agent eine fehlschlagende nachgelagerte Abhängigkeit wiederholt überlastet?' },
      options: [
        { id: 'A', text: { en: 'A circuit breaker', de: 'Ein Circuit Breaker' } },
        { id: 'B', text: { en: 'A retry policy with backoff', de: 'Eine Wiederholungsrichtlinie mit Backoff' } },
        { id: 'C', text: { en: 'A human approval checkpoint', de: 'Ein menschlicher Genehmigungspunkt' } },
        { id: 'D', text: { en: 'An agent thread', de: 'Ein Agententhread' } }
      ],
      correct: ['A'],
      explanation: { en: 'A circuit breaker is correct because it opens the circuit after repeated failures and prevents immediate repeated calls.', de: 'Ein Circuit Breaker ist richtig, weil es nach wiederholten Fehlern den Stromkreis öffnet und sofortige weitere Aufrufe verhindert.' },
      hint: { en: 'The goal is to stop unhealthy repetition.', de: 'Das Ziel ist es, ungesunde Wiederholungen zu stoppen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker'
    },
    {
      id: 'ai103-160', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which principle should govern the set of tools exposed to a role-specific agent?', de: 'Welches Prinzip sollte die Menge der für einen rollenspezifischen Agenten freigegebenen Tools bestimmen?' },
      options: [
        { id: 'A', text: { en: 'A minimal tool allowlist', de: 'Eine minimale Tool-Allowlist' } },
        { id: 'B', text: { en: 'A shared administrator account', de: 'Ein gemeinsames Administratorkonto' } },
        { id: 'C', text: { en: 'Full tenant-wide access', de: 'Vollständigen mandantenweiten Zugriff' } },
        { id: 'D', text: { en: 'A browser theme', de: 'Ein Browserdesign' } }
      ],
      correct: ['A'],
      explanation: { en: 'A minimal tool allowlist is correct because the agent should receive only the minimum tools needed for its task.', de: 'Eine minimale Tool-Allowlist ist richtig, weil der Agent nur die minimal erforderlichen Tools für seine Aufgabe erhalten sollte.' },
      hint: { en: 'Limit capability to actual need.', de: 'Begrenzen Sie Fähigkeiten auf den tatsächlichen Bedarf.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-161', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'What should a specialist agent return to a supervisor for predictable orchestration?', de: 'Was sollte ein Spezialisten-Agent an einen Supervisor zurückgeben, um eine vorhersehbare Orchestrierung zu ermöglichen?' },
      options: [
        { id: 'A', text: { en: 'A structured intermediate result', de: 'Ein strukturiertes Zwischenergebnis' } },
        { id: 'B', text: { en: 'A free-form joke', de: 'Einen freien Witz' } },
        { id: 'C', text: { en: 'A browser screenshot', de: 'Einen Browser-Screenshot' } },
        { id: 'D', text: { en: 'A color palette', de: 'Eine Farbpalette' } }
      ],
      correct: ['A'],
      explanation: { en: 'A structured intermediate result is correct because structured results are easier for the supervisor to validate and combine.', de: 'Ein strukturiertes Zwischenergebnis ist richtig, weil strukturierte Ergebnisse für den Supervisor leichter zu validieren und zusammenzuführen sind.' },
      hint: { en: 'The supervisor needs consistent intermediate output.', de: 'Der Supervisor benötigt konsistente Zwischenausgaben.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-162', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which type of agent is best for a narrow, specialized subtask inside a broader orchestration?', de: 'Welcher Agententyp ist für eine enge, spezialisierte Teilaufgabe innerhalb einer größeren Orchestrierung am besten geeignet?' },
      options: [
        { id: 'A', text: { en: 'A worker agent', de: 'Ein Worker-Agent' } },
        { id: 'B', text: { en: 'A supervisor agent', de: 'Ein Supervisor-Agent' } },
        { id: 'C', text: { en: 'A human approval checkpoint', de: 'Ein menschlicher Genehmigungspunkt' } },
        { id: 'D', text: { en: 'A correlation ID', de: 'Eine Korrelations-ID' } }
      ],
      correct: ['A'],
      explanation: { en: 'A worker agent is correct because worker agents handle focused subtasks under a coordinator or broader workflow.', de: 'Ein Worker-Agent ist richtig, weil Worker-Agenten fokussierte Teilaufgaben unter einem Koordinator oder in einem größeren Workflow bearbeiten.' },
      hint: { en: 'Pick the specialist, not the coordinator.', de: 'Wählen Sie den Spezialisten und nicht den Koordinator.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-163', type: 'single',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which guardrail most directly limits runaway agent loops within a single run?', de: 'Welche Leitplanke begrenzt ausufernde Agentenschleifen innerhalb eines einzelnen Laufs am direktesten?' },
      options: [
        { id: 'A', text: { en: 'A maximum tool-call limit', de: 'Ein Limit für Tool-Aufrufe' } },
        { id: 'B', text: { en: 'A human approval checkpoint', de: 'Ein menschlicher Genehmigungspunkt' } },
        { id: 'C', text: { en: 'A DNS zone', de: 'Eine DNS-Zone' } },
        { id: 'D', text: { en: 'A PDF bookmark', de: 'Ein PDF-Lesezeichen' } }
      ],
      correct: ['A'],
      explanation: { en: 'A maximum tool-call limit is correct because a hard cap stops the run after too many tool invocations.', de: 'Ein Limit für Tool-Aufrufe ist richtig, weil eine harte Obergrenze den Lauf nach zu vielen Tool-Aufrufen stoppt.' },
      hint: { en: 'This control limits repetition directly.', de: 'Diese Kontrolle begrenzt Wiederholungen direkt.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-164', type: 'multiple',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which TWO controls improve reliability of agent tool execution?', de: 'Welche ZWEI Kontrollen verbessern die Zuverlässigkeit der Tool-Ausführung von Agenten?' },
      options: [
        { id: 'A', text: { en: 'A retry policy with backoff', de: 'Eine Wiederholungsrichtlinie mit Backoff' } },
        { id: 'B', text: { en: 'A tool timeout', de: 'Ein Tool-Timeout' } },
        { id: 'C', text: { en: 'A public anonymous endpoint', de: 'Einen öffentlichen anonymen Endpunkt' } },
        { id: 'D', text: { en: 'A browser bookmark', de: 'Ein Browser-Lesezeichen' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'A retry policy with backoff, A tool timeout are correct because retries handle transient faults and timeouts prevent one slow dependency from blocking the whole run.', de: 'Eine Wiederholungsrichtlinie mit Backoff, Ein Tool-Timeout sind richtig, weil Wiederholungen vorübergehende Fehler behandeln und Timeouts verhindern, dass eine langsame Abhängigkeit den gesamten Lauf blockiert.' },
      hint: { en: 'Choose the resiliency controls, not conveniences.', de: 'Wählen Sie die Resilienzkontrollen und nicht Bequemlichkeiten.' },
      reference: 'https://learn.microsoft.com/en-us/azure/architecture/patterns/retry'
    },
    {
      id: 'ai103-165', type: 'multiple',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which THREE signals are most useful for observing agent behavior in production?', de: 'Welche DREI Signale sind am nützlichsten, um Agentenverhalten in Produktion zu beobachten?' },
      options: [
        { id: 'A', text: { en: 'An agent run', de: 'Ein Agentenlauf' } },
        { id: 'B', text: { en: 'Tool latency', de: 'Tool-Latenz' } },
        { id: 'C', text: { en: 'Handoff count', de: 'Anzahl der Übergaben' } },
        { id: 'D', text: { en: 'Portal theme color', de: 'Portal-Designfarbe' } },
        { id: 'E', text: { en: 'Browser zoom level', de: 'Browser-Zoomstufe' } }
      ],
      correct: ['A', 'B', 'C'],
      explanation: { en: 'An agent run, Tool latency, Handoff count are correct because run status, tool latency, and handoff frequency reveal orchestration health and complexity.', de: 'Ein Agentenlauf, Tool-Latenz, Anzahl der Übergaben sind richtig, weil Laufstatus, Tool-Latenz und Übergabehäufigkeit Orchestrierungsgesundheit und Komplexität sichtbar machen.' },
      hint: { en: 'Pick operational signals that explain agent flow.', de: 'Wählen Sie operative Signale, die den Agentenfluss erklären.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/concepts/enterprise-readiness/observability/'
    },
    {
      id: 'ai103-166', type: 'multiple',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which TWO controls reduce the risk of unintended side effects from agents?', de: 'Welche ZWEI Kontrollen verringern das Risiko unbeabsichtigter Seiteneffekte von Agenten?' },
      options: [
        { id: 'A', text: { en: 'A human approval checkpoint', de: 'Ein menschlicher Genehmigungspunkt' } },
        { id: 'B', text: { en: 'A minimal tool allowlist', de: 'Eine minimale Tool-Allowlist' } },
        { id: 'C', text: { en: 'A larger font', de: 'Eine größere Schrift' } },
        { id: 'D', text: { en: 'A semantic caption', de: 'Eine semantische Beschriftung' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'A human approval checkpoint, A minimal tool allowlist are correct because one adds human review and the other limits what the agent can invoke.', de: 'Ein menschlicher Genehmigungspunkt, Eine minimale Tool-Allowlist sind richtig, weil die eine menschliche Prüfung hinzufügt und die andere begrenzt, was der Agent aufrufen kann.' },
      hint: { en: 'Choose review plus least privilege.', de: 'Wählen Sie Prüfung plus Least Privilege.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-167', type: 'multiple',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which TWO items should be persisted outside chat history for a regulated workflow?', de: 'Welche ZWEI Elemente sollten für einen regulierten Workflow außerhalb des Chatverlaufs gespeichert werden?' },
      options: [
        { id: 'A', text: { en: 'An external state store', de: 'Ein externer Zustandspeicher' } },
        { id: 'B', text: { en: 'A persistent approval record', de: 'Ein persistenter Genehmigungsnachweis' } },
        { id: 'C', text: { en: 'A portal favorite', de: 'Einen Portal-Favoriten' } },
        { id: 'D', text: { en: 'A background image', de: 'Ein Hintergrundbild' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'An external state store, A persistent approval record are correct because durable business state and approval evidence must survive retries, audits, and restarts.', de: 'Ein externer Zustandspeicher, Ein persistenter Genehmigungsnachweis sind richtig, weil dauerhafter Geschäftszustand und Genehmigungsnachweise Wiederholungen, Audits und Neustarts überstehen müssen.' },
      hint: { en: 'Think auditability and durability.', de: 'Denken Sie an Auditierbarkeit und Dauerhaftigkeit.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/'
    },
    {
      id: 'ai103-168', type: 'multiple',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which TWO collaboration patterns are common in multi-agent systems?', de: 'Welche ZWEI Kollaborationsmuster sind in Multi-Agenten-Systemen üblich?' },
      options: [
        { id: 'A', text: { en: 'A supervisor agent', de: 'Ein Supervisor-Agent' } },
        { id: 'B', text: { en: 'A handoff pattern', de: 'Ein Übergabemuster' } },
        { id: 'C', text: { en: 'A DNS failover record', de: 'Einen DNS-Failover-Eintrag' } },
        { id: 'D', text: { en: 'A budget alert', de: 'Eine Budgetwarnung' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'A supervisor agent, A handoff pattern are correct because one coordinates specialists and the other transfers conversation ownership.', de: 'Ein Supervisor-Agent, Ein Übergabemuster sind richtig, weil das eine Spezialisten koordiniert und das andere Gesprächsverantwortung überträgt.' },
      hint: { en: 'Pick the patterns that describe agent-to-agent interaction.', de: 'Wählen Sie die Muster, die die Interaktion zwischen Agenten beschreiben.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-169', type: 'scenario',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: { en: 'Northwind Traders uses an agent to trigger customer refunds through an internal payments API. When the API times out, the agent retries and sometimes creates a second refund for the same claim. Finance needs a fix that still allows retries for transient errors. The engineering team wants the most direct safeguard at the action boundary.', de: 'Northwind Traders nutzt einen Agenten, um Kundenerstattungen über eine interne Zahlungs-API auszulösen. Wenn die API einen Timeout liefert, wiederholt der Agent den Aufruf und erstellt manchmal eine zweite Erstattung für denselben Vorgang. Die Finanzabteilung benötigt eine Lösung, die Wiederholungen bei vorübergehenden Fehlern weiterhin erlaubt. Das Engineering-Team möchte die direkteste Schutzmaßnahme an der Aktionsgrenze.' },
      question: { en: 'What should Northwind Traders implement?', de: 'Was sollte Northwind Traders implementieren?' },
      options: [
        { id: 'A', text: { en: 'An idempotency key', de: 'Ein Idempotenzschlüssel' } },
        { id: 'B', text: { en: 'A larger VM size', de: 'Eine größere VM-Größe' } },
        { id: 'C', text: { en: 'A browser refresh', de: 'Eine Browseraktualisierung' } },
        { id: 'D', text: { en: 'A semantic caption', de: 'Eine semantische Beschriftung' } }
      ],
      correct: ['A'],
      explanation: { en: 'An idempotency key is correct because an idempotency key lets retries be safe for side-effecting operations.', de: 'Ein Idempotenzschlüssel ist richtig, weil ein Idempotenzschlüssel Wiederholungen bei Operationen mit Seiteneffekten sicher macht.' },
      hint: { en: 'The risk is duplicate side effects during retries.', de: 'Das Risiko sind doppelte Seiteneffekte bei Wiederholungen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/architecture/patterns/retry'
    },
    {
      id: 'ai103-170', type: 'scenario',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: { en: 'Contoso runs an operations assistant that receives CSV exports from warehouse systems. The assistant must calculate outliers, create a quick chart, and explain the result to an analyst. The data arrives as files rather than through a stable line-of-business API. The platform team wants the most suitable built-in tool for this workload.', de: 'Contoso betreibt einen Betriebsassistenten, der CSV-Exporte aus Lagersystemen erhält. Der Assistent muss Ausreißer berechnen, ein schnelles Diagramm erstellen und das Ergebnis einem Analysten erläutern. Die Daten kommen als Dateien und nicht über eine stabile Fachanwendungs-API an. Das Plattformteam möchte das am besten geeignete integrierte Tool für diese Workload.' },
      question: { en: 'Which tool should Contoso expose to the agent?', de: 'Welches Tool sollte Contoso dem Agenten bereitstellen?' },
      options: [
        { id: 'A', text: { en: 'A code interpreter tool', de: 'Ein Code-Interpreter-Tool' } },
        { id: 'B', text: { en: 'A function tool', de: 'Ein Function-Tool' } },
        { id: 'C', text: { en: 'A DNS record', de: 'Einen DNS-Eintrag' } },
        { id: 'D', text: { en: 'A budget alert', de: 'Eine Budgetwarnung' } }
      ],
      correct: ['A'],
      explanation: { en: 'A code interpreter tool is correct because the task requires code execution over uploaded tabular data.', de: 'Ein Code-Interpreter-Tool ist richtig, weil die Aufgabe Codeausführung über hochgeladene tabellarische Daten erfordert.' },
      hint: { en: 'The agent must compute on a file, not just call an API.', de: 'Der Agent muss auf einer Datei rechnen und nicht nur eine API aufrufen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/ai-foundry/agents/overview'
    },
    {
      id: 'ai103-171', type: 'scenario',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: { en: 'Fabrikam is building separate billing, shipping, and returns agents. A single customer conversation may require answers from more than one specialist. The final reply must still feel coherent and arrive through one front-end experience. Architecture needs the pattern that best coordinates these specialists.', de: 'Fabrikam entwickelt separate Agenten für Abrechnung, Versand und Retouren. Ein einzelnes Kundengespräch kann Antworten von mehr als einem Spezialisten erfordern. Die endgültige Antwort muss dennoch kohärent wirken und über ein Front-End-Erlebnis erfolgen. Die Architektur benötigt das Muster, das diese Spezialisten am besten koordiniert.' },
      question: { en: 'Which pattern should Fabrikam choose?', de: 'Welches Muster sollte Fabrikam wählen?' },
      options: [
        { id: 'A', text: { en: 'A supervisor agent', de: 'Ein Supervisor-Agent' } },
        { id: 'B', text: { en: 'A worker agent', de: 'Ein Worker-Agent' } },
        { id: 'C', text: { en: 'A human approval checkpoint', de: 'Ein menschlicher Genehmigungspunkt' } },
        { id: 'D', text: { en: 'A public endpoint', de: 'Einen öffentlichen Endpunkt' } }
      ],
      correct: ['A'],
      explanation: { en: 'A supervisor agent is correct because one coordinating agent should route subtasks and combine the specialist outputs.', de: 'Ein Supervisor-Agent ist richtig, weil ein koordinierender Agent Teilaufgaben zuweisen und die Ergebnisse der Spezialisten zusammenführen sollte.' },
      hint: { en: 'They need coordination across specialists.', de: 'Sie benötigen Koordination über mehrere Spezialisten hinweg.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-172', type: 'scenario',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'hard',
      scenario: { en: 'Tailwind Traders uses a sales-support agent that can grant discretionary credits to customers. Most cases are low risk, but some discounts exceed a manager approval threshold. Compliance requires that the agent must not finalize those high-value actions on its own. The workflow needs a control that enforces this policy directly.', de: 'Tailwind Traders nutzt einen Vertriebssupport-Agenten, der Kunden freiwillige Gutschriften gewähren kann. Die meisten Fälle sind risikoarm, aber manche Rabatte überschreiten eine Schwelle für Managergenehmigungen. Die Compliance verlangt, dass der Agent solche hochwertigen Aktionen nicht selbst abschließen darf. Der Workflow benötigt eine Kontrolle, die diese Richtlinie direkt durchsetzt.' },
      question: { en: 'What should Tailwind Traders add to the workflow?', de: 'Was sollte Tailwind Traders zum Workflow hinzufügen?' },
      options: [
        { id: 'A', text: { en: 'A human approval checkpoint', de: 'Ein menschlicher Genehmigungspunkt' } },
        { id: 'B', text: { en: 'A lower temperature setting', de: 'Eine niedrigere Temperatureinstellung' } },
        { id: 'C', text: { en: 'A bigger browser cache', de: 'Einen größeren Browser-Cache' } },
        { id: 'D', text: { en: 'A private DNS zone', de: 'Eine private DNS-Zone' } }
      ],
      correct: ['A'],
      explanation: { en: 'A human approval checkpoint is correct because a human checkpoint is required before the agent executes a high-impact discount action.', de: 'Ein menschlicher Genehmigungspunkt ist richtig, weil vor der Ausführung einer wirkungsstarken Rabattaktion durch den Agenten ein menschlicher Prüfschritt erforderlich ist.' },
      hint: { en: 'The missing control is human review.', de: 'Die fehlende Kontrolle ist die menschliche Prüfung.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-173', type: 'scenario',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'hard',
      scenario: { en: 'Datum Corporation operates a supervisor agent with several worker agents and downstream tools. When a request fails, support engineers can see partial logs but cannot tell which worker caused the problem. Leadership wants one end-to-end view for every customer request. The observability design must connect the app, agent, and tool layers.', de: 'Datum Corporation betreibt einen Supervisor-Agenten mit mehreren Worker-Agenten und nachgelagerten Tools. Wenn eine Anforderung fehlschlägt, sehen Supportingenieure Teilprotokolle, können aber nicht erkennen, welcher Worker das Problem verursacht hat. Die Leitung wünscht sich eine durchgängige Sicht auf jede Kundenanforderung. Das Beobachtungsdesign muss App-, Agenten- und Tool-Ebene miteinander verbinden.' },
      question: { en: 'What should Datum Corporation implement?', de: 'Was sollte Datum Corporation implementieren?' },
      options: [
        { id: 'A', text: { en: 'Distributed tracing with shared correlation IDs', de: 'Verteiltes Tracing mit gemeinsamen Korrelations-IDs' } },
        { id: 'B', text: { en: 'A larger browser font', de: 'Eine größere Browser-Schriftart' } },
        { id: 'C', text: { en: 'A nightly batch job', de: 'Einen nächtlichen Batchauftrag' } },
        { id: 'D', text: { en: 'A semantic caption', de: 'Eine semantische Beschriftung' } }
      ],
      correct: ['A'],
      explanation: { en: 'Distributed tracing with shared correlation IDs is correct because end-to-end trace correlation is needed to identify which worker and tool caused the failure.', de: 'Verteiltes Tracing mit gemeinsamen Korrelations-IDs ist richtig, weil für die Identifizierung des verursachenden Workers und Tools eine Ende-zu-Ende-Tracing-Korrelation erforderlich ist.' },
      hint: { en: 'They cannot diagnose the run without cross-component correlation.', de: 'Ohne komponentenübergreifende Korrelation können sie den Lauf nicht diagnostizieren.' },
      reference: 'https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-overview'
    },
    {
      id: 'ai103-174', type: 'scenario',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: { en: 'Humongous Insurance uses an agent to guide claim intake across several review stages. After a restart, the assistant sometimes forgets which stage the claim had already reached and starts over. Business stakeholders need the workflow to resume reliably after interruptions. The team is deciding where authoritative workflow state should live.', de: 'Humongous Insurance nutzt einen Agenten, um die Schadenaufnahme über mehrere Prüfphasen hinweg zu steuern. Nach einem Neustart vergisst der Assistent manchmal, welche Phase der Schaden bereits erreicht hatte, und beginnt von vorn. Die Fachbereiche benötigen einen Workflow, der nach Unterbrechungen zuverlässig fortgesetzt wird. Das Team entscheidet, wo der maßgebliche Workflow-Zustand liegen soll.' },
      question: { en: 'What should Humongous Insurance persist?', de: 'Was sollte Humongous Insurance persistent speichern?' },
      options: [
        { id: 'A', text: { en: 'An external state store', de: 'Ein externer Zustandspeicher' } },
        { id: 'B', text: { en: 'An agent thread', de: 'Ein Agententhread' } },
        { id: 'C', text: { en: 'Streaming responses', de: 'Streaming-Antworten' } },
        { id: 'D', text: { en: 'A public DNS record', de: 'Einen öffentlichen DNS-Eintrag' } }
      ],
      correct: ['A'],
      explanation: { en: 'An external state store is correct because workflow stage and claim state should be stored durably outside the transient chat transcript.', de: 'Ein externer Zustandspeicher ist richtig, weil Workflow-Status und Schadenzustand dauerhaft außerhalb des flüchtigen Chat-Transkripts gespeichert werden sollten.' },
      hint: { en: 'The chat transcript is not durable enough to be the source of truth.', de: 'Das Chat-Transkript ist nicht dauerhaft genug, um das führende System zu sein.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/'
    },
    {
      id: 'ai103-175', type: 'scenario',
      domain: { en: 'Build and orchestrate AI agents', de: 'KI-Agenten erstellen und orchestrieren' }, difficulty: 'medium',
      scenario: { en: 'Woodgrove Bank completed a security review of a research assistant agent. The review found that the agent can call internal payment and account-management APIs it never needs. The bank wants to reduce blast radius without changing the agent\'s core purpose. Engineering is looking for the simplest role-based restriction.', de: 'Woodgrove Bank hat eine Sicherheitsprüfung eines Research-Assistenten-Agenten abgeschlossen. Die Prüfung ergab, dass der Agent interne Zahlungs- und Kontoverwaltungs-APIs aufrufen kann, die er nie benötigt. Die Bank möchte den Wirkungsbereich reduzieren, ohne den Kernzweck des Agenten zu ändern. Das Engineering sucht nach der einfachsten rollenbasierten Einschränkung.' },
      question: { en: 'Which security change should Woodgrove Bank make?', de: 'Welche Sicherheitsänderung sollte Woodgrove Bank vornehmen?' },
      options: [
        { id: 'A', text: { en: 'A minimal tool allowlist', de: 'Eine minimale Tool-Allowlist' } },
        { id: 'B', text: { en: 'Expose every internal API', de: 'Jede interne API freigeben' } },
        { id: 'C', text: { en: 'Disable monitoring', de: 'Monitoring deaktivieren' } },
        { id: 'D', text: { en: 'Store keys in prompts', de: 'Schlüssel in Prompts speichern' } }
      ],
      correct: ['A'],
      explanation: { en: 'A minimal tool allowlist is correct because least-privilege tool exposure reduces the chance of unintended actions.', de: 'Eine minimale Tool-Allowlist ist richtig, weil Least-Privilege bei der Tool-Freigabe die Wahrscheinlichkeit unbeabsichtigter Aktionen reduziert.' },
      hint: { en: 'The agent should only see tools that match its role.', de: 'Der Agent sollte nur Tools sehen, die seiner Rolle entsprechen.' },
      reference: 'https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-orchestration/'
    },
    {
      id: 'ai103-176', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which chunking pattern best preserves context that spans chunk boundaries?', de: 'Welches Chunking-Muster bewahrt Kontext, der sich über Chunk-Grenzen erstreckt, am besten?' },
      options: [
        { id: 'A', text: { en: 'Overlapping chunks', de: 'Überlappende Chunks' } },
        { id: 'B', text: { en: 'Hybrid search', de: 'Hybride Suche' } },
        { id: 'C', text: { en: 'A search indexer', de: 'Ein Suchindexer' } },
        { id: 'D', text: { en: 'A browser cache', de: 'Einen Browser-Cache' } }
      ],
      correct: ['A'],
      explanation: { en: 'Overlapping chunks is correct because overlap keeps important boundary information in neighboring chunks.', de: 'Überlappende Chunks ist richtig, weil Überlappung wichtige Grenzinformationen in benachbarten Chunks hält.' },
      hint: { en: 'The answer should address boundary context loss.', de: 'Die Antwort sollte den Verlust von Kontext an Chunk-Grenzen adressieren.' },
      reference: 'https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-chunking-phase'
    },
    {
      id: 'ai103-177', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which retrieval mode combines keyword matching with vector similarity in one query?', de: 'Welcher Abrufmodus kombiniert Schlüsselwortabgleich und Vektorähnlichkeit in einer Abfrage?' },
      options: [
        { id: 'A', text: { en: 'Hybrid search', de: 'Hybride Suche' } },
        { id: 'B', text: { en: 'Semantic ranker', de: 'Semantischer Ranker' } },
        { id: 'C', text: { en: 'A search indexer', de: 'Ein Suchindexer' } },
        { id: 'D', text: { en: 'An OData filter', de: 'Ein OData-Filter' } }
      ],
      correct: ['A'],
      explanation: { en: 'Hybrid search is correct because hybrid search blends lexical and vector signals.', de: 'Hybride Suche ist richtig, weil hybride Suche lexikalische und Vektorsignale verbindet.' },
      hint: { en: 'Look for the mode that uses two retrieval strategies together.', de: 'Suchen Sie nach dem Modus, der zwei Abrufstrategien kombiniert.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/hybrid-search-overview'
    },
    {
      id: 'ai103-178', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which index field design should store access-control principals for query-time security trimming?', de: 'Welches Indexfelddesign sollte Zugriffsprinzipale für Security Trimming zur Abfragezeit speichern?' },
      options: [
        { id: 'A', text: { en: 'A filterable ACL field', de: 'Ein filterbares ACL-Feld' } },
        { id: 'B', text: { en: 'Source URL and chunk metadata', de: 'Quell-URL und Chunk-Metadaten' } },
        { id: 'C', text: { en: 'A lastUpdated timestamp field', de: 'Ein lastUpdated-Zeitstempelfeld' } },
        { id: 'D', text: { en: 'A nonfilterable description field', de: 'Ein nicht filterbares Beschreibungsfeld' } }
      ],
      correct: ['A'],
      explanation: { en: 'A filterable ACL field is correct because security trimming requires filterable permission metadata in the index.', de: 'Ein filterbares ACL-Feld ist richtig, weil Security Trimming filterbare Berechtigungsmetadaten im Index erfordert.' },
      hint: { en: 'The field must support filtering at query time.', de: 'Das Feld muss Filtern zur Abfragezeit unterstützen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-security-trimming-for-azure-search'
    },
    {
      id: 'ai103-179', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which query construct should apply tenant or ACL restrictions before the model sees retrieved content?', de: 'Welches Abfragekonstrukt sollte Mandanten- oder ACL-Einschränkungen anwenden, bevor das Modell abgerufene Inhalte sieht?' },
      options: [
        { id: 'A', text: { en: 'An OData filter', de: 'Ein OData-Filter' } },
        { id: 'B', text: { en: 'Hybrid search', de: 'Hybride Suche' } },
        { id: 'C', text: { en: 'A search indexer', de: 'Ein Suchindexer' } },
        { id: 'D', text: { en: 'A browser theme', de: 'Ein Browserdesign' } }
      ],
      correct: ['A'],
      explanation: { en: 'An OData filter is correct because filters constrain retrieval results before grounding content is selected.', de: 'Ein OData-Filter ist richtig, weil Filter Abrufresultate einschränken, bevor Grounding-Inhalte ausgewählt werden.' },
      hint: { en: 'This is about restricting retrieval results.', de: 'Es geht darum, Abrufresultate einzuschränken.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-filters'
    },
    {
      id: 'ai103-180', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which metadata field is most useful for freshness-aware filtering or ranking?', de: 'Welches Metadatenfeld ist für aktualitätsbewusstes Filtern oder Ranking am nützlichsten?' },
      options: [
        { id: 'A', text: { en: 'A lastUpdated timestamp field', de: 'Ein lastUpdated-Zeitstempelfeld' } },
        { id: 'B', text: { en: 'Source URL and chunk metadata', de: 'Quell-URL und Chunk-Metadaten' } },
        { id: 'C', text: { en: 'A CSS selector', de: 'Einen CSS-Selektor' } },
        { id: 'D', text: { en: 'A DNS alias', de: 'Einen DNS-Alias' } }
      ],
      correct: ['A'],
      explanation: { en: 'A lastUpdated timestamp field is correct because a timestamp lets the application prefer or require recently updated content.', de: 'Ein lastUpdated-Zeitstempelfeld ist richtig, weil ein Zeitstempel der Anwendung erlaubt, kürzlich aktualisierte Inhalte zu bevorzugen oder zu verlangen.' },
      hint: { en: 'Choose the metadata that directly expresses recency.', de: 'Wählen Sie die Metadaten, die Aktualität direkt ausdrücken.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview'
    },
    {
      id: 'ai103-181', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which metadata should be stored for user-visible citations back to the supporting content?', de: 'Welche Metadaten sollten für benutzersichtbare Zitate zum unterstützenden Inhalt gespeichert werden?' },
      options: [
        { id: 'A', text: { en: 'Source URL and chunk metadata', de: 'Quell-URL und Chunk-Metadaten' } },
        { id: 'B', text: { en: 'Only the answer text', de: 'Nur den Antworttext' } },
        { id: 'C', text: { en: 'A browser bookmark', de: 'Ein Browser-Lesezeichen' } },
        { id: 'D', text: { en: 'A DNS entry', de: 'Einen DNS-Eintrag' } }
      ],
      correct: ['A'],
      explanation: { en: 'Source URL and chunk metadata is correct because citations depend on retaining source identifiers such as document URL and chunk details.', de: 'Quell-URL und Chunk-Metadaten ist richtig, weil Zitate davon abhängen, dass Quellkennungen wie Dokument-URL und Chunk-Details erhalten bleiben.' },
      hint: { en: 'The answer should enable traceability to the source.', de: 'Die Antwort sollte Rückverfolgbarkeit zur Quelle ermöglichen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview'
    },
    {
      id: 'ai103-182', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which field helps the application navigate from a retrieved chunk back to the original full document?', de: 'Welches Feld hilft der Anwendung dabei, von einem abgerufenen Chunk zurück zum ursprünglichen Gesamtdokument zu navigieren?' },
      options: [
        { id: 'A', text: { en: 'A parent document ID', de: 'Eine übergeordnete Dokument-ID' } },
        { id: 'B', text: { en: 'A lastUpdated timestamp field', de: 'Ein lastUpdated-Zeitstempelfeld' } },
        { id: 'C', text: { en: 'A browser cookie', de: 'Ein Browser-Cookie' } },
        { id: 'D', text: { en: 'A retry counter', de: 'Einen Wiederholungszähler' } }
      ],
      correct: ['A'],
      explanation: { en: 'A parent document ID is correct because the parent identifier links each chunk to its source document.', de: 'Eine übergeordnete Dokument-ID ist richtig, weil die übergeordnete Kennung jeden Chunk mit seinem Quelldokument verknüpft.' },
      hint: { en: 'The app needs a document-level pointer.', de: 'Die App benötigt einen Verweis auf Dokumentebene.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-how-to-define-index-projections'
    },
    {
      id: 'ai103-183', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'What should you do after changing the vector dimension in an Azure AI Search index schema?', de: 'Was sollten Sie tun, nachdem Sie die Vektordimension im Azure AI Search-Indexschema geändert haben?' },
      options: [
        { id: 'A', text: { en: 'Recreate and reindex the search index', de: 'Den Suchindex neu erstellen und neu indizieren' } },
        { id: 'B', text: { en: 'More frequent indexing or push updates', de: 'Häufigere Indizierung oder Push-Updates' } },
        { id: 'C', text: { en: 'A browser reload', de: 'Einen Browser-Neuladevorgang' } },
        { id: 'D', text: { en: 'A budget alert', de: 'Eine Budgetwarnung' } }
      ],
      correct: ['A'],
      explanation: { en: 'Recreate and reindex the search index is correct because schema and stored vector dimensions must align, which generally requires rebuilding and reloading the index.', de: 'Den Suchindex neu erstellen und neu indizieren ist richtig, weil Schema und gespeicherte Vektordimensionen übereinstimmen müssen, was in der Regel einen Neuaufbau und ein Neuladen des Indexes erfordert.' },
      hint: { en: 'The field definition itself changed.', de: 'Die Felddefinition selbst hat sich geändert.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-howto-reindex'
    },
    {
      id: 'ai103-184', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which Azure AI Search feature can crawl a data source on a schedule and populate an index?', de: 'Welche Azure AI Search-Funktion kann eine Datenquelle nach Zeitplan durchsuchen und einen Index befüllen?' },
      options: [
        { id: 'A', text: { en: 'A search indexer', de: 'Ein Suchindexer' } },
        { id: 'B', text: { en: 'Hybrid search', de: 'Hybride Suche' } },
        { id: 'C', text: { en: 'Semantic ranker', de: 'Semantischer Ranker' } },
        { id: 'D', text: { en: 'A CSS file', de: 'Eine CSS-Datei' } }
      ],
      correct: ['A'],
      explanation: { en: 'A search indexer is correct because indexers automate ingestion from supported sources into an index.', de: 'Ein Suchindexer ist richtig, weil Indexer die Aufnahme aus unterstützten Quellen in einen Index automatisieren.' },
      hint: { en: 'This is about ingestion, not querying.', de: 'Es geht um Ingestion und nicht um Abfragen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-indexer-overview'
    },
    {
      id: 'ai103-185', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which feature supports mapping a parent document into chunk-level records for retrieval-oriented indexing?', de: 'Welche Funktion unterstützt es, ein übergeordnetes Dokument in chunkbasierte Datensätze für retrievalorientierte Indizierung zu überführen?' },
      options: [
        { id: 'A', text: { en: 'Index projections', de: 'Indexprojektionen' } },
        { id: 'B', text: { en: 'A search indexer', de: 'Ein Suchindexer' } },
        { id: 'C', text: { en: 'Hybrid search', de: 'Hybride Suche' } },
        { id: 'D', text: { en: 'A cost budget alert', de: 'Eine Kostenbudgetwarnung' } }
      ],
      correct: ['A'],
      explanation: { en: 'Index projections is correct because index projections help create chunk-centric search documents from richer source content.', de: 'Indexprojektionen ist richtig, weil Indexprojektionen dabei helfen, chunkzentrierte Suchdokumente aus reichhaltigeren Quellinhalten zu erstellen.' },
      hint: { en: 'The answer shapes how content becomes chunk records.', de: 'Die Antwort beschreibt, wie Inhalte zu Chunk-Datensätzen werden.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-how-to-define-index-projections'
    },
    {
      id: 'ai103-186', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which Azure AI Search artifact should you define before loading vectors into a new solution?', de: 'Welches Azure AI Search-Artefakt sollten Sie definieren, bevor Sie Vektoren in eine neue Lösung laden?' },
      options: [
        { id: 'A', text: { en: 'A search index with vector fields', de: 'Ein Suchindex mit Vektorfeldern' } },
        { id: 'B', text: { en: 'A search indexer', de: 'Ein Suchindexer' } },
        { id: 'C', text: { en: 'A dashboard pin', de: 'Eine Dashboard-Anheftung' } },
        { id: 'D', text: { en: 'A browser extension', de: 'Eine Browser-Erweiterung' } }
      ],
      correct: ['A'],
      explanation: { en: 'A search index with vector fields is correct because the vector fields and schema live in the search index definition.', de: 'Ein Suchindex mit Vektorfeldern ist richtig, weil die Vektorfelder und das Schema in der Suchindexdefinition liegen.' },
      hint: { en: 'The structure must exist before the data.', de: 'Die Struktur muss vor den Daten existieren.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-how-to-create-search-index'
    },
    {
      id: 'ai103-187', type: 'single',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which requirement must remain aligned when you switch to a different embeddings model?', de: 'Welche Anforderung muss ausgerichtet bleiben, wenn Sie auf ein anderes Embeddings-Modell umstellen?' },
      options: [
        { id: 'A', text: { en: 'Matching embedding dimensions', de: 'Passende Embedding-Dimensionen' } },
        { id: 'B', text: { en: 'A portal theme', de: 'Ein Portaldesign' } },
        { id: 'C', text: { en: 'A chat title', de: 'Einen Chattitel' } },
        { id: 'D', text: { en: 'A print layout', de: 'Ein Drucklayout' } }
      ],
      correct: ['A'],
      explanation: { en: 'Matching embedding dimensions is correct because the vector field dimensions must match the new embedding output.', de: 'Passende Embedding-Dimensionen ist richtig, weil die Dimensionen des Vektorfelds zur neuen Embedding-Ausgabe passen müssen.' },
      hint: { en: 'The issue is numeric shape compatibility.', de: 'Es geht um die Kompatibilität der numerischen Form.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/vector-search-how-to-query'
    },
    {
      id: 'ai103-188', type: 'multiple',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which TWO changes usually improve retrieval precision in a RAG system?', de: 'Welche ZWEI Änderungen verbessern üblicherweise die Abrufpräzision in einem RAG-System?' },
      options: [
        { id: 'A', text: { en: 'Metadata filters', de: 'Metadatenfilter' } },
        { id: 'B', text: { en: 'Top-k tuning', de: 'Top-k-Abstimmung' } },
        { id: 'C', text: { en: 'A bigger browser cache', de: 'Einen größeren Browser-Cache' } },
        { id: 'D', text: { en: 'A budget alert', de: 'Eine Budgetwarnung' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'Metadata filters, Top-k tuning are correct because they narrow the candidate set and tune how many results the model receives.', de: 'Metadatenfilter, Top-k-Abstimmung sind richtig, weil sie die Kandidatenmenge verengen und abstimmen, wie viele Ergebnisse das Modell erhält.' },
      hint: { en: 'Choose the two options that directly shape retrieved context quality.', de: 'Wählen Sie die beiden Optionen, die die Qualität des abgerufenen Kontexts direkt beeinflussen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview'
    },
    {
      id: 'ai103-189', type: 'multiple',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'easy',
      scenario: null,
      question: { en: 'Which TWO elements are required for security trimming in Azure AI Search?', de: 'Welche ZWEI Elemente sind für Security Trimming in Azure AI Search erforderlich?' },
      options: [
        { id: 'A', text: { en: 'A filterable ACL field', de: 'Ein filterbares ACL-Feld' } },
        { id: 'B', text: { en: 'An OData filter', de: 'Ein OData-Filter' } },
        { id: 'C', text: { en: 'Semantic ranker', de: 'Semantischer Ranker' } },
        { id: 'D', text: { en: 'A search indexer', de: 'Ein Suchindexer' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'A filterable ACL field, An OData filter are correct because permission metadata must exist in the index and must also be applied in the query.', de: 'Ein filterbares ACL-Feld, Ein OData-Filter sind richtig, weil Berechtigungsmetadaten im Index vorhanden sein und auch in der Abfrage angewendet werden müssen.' },
      hint: { en: 'You need one part in the index and one part in the query.', de: 'Sie benötigen einen Teil im Index und einen Teil in der Abfrage.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-security-trimming-for-azure-search'
    },
    {
      id: 'ai103-190', type: 'multiple',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: null,
      question: { en: 'Which THREE components commonly appear in an integrated vectorization pipeline?', de: 'Welche DREI Komponenten erscheinen typischerweise in einer Pipeline mit integrierter Vektorisierung?' },
      options: [
        { id: 'A', text: { en: 'A search index with vector fields', de: 'Ein Suchindex mit Vektorfeldern' } },
        { id: 'B', text: { en: 'Integrated vectorization', de: 'Integrierte Vektorisierung' } },
        { id: 'C', text: { en: 'A search indexer', de: 'Ein Suchindexer' } },
        { id: 'D', text: { en: 'A browser theme', de: 'Ein Browserdesign' } },
        { id: 'E', text: { en: 'A DNS alias', de: 'Ein DNS-Alias' } }
      ],
      correct: ['A', 'B', 'C'],
      explanation: { en: 'A search index with vector fields, Integrated vectorization, A search indexer are correct because the solution needs index schema, vectorization support, and an ingestion path.', de: 'Ein Suchindex mit Vektorfeldern, Integrierte Vektorisierung, Ein Suchindexer sind richtig, weil die Lösung Indexschema, Vektorisierungsunterstützung und einen Ingestionspfad benötigt.' },
      hint: { en: 'Pick the building blocks for vectorized ingestion.', de: 'Wählen Sie die Bausteine für vektorisierte Ingestion.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/vector-search-integrated-vectorization'
    },
    {
      id: 'ai103-191', type: 'multiple',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which TWO measures improve freshness in a RAG pipeline?', de: 'Welche ZWEI Maßnahmen verbessern die Aktualität in einer RAG-Pipeline?' },
      options: [
        { id: 'A', text: { en: 'More frequent indexing or push updates', de: 'Häufigere Indizierung oder Push-Updates' } },
        { id: 'B', text: { en: 'A lastUpdated timestamp field', de: 'Ein lastUpdated-Zeitstempelfeld' } },
        { id: 'C', text: { en: 'Semantic ranker', de: 'Semantischer Ranker' } },
        { id: 'D', text: { en: 'A portal screenshot', de: 'Einen Portal-Screenshot' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'More frequent indexing or push updates, A lastUpdated timestamp field are correct because one keeps the index updated and the other exposes freshness as queryable metadata.', de: 'Häufigere Indizierung oder Push-Updates, Ein lastUpdated-Zeitstempelfeld sind richtig, weil die eine den Index aktuell hält und die andere Aktualität als abfragbare Metadaten bereitstellt.' },
      hint: { en: 'You need both updated content and metadata that reflects recency.', de: 'Sie benötigen sowohl aktualisierte Inhalte als auch Metadaten, die Aktualität widerspiegeln.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview'
    },
    {
      id: 'ai103-192', type: 'multiple',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: null,
      question: { en: 'Which TWO inputs should the application pass to the model for grounded answers?', de: 'Welche ZWEI Eingaben sollte die Anwendung dem Modell für fundierte Antworten übergeben?' },
      options: [
        { id: 'A', text: { en: 'Retrieved chunks', de: 'Abgerufene Chunks' } },
        { id: 'B', text: { en: 'Source URL and chunk metadata', de: 'Quell-URL und Chunk-Metadaten' } },
        { id: 'C', text: { en: 'A DNS zone', de: 'Eine DNS-Zone' } },
        { id: 'D', text: { en: 'A budget alert', de: 'Eine Budgetwarnung' } }
      ],
      correct: ['A', 'B'],
      explanation: { en: 'Retrieved chunks, Source URL and chunk metadata are correct because the model needs supporting passages, and the app benefits from retaining source identifiers for citations.', de: 'Abgerufene Chunks, Quell-URL und Chunk-Metadaten sind richtig, weil das Modell unterstützende Passagen benötigt und die Anwendung davon profitiert, Quellkennungen für Zitate beizubehalten.' },
      hint: { en: 'Grounding requires evidence, not infrastructure settings.', de: 'Fundierung erfordert Belege und keine Infrastruktureinstellungen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview'
    },
    {
      id: 'ai103-193', type: 'scenario',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: { en: 'Contoso built a manual assistant on top of chunked policy documents. Answers often miss the sentence immediately before or after the retrieved chunk, which changes the meaning of the guidance. Search recall is acceptable, but the contextual boundaries are too sharp. The team wants the chunking adjustment that most directly addresses this problem.', de: 'Contoso hat einen Assistenten für Handbücher auf Basis gechunkter Richtliniendokumente erstellt. Antworten übersehen oft den Satz unmittelbar vor oder nach dem abgerufenen Chunk, wodurch sich die Bedeutung der Anleitung ändert. Der Search-Recall ist akzeptabel, aber die Kontextgrenzen sind zu scharf. Das Team möchte die Chunking-Anpassung, die dieses Problem am direktesten behebt.' },
      question: { en: 'What should Contoso change first?', de: 'Was sollte Contoso zuerst ändern?' },
      options: [
        { id: 'A', text: { en: 'Overlapping chunks', de: 'Überlappende Chunks' } },
        { id: 'B', text: { en: 'Disable semantic search', de: 'Semantische Suche deaktivieren' } },
        { id: 'C', text: { en: 'Remove all metadata', de: 'Sämtliche Metadaten entfernen' } },
        { id: 'D', text: { en: 'Lower browser zoom', de: 'Den Browser-Zoom verringern' } }
      ],
      correct: ['A'],
      explanation: { en: 'Overlapping chunks is correct because the retrieval chunks need boundary overlap so adjacent context is not lost.', de: 'Überlappende Chunks ist richtig, weil die Retrieval-Chunks Überlappung benötigen, damit angrenzender Kontext nicht verloren geht.' },
      hint: { en: 'The issue is chunk boundary loss.', de: 'Das Problem ist der Verlust von Kontext an Chunk-Grenzen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-chunking-phase'
    },
    {
      id: 'ai103-194', type: 'scenario',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: { en: 'Fabrikam built a multi-department knowledge assistant on top of Azure AI Search. Employees in one department can occasionally see snippets from restricted HR documents. The product team confirms that authentication is working and the problem is in retrieval authorization. Security needs the standard server-side pattern that prevents unauthorized results from being retrieved.', de: 'Fabrikam hat einen Wissensassistenten für mehrere Abteilungen auf Azure AI Search aufgebaut. Mitarbeiter einer Abteilung können gelegentlich Ausschnitte aus eingeschränkten HR-Dokumenten sehen. Das Produktteam bestätigt, dass die Authentifizierung funktioniert und das Problem in der Retrieval-Autorisierung liegt. Die Sicherheit benötigt das standardmäßige serverseitige Muster, das verhindert, dass unautorisierte Ergebnisse abgerufen werden.' },
      question: { en: 'What should Fabrikam implement?', de: 'Was sollte Fabrikam implementieren?' },
      options: [
        { id: 'A', text: { en: 'Store principal IDs in a filterable field and apply them through the query filter', de: 'Prinzipal-IDs in einem filterbaren Feld speichern und über den Abfragefilter anwenden' } },
        { id: 'B', text: { en: 'Rely only on client-side hiding', de: 'Sich nur auf clientseitiges Ausblenden verlassen' } },
        { id: 'C', text: { en: 'Disable vector search', de: 'Vektorsuche deaktivieren' } },
        { id: 'D', text: { en: 'Store ACLs in screenshots', de: 'ACLs in Screenshots speichern' } }
      ],
      correct: ['A'],
      explanation: { en: 'Store principal IDs in a filterable field and apply them through the query filter is correct because security trimming needs both indexed ACL metadata and query-time filtering.', de: 'Prinzipal-IDs in einem filterbaren Feld speichern und über den Abfragefilter anwenden ist richtig, weil Security Trimming sowohl indizierte ACL-Metadaten als auch Filterung zur Abfragezeit benötigt.' },
      hint: { en: 'The fix belongs in the index and the query, not only in the UI.', de: 'Die Lösung gehört in den Index und die Abfrage, nicht nur in die Benutzeroberfläche.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-security-trimming-for-azure-search'
    },
    {
      id: 'ai103-195', type: 'scenario',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: { en: 'Tailwind Traders stores thousands of documents in Azure Storage and wants a nightly refresh into its RAG index. The search team also wants embeddings to be generated during ingestion instead of building a separate vector pipeline. Operations prefers a managed approach over custom ETL code. Architecture is selecting the ingestion pattern that best fits those constraints.', de: 'Tailwind Traders speichert Tausende Dokumente in Azure Storage und möchte eine nächtliche Aktualisierung in seinen RAG-Index. Das Suchteam möchte außerdem, dass Embeddings während der Ingestion erzeugt werden, statt eine separate Vektorpipeline aufzubauen. Der Betrieb bevorzugt einen verwalteten Ansatz gegenüber benutzerdefiniertem ETL-Code. Die Architektur wählt das Ingestionsmuster aus, das diese Randbedingungen am besten erfüllt.' },
      question: { en: 'Which ingestion approach should Tailwind Traders choose?', de: 'Welchen Ingestionsansatz sollte Tailwind Traders wählen?' },
      options: [
        { id: 'A', text: { en: 'Use an Azure AI Search indexer with integrated vectorization', de: 'Einen Azure AI Search-Indexer mit integrierter Vektorisierung verwenden' } },
        { id: 'B', text: { en: 'Manually paste document text into prompts', de: 'Dokumenttext manuell in Prompts einfügen' } },
        { id: 'C', text: { en: 'Disable embeddings entirely', de: 'Embeddings vollständig deaktivieren' } },
        { id: 'D', text: { en: 'Move the corpus into local browser storage', de: 'Den Korpus in den lokalen Browser-Speicher verschieben' } }
      ],
      correct: ['A'],
      explanation: { en: 'Use an Azure AI Search indexer with integrated vectorization is correct because it minimizes custom ingestion code while creating searchable vectors as part of indexing.', de: 'Einen Azure AI Search-Indexer mit integrierter Vektorisierung verwenden ist richtig, weil es benutzerdefinierten Ingestionscode minimiert und gleichzeitig durchsuchbare Vektoren als Teil der Indizierung erzeugt.' },
      hint: { en: 'They want scheduled ingestion with minimal custom plumbing.', de: 'Sie möchten geplante Ingestion mit minimaler benutzerdefinierter Logik.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/vector-search-integrated-vectorization'
    },
    {
      id: 'ai103-196', type: 'scenario',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: { en: 'Litware uses a RAG assistant for product pricing and availability. Merchandising updates source documents several times a day, but the assistant continues to quote outdated prices for hours. The retrieval logic is correct when fresh documents are present in the index. The platform team wants the change that most directly reduces answer staleness.', de: 'Litware nutzt einen RAG-Assistenten für Produktpreise und Verfügbarkeit. Das Merchandising aktualisiert Quelldokumente mehrmals täglich, aber der Assistent nennt noch Stunden lang veraltete Preise. Die Retrieval-Logik ist korrekt, wenn frische Dokumente im Index vorhanden sind. Das Plattformteam möchte die Änderung, die die Veraltung von Antworten am direktesten reduziert.' },
      question: { en: 'What should Litware change?', de: 'Was sollte Litware ändern?' },
      options: [
        { id: 'A', text: { en: 'More frequent indexing or push updates', de: 'Häufigere Indizierung oder Push-Updates' } },
        { id: 'B', text: { en: 'A lower temperature value', de: 'Einen niedrigeren Temperaturwert' } },
        { id: 'C', text: { en: 'A private DNS zone', de: 'Eine private DNS-Zone' } },
        { id: 'D', text: { en: 'A browser cache reset', de: 'Einen Browser-Cache-Reset' } }
      ],
      correct: ['A'],
      explanation: { en: 'More frequent indexing or push updates is correct because the index must be refreshed more quickly when source content changes often.', de: 'Häufigere Indizierung oder Push-Updates ist richtig, weil der Index schneller aktualisiert werden muss, wenn sich Quellinhalte häufig ändern.' },
      hint: { en: 'The problem is stale content, not model creativity.', de: 'Das Problem sind veraltete Inhalte und nicht Modellkreativität.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-indexer-overview'
    },
    {
      id: 'ai103-197', type: 'scenario',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'medium',
      scenario: { en: 'Trey Research is deploying a laboratory knowledge assistant for internal scientists. Users trust answers more when they can open the exact source passage that supported the response. The current prototype returns plausible answers but offers no traceability back to the indexed content. The team wants the indexing change that best enables citations.', de: 'Trey Research führt einen Wissensassistenten für interne Wissenschaftler ein. Benutzer vertrauen Antworten mehr, wenn sie die genaue Quellpassage öffnen können, die die Antwort stützt. Der aktuelle Prototyp liefert plausible Antworten, bietet aber keine Rückverfolgbarkeit zu den indizierten Inhalten. Das Team möchte die Indexierungsänderung, die Zitate am besten ermöglicht.' },
      question: { en: 'What should Trey Research preserve in the index?', de: 'Was sollte Trey Research im Index erhalten?' },
      options: [
        { id: 'A', text: { en: 'Source URL and chunk metadata', de: 'Quell-URL und Chunk-Metadaten' } },
        { id: 'B', text: { en: 'Only the final answer text', de: 'Nur den finalen Antworttext' } },
        { id: 'C', text: { en: 'Only a screenshot of the PDF', de: 'Nur einen Screenshot des PDFs' } },
        { id: 'D', text: { en: 'Only browser session data', de: 'Nur Browsersitzungsdaten' } }
      ],
      correct: ['A'],
      explanation: { en: 'Source URL and chunk metadata is correct because the assistant needs source identifiers so it can cite supporting evidence back to users.', de: 'Quell-URL und Chunk-Metadaten ist richtig, weil der Assistent Quellkennungen benötigt, damit er Benutzern stützende Belege zitieren kann.' },
      hint: { en: 'Citations require source identifiers.', de: 'Zitate erfordern Quellkennungen.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview'
    },
    {
      id: 'ai103-198', type: 'scenario',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: { en: 'Datum Corporation uses hybrid retrieval for a knowledge assistant. Search returns relevant documents, but the top results for natural-language questions are often poorly ordered. The team wants a better final ordering before passages are sent to the model. Architecture is choosing the search feature that most directly addresses this ranking issue.', de: 'Datum Corporation nutzt hybriden Abruf für einen Wissensassistenten. Die Suche liefert relevante Dokumente, aber die Top-Ergebnisse für natürlichsprachige Fragen sind oft schlecht sortiert. Das Team möchte eine bessere endgültige Reihenfolge, bevor Passagen an das Modell gesendet werden. Die Architektur wählt die Suchfunktion, die dieses Ranking-Problem am direktesten adressiert.' },
      question: { en: 'Which ranking feature should Datum Corporation add?', de: 'Welche Ranking-Funktion sollte Datum Corporation ergänzen?' },
      options: [
        { id: 'A', text: { en: 'Semantic ranker', de: 'Semantischer Ranker' } },
        { id: 'B', text: { en: 'A larger browser cache', de: 'Einen größeren Browser-Cache' } },
        { id: 'C', text: { en: 'A second budget alert', de: 'Eine zweite Budgetwarnung' } },
        { id: 'D', text: { en: 'A local password file', de: 'Eine lokale Kennwortdatei' } }
      ],
      correct: ['A'],
      explanation: { en: 'Semantic ranker is correct because semantic ranking improves ordering for natural-language questions after initial retrieval.', de: 'Semantischer Ranker ist richtig, weil semantisches Ranking die Reihenfolge bei natürlichsprachigen Fragen nach dem ersten Abruf verbessert.' },
      hint: { en: 'Retrieval exists; ranking quality is the gap.', de: 'Der Abruf existiert; die Ranking-Qualität ist die Lücke.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/semantic-search-overview'
    },
    {
      id: 'ai103-199', type: 'scenario',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: { en: 'Northwind Traders recently switched its ingestion pipeline to a newer embeddings model. Indexing now fails because the generated vectors no longer fit the existing search field definition. The data team confirms that the application logic and source documents are unchanged. The remediation must address the schema mismatch directly.', de: 'Northwind Traders hat kürzlich seine Ingestionspipeline auf ein neueres Embeddings-Modell umgestellt. Die Indizierung schlägt nun fehl, weil die erzeugten Vektoren nicht mehr zur vorhandenen Suchfelddefinition passen. Das Datenteam bestätigt, dass Anwendungslogik und Quelldokumente unverändert sind. Die Gegenmaßnahme muss die Schemaabweichung direkt beheben.' },
      question: { en: 'What should Northwind Traders do next?', de: 'Was sollte Northwind Traders als Nächstes tun?' },
      options: [
        { id: 'A', text: { en: 'Recreate the index so the vector fields match the new embedding dimensions', de: 'Den Index neu erstellen, damit die Vektorfelder zu den neuen Embedding-Dimensionen passen' } },
        { id: 'B', text: { en: 'Disable all filters', de: 'Alle Filter deaktivieren' } },
        { id: 'C', text: { en: 'Lower the model temperature', de: 'Die Modelltemperatur senken' } },
        { id: 'D', text: { en: 'Store vectors in a text file', de: 'Vektoren in einer Textdatei speichern' } }
      ],
      correct: ['A'],
      explanation: { en: 'Recreate the index so the vector fields match the new embedding dimensions is correct because the new embeddings no longer fit the existing vector field shape, so the schema must be rebuilt.', de: 'Den Index neu erstellen, damit die Vektorfelder zu den neuen Embedding-Dimensionen passen ist richtig, weil die neuen Embeddings nicht mehr zur vorhandenen Vektorfeldform passen und das Schema daher neu aufgebaut werden muss.' },
      hint: { en: 'The mismatch is structural.', de: 'Die Abweichung ist strukturell.' },
      reference: 'https://learn.microsoft.com/en-us/azure/search/search-howto-reindex'
    },
    {
      id: 'ai103-200', type: 'scenario',
      domain: { en: 'Implement retrieval-augmented generation (RAG)', de: 'Retrieval-Augmented Generation (RAG) implementieren' }, difficulty: 'hard',
      scenario: { en: 'Woodgrove Bank retrieves the correct chunk from long policy documents for most user questions. However, users still miss important neighboring clauses that qualify the policy and change the meaning of the answer. The team wants to preserve precise retrieval while giving the model slightly more surrounding context. Engineering is looking for the retrieval adjustment that best fits this requirement.', de: 'Woodgrove Bank ruft für die meisten Benutzerfragen den richtigen Chunk aus langen Richtliniendokumenten ab. Benutzern entgehen jedoch weiterhin wichtige benachbarte Klauseln, die die Richtlinie qualifizieren und die Bedeutung der Antwort verändern. Das Team möchte präzisen Abruf beibehalten und dem Modell zugleich etwas mehr umgebenden Kontext geben. Das Engineering sucht nach der Retrieval-Anpassung, die diese Anforderung am besten erfüllt.' },
      question: { en: 'What retrieval improvement should Woodgrove Bank apply?', de: 'Welche Retrieval-Verbesserung sollte Woodgrove Bank anwenden?' },
      options: [
        { id: 'A', text: { en: 'Window expansion around the matched chunk', de: 'Fensterausweitung um den Treffer-Chunk' } },
        { id: 'B', text: { en: 'Disable chunking entirely', de: 'Chunking vollständig deaktivieren' } },
        { id: 'C', text: { en: 'Remove all metadata', de: 'Alle Metadaten entfernen' } },
        { id: 'D', text: { en: 'Route requests through the public endpoint', de: 'Anforderungen über den öffentlichen Endpunkt leiten' } }
      ],
      correct: ['A'],
      explanation: { en: 'Window expansion around the matched chunk is correct because the matched chunk should be expanded with neighboring context before answer generation.', de: 'Fensterausweitung um den Treffer-Chunk ist richtig, weil der gefundene Chunk vor der Antwortgenerierung um benachbarten Kontext erweitert werden sollte.' },
      hint: { en: 'The retrieved hit is relevant but too narrow.', de: 'Der abgerufene Treffer ist relevant, aber zu eng.' },
      reference: 'https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-chunking-phase'
    }
  ];
  if (window.ExamData && window.ExamData['ai-103']) {
    window.ExamData['ai-103'].questions = window.ExamData['ai-103'].questions.concat(extra);
  }
})();


