Skip to main content

BYOK (Bring Your Own Key - traga sua própria chave)

O BYOK permite que você use o SDK do Copilot com suas próprias chaves de API de provedores de modelos, sem passar pela autenticação do GitHub Copilot. Isso é útil para implantações empresariais, hospedagem de modelo personalizado ou quando você deseja cobrança direta com seu provedor de modelo.

Provedores com suporte

FornecedorDigite um valorObservações
OpenAI"openai"API OpenAI e endpoints compatíveis com OpenAI
Microsoft Foundry/Azure OpenAI
"openai" ou "azure"Usar "openai" para /openai/v1/; usar "azure" para pontos de extremidade de Azure nativos
Anthropic"anthropic"Modelos de Claude
Ollama"openai"Modelos locais por meio da API compatível com OpenAI
Microsoft Foundry Local"openai"Executar modelos de IA localmente em seu dispositivo por meio da API compatível com OpenAI
Outros compatíveis com OpenAI"openai"vLLM, LiteLLM etc.

Início rápido: Microsoft Foundry

Microsoft Foundry é um destino de implantação BYOK comum para empresas. Aqui está um exemplo completo:

Idiomas de código navigation

Python
import asyncio
import os
from copilot import CopilotClient
from copilot.session import PermissionHandler

FOUNDRY_MODEL_URL = "https://<resource-name>.openai.azure.com/openai/v1/"
# Set FOUNDRY_API_KEY environment variable

async def main():
    client = CopilotClient()
    await client.start()

    session = await client.create_session(on_permission_request=PermissionHandler.approve_all, model="gpt-5.2-codex", provider={
        "type": "openai",
        "base_url": FOUNDRY_MODEL_URL,
        "wire_api": "responses",  # Use "completions" for older models
        "api_key": os.environ["FOUNDRY_API_KEY"],
    })

    done = asyncio.Event()

    def on_event(event):
        if event.type.value == "assistant.message":
            print(event.data.content)
        elif event.type.value == "session.idle":
            done.set()

    session.on(on_event)
    await session.send("What is 2+2?")
    await done.wait()

    await session.disconnect()
    await client.stop()

asyncio.run(main())

Referência de configuração do provedor

Campos ProviderConfig

CampoTipoDescription
type
"openai"
|
"azure"
|
"anthropic"
Tipo de provedor (padrão: "openai")
baseUrl / base_urlcadeia
Obrigatório. URL do endpoint da API
apiKey / api_keycadeiaChave de API (opcional para provedores locais como o Ollama)
bearerToken / bearer_tokencadeiaAutenticação de token de portador (tem precedência sobre a apiKey)
bearerTokenProvider / bearer_token_providerretorno de chamadaRetorna um token de acesso do tipo Bearer quando solicitado (tem precedência sobre apiKey e bearerToken)
wireApi / wire_api
"completions"
|
"responses"
Selecione "completions" para ampla compatibilidade com modelos (a API Chat Completions); selecione "responses" para gerenciamento de estado em vários turnos, namespace de ferramentas e suporte a raciocínio (a API Responses). Anthropic modelos sempre usam a API de Mensagens independentemente dessa configuração.
azure.apiVersion / azure.api_versioncadeiaVersão da API do Azure. Quando definido, o runtime usa a rota de implantação com versão; quando omitido, ele usa a rota sem v1 versão de GA.

Formato da API do Wire

A wireApi configuração determina qual formato de API OpenAI usar:

  • "completions" (padrão) – API de Conclusões de Chat (/chat/completions) para ampla compatibilidade de modelo.
  • "responses" - API Responses para gerenciamento de estado multiturno, uso de namespaces para ferramentas e suporte ao raciocínio.

Os modelos da Anthropic sempre usam a API Messages da Anthropic, independentemente dessa configuração.

Notas específicas do tipo

