ktg-plugin-marketplace/plugins/ms-ai-architect/skills/ms-ai-governance/references/responsible-ai/content-safety-implementation.md
Kjell Tore Guttormsen 6a7632146e feat(ms-ai-architect): add plugin to open marketplace (v1.5.0 baseline)
Initial addition of ms-ai-architect plugin to the open-source marketplace.
Private content excluded: orchestrator/ (Linear tooling), docs/utredning/
(client investigation), generated test reports and PDF export script.
skill-gen tooling moved from orchestrator/ to scripts/skill-gen/.

Security scan: WARNING (risk 20/100) — no secrets, no injection found.
False positive fixed: added gitleaks:allow to Python variable reference
in output-validation-grounding-verification.md line 109.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 17:17:17 +02:00

24 KiB
Raw Blame History

Content Safety and Harm Mitigation - Azure Implementation

Last updated: 2026-02 Status: GA Category: Responsible AI & Governance


Introduksjon

Azure AI Content Safety er Microsofts omfattende løsning for å oppdage og mitigere skadelig innhold i AI-drevne applikasjoner. Tjenesten tilbyr både standalone API-er og integrerte content filters som fungerer sammen med Azure OpenAI Service for å beskytte både brukerinndata og AI-genererte utdata.

Løsningen dekker fire kjernekategorier av skadelig innhold (hate, sexual, violence, self-harm) med granulære severity levels (0-6), og tilbyr spesialiserte funksjoner som Prompt Shields (jailbreak detection), Groundedness detection, Protected material detection, og Custom categories. Content Safety Studio gir et visuelt grensesnitt for testing og konfigurering, mens blocklists og custom policies tillater tilpasning til organisasjonens spesifikke behov.

For offentlig sektor er implementering av content safety kritisk ikke bare for å overholde lover som GDPR og AI-forordningen, men også for å opprettholde tillit og sikre at AI-systemer ikke forsterker skjevheter eller produserer upassende innhold i møte med borgere.

Kjernekomponenter

Azure AI Content Safety Features

Feature Formål Input Output Status
Analyze Text API Oppdager hate, sexual, violence, self-harm i tekst Tekst (maks 10K tegn) Severity 0-6 per kategori GA
Analyze Image API Oppdager skadelig innhold i bilder JPEG, PNG, GIF, BMP, TIFF, WEBP (maks 4MB) Severity 0-6 per kategori GA
Prompt Shields Oppdager jailbreak og indirect attacks Tekst (maks 10K tegn) + dokumenter Binær risikoflagg GA
Groundedness Detection Verifiserer at LLM-svar er grunnlagt i kildemateriale Query + grounding sources (maks 55K tegn) Grounded/ungrounded score Preview
Protected Material (Text) Oppdager kjent tekst (sangtekster, artikler) LLM completion (min 110 tegn) Match/no match GA
Protected Material (Code) Oppdager kopiert kode fra public repos LLM-generert kode Match med source citation URL GA
Custom Categories (Standard) Tren ML-modeller på egne kategorier Training data i Azure Blob Custom severity scoring Preview
Custom Categories (Rapid) LLM-basert rask kategorisering Samples + definition Semantic matching Preview
Blocklists Eksakt/semantic matching mot egendefinerte termer Tekst Match/no match GA

Severity Levels (Content Analysis)

Level Beskrivelse Konfigurerbar? Typisk bruk
0 - Safe Generell, journalistisk, vitenskapelig kontekst Nei (kun annotert) Baseline
2 - Low Fordommer, stereotypier, fiksjon (gaming, litteratur) Ja Permissive policies
4 - Medium Fornærmelser, mobbing, glorifisering av skade Ja Standard policies (Azure OpenAI default)
6 - High Eksplisitte instruksjoner på vold, radikalisering, overgrep Ja Strict policies

Merk: Azure OpenAI default content filter blokkerer Medium (4) og High (6) for alle fire kategorier.

Integrasjon med Azure OpenAI Service

Azure OpenAI har innebygd content filtering som kjører automatisk på både prompts og completions:

User Prompt → Content Filter (input) → LLM → Content Filter (output) → Response

Responsatferd ved filtrering:

