Azure Anthropic

Azure Anthropic (Azure Foundry의 Claude)

LiteLLM은 Microsoft Azure Foundry로 배포된 Claude 모델(Claude Sonnet 4.5, Claude Haiku 4.5, Claude Opus 4.1 포함)을 지원해요.

출처: 문서

본문

사용 가능한 모델 (Available Models)

Azure Foundry는 다음 Claude 모델을 지원해요:

  • claude-sonnet-5 - 실제 세계 에이전트 구축과 복잡한 장기 태스크 처리에 가장 적합한 모델
  • claude-haiku-4-5 - 고용량 사용 사례에 적합한 속도와 비용으로 근경계(frontier)급 성능 제공
  • claude-opus-5 - 코딩 분야의 업계 선두, 장기 실행 태스크에서 지속적 성능 제공
속성 설명
설명 Microsoft Azure Foundry로 배포된 Claude 모델. Anthropic의 Messages API와 동일한 API지만 Azure 인증 사용
LiteLLM 라우트 azure_ai/ (Claude 모델 이름에 이 접두사를 추가 — 예: azure_ai/claude-sonnet-4-5)
공급자 문서 Azure Foundry Claude Models
API 엔드포인트 https://<resource-name>.services.ai.azure.com/anthropic/v1/messages
지원 엔드포인트 /chat/completions, /anthropic/v1/messages

주요 기능 (Key Features)

  • 확장된 사고 (Extended thinking): 복잡한 태스크를 위한 향상된 추론 능력
  • 이미지·텍스트 입력: 차트, 그래프, 기술 다이어그램, 보고서 분석을 위한 강력한 비전 능력
  • 코드 생성: 코드 생성·분석·디버깅이 포함된 고급 사고 (Claude Sonnet 4.5, Claude Opus 4.1)
  • Anthropic과 동일한 API: 모든 요청/응답 변환이 메인 Anthropic 공급자와 동일

인증 (Authentication)

Azure Anthropic은 두 가지 인증 방식을 지원해요:

  • API Key: api-key 헤더 사용
  • Azure AD Token: Authorization: Bearer *** 헤더 사용 (Microsoft Entra ID)

API 키와 설정

import os

# Option 1: API Key authentication
os.environ["AZURE_API_KEY"] = "your-azure-api-key"
os.environ["AZURE_API_BASE"] = "https://<resource-name>.services.ai.azure.com/anthropic"

# Option 2: Azure AD Token authentication
os.environ["AZURE_AD_TOKEN"] = "your-azure-ad-token"
os.environ["AZURE_API_BASE"] = "https://<resource-name>.services.ai.azure.com/anthropic"

# Optional: Azure AD Token Provider (for automatic token refresh)
os.environ["AZURE_TENANT_ID"] = "your-tenant-id"
os.environ["AZURE_CLIENT_ID"] = "your-client-id"
os.environ["AZURE_CLIENT_SECRET"] = "your-client-secret"
os.environ["AZURE_SCOPE"] = "https://cognitiveservices.azure.com/.default"

LiteLLM Python SDK 사용법

기본 Completion

from litellm import completion

# Set environment variables
os.environ["AZURE_API_KEY"] = "your-azure-api-key"
os.environ["AZURE_API_BASE"] = "https://<resource-name>.services.ai.azure.com/anthropic"

# Make a completion request
response = completion(
    model="azure_ai/claude-sonnet-5",
    messages=[
        {"role": "user", "content": "What are 3 things to visit in Seattle?"}
    ],
    max_tokens=1000,
    temperature=0.7,
)
print(response)

API Key 파라미터로 호출

import litellm

response = litellm.completion(
    model="azure_ai/claude-sonnet-5",
    api_base="https://<resource-name>.services.ai.azure.com/anthropic",
    api_key="your-azure-api-key",
    messages=[
        {"role": "user", "content": "Hello!"}
    ],
    max_tokens=1000,
)

Azure AD Token으로 호출

import litellm

response = litellm.completion(
    model="azure_ai/claude-sonnet-5",
    api_base="https://<resource-name>.services.ai.azure.com/anthropic",
    azure_ad_token="your-azure-ad-token",
    messages=[
        {"role": "user", "content": "Hello!"}
    ],
    max_tokens=1000,
)

스트리밍 (Streaming)

from litellm import completion

response = completion(
    model="azure_ai/claude-sonnet-5",
    messages=[
        {"role": "user", "content": "Write a short story"}
    ],
    stream=True,
    max_tokens=1000,
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Tool Calling

from litellm import completion

response = completion(
    model="azure_ai/claude-sonnet-5",
    messages=[
        {"role": "user", "content": "What's the weather in Seattle?"}
    ],
    tools=[
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Get the current weather in a given location",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "The city and state, e.g. San Francisco, CA"
                        }
                    },
                    "required": ["location"]
                }
            }
        }
    ],
    tool_choice="auto",
    max_tokens=1000,
)
print(response)

LiteLLM Proxy Server 사용법

1. 환경에 키 저장

export AZURE_API_KEY="your-azure-api-key"
export AZURE_API_BASE="https://<resource-name>.services.ai.azure.com/anthropic"

2. Proxy 설정

model_list:
  - model_name: claude-sonnet-5
    litellm_params:
      model: azure_ai/claude-sonnet-5
      api_base: https://<resource-name>.services.ai.azure.com/anthropic
      api_key: os.environ/AZURE_API_KEY

3. 테스트

curl:

curl --location 'http://0.0.0.0:4000/chat/completions' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "claude-sonnet-5",
    "messages": [
      {
        "role": "user",
        "content": "Hello!"
      }
    ],
    "max_tokens": 1000
  }'

OpenAI Python SDK:

from openai import OpenAI

client = OpenAI(
    api_key="anything",
    base_url="http://0.0.0.0:4000"
)

response = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[
        {"role": "user", "content": "Hello!"}
    ],
    max_tokens=1000
)
print(response)

Messages API

Azure Anthropic은 네이티브 Anthropic Messages API도 지원해요. 엔드포인트 구조는 Anthropic의 /v1/messages API와 동일해요.

Anthropic SDK 사용:

from anthropic import Anthropic

client = Anthropic(
    api_key="your-azure-api-key",
    base_url="https://<resource-name>.services.ai.azure.com/anthropic"
)

response = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1000,
    messages=[
        {"role": "user", "content": "Hello, world"}
    ]
)
print(response)

LiteLLM Proxy 사용:

curl --request POST \
  --url http://0.0.0.0:4000/anthropic/v1/messages \
  --header 'accept: application/json' \
  --header 'content-type: application/json' \
  --header "Authorization: bearer ***" \
  --data '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Hello, world"}
    ]
  }'

지원되는 OpenAI 파라미터

Azure Anthropic은 메인 Anthropic 공급자와 동일한 파라미터를 지원해요: stream, stop, temperature, top_p, max_tokens, max_completion_tokens, tools, tool_choice, extra_headers, parallel_tool_calls, response_format, user, thinking, reasoning_effort

Azure Anthropic API는 max_tokens를 필수로 요구해요. LiteLLM은 max_tokens가 제공되지 않으면 자동으로 max_tokens=4096을 전달해요.

표준 Anthropic 공급자와의 차이점

Azure Anthropic과 표준 Anthropic 공급자의 유일한 차이는 인증이에요:

  • 표준 Anthropic: x-api-key 헤더 사용
  • Azure Anthropic: api-key 헤더 또는 Azure AD 인증용 Authorization: Bearer *** 사용

다른 모든 요청/응답 변환, tool calling, 스트리밍, 기능 지원은 동일해요.

API Base URL 형식

https://<resource-name>.services.ai.azure.com/anthropic

API base URL은 이 형식을 따라야 해요. LiteLLM은 URL에 /v1/messages가 없으면 자동으로 추가해요.

예시: 전체 설정 (Full Configuration)

import os
from litellm import completion

# Configure Azure Anthropic
os.environ["AZURE_API_KEY"] = "your-azure-api-key"
os.environ["AZURE_API_BASE"] = "https://my-resource.services.ai.azure.com/anthropic"

# Make a request
response = completion(
    model="azure_ai/claude-sonnet-5",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain quantum computing in simple terms."}
    ],
    max_tokens=1000,
    temperature=0.7,
    stream=False,
)
print(response.choices[0].message.content)

문제 해결 (Troubleshooting)

API Base 누락 에러

API base 누락 에러가 보이면 다음을 설정했는지 확인하세요:

os.environ["AZURE_API_BASE"] = "https://<resource-name>.services.ai.azure.com/anthropic"

또는 직접 전달:

response = completion(
    model="azure_ai/claude-sonnet-5",
    api_base="https://<resource-name>.services.ai.azure.com/anthropic",
    # ...
)

인증 에러

  • API Key: AZURE_API_KEY가 설정되었거나 api_key 파라미터로 전달되었는지 확인
  • Azure AD Token: AZURE_AD_TOKEN이 설정되었거나 azure_ad_token 파라미터로 전달되었는지 확인
  • Token Provider: 자동 토큰 갱신을 위해 AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET 설정

더 알아보기 (Learn more)