Postaw Sluis przed swoimi wywołaniami modeli.
Sluis to proxy zgodne z OpenAI. Zmień jedną linijkę, swoje base_url, a każde żądanie zaczyna płynąć przez Twoją politykę rezydencji do rejestru odpornego na manipulacje. Żadnego SDK do nauki, żadnych payloadów do przepisywania. Pięć kroków poniżej; pełna referencja znajduje się w pasku bocznym.
Czas do pierwszego zapieczętowanego wywołania: ~2 minuty. Jeśli Twój kod już rozmawia z OpenAI, zachowujesz swojego klienta, swoje modele i format wiadomości dokładnie takimi, jakie są.
Zdobądź klucz
Utwórz klucz w Konsoli, w sekcji API keys. Każdy klucz niesie politykę rezydencji i budżet, więc możesz przypisać eu-only wszystkiemu, co osobowe, a eu-uk-us ogólnemu redagowaniu, bez zmiany ani linijki kodu.
# keep it in your environment, never in source export SLUIS_KEY="sk_live_a91c…"
Wskaż base_url na Sluis
Podmień host. Wszystko dalej (modele, streaming, narzędzia, function calling) działa bez zmian, bo Sluis proxuje tę samą powierzchnię API.
from openai import OpenAI client = OpenAI( base_url="https://api.sluis.ai/v1", api_key=os.environ["SLUIS_KEY"], )
import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.sluis.ai/v1", apiKey: process.env.SLUIS_KEY, });
// no SDK required — reqwest = { version = "0.12", features = ["json"] } let client = reqwest::Client::new(); let base = "https://api.sluis.ai/v1"; // ← the only change let key = std::env::var("SLUIS_KEY")?;
curl https://api.sluis.ai/v1/chat/completions \ -H "Authorization: Bearer $SLUIS_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "mistral/mistral-large-latest", "messages": [...] }'
Wyślij żądanie
Wywołaj dokładnie tak, jak wywołujesz dostawcę. Sluis sprawdza żądanie, routuje je przez Twoją politykę, pieczętuje w łańcuchu audytu i zwraca odpowiedź modelu bez zmian. Wywołania aliasu sluis/* ujawniają konkretną trasę w nagłówkach odpowiedzi x-sluis.
# Anthropic Claude, served from Google's EU multi-region resp = client.chat.completions.create( model="vertex/claude-opus-4-8", messages=[{"role": "user", "content": "Summarise this chart…"}], ) print(resp.choices[0].message.content)
// Anthropic Claude, served from Google's EU multi-region const resp = await client.chat.completions.create({ model: "vertex/claude-opus-4-8", messages: [{ role: "user", content: "Summarise this chart…" }], }); console.log(resp.choices[0].message.content);
// Anthropic Claude, served from Google's EU multi-region let resp: serde_json::Value = client .post(format!("{base}/chat/completions")) .bearer_auth(&key) .json(&serde_json::json!({ "model": "vertex/claude-opus-4-8", "messages": [{ "role": "user", "content": "Summarise this chart…" }] })) .send().await? .json().await?; println!("{}", resp["choices"][0]["message"]["content"]);
# response headers on a sluis/* alias call { "x-sluis-route": "sluis/auto", "x-sluis-model": "vertex/claude-opus-4-8" }
Ustaw rezydencję
Rezydencja to polityka organizacji, ustawiana w Konsoli (Polityki → Rezydencja) i egzekwowana przy wysyłce każdego żądania. Domyślnie dozwolona jest wyłącznie jurysdykcja UE: żądanie, które trafiłoby do dostawcy spoza dozwolonego zbioru, jest odrzucane z 451, zanim wyjdzie choć jeden bajt, czy to PHI w procesie objętym HIPAA, czy szczególne kategorie danych w rozumieniu RODO.
# default policy is EU-only — a US provider is refused at dispatch curl https://api.sluis.ai/v1/chat/completions \ -H "Authorization: Bearer $SLUIS_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-5.6", "messages": [...] }' # → 451 permission_error # "blocked by residency policy: provider jurisdiction US is not in the allowed set [EU]"
Rozszerzenie tego, dokąd mogą trafiać dane, jest zawsze jawną, odnotowaną decyzją: Konsola wymaga potwierdzenia warunków transferu przed odblokowaniem dostawców z USA lub Chin, a zmiana trafia do dziennika audytu.
Chcesz całkowicie odseparować dane osobowe od modelu, by używać dowolnego modelu bez ujawnienia ani jednego nazwiska, numeru czy sekretu? Włącz Zasady → Ochrona danych: Sluis zastępuje wykryte PII i sekrety stabilnymi typizowanymi tokenami (np. «EMAIL_1»), przekazuje do dostawcy wyłącznie tokeny, a w odpowiedzi przywraca oryginalne wartości. Mapowanie nie jest nigdy utrwalane. To właśnie sprawia, że wywołanie dowolnego modelu zewnętrznego dostawcy jest bezpieczne. Pełną bibliotekę detektorów oraz wykrywanie nazwisk opisano w Referencji ochrony danych poniżej.
Zweryfikuj pieczęć
Każde wywołanie dopisuje wpis do łańcucha hashy. Pobierz łańcuch i zweryfikuj go ponownie offline, hash każdego wpisu to sha256(prev_hash + record), więc każde zmienione pole łamie wszystkie kolejne ogniwa.
curl https://api.sluis.ai/v1/audit/export?from=genesis \ -H "Authorization: Bearer $SLUIS_KEY" | sluis verify - # → 18,442 entries · chain intact · head #4f9c2a ✓