Scenario HTTP Status finish_reason Beskrivelse
Prompt blokkert 400 N/A error.code = "content_filter"
Completion blokkert (non-streaming) 200 content_filter Ingen tekst returneres
Completion blokkert (streaming) 200 content_filter Strøm stopper, siste chunk har finish_reason
Alle outputs OK 200 stop eller length Normal respons
Filter feilet 200 stop/length content_filter_results.error populated

Custom content filtering policies:

Kan konfigureres i Azure AI Foundry per deployment for å:

  • Justere severity thresholds per kategori (blokkere Low/Medium/High)
  • Aktivere/deaktivere Prompt Shields, Protected Material detection
  • Definere blocklists
  • Sette opp annotate-only mode (logge uten å blokkere)

Arkitekturmønstre

Mønster 1: Standalone Content Safety (Pre-LLM Filtering)

Når: Du bruker non-Azure LLM-er (OpenAI, Anthropic, etc.) eller trenger filtering uavhengig av LLM-integrasjon.

User Input → Azure AI Content Safety API → Severity Check → [BLOCK | ALLOW] → LLM
                                                                              ↓
                                                              Custom Content Safety API ← LLM Output
                                                                              ↓
                                                                      [BLOCK | RETURN]

Fordeler:

  • Fungerer med hvilken som helst LLM-leverandør
  • Full kontroll over filtering logic
  • Kan kombinere flere Content Safety features (Prompt Shields + Analyze Text)

Ulemper:

  • To ekstra API-kall (latency overhead ~100-300ms per kall)
  • Du må håndtere retry logic og error handling selv
  • Koster per API-kall (se prismodell)

