참고
코필로트 SDK가 현재 공개 미리 보기에 있습니다. 기능 및 가용성은 변경될 수 있습니다.
BYOK(Bring Your Own Key)를 사용하면 코필로트 SDK를 다른 모델 공급자가 제공한 자체 API 키와 함께 사용하여 GitHub Copilot 인증을 우회할 수 있습니다. 엔터프라이즈 배포, 사용자 지정 모델 호스팅 또는 모델 공급자에게 직접 청구하려는 경우에 유용합니다.
지원되는 공급자
| 공급자 | 형식 값 | Notes |
|---|---|---|
| OpenAI | "openai" | OpenAI API 및 OpenAI 호환 엔드포인트 |
| Azure OpenAI / Azure AI Foundry |
`"azure"` 또는 `"openai"` | Azure 호스팅 모델( [Azure 엔드포인트 유형](#azure-endpoint-type-confusion) 참조) |
| 인위적 | "anthropic" | 클로드 모델 |
| 올라마 섬 | "openai" | OpenAI 호환 API를 통한 로컬 모델 |
| Microsoft Foundry 로컬 | "openai" | OpenAI 호환 API를 통해 디바이스에서 로컬로 AI 모델 실행 |
| 기타 OpenAI 호환 | "openai" | vLLM, LiteLLM 및 유사 |
빠른 시작: Azure AI Foundry
Azure AI Foundry(이전의 Azure OpenAI)는 엔터프라이즈의 일반적인 BYOK 배포 대상입니다. 다음 예제에서는 전체 Node.js/TypeScript 설정을 보여줍니다.
-
Azure AI Foundry 엔드포인트 및 API 키를 사용하여 세션을 만듭니다.
TypeScript import { CopilotClient } from "@github/copilot-sdk"; const client = new CopilotClient(); const session = await client.createSession({ model: "YOUR-DEPLOYMENT-NAME", provider: { type: "openai", baseUrl: "https://YOUR-RESOURCE.openai.azure.com/openai/v1/", wireApi: "responses", // Use "completions" for older models apiKey: process.env.FOUNDRY_API_KEY, }, }); session.on("assistant.message", (event) => { console.log(event.data.content); }); await session.sendAndWait({ prompt: "What is 2+2?" }); await client.stop();import { CopilotClient } from "@github/copilot-sdk"; const client = new CopilotClient(); const session = await client.createSession({ model: "YOUR-DEPLOYMENT-NAME", provider: { type: "openai", baseUrl: "https://YOUR-RESOURCE.openai.azure.com/openai/v1/", wireApi: "responses", // Use "completions" for older models apiKey: process.env.FOUNDRY_API_KEY, }, }); session.on("assistant.message", (event) => { console.log(event.data.content); }); await session.sendAndWait({ prompt: "What is 2+2?" }); await client.stop();
Azure 리소스 이름으로 YOUR-RESOURCE을(를) 대체하고 모델 배포 이름으로 YOUR-DEPLOYMENT-NAME을(를) 대체하세요. 환경 변수를 FOUNDRY_API_KEY Azure API 키로 설정합니다.
Python, Go 및 .NET의 예제는 리포지토리의 BYOK 를 github/copilot-sdk 참조하세요.
공급자 구성 참조
ProviderConfig 필드
| 분야 | 유형 | 설명 |
|---|---|---|
type |
`"openai"`
\|
`"azure"`
\|
`"anthropic"`
| 공급자 유형. 기본값은 `"openai"`입니다. |
| baseUrl | 문자열 |
필수입니다. API 엔드포인트 URL입니다. |
| apiKey | 문자열 | API 키입니다. Ollama와 같은 로컬 공급자의 경우 선택 사항입니다. |
| bearerToken | 문자열 | 전달자 토큰 인증.
apiKey보다 우선합니다. |
| wireApi |
"completions"
|
"responses"
| API 형식입니다. 기본값은 "completions"입니다. |
| azure.apiVersion | 문자열 | Azure API 버전입니다. 기본값은 "2024-10-21"입니다. |
Wire API 형식
이 설정은 wireApi 사용할 OpenAI API 형식을 결정합니다.
`"completions"`
** (기본값): 채팅 완료 API(`/chat/completions`). 대부분의 모델에 사용합니다.
`"responses"`
**: 응답 API. 최신 응답 형식을 지원하는 GPT-5 시리즈 모델에 사용합니다.
유형별 참고 사항
**OpenAI(`type: "openai"`)**
-
OpenAI API 및 OpenAI 호환 엔드포인트에서 작동합니다.
-
baseUrl는 전체 경로(예: .)https://api.openai.com/v1를 포함해야 합니다.**Azure(`type: "azure"`)** -
네이티브 Azure OpenAI 엔드포인트에 사용합니다.
-
baseUrl은 호스트일 뿐입니다(예: .)https://YOUR-RESOURCE.openai.azure.com. -
URL에
/openai/v1를 포함하지 마세요. SDK가 경로 생성을 처리합니다.**Anthropic (`type: "anthropic"`)** -
Anthropic API를 직접 액세스하는 경우
-
Claude 관련 API 형식을 사용합니다.
구성 예
OpenAI 직통
provider: {
type: "openai",
baseUrl: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY,
}
provider: {
type: "openai",
baseUrl: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY,
}
Azure OpenAI(기본 Azure 엔드포인트)
`type: "azure"`을(를) `*.openai.azure.com`에 있는 엔드포인트에 사용하십시오.
provider: {
type: "azure",
baseUrl: "https://YOUR-RESOURCE.openai.azure.com", // Just the host
apiKey: process.env.AZURE_OPENAI_KEY,
azure: {
apiVersion: "2024-10-21",
},
}
provider: {
type: "azure",
baseUrl: "https://YOUR-RESOURCE.openai.azure.com", // Just the host
apiKey: process.env.AZURE_OPENAI_KEY,
azure: {
apiVersion: "2024-10-21",
},
}
`YOUR-RESOURCE`를 Azure 리소스 이름으로 대체합니다.
Azure AI Foundry(OpenAI 호환 엔드포인트)
Azure AI Foundry 배포의 /openai/v1/ 엔드포인트를 사용하려면 type: "openai"을(를) 사용하세요.
provider: {
type: "openai",
baseUrl: "https://YOUR-RESOURCE.openai.azure.com/openai/v1/",
apiKey: process.env.FOUNDRY_API_KEY,
wireApi: "responses", // For GPT-5 series models
}
provider: {
type: "openai",
baseUrl: "https://YOUR-RESOURCE.openai.azure.com/openai/v1/",
apiKey: process.env.FOUNDRY_API_KEY,
wireApi: "responses", // For GPT-5 series models
}
Ollama (로컬)
provider: {
type: "openai",
baseUrl: "http://localhost:11434/v1",
// No apiKey needed for local Ollama
}
provider: {
type: "openai",
baseUrl: "http://localhost:11434/v1",
// No apiKey needed for local Ollama
}
Microsoft Foundry 로컬
[Microsoft Foundry Local](https://foundrylocal.ai) 을 사용하면 OpenAI 호환 API를 사용하여 AI 모델을 로컬로 실행할 수 있습니다. Foundry 로컬 CLI를 통해 설치한 다음 로컬 엔드포인트에서 SDK를 가리킵니다.
provider: {
type: "openai",
baseUrl: "http://localhost:YOUR-PORT/v1",
// No apiKey needed for local Foundry Local
}
provider: {
type: "openai",
baseUrl: "http://localhost:YOUR-PORT/v1",
// No apiKey needed for local Foundry Local
}
참고
Foundry 로컬은 고정되지 않은 동적 포트에서 시작됩니다. 실행 foundry service status 하여 서비스가 현재 수신 대기 중인 포트를 확인한 다음, 해당 포트를 baseUrl사용합니다.
Foundry Local을 시작하려면 다음을 수행합니다.
# Windows: Install Foundry Local CLI (requires winget) winget install Microsoft.FoundryLocal # 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
# Windows: Install Foundry Local CLI (requires winget)
winget install Microsoft.FoundryLocal
# 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
macOS/Linux 설치는 foundrylocal.ai 참조하세요.
인위적
provider: {
type: "anthropic",
baseUrl: "https://api.anthropic.com",
apiKey: process.env.ANTHROPIC_API_KEY,
}
provider: {
type: "anthropic",
baseUrl: "https://api.anthropic.com",
apiKey: process.env.ANTHROPIC_API_KEY,
}
전달자 토큰 인증
일부 공급자는 API 키 대신 전달자 토큰 인증이 필요합니다.
provider: {
type: "openai",
baseUrl: "https://YOUR-CUSTOM-ENDPOINT.example.com/v1",
bearerToken: process.env.MY_BEARER_TOKEN, // Sets Authorization header
}
provider: {
type: "openai",
baseUrl: "https://YOUR-CUSTOM-ENDPOINT.example.com/v1",
bearerToken: process.env.MY_BEARER_TOKEN, // Sets Authorization header
}
참고
이 bearerToken 옵션은 정적 토큰 문자열만 허용합니다. SDK는 이 토큰을 자동으로 새로 고치지 않습니다. 토큰이 만료되면 요청이 실패하고 새 토큰으로 새 세션을 만들어야 합니다.
사용자 지정 모델 목록
BYOK를 사용하는 경우 CLI 서버는 공급자가 지원하는 모델을 모를 수 있습니다. 공급자의 모델을 표준 onListModels 형식으로 반환할 수 있도록 client.listModels() 클라이언트 수준에서 사용자 지정 ModelInfo 처리기를 제공할 수 있습니다.
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 },
},
},
],
});
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 },
},
},
],
});
첫 번째 호출 후에 결과가 캐시됩니다. 처리기는 CLI의 models.list RPC를 완전히 대체합니다. 서버로의 대체는 발생하지 않습니다.
Python, Go 및 .NET의 예제는 리포지토리의 BYOK 를 github/copilot-sdk 참조하세요.
제한점
ID 제한 사항
BYOK 인증은 정적 자격 증명만 사용합니다. 다음 ID 공급자는 지원되지 않습니다.
- Microsoft Entra ID(Azure AD) - Entra 관리 ID 또는 서비스 주체를 지원하지 않습니다.
- 타사 ID 공급자(OIDC, SAML 또는 기타 페더레이션 ID 없음)
- 관리 ID - Azure 관리 ID는 지원되지 않습니다.
직접 관리하는 API 키 또는 정적 전달자 토큰을 사용해야 합니다.
참고
Entra ID는 전달자 토큰을 발급하지만 이러한 토큰은 수명이 짧고(일반적으로 1시간) Azure ID SDK를 통해 자동 새로 고침이 필요합니다. 이 bearerToken 옵션은 정적 문자열만 허용합니다. SDK가 새 토큰을 요청하는 콜백 메커니즘은 없습니다. Entra 인증이 필요한 장기 실행 워크로드의 경우 고유한 토큰 새로 고침 논리를 구현하고 업데이트된 토큰으로 새 세션을 만들어야 합니다.
기능 제한 사항
일부 Copilot 기능은 BYOK에서 다르게 동작할 수 있습니다.
- 모델 가용성: 공급자가 지원하는 모델만 사용할 수 있습니다.
- 속도 제한: 귀하의 공급자의 속도 제한에 따라 달라지며, Copilot와 관련이 없습니다.
- 사용량 추적: 사용량은 GitHub가 아닌 공급자가 추적합니다.
- 프리미엄 요청: 프리미엄 요청 할당량에 Copilot 계산되지 않습니다.
공급자별 제한 사항
| 공급자 | 제한점 |
|---|---|
| Azure AI Foundry (에이아이 파운드리) | Entra ID 인증이 없습니다, API 키를 사용해야 합니다. |
| 올라마 섬 | API 키가 없습니다. 로컬 전용; 모델 지원은 다양합니다. |
| Microsoft Foundry 로컬 | 로컬 전용; 모델 가용성은 디바이스 하드웨어에 따라 달라집니다. API 키가 필요하지 않습니다. |
| OpenAI | OpenAI 속도 제한 및 할당량이 적용됩니다. |
Troubleshooting
"모델을 지정하지 않음" 오류
BYOK를 사용하는 경우, model 매개 변수가 반드시 필요합니다.
// 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",
provider: { type: "openai", baseUrl: "..." },
});
Azure 엔드포인트 유형 혼동
Azure OpenAI 엔드포인트(*.openai.azure.com)의 경우 올바른 공급자 유형을 사용해야 합니다.
// Wrong: using "openai" type with native Azure endpoint
provider: {
type: "openai",
baseUrl: "https://YOUR-RESOURCE.openai.azure.com",
}
// Correct: using "azure" type
provider: {
type: "azure",
baseUrl: "https://YOUR-RESOURCE.openai.azure.com",
}
Azure AI Foundry 배포에서 OpenAI 호환 엔드포인트 경로(예: /openai/v1/)를 제공하는 경우 대신 다음을 사용합니다 type: "openai" .
// Correct: OpenAI-compatible Azure AI Foundry endpoint
provider: {
type: "openai",
baseUrl: "https://YOUR-RESOURCE.openai.azure.com/openai/v1/",
}
연결이 거부됨(Ollama)
Ollama가 실행 중이고 액세스할 수 있는지 확인합니다.
# Check Ollama is running curl http://localhost:11434/v1/models # Start Ollama if not running ollama serve
# Check Ollama is running
curl http://localhost:11434/v1/models
# Start Ollama if not running
ollama serve
연결이 거부됨(Foundry Local)
Foundry Local은 다시 시작 사이에 변경 될 수 있는 동적 포트를 사용합니다. 활성 포트를 확인합니다.
foundry service status
foundry service status
출력에 표시된 포트와 일치하도록 업데이트합니다 baseUrl . 서비스가 실행되지 않으면, 서비스를 시작하기 위한 모델을 시작하십시오.
foundry model run phi-4-mini
foundry model run phi-4-mini
인증 실패
- API 키가 올바르고 만료되지 않았는지 확인합니다.
- 공급자의
baseUrl예상 형식과 일치하는지 확인합니다. - 전달자 토큰의 경우 접두사뿐만 아니라 전체 토큰이 제공되는지 확인합니다.