참고
코필로트 SDK가 현재 기술 미리 보기에 있습니다. 기능 및 가용성은 변경될 수 있습니다.
Azure 배포는 수명이 긴 키 대신 관리 ID (Entra ID)를 사용하는 경우가 많으므로 BYOK 모드 코필로트 SDK를 사용하려면 추가 단계를 수행해야 합니다. SDK는 기본적으로 Entra ID 인증을 지원하지 않으므로 공급자 구성의 전달자 토큰 필드(bearer_token Python, bearerToken Node.js/TypeScript 및 .NET)를 통해 단기 전달자 토큰을 사용할 수 있습니다.
이 가이드에서는
작동 방식
Azure AI Foundry의 OpenAI 호환 엔드포인트는 정적 API 키 대신 Entra ID의 전달자 토큰을 허용합니다. 패턴은 다음과 같습니다.
-
`DefaultAzureCredential`을(를) 사용하여 `https://cognitiveservices.azure.com/.default` 범위의 토큰을 가져옵니다. - BYOK 공급자 구성에서 Bearer 토큰 필드를 사용하여 토큰을 전달하세요 (Python의 경우에는
bearer_token, Node.js / TypeScript 및 .NET의 경우에는bearerToken). - 만료되기 전에 토큰을 새로 고칩니다. 토큰은 일반적으로 약 1시간 동안 유효합니다.

사전 요구 사항
- Azure AI Foundry 리소스가 배포되어 있는 Azure 구독
- 설치된 Azure ID 라이브러리(
azure-identityPython,@azure/identityNode.js또는Azure.Identity.NET용). - 코필로트 SDK 설치되었습니다. 자세한 내용은 Copilot SDK 사용 시작하기을(를) 참조하세요.
Python 예제
종속성 설치
pip install github-copilot-sdk azure-identity
기본 사용법
import asyncio
import os
from azure.identity import DefaultAzureCredential
from copilot import CopilotClient, PermissionHandler
COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default"
async def main():
# Get a token using Managed Identity, Azure CLI, or other credential chain
credential = DefaultAzureCredential()
token = credential.get_token(COGNITIVE_SERVICES_SCOPE).token
foundry_url = os.environ["AZURE_AI_FOUNDRY_RESOURCE_URL"]
client = CopilotClient()
await client.start()
session = await client.create_session(
on_permission_request=PermissionHandler.approve_all,
model="gpt-4.1",
provider={
"type": "openai",
"base_url": f"{foundry_url.rstrip('/')}/openai/v1/",
"bearer_token": token, # Short-lived bearer token
"wire_api": "responses",
},
)
response = await session.send_and_wait({"prompt": "Hello from Managed Identity!"})
print(response.data.content)
await client.stop()
asyncio.run(main())
"AZURE_AI_FOUNDRY_RESOURCE_URL을 https://myresource.openai.azure.com 등과 같이 Azure AI Foundry 리소스 URL을 포함하는 환경 변수로 바꾸십시오."
장기 실행 애플리케이션에 대한 토큰 새로 고침
전달자 토큰은 약 1시간 후에 만료됩니다. 서버 또는 장기 실행 에이전트의 경우 각 세션을 만들기 전에 토큰을 새로 고칩니다.
from azure.identity import DefaultAzureCredential
from copilot import CopilotClient, PermissionHandler
COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default"
class ManagedIdentityCopilotAgent:
"""Copilot agent that refreshes Entra ID tokens for Azure AI Foundry."""
def __init__(self, foundry_url: str, model: str = "gpt-4.1"):
self.foundry_url = foundry_url.rstrip("/")
self.model = model
self.credential = DefaultAzureCredential()
self.client = CopilotClient()
def _get_provider_config(self) -> dict:
"""Build a provider config dict with a fresh bearer token."""
token = self.credential.get_token(COGNITIVE_SERVICES_SCOPE).token
return {
"type": "openai",
"base_url": f"{self.foundry_url}/openai/v1/",
"bearer_token": token,
"wire_api": "responses",
}
async def chat(self, prompt: str) -> str:
"""Send a prompt and return the response text."""
# Fresh token for each session
provider = self._get_provider_config()
session = await self.client.create_session(
on_permission_request=PermissionHandler.approve_all,
model=self.model,
provider=provider,
)
response = await session.send_and_wait({"prompt": prompt})
await session.disconnect()
return response.data.content if response else ""
Node.js/TypeScript 예제
import { DefaultAzureCredential } from "@azure/identity";
import { CopilotClient } from "@github/copilot-sdk";
const credential = new DefaultAzureCredential();
const tokenResponse = await credential.getToken(
"https://cognitiveservices.azure.com/.default"
);
const client = new CopilotClient();
const session = await client.createSession({
model: "gpt-4.1",
provider: {
type: "openai",
baseUrl: `${process.env.AZURE_AI_FOUNDRY_RESOURCE_URL}/openai/v1/`,
bearerToken: tokenResponse.token,
wireApi: "responses",
},
});
const response = await session.sendAndWait({ prompt: "Hello!" });
console.log(response?.data.content);
await client.stop();
.NET 예제
using Azure.Identity;
using GitHub.Copilot;
var credential = new DefaultAzureCredential();
var token = await credential.GetTokenAsync(
new Azure.Core.TokenRequestContext(
new[] { "https://cognitiveservices.azure.com/.default" }));
await using var client = new CopilotClient();
var foundryUrl = Environment.GetEnvironmentVariable("AZURE_AI_FOUNDRY_RESOURCE_URL");
await using var session = await client.CreateSessionAsync(new SessionConfig
{
Model = "gpt-4.1",
Provider = new ProviderConfig
{
Type = "openai",
BaseUrl = $"{foundryUrl!.TrimEnd('/')}/openai/v1/",
BearerToken = token.Token,
WireApi = "responses",
},
});
var response = await session.SendAndWaitAsync(
new MessageOptions { Prompt = "Hello from Managed Identity!" });
Console.WriteLine(response?.Data.Content);
환경 구성
다음 환경 변수가 필요합니다.
| 변수 | 설명 | 예시 |
|---|---|---|
AZURE_AI_FOUNDRY_RESOURCE_URL | Azure AI Foundry 리소스 URL | https://myresource.openai.azure.com |
API 키 환경 변수가 필요하지 않습니다. 인증은 자동으로 지원하는 다음을 DefaultAzureCredential통해 처리됩니다.
- Azure 호스팅 앱에 대한 관리 ID(시스템 할당 또는 사용자 할당)입니다.
- 로컬 개발을 위한 Azure CLI(
az login). - 서비스 주체에 대한 환경 변수(
AZURE_CLIENT_ID,AZURE_TENANT_ID,AZURE_CLIENT_SECRET)입니다. - Kubernetes용 워크로드 아이덴티티.
전체 자격 증명 체인은 DefaultAzureCredential 설명서를 참조하세요.
이 패턴을 사용하는 경우
| 시나리오 | 권장 사항 |
|---|---|
| 관리 ID를 사용하는 Azure 호스팅 앱 | 이 패턴을 사용합니다. |
| 기존 Azure AD 서비스 주체가 있는 앱 | 이 패턴을 사용합니다. |
az login를 사용한 로컬 개발 | 이 패턴을 사용합니다. |
| 정적 API 키를 사용하는 비 Azure 환경 | 표준 BYOK를 사용합니다. 자세한 내용은 리포지토리의 BYOK 를 github/copilot-sdk 참조하세요. |
| GitHub Copilot 구독 사용 가능 | GitHub OAuth를 사용합니다. 자세한 내용은 리포지토리의 GitHub OAuth 를 github/copilot-sdk 참조하세요. |
추가 읽기
- 정적 API 키 구성은 리포지토리의 BYOK 를
github/copilot-sdk참조하세요. - 서버 쪽 배포의 경우 백 엔드 서비스에 대한 Copilot SDK 설정을 참조하세요.
- Azure ID 라이브러리 설명서는 Azure ID 클라이언트 라이브러리 개요를 참조하세요.