OpenAI (type: "openai")

  • Funciona com a API da OpenAI e qualquer endpoint compatível com a OpenAI
  • baseUrl deve incluir o caminho completo (por exemplo, https://api.openai.com/v1)

Azure (type: "azure")

  • Usar para pontos de extremidade nativos do OpenAI do Azure
  • baseUrl deve ser apenas o host (por exemplo, https://my-resource.openai.azure.com)
  • NÃO inclua /openai/v1 na URL – o SDK manipula a construção do caminho

Anthropic (type: "anthropic")

  • Para acesso direto à API da Anthropic
  • Usa o formato de API específico de Claude

Configurações de exemplo

OpenAI direto

provider: {
    type: "openai",
    baseUrl: "https://api.openai.com/v1",
    apiKey: process.env.OPENAI_API_KEY,
}

Azure OpenAI (ponto de extremidade nativo do Azure)

Utilize type: "azure" para os endpoints em *.openai.azure.com:

provider: {
    type: "azure",
    baseUrl: "https://my-resource.openai.azure.com",  // Just the host
    apiKey: process.env.AZURE_OPENAI_KEY,
    azure: {
        apiVersion: "2024-10-21",
    },
}

Microsoft Foundry (ponto de extremidade compatível com OpenAI)

Para implantações do Microsoft Foundry com /openai/v1/ pontos de extremidade, usetype: "openai":

provider: {
    type: "openai",
    baseUrl: "https://<resource-name>.openai.azure.com/openai/v1/",
    apiKey: process.env.FOUNDRY_API_KEY,
    wireApi: "responses",  // For GPT-5 series models
}

Ollama (local)

provider: {
    type: "openai",
    baseUrl: "http://localhost:11434/v1",
    // No apiKey needed for local Ollama
}

Microsoft Foundry Local

Microsoft Foundry Local permite executar modelos de IA localmente em seu próprio dispositivo com uma API compatível com OpenAI. Instale através do Foundry Local CLI e direcione o SDK para o endpoint local.

provider: {
    type: "openai",
    baseUrl: "http://localhost:<PORT>/v1",
    // No apiKey needed for local Foundry Local
}

Observação

Foundry Local inicia em uma porta dinâmica– a porta não é fixa. Use foundry service status para confirmar a porta em que o serviço está escutando no momento e use essa porta em sua baseUrl.

Para começar a usar o Foundry Local:

# Windows: Install Foundry Local CLI (requires winget)
winget install Microsoft.FoundryLocal

# macOS / Linux: see https://foundrylocal.ai for installation instructions
# List available models
foundry model list

# Run a model (starts the local server automatically)
foundry model run phi-4-mini

# Check the port the service is running on
foundry service status

Anthropic

provider: {
    type: "anthropic",
    baseUrl: "https://api.anthropic.com",
    apiKey: process.env.ANTHROPIC_API_KEY,
}

Autenticação com Bearer Token

Alguns provedores exigem autenticação de token de portador em vez de chaves de API. Forneça um token estático com bearerTokenou forneça um bearerTokenProvider retorno de chamada que o runtime do SDK GitHub Copilot invoca antes das solicitações do provedor de saída. O callback ou a biblioteca de identidade que ele encapsula gerencia o cache e a renovação de tokens.

Use bearerToken quando seu aplicativo já tiver um token:

provider: {
    type: "openai",
    baseUrl: "https://<resource-name>.openai.azure.com/openai/v1/",
    bearerToken: process.env.MY_BEARER_TOKEN,  // Sets Authorization header
}

Observação

A opção bearerToken aceita apenas uma string de token estático. O SDK não atualiza esse token automaticamente. Se o token expirar, as solicitações falharão e você precisará criar uma nova sessão com um novo token.

Use bearerTokenProvider para adquirir tokens sob demanda:

provider: {
    type: "openai",
    baseUrl: "https://my-custom-endpoint.example.com/v1",
    bearerTokenProvider: async () => {
        return await acquireBearerToken();
    },
}

Para obter mais detalhes sobre como adquirir e renovar tokens de portador do Microsoft Entra, consulte Identidade gerenciada do Azure com BYOK.

Listagem de modelo personalizado

Ao usar BYOK, o servidor da CLI pode não saber quais modelos seu provedor dá suporte. Você pode fornecer um manipulador personalizado onListModels no nível do cliente para que client.listModels() retorne os modelos do provedor no formato padrão ModelInfo . Isso permite que os consumidores downstream descubram modelos disponíveis sem consultar a CLI.

Idiomas de código navigation

TypeScript
import { CopilotClient } from "@github/copilot-sdk";
import type { ModelInfo } from "@github/copilot-sdk";

const client = new CopilotClient({
    onListModels: () => [
        {
            id: "my-custom-model",
            name: "My Custom Model",
            capabilities: {
                supports: { vision: false, reasoningEffort: false },
                limits: { max_context_window_tokens: 128000 },
            },
        },
    ],
});

Os resultados são armazenados em cache após a primeira chamada, assim como o comportamento padrão. O manipulador substitui completamente o RPC models.list da CLI — não ocorre nenhum fallback para o servidor.

Limitações

Limitações de funcionalidades

Alguns recursos de Copilot podem se comportar de forma diferente com BYOK:

  • Disponibilidade do modelo – somente os modelos compatíveis com seu provedor estão disponíveis
  • Limitação de taxa - Sujeito aos limites de taxa do seu provedor, não aos do Copilot
  • Usage tracking - O uso é acompanhado pelo seu provedor, não GitHub Copilot
  • Solicitações premium - Não são contabilizadas nas cotas de solicitações premium do Copilot

Limitações específicas do provedor

FornecedorLimitações
Microsoft Foundry LocalSomente local; A disponibilidade do modelo depende do hardware do dispositivo; nenhuma chave de API necessária
OllamaNenhuma chave de API; somente local; O suporte ao modelo varia
OpenAISujeito a limites de taxa e cotas do OpenAI

Troubleshooting

Erro "Modelo não especificado"

Ao usar BYOK, o model parâmetro é necessário:

// ❌ Error: Model required with custom provider
const session = await client.createSession({
    provider: { type: "openai", baseUrl: "..." },
});

// ✅ Correct: Model specified
const session = await client.createSession({
    model: "gpt-4",  // Required!
    provider: { type: "openai", baseUrl: "..." },
});

Confusão quanto ao tipo de ponto de extremidade no Azure

Para pontos de extremidade do OpenAI do Azure (*.openai.azure.com), use o tipo correto:

import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();
const session = await client.createSession({
    model: "gpt-5.4",
    provider: {
        type: "azure",
        baseUrl: "https://my-resource.openai.azure.com",
    },
});
// ❌ Wrong: Using "openai" type with native Azure endpoint
provider: {
    type: "openai",  // This won't work correctly
    baseUrl: "https://my-resource.openai.azure.com",
}

// ✅ Correct: Using "azure" type
provider: {
    type: "azure",
    baseUrl: "https://my-resource.openai.azure.com",
}

No entanto, se a implantação do Microsoft Foundry fornecer um caminho de ponto de extremidade compatível com OpenAI (por exemplo, /openai/v1/), usetype: "openai":

import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();
const session = await client.createSession({
    model: "gpt-5.4",
    provider: {
        type: "openai",
        baseUrl: "https://your-resource.openai.azure.com/openai/v1/",
    },
});
// ✅ Correct: OpenAI-compatible Microsoft Foundry endpoint
provider: {
    type: "openai",
    baseUrl: "https://your-resource.openai.azure.com/openai/v1/",
}

Conexão recusada (Ollama)

Verifique se o Ollama está em execução e acessível:

# Check Ollama is running
curl http://localhost:11434/v1/models

# Start Ollama if not running
ollama serve

Conexão recusada (Foundry Local)

O Foundry Local usa uma porta dinâmica que pode mudar entre reinicializações. Confirme a porta ativa:

# Check the service status and port
foundry service status

Atualize-o baseUrl para corresponder à porta mostrada na saída. Se o serviço não estiver em execução, inicie um modelo para iniciá-lo:

foundry model run phi-4-mini

Falha na autenticação

  1. Verifique se a chave de API está correta e não expirou
  2. Verifique se o baseUrl corresponde ao formato esperado pelo seu provedor
  3. Para tokens de portador, verifique se o token completo é fornecido (não apenas um prefixo)

Próximas Etapas