Zum Hauptinhalt springen

Benutzerdefinierte Provider

Mit benutzerdefinierten Providern (BYOK – Bring Your Own Key) können Sie mit eigenen API-Schlüsseln OpenAI-kompatible API-Endpunkte anbinden. Lokale Provider wie Ollama werden ebenfalls unterstützt.

ProviderConfig

Die Klasse ProviderConfig hat folgende Eigenschaften.

Grundlegende Verwendung

Wenn Sie einen benutzerdefinierten Provider verwenden, ist der Parameter model erforderlich.
Die Angabe im Array-Format ist ebenfalls möglich.

Ollama (lokaler Provider)

Für lokale Provider wie Ollama ist apiKey nicht erforderlich.

Azure OpenAI

Beachten Sie bei der Verwendung von Azure OpenAI Folgendes.
  • Für type muss zwingend azure angegeben werden (nicht openai)
  • In baseUrl nur den Host angeben (keine Pfade wie /openai/v1 mitgeben)

Azure Managed Identity

Verwenden Sie bearerTokenProvider, wenn Ihr Provider kurzlebige Tokens verwendet, etwa bei Azure Managed Identity. Die Runtime ruft den Callback bei jeder Provider-Anfrage auf. Der Callback erhält ein Array mit providerName und sessionId und muss das Bearer-Token als String zurückgeben. Das folgende Beispiel ruft einen Token-Service Ihrer Anwendung auf.
Abruf, Caching und Aktualisierung des Tokens erledigen Sie innerhalb Ihres Callbacks.

API-Schlüssel-Befehl

Wenn Sie rotierende API-Schlüssel verwenden, können Sie mit apiKeyCommand vor jeder Provider-Anfrage einen Befehl ausführen, der den aktuellen Schlüssel abruft. Der Befehl wird von der Copilot-Runtime ausgeführt, nicht von diesem Paket.
  • apiKeyCommand muss null oder ein nicht leerer String sein. Bei einem leeren String oder einem String nur aus Leerzeichen wird vor dem Senden der Anfrage eine InvalidArgumentException ausgelöst. Auch wenn Sie im Array-Format einen Nicht-String angeben, wird eine InvalidArgumentException ausgelöst. Übergeben Sie dem ProviderConfig-Konstruktor einen Nicht-String, löst die PHP-Typprüfung einen TypeError aus. Die Ausnahmemeldung enthält den Befehl nicht.
  • Ein Fehlschlagen des Befehls wird von der Runtime als fehlgeschlagener Turn behandelt, und es wird keine Anfrage an das Modell gesendet.
  • Wenn bearerTokenProvider angegeben ist, hat dieser Vorrang, und apiKeyCommand wird nicht ausgeführt.
  • Behandeln Sie den Befehls-String wie Zugangsdaten als vertraulich und geben Sie ihn nicht in Logs oder Ausnahmemeldungen aus. Auch dieses Paket protokolliert weder den Befehl noch dessen Ausgabe.
  • apiKeyCommand ist nur in ProviderConfig verfügbar (in NamedProviderConfig nicht unterstützt).

Wichtige Hinweise

Bei Verwendung eines benutzerdefinierten Providers ist der Parameter model erforderlich. Ohne Angabe kommt es zu einem Fehler.
  • Verwenden Sie bei Azure-Endpunkten (*.openai.azure.com) unbedingt type: 'azure'
  • Geben Sie in baseUrl nur den Host an; die Pfadbildung übernimmt das SDK automatisch

onListModels-Handler

Wenn Sie im BYOK-Modus einen benutzerdefinierten Provider einsetzen, können Sie client->listModels() so konfigurieren, dass statt des CLI-Servers ein benutzerdefinierter Handler aufgerufen wird. Konfigurieren Sie ihn mit der Methode listModelsUsing(). Da der Client leicht initialisiert wird, setzen Sie listModelsUsing() stets vor listModels().
Bei Übergabe von null wird der Handler aufgehoben, und das Standardverhalten des CLI-Servers wird wiederhergestellt.
Wenn listModelsUsing() konfiguriert ist, benötigt listModels() keine Verbindung zum CLI-Server und verwendet auch keinen Cache.
Aktuelle Informationen finden Sie im GitHub-Repository.
Zuletzt geändert am 26. Oktober 2026