Gå til innhold

ADR-008: Bytt Google AI Studio API til Vertex AI⚓︎

[!WARNING] Erstattet av ADR-018. Vertex AI-byttet ble aldri gjennomført; Kai bruker Azure AI Foundry. ADR-018 dokumenterer faktisk databehandling.

Kontekst⚓︎

Kai bruker i dag Google_GenerativeAI.Microsoft-pakken for å snakke med Gemini-modeller via Google AI Studio API, autentisert med API-nøkkel (googleGenAiApiKey). Google AI Studio gir ingen garantier for at databehandling skjer innenfor EU.

Kai prosesserer saksdokumenter fra Enova — et statlig foretak — som kan inneholde personopplysninger. Flere EU-regelverk setter absolutte krav til at slik databehandling skjer innenfor EØS/EU:

  • GDPR (forordning (EU) 2016/679): Alle som behandler personopplysninger er pålagt å håndtere disse sikkert. Overføring til tredjeland (utenfor EØS) krever særskilt rettsgrunnlag. Google AI Studio gir ingen geografisk garanti.
  • Data Governance Act (forordning (EU) 2022/868): Etablerer rammeverk for trygg deling av beskyttede data fra offentlige institusjoner. Krever at data ikke behandles utenfor avtalte grenser.
  • AI-forordningen / Artificial Intelligence Act (AIA): Risikobasert regulering av AI-systemer. Systemer som brukes i offentlig forvaltning og saksbehandling kan falle inn under høyrisiko-kategorier med krav til sporbarhet og geografisk kontroll over databehandlingen.
  • Data Act (forordning (EU) 2023/2854): Stiller krav om at databehandlingsarrangementer er rettferdige og klare, og at data ikke låses hos én leverandør uten geografisk garanti.

Nøkkeldrivere⚓︎

  • GDPR-compliance: Personopplysninger i saksdokumenter må behandles innenfor EØS
  • Offentlig sektor-krav: Enova er underlagt DGA og øvrig EU-regelverk for offentlig databehandling
  • AI-forordningen: Saksbehandlingsstøtte kan klassifiseres som høyrisiko-AI — geografisk kontroll over databehandlingen er nødvendig for sporbarhet
  • Risikominimering: API-nøkkel-basert autentisering mot ekstern tjeneste uten geografisk garanti er ikke akseptabelt

Beslutning⚓︎

Vi bytter fra Google AI Studio (Google_GenerativeAI.Microsoft) til Vertex AI via Google Cloud Vertex AI Extensions for .NET. Autentisering skjer via GCP Service Account / Workload Identity Federation — ikke API-nøkkel. EU-region konfigureres ved infrastrukturoppsett (f.eks. europe-west4 eller europe-west1).

Modellvalg (Gemini 2.5 Pro / Flash) beholdes uendret.

Alternativ vurdert⚓︎

Beholde Google AI Studio: Forkastet fordi tjenesten ikke gir garanti for EU-databehandling og dermed ikke oppfyller GDPR-kravene.

Konsekvenser⚓︎

Positive⚓︎

  • Databehandling skjer innenfor EU — GDPR-krav oppfylt
  • Workload Identity Federation er sikrere enn langtlevende API-nøkler
  • Vertex AI gir samme Gemini-modeller med samme API-overflate via IChatClient

Avveininger⚓︎

  • GCP-prosjekt og Service Account / Workload Identity Federation må etableres (ny infrastruktur)
  • Lokalt utviklingsmiljø må konfigureres med GCP Application Default Credentials (gcloud auth application-default login)

Implementasjonsplan⚓︎

Berørte filer⚓︎

Fil Endring
src/Enova.Agent.Kai/Enova.Agent.Kai.csproj Erstatt Google_GenerativeAI.Microsoft med Vertex AI-pakken
src/Enova.Agent.Websak.Console/Enova.Agent.Websak.Console.csproj Samme pakkeutbytte
src/Enova.Agent.Websak.Gemini.Console/Enova.Agent.Websak.Gemini.Console.csproj Samme pakkeutbytte
tests/Enova.Agent.Websak.Tests/Enova.Agent.Websak.Tests.csproj Erstatt Microsoft.SemanticKernel.Connectors.Google
src/Enova.Agent.Kai.Abstractions/Settings/GoogleGenAISettings.cs Erstatt med Vertex AI-innstillinger (prosjekt-ID, region)
src/Enova.Agent.Kai/ServiceConfiguration.cs Erstatt GenerativeAIChatClient-registrering med Vertex AI-klient
src/Enova.Agent.Websak.Console/Program.cs Erstatt GenerativeAIChatClient med Vertex AI-klient
src/Enova.Agent.Websak.Gemini.Console/Program.cs Erstatt GenerativeAIChatClient med Vertex AI-klient
tests/Enova.Agent.Websak.Tests/GoogleGeminiTests.cs Fjern Key Vault-oppslag for googleGenAiApiKey, bruk Application Default Credentials

Mønster å følge⚓︎

  • IChatClient-grensesnittet beholdes — kun implementasjonen under byttes
  • Autentisering via GoogleCredential / Application Default Credentials, ikke hardkodede nøkler
  • Innstillinger via options-mønsteret (erstatt GoogleGenAISettings med ny klasse, f.eks. VertexAISettings med ProjectId og Region)
  • appsettings.json og Key Vault-hemmeligheter: fjern googleGenAiApiKey, legg til VertexAISettings:ProjectId og VertexAISettings:Region

Verifisering⚓︎

  • [ ] Ingen referanser til googleGenAiApiKey i konfigurasjons- eller kodefilene
  • [ ] Ingen referanser til Google_GenerativeAI.Microsoft-pakken i .csproj-filer
  • [ ] Alle IChatClient-registreringer bruker Vertex AI-klienten
  • [ ] Applikasjonen starter uten feil med Application Default Credentials lokalt
  • [ ] Tester i GoogleGeminiTests.cs kjører uten API-nøkkel
  • [ ] Vertex AI-kallet treffer en EU-region (verifiserbart i GCP-logging)

Lenker⚓︎