Implementering (C#):

var client = new ContentSafetyClient(new Uri(endpoint), new AzureKeyCredential(key));
var request = new AnalyzeTextOptions(userInput);

var response = client.AnalyzeText(request);
foreach (var category in response.Value.CategoriesAnalysis)
{
    if (category.Severity >= 4) // Block Medium og High
    {
        return new ContentFilteredResponse("Input blocked");
    }
}
// Proceed to LLM if all categories < 4

Mønster 2: Azure OpenAI Integrated Filtering (Default)

Når: Du bruker Azure OpenAI Service og ønsker automatic filtering uten ekstra kode.

User Input → Azure OpenAI Service (built-in filter) → LLM → (built-in filter) → Response

Fordeler:

  • Zero-code content safety (aktivert by default)
  • Ingen ekstra latency (innebygd i LLM-call)
  • Konsistent policy enforcement på tvers av deployments

Ulemper:

  • Kun for Azure OpenAI (ikke andre LLM-er)
  • Mindre granulær kontroll (enten blokkere eller ikke)
  • Kan ikke kjøre custom logic mellom filter og LLM

Konfigurasjon (Azure AI Foundry):

Deployments → Select deployment → Content filters → Create custom policy
  ├─ Hate: Block Medium+High
  ├─ Sexual: Block Medium+High
  ├─ Violence: Block High only
  ├─ Self-Harm: Block Medium+High
  ├─ Prompt Shields: Enabled
  └─ Protected Material (Code): Enabled (for Copyright Commitment)

Mønster 3: Hybrid Approach (Layered Defense)

Når: Høy-risiko applikasjoner (offentlig sektor, barn, helsevesen) som krever defense-in-depth.

User Input → Pre-filter (Prompt Shields + Custom Categories) → Azure OpenAI (built-in) → Post-filter (Groundedness) → Response

Fordeler:

  • Maksimal beskyttelse (three layers of defense)
  • Custom categories fanger domene-spesifikke issues før LLM
  • Groundedness sikrer faktisk korrekthet i svar
  • Blocklists gir instant blocking av kjente problematiske termer

Ulemper:

  • Høyere latency (3 ekstra API-kall)
  • Høyere kostnad
  • Kompleks feilhåndtering (hva hvis layer 2 feiler?)

Eksempel use case (NAV chatbot):

1. Pre-filter: Custom blocklist ("trygdesvindel", "uføretrygd svindel") + Prompt Shields
2. Azure OpenAI: Standard filter (Medium+High block)
3. Post-filter: Groundedness detection mot NAV fagdokumenter

Beslutningsveiledning

Velg riktig arkitekturmønster

Kriterium Standalone Azure OpenAI Integrated Hybrid
LLM-leverandør Hvilken som helst Kun Azure OpenAI Kun Azure OpenAI
Risikoprofil Lav-medium Medium Høy
Latency-budsjett +200-600ms OK Minimal overhead +500ms+ OK
Kostnadssensitivitet Medium Lav (inkludert i OpenAI cost) Høy
Custom categories behov Høy Middels Høy
Compliance-krav Medium Medium Høy (NIS2, AI Act)

Vanlige feil og anti-patterns

Anti-pattern Hvorfor det er galt Riktig approach
"Vi blokkerer alt på Low severity" Over-filtering, brukerfrustrering, false positives Start med Medium+High, juster basert på false positive rate
"Vi skrur av content filtering for bedre UX" Regulatorisk risiko, omdømmerisiko Bruk annotate-only mode + human review for edge cases
"Vi håndterer ikke finish_reason=content_filter" Brukeren får tom respons uten forklaring Sjekk finish_reason, vis vennlig feilmelding
"Vi logger ikke filtered prompts/completions" Kan ikke forbedre modellen eller oppdage misbruk Logg metadata (ikke innholdet selv) for analyse
"Vi bruker samme policy for barn og voksne" Upassende innhold for barn Lag separate deployments med stricter policies for barn

Røde flagg (når du MÅ bruke Hybrid approach)

  • Applikasjonen brukes av barn (<18 år)
  • Offentlig-facing tjeneste med høy eksponering (millioner av brukere)
  • Helsevesen/jus/finans (regulated industries)
  • AI-generert innhold publiseres uten human review
  • NIS2/AI Act høyrisiko-klassifisering

Integrasjon med Microsoft-stakken

Azure AI Foundry (tidligere Azure AI Studio)

Guardrails + Controls tab gir:

  • Try it out: Interaktiv testing av tekst/bilde-moderering med justerbare thresholds
  • Custom filters: Opprett deployment-spesifikke policies
  • Monitoring: Latency, block rate, category distribution

Eksempel workflow:

1. AI Foundry → Guardrails + Controls → Try it out
2. Test sample prompts mot ditt bruksområde (f.eks. kundeservice)
3. Juster thresholds til du får <2% false positive rate
4. Create custom policy → Apply to deployment
5. Monitor → Track block rate over tid

Copilot Studio

Content moderation for Copilot agents:

  • Automatisk integrert med Azure OpenAI content filters
  • Kan aktivere custom blocklists i Agent Settings
  • Overvåk i Analytics → Safety metrics

Begrensning: Kan ikke (per feb 2026) konfigurere severity levels per kategori i Copilot Studio — bruker Azure OpenAI deployment settings.

Power Platform (AI Builder, Power Automate)

AI Builder Text generation:

  • Bruker Azure OpenAI under the hood → content filtering aktivert by default
  • Ingen konfigurasjonsmuligheter (uses default Medium+High block)

Custom Connector til Azure AI Content Safety:

Power Automate → Custom Connector (REST API) → Content Safety Analyze Text
  ↓
Parse JSON → Condition (check severity) → [Approve | Reject]

Use case: Pre-moderation av user-generated content før lagring i Dataverse.

Microsoft 365 Copilot

Built-in filtering:

  • Microsoft 365 Copilot har egne content filtering policies (ikke konfigurerbare av customer)
  • Filtrer både prompts og responses for enterprise-wide safety
  • Compliance-aligned med Microsoft 365 data residency

Ingen customer-kontroll: Du kan ikke justere severity levels for M365 Copilot (managed by Microsoft).

Offentlig sektor (Norge)

GDPR og personvern

PII Detection: Azure AI Content Safety har PII-detection for completions:

  • Oppdager navn, adresser, fødselsnummer (norsk format støttes ikke offisielt)
  • Kan konfigureres til å blokkere eller maskere PII i LLM-output

Data residency:

  • Content Safety tilgjengelig i West Europe og Norway East (via Azure OpenAI)
  • Ingen prompts/completions lagres for training (GDPR Article 5)
  • Blocklist-data lagres i samme region som ressursen (encrypted at rest)

Schrems II-implikasjoner:

  • Content Safety-modellene kjører i EU (ikke data transfer til USA)
  • Customer-managed keys (CMK/BYOK) støttes for blocklist-data

AI-forordningen (EU AI Act)

Høyrisiko-systemer (Annex III: offentlige tjenester, rettshåndhevelse) krever:

AI Act-krav Content Safety-implementering
Risk management system Deploy Hybrid approach (layered defense)
Data governance Logg all content filtering activity (Azure Monitor)
Transparency Informer brukere om automated moderation + appeal process
Human oversight Annotate-only mode + human review for High severity blocks
Accuracy/robustness Monitor false positive rate (mål: <5%), adjust thresholds
Record-keeping Retain logs i 6+ år (Azure Log Analytics long-term retention)

Transparency Note: Microsoft publiserer Transparency Note for Azure AI Content Safety som dekker:

  • System capabilities and limitations
  • Training data og known biases
  • Best practices for deployment

Forvaltningsloven og klagerett

Når Content Safety brukes i vedtakssystemer (NAV, skatteetaten):

  1. Forhåndsvarsel: Informer bruker om at innhold kan bli moderert automatisk
  2. Begrunnelse: Hvis blocking skjer, forklar hvorfor ("Innholdet ble blokkert pga. upassende språk")
  3. Klagerett: Tilby manuell review (send til saksbehandler)
  4. Dokumentasjon: Logg original input + severity scores + final decision i sakssystem

Eksempel (fiktivt NAV chatbot-vedtak):

User prompt: "Hvorfor får jeg ikke uføretrygd? Dette er diskriminering!"
  → Hate severity: 2 (Low) - ALLOWED
  → Response genereres
  → Groundedness check: PASSED
  → Response returneres til bruker

Men hvis:

User prompt: "Dere er rasister som diskriminerer mot [etnisk gruppe]!"
  → Hate severity: 4 (Medium) - BLOCKED
  → User ser: "Vi kunne ikke behandle din henvendelse. Vennligst omformuler eller kontakt vår kundeservice."
  → Saksbehandler notifiseres for manuell oppfølging

Datasuverenitet og Nasjonal sikkerhetsmyndighet (NSM)

NSM Grunnprinsipper for IKT-sikkerhet:

  • Logging: Aktiver Azure Monitor for Content Safety (logg alle API-kall, severity scores)
  • Kryptering: CMK (Customer-Managed Keys) for blocklist-data
  • Tilgangskontroll: Bruk Managed Identity (ikke API keys) + RBAC (Cognitive Services User role)
  • Incident response: Sett opp alerts for unormal block rate (f.eks. plutselig spike = attack?)

Sikkerhetsgradert informasjon: Hvis applikasjonen håndterer Begrenset/Konfidensielt:

  • Deploy Content Safety i Norway East (norsk dataregion)
  • Ikke bruk Content Safety Studio (data sendes til portal, potensiell lekkasje)
  • Bruk private endpoints (VNet integration)

Kostnad og lisensiering

Prismodell (Azure AI Content Safety Standalone)

Februar 2026 priser (estimat basert på USD/NOK 10.5):

Tier RPS/RP10S Limit Pris per 1000 transaksjoner (NOK) Egnet for
F0 (Free) 5 RPS NOK 0 (gratis) Proof-of-concept, dev/test
S0 (Standard) 1000 RP10S ~NOK 10.5 (Analyze Text/Image) Produksjon
~NOK 10.5 (Prompt Shields)
~NOK 26 (Groundedness - 50 RPS limit) Høy-verdi scenarios
Varierer (Custom categories) Training cost + inference

Azure OpenAI Integrated Filtering:

  • Inkludert gratis i Azure OpenAI token pricing (ingen separate Content Safety costs)
  • Men: Kan ikke bruke standalone features som Custom Categories eller Groundedness

Eksempel TCO-beregning (NAV chatbot):

Scenario: 1 million samtaler/måned, gjennomsnitt 2 meldinger per samtale = 2M transaksjoner/måned

Approach API-kall/måned Kostnad/måned (NOK)
Azure OpenAI Integrated 0 (innebygd) NOK 0 (inkludert i token cost)
Standalone (Analyze Text only) 2M (input only) 2M / 1000 × 10.5 = NOK 21,000
Hybrid (Pre + Post filter) 4M (input + output) 4M / 1000 × 10.5 = NOK 42,000
Hybrid + Groundedness 4M + 2M groundedness 42K + (2M / 1000 × 26) = NOK 94,000

Optimaliseringstips:

  1. Bruk Azure OpenAI integrated filtering som baseline (gratis)
  2. Legg til Prompt Shields pre-filter kun for high-risk prompts (klassifiser først: hvis user input inneholder "ignore previous instructions" → kjør Prompt Shields)
  3. Groundedness kun på final output (ikke på hver streaming chunk)
  4. Cache blocklist matching client-side (unngå API-kall for åpenbart OK-innhold)

Lisensiering (Azure OpenAI)

Azure OpenAI content filtering krever:

  • Azure subscription (Pay-As-You-Go eller Enterprise Agreement)
  • Azure OpenAI resource (申请 access via Azure OpenAI access form)

Ingen ekstra lisenser for content filtering (inkludert i Azure OpenAI Service).

Microsoft 365 Copilot:

  • Content filtering inkludert i Copilot for M365-lisens (E3/E5)
  • Ingen konfigurasjonsmuligheter (Microsoft-managed)

For arkitekten (Cosmo)

Spørsmål å stille kunden

  1. Scope og risiko:

    • Hvilken brukergruppe vil interagere med AI-systemet? (barn, sårbare grupper, generell befolkning)
    • Hva er konsekvensen hvis upassende innhold slipps gjennom? (omdømme, juridisk, psykologisk skade)
    • Er dette en høyrisiko-applikasjon under EU AI Act? (vedtakssystemer, helsevesen, rettshåndhevelse)
  2. Teknisk kontekst:

    • Bruker dere Azure OpenAI eller andre LLM-leverandører?
    • Hva er akseptabelt latency-budsjett? (kritisk for real-time chat vs. batch processing)
    • Har dere eksisterende moderasjonspolicies eller compliance-krav vi må kartlegge?
  3. Customization-behov:

    • Er det domene-spesifikke termer eller konsepter som default kategorier ikke dekker? (medisinsk terminologi, norske dialekter, etc.)
    • Trenger dere ulike severity policies for ulike brukergrupper? (barn vs. voksne, intern vs. ekstern)
    • Skal AI-generert innhold publiseres direkte, eller er det human-in-the-loop review?
  4. Compliance og datasuverenitet:

    • Hvor skal data lagres? (Norge, EU, globalt)
    • Hvilke compliance-rammeverk må dere følge? (GDPR, AI Act, NIS2, Forvaltningsloven)
    • Har dere CMK (Customer-Managed Keys) krav?
  5. Monitoring og kontinuerlig forbedring:

    • Hvordan vil dere måle success? (false positive rate, user complaints, etc.)
    • Hvem har ansvar for å reviewe filtered content og justere policies?
    • Hva er prosessen for klager fra brukere? (appeal process)

Fallgruver å unngå

  1. One-size-fits-all policies:

    • Ikke bruk samme severity threshold for alle bruksområder (chatbot for barn ≠ interne kunnskapsbase for voksne)
    • Lag separate deployments med ulike content filtering policies
  2. Ingen testing av edge cases:

    • Default kategorier kan ha kulturelle skjevheter (trainert primært på engelsk)
    • Test med norske eksempler, dialekter, særnorske uttrykk
    • Eksempel: "Helvete!" = vanlig uttrykk i Norge, men kan flagges som høy severity
  3. Ignorering av false positives:

    • Over-filtering ødelegger UX (brukere gir opp hvis legitime spørsmål blokkeres)
    • Monitorér block rate: hvis >5% av prompts blokkeres, vurder å øke threshold
  4. Mangel på transparency:

    • Brukere må informeres om at moderering skjer (GDPR Article 13 + AI Act transparency-krav)
    • Gi konkret feedback: "Your message was blocked due to inappropriate language" (ikke bare "Error 400")
  5. Compliance-naivitet:

    • Mange forventer at Content Safety automatisk gjør dem GDPR-compliant (NEI!)
    • Du må fortsatt:
      • Ha data processing agreement (DPA) med Microsoft
      • Dokumentere data flows i DPIA (Data Protection Impact Assessment)
      • Implementere klagerett og manuell review

Anbefalinger per modenhetsnivå

Nivå 1: Proof-of-Concept (1-3 måneder)

  • Arkitektur: Azure OpenAI Integrated filtering (default settings)
  • Konfigurasjon: Bruk default Medium+High blocking for alle 4 kategorier
  • Monitoring: Manuell testing i Content Safety Studio
  • Kostnad: Free tier (F0) eller inkludert i Azure OpenAI cost
  • Output: Validering av at default filtering passer use case

Nivå 2: Pilot (3-6 måneder)

  • Arkitektur: Azure OpenAI Integrated + Prompt Shields
  • Konfigurasjon: Custom content filtering policy per deployment (juster thresholds basert på pilot feedback)
  • Monitoring: Azure Monitor Logs (logg alle content_filter events)
  • Kostnad: S0 tier for Prompt Shields (~NOK 10,000-50,000/måned for pilot)
  • Output: False positive rate <5%, documented user feedback

Nivå 3: Produksjon (6-12 måneder)

  • Arkitektur: Hybrid (Pre-filter Prompt Shields + Custom Categories + Azure OpenAI + Post-filter Groundedness)
  • Konfigurasjon: Multiple custom policies (per user segment: children, adults, admins)
  • Monitoring: Dashboards i Azure AI Foundry, alerting på anomalous block rates
  • Kostnad: S0 tier, budsjettér ~NOK 50,000-200,000/måned for 1M+ transaksjoner
  • Output: AI Act compliance documentation, DPIA, incident response playbook

Nivå 4: Enterprise-Scale (12+ måneder)

  • Arkitektur: Samme som Nivå 3 + private endpoints, CMK, multi-region failover
  • Konfigurasjon: Automated policy tuning basert på ML over blocked content patterns
  • Monitoring: Integrated med SIEM (Sentinel), automated incident response
  • Kostnad: Enterprise Agreement pricing, ~NOK 200,000-1M+/måned
  • Output: NIS2 compliance, continuous model retraining, A/B testing av policies

Kilder og verifisering

Verified (fra Microsoft Learn MCP-research, februar 2026):

  1. What is Azure AI Content Safety? Confidence: High — Oversikt over features, pricing tiers, region availability, service limits

  2. Content filtering overview (Azure OpenAI) Confidence: High — Filter categories, severity levels, scenario details for API response behavior

  3. Harm categories in Azure AI Content Safety Confidence: High — Detaljert beskrivelse av severity levels 0-7 per kategori (hate, sexual, violence, self-harm)

  4. Data, privacy, and security for Azure AI Content Safety Confidence: High — Data residency, encryption at rest, customer controls, GDPR compliance statements

  5. Custom categories (preview) Confidence: Medium — Preview feature, API-detaljer kan endre seg før GA

  6. Transparency note: Azure AI Content Safety Confidence: High — System capabilities, intended uses, limitations, best practices

  7. Default Guidelines & controls policies (Azure OpenAI) Confidence: High — Default severity thresholds for text/image models, table of blocked categories

  8. Azure AI Content Safety Quickstart (C# code samples) Confidence: High — Code examples for AnalyzeText, AnalyzeImage, Blocklist APIs

  9. Mitigate false results in Azure AI Content Safety Confidence: High — Best practices for severity tuning, custom categories, blocklists

  10. Content Safety in the Microsoft Foundry portal Confidence: High — Beskrivelse av Content Safety Studio features, Try it out workflow

Baseline (modellkunnskap, ikke verifisert mot ferske kilder):

  • GDPR Article 5 (data minimization), Article 13 (transparency obligations)
  • EU AI Act Annex III (high-risk systems classification)
  • NSM Grunnprinsipper for IKT-sikkerhet (norsk kontekst)
  • Forvaltningsloven §§ om begrunnelse og klagerett (norsk kontekst)
  • Schrems II-implikasjoner for EU-US data transfers

Merk: Prisestimat (NOK) er basert på offisielle USD-priser konvertert med kurs 10.5 (februar 2026). Faktisk pris kan variere.