Håndhæv et minimumsniveau for suverænitet
En trinvis opsætning til regulerede arbejdsopgaver — Reach-policy for arbejdsområdet, en dedikeret router, test der beviser afvisning, og forespørgselsloggen som dokumentation.
Kravet lyder typisk: inferens for denne arbejdsopgave må ikke være underlagt udlevering til tredjelande, og du skal kunne dokumentere det per forespørgsel. Det er to opgaver: stop trafikken, og bevis derefter, at den stoppede.\n\n## Lagene\n\n| Lag | Hvor | Gælder for |\n| --- | --- | --- |\n| Minimumsniveau for arbejdsområdet, region, ZDR, ingen træning | Dit arbejdsområde → Styr → Nøglepolicyer → Reach | Enhver forespørgsel, ruteret eller fastgjort |\n| Blokerede leverandørlande | Dit arbejdsområde → Forbind → Routere (indstillinger for standardrouter) | Arbejdsområdet |\n| Blokerede inferensleverandører | Dit arbejdsområde → Styr → Nøglepolicyer → Reach | Enhver forespørgsel på ethvert API; en fastgjort eller navngiven forespørgsel afvises med provider_blocked |\n| Minimumsniveau for router, region, ZDR, ingen træning, tilladte modeller | Dit arbejdsområde → Forbind → Routere → en navngiven router | Forespørgsler til den router |\n| X-Stav-Sovereignty-Level + forespørgselslog | Svar, Dit arbejdsområde → Overvåg → Forespørgselslog | Enhver forespørgsel |\n\nIndstillinger kan kun strammes. En router kan aldrig løsne reglerne for arbejdsområdet.\n\n## Trin 1 — Vælg niveauet\n\n| Krav | Minimumsniveau |\n| --- | --- |\n| Inferens på EU/EØS-jord | L1 |\n| Plus certificeret EU/EØS-drift | L2 |\n| Ingen tredjelandsstyring af operatøren | L3 |\n| Fuld suverænitet | L4 |\n\nDe fleste regulerede opgaver lander på L3. Se Suverænitet. Tjek Dit arbejdsområde → Forbind → Inferensleverandører for at se, hvad der er tilgængeligt på det niveau, før du forpligter dig til det i en kontrakt.\n\n## Trin 2 — Fastlæg arbejdsområdets grænse\n\nUnder Dit arbejdsområde → Styr → Nøglepolicyer → Reach:\n\n- Suverænitetsniveau: dit niveau.\n- Beregningsregion: Kun EU, eller EU + EØS, hvis inferens skal køre der.\n- Kun ingen dataopbevaring: slået til, hvis leverandøren intet må gemme. Dette begrænser kandidatgruppen til endepunkter med bekræftet ZDR.\n- Ingen træning på dine data: lad den være slået til (standard).\n- Blokerede inferensleverandører: tilføj enhver virksomhed, der aldrig må betjene dig. Ruterede forespørgsler går udenom; en fastgjort forespørgsel afvises.\n\nUnder Dit arbejdsområde → Forbind → Routere, i indstillingerne for standardrouteren, tilføjer du de lande, du ikke kan acceptere, under Blokerede leverandørlande.\n\nDette gælder også for fastgjorte modeller. En fastgjort model uden et endepunkt på det valgte niveau får fejlkoden 403 model_below_sovereignty_floor.\n\n## Trin 3 — Giv opgaven sin egen router
Opret en router i Dit arbejdsområde → Forbind → Routere:
- Bundniveau, region, ZDR, ingen træning: samme eller strengere end arbejdsområdet.
- Tilladte modeller: de få, du har kvalificeret.
Kald den via adresse:
resp = client.chat.completions.create(
model="@acme/regulated",
messages=[{"role": "user", "content": case_text}],
)
Ændring af de kvalificerede modeller er nu en ændring i dit arbejdsområde, ikke en release.
Trin 4 — Test begge retninger
Positiv — niveauet er som forventet:
raw = client.chat.completions.with_raw_response.create(
model="@acme/regulated",
messages=[{"role": "user", "content": "ping"}],
)
assert raw.headers.get("X-Stav-Sovereignty-Level") in ("L3", "L4")
Negativ — reglerne afviser. På en testrouter sættes bundniveauet til L4 med en liste over tilladte modeller, som intet på L4 opfylder:
import openai
try:
client.chat.completions.create(
model="@acme/floor-test",
messages=[{"role": "user", "content": "ping"}],
)
raise AssertionError("forventede at bundniveauet ville afvise")
except openai.NotFoundError as e:
assert e.body["error"]["code"] == "no_eligible_models"
En blokeret leverandør afviser på samme måde. Fastgør et endepunkt på den:
try:
client.chat.completions.create(
model="mistral/mistral-large/azure", # et endepunkt hos en leverandør, du har blokeret
messages=[{"role": "user", "content": "ping"}],
)
raise AssertionError("forventede at leverandørblokeringen ville afvise")
except openai.PermissionDeniedError as e:
assert e.body["error"]["code"] == "provider_blocked"
Hold den positive assertion i din produktionskode. Policy læses bag en kort cache. Hvis denne læsning svigter, afviser Stav forespørgslen med 503 policy_unavailable. Kravene til bundniveau, region og ZDR bliver aldrig fjernet for at lade en forespørgsel slippe igennem (forespørgslen stopper i stedet for at lukke igennem). Headeren er beviset per forespørgsel. Behandl en manglende header, L0 eller UNCLASSIFIED som en fejl.## Trin 5 — Fremlæg dokumentationen
Hver række i forespørgselsloggen i Dit arbejdsområde → Overvåg → Forespørgselslog registrerer model, inferensleverandør, suverænitetsniveau, beregningsland og -region, fakta om ZDR og træning, tokens og forbrug. Fakta stemples, når forespørgslen kører, så senere rettelser i kataloget ikke omskriver historikken. Afvisninger logges også med angivelse af reglen, f.eks. Blocked by workspace policy: sovereignty floor L3.
Brug én API-nøgle per opgave, så filtrering efter nøgle filtrerer efter opgave.
Begrænsninger
- Ikke en databehandleraftale (DPA). Region, ZDR og træning er leverandørens egne udsagn med en kilde i arkivet. Behold din egen databehandleraftale og liste over underdatabehandlere.
- Et ukendt faktum holder et endepunkt ude. Et endepunkt, hvis fakta ikke er kildebelagte, bruges ikke, så færre modeller kan kvalificere sig. Hvis en model mangler, så tjek dens endepunkter på modelsiden.
- Niveauer er Stavs daterede vurdering, ikke en myndighedsgodkendelse.