Przejdź do treści

OpenAI Python SDK przez FastFence

Ten klient wysyła czat tekstowy do /v1/chat/completions w FastFence. FastFence stosuje politykę przed wywołaniem skonfigurowanego dostawcy modelu. Token klienta to token agenta FastFence, a nie klucz dostawcy upstream.

Pobierz komplet przykładów do katalogu examples/ swojej instalacji. Polecenia wykonuj z katalogu instalacji; uv run zapewnia Python 3.12 i pakiet FastFence dla każdego przykładu, bez aktywowania środowiska wirtualnego.

Uruchom z Ollama

Wykonaj kroki instalacji: uruchom Ollama, wykonaj uv tool run --python 3.12 [email protected] init --anonymization, a następnie uv tool run --python 3.12 [email protected] serve. Inicjalizacja instaluje Laya i przygotowuje domyślny model Qwen3:4b. Ustaw FASTFENCE_AGENT_TOKEN na wygenerowany token agenta.

uv run --python 3.12 --no-project --with fastfence==1.0.1 --with openai==2.21.0 python examples/openai_client.py 'Hi'

Skrypt wypisuje chronioną odpowiedź modelu. Ustaw FASTFENCE_MODEL, jeśli korzystasz z innego dozwolonego modelu. Ustaw FASTFENCE_URL, jeśli bramka nasłuchuje pod innym adresem; zawsze jest to adres bramki, nigdy adres upstream.

Kompletny klient

"""Use the OpenAI Python SDK against FastFence, with no direct provider bypass."""

import argparse
import os

from openai import APIStatusError, OpenAI


def complete(client: OpenAI, model: str, prompt: str) -> str:
    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": prompt}],
        max_tokens=256,
        temperature=0,
        stream=False,
    )
    return response.choices[0].message.content or ""


def main() -> None:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("prompt", nargs="?", default="Hi")
    args = parser.parse_args()
    with OpenAI(
        base_url=os.getenv("FASTFENCE_URL", "http://127.0.0.1:8000").rstrip("/")
        + "/v1",
        api_key=os.environ["FASTFENCE_AGENT_TOKEN"],
        timeout=90,
        max_retries=0,
    ) as client:
        try:
            print(
                complete(
                    client,
                    os.getenv("FASTFENCE_MODEL", "qwen3:4b"),
                    args.prompt,
                )
            )
        except APIStatusError as error:
            # No automatic retry or fallback to an unprotected provider.
            print(
                f"FastFence returned HTTP {error.status_code}; inspect Activity for the decision."
            )
            raise SystemExit(1) from None


if __name__ == "__main__":
    main()

Pobierz openai_client.py · Zobacz źródło

Sprawdź blokowanie

W Policies dodaj regułę literalną dla wejścia modelu dopasowującą forbidden, przetestuj ją i aktywuj. Następnie wykonaj:

uv run --python 3.12 --no-project --with fastfence==1.0.1 --with openai==2.21.0 python examples/openai_client.py 'forbidden'

Oczekiwany wynik: niezerowy kod zakończenia i odmowa HTTP. Activity pokazuje regułę wejścia oraz upstream_executed: false. Klient wyłącza automatyczne ponawianie i nigdy nie przełącza się na bezpośrednie połączenie z dostawcą.

Użyj innego backendu modelu

Pozostaw klienta bez zmian i zastosuj na bramce konfigurację upstream zgodnego z OpenAI. Klucz dostawcy pozostaje po stronie serwera. Model semantyczny Laya jest konfigurowany osobno.

Obsługiwany zakres: czat tekstowy bez strumieniowania, z temperaturą zero. Ten adapter zgodności nie obsługuje strumieniowania, generowania wywołań narzędzi ani wiadomości multimodalnych. Użyj REST, jeśli odpowiedź ma zawierać pełną decyzję zabezpieczeń.