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.
EigenschaftTypBeschreibung
baseUrlstringErforderlich. URL des API-Endpunkts
typestring|nullProvider-Typ. openai (Standard), azure, anthropic
wireApistring|nullAPI-Format (nur openai/azure). completions (Standard) oder responses
apiKeystring|nullAPI-Schlüssel. Für lokale Provider wie Ollama nicht erforderlich
bearerTokenstring|nullFür Bearer-Token-Authentifizierung. Hat Vorrang vor apiKey
azurearray|nullAzure-spezifische Optionen, z. B. ['apiVersion' => '2024-10-21']

Grundlegende Verwendung

Wenn Sie einen benutzerdefinierten Provider verwenden, ist der Parameter model erforderlich.
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ProviderConfig;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: 'Hello!',
    config: new SessionConfig(
        model: 'gpt-4', // Bei benutzerdefinierten Providern erforderlich
        provider: new ProviderConfig(
            baseUrl: 'https://my-api.example.com/v1',
            apiKey: config('services.openai.key'),
        ),
    ),
);
Die Angabe im Array-Format ist ebenfalls möglich.
$response = Copilot::run(
    prompt: 'Hello!',
    config: [
        'model' => 'gpt-4',
        'provider' => [
            'baseUrl' => 'https://my-api.example.com/v1',
            'apiKey' => config('services.openai.key'),
        ],
    ],
);

Ollama (lokaler Provider)

Für lokale Provider wie Ollama ist apiKey nicht erforderlich.
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ProviderConfig;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: 'Hello!',
    config: new SessionConfig(
        model: 'deepseek-coder-v2:16b',
        provider: new ProviderConfig(
            type: 'openai',
            baseUrl: 'http://localhost:11434/v1',
        ),
    ),
);

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)
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ProviderConfig;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: 'Hello!',
    config: new SessionConfig(
        model: 'gpt-4',
        provider: new ProviderConfig(
            type: 'azure', // Bei Azure-Endpunkten immer 'azure' angeben
            baseUrl: 'https://my-resource.openai.azure.com', // Nur der Host
            apiKey: config('services.azure.openai_key'),
            azure: [
                'apiVersion' => '2024-10-21',
            ],
        ),
    ),
);

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().
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ModelInfo;

$models = Copilot::client()->listModelsUsing(function (): array {
    // Die im benutzerdefinierten Provider verfügbaren Modelle zurückgeben
    return [
        ['id' => 'my-model-1', 'name' => 'My Model 1', 'version' => '1.0'],
        ['id' => 'my-model-2', 'name' => 'My Model 2', 'version' => '2.0'],
    ];
})->listModels();
Bei Übergabe von null wird der Handler aufgehoben, und das Standardverhalten des CLI-Servers wird wiederhergestellt.
// Handler aufheben und zum Standardverhalten (Abfrage am CLI-Server) zurückkehren
$models = Copilot::client()->listModelsUsing(null)->listModels();
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 13. Juli 2026