Moonshot AI

Moonshot AI

개요 (Overview)

속성 내용
설명 Moonshot AI는 moonshot-v1 시리즈와 kimi 모델을 포함한 대규모 언어 모델을 제공해요.
LiteLLM 제공자 라우트 moonshot/
제공자 문서 링크 Moonshot AI ↗
Base URL https://api.moonshot.ai/
지원 작업 /chat/completions

https://platform.moonshot.ai/

모든 Moonshot AI 모델을 지원해요. completion 요청 시 moonshot/ 접두어를 붙이면 돼요.

필요한 변수 (Required Variables)

환경 변수

os.environ["MOONSHOT_API_KEY"] = ""  # your Moonshot AI API key

주의:

Moonshot AI는 글로벌 전용과 중국 전용 두 가지 별개의 API 엔드포인트를 제공해요.

Base URL을 다음과 같이 덮어쓸 수 있어요:

os.environ["MOONSHOT_API_BASE"] = "https://api.moonshot.cn/v1"

사용법 - LiteLLM Python SDK

비스트리밍 (Non-streaming)

Moonshot 비스트리밍 Completion

import os
import litellm
from litellm import completion

os.environ["MOONSHOT_API_KEY"] = ""  # your Moonshot AI API key

messages = [{"content": "Hello, how are you?", "role": "user"}]

# Moonshot call
response = completion(
    model="moonshot/moonshot-v1-8k",
    messages=messages
)

print(response)

스트리밍 (Streaming)

Moonshot 스트리밍 Completion

import os
import litellm
from litellm import completion

os.environ["MOONSHOT_API_KEY"] = ""  # your Moonshot AI API key

messages = [{"content": "Hello, how are you?", "role": "user"}]

# Moonshot call with streaming
response = completion(
    model="moonshot/moonshot-v1-8k",
    messages=messages,
    stream=True
)

for chunk in response:
    print(chunk)

사용법 - LiteLLM Proxy

LiteLLM Proxy 설정 파일에 다음을 추가해 주세요:

config.yaml

model_list:
  - model_name: moonshot-v1-8k
    litellm_params:
      model: moonshot/moonshot-v1-8k
      api_key: os.environ/MOONSHOT_API_KEY

  - model_name: moonshot-v1-32k
    litellm_params:
      model: moonshot/moonshot-v1-32k
      api_key: os.environ/MOONSHOT_API_KEY

  - model_name: moonshot-v1-128k
    litellm_params:
      model: moonshot/moonshot-v1-128k
      api_key: os.environ/MOONSHOT_API_KEY

LiteLLM Proxy 서버를 시작해 주세요:

litellm --config config.yaml

# RUNNING on http://0.0.0.0:4000
  • OpenAI SDK
  • LiteLLM SDK
  • cURL

Proxy를 통한 Moonshot - 비스트리밍

from openai import OpenAI

# Initialize client with your proxy URL
client = OpenAI(
    base_url="http://localhost:4000",  # Your proxy URL
    api_key="your-proxy-api-key"       # Your proxy API key
)

# Non-streaming response
response = client.chat.completions.create(
    model="moonshot-v1-8k",
    messages=[{"role": "user", "content": "hello from litellm"}]
)

print(response.choices[0].message.content)

Proxy를 통한 Moonshot - 스트리밍

from openai import OpenAI

# Initialize client with your proxy URL
client = OpenAI(
    base_url="http://localhost:4000",  # Your proxy URL
    api_key="your-proxy-api-key"       # Your proxy API key
)

# Streaming response
response = client.chat.completions.create(
    model="moonshot-v1-8k",
    messages=[{"role": "user", "content": "hello from litellm"}],
    stream=True
)

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

Proxy를 통한 Moonshot - LiteLLM SDK

import litellm

# Configure LiteLLM to use your proxy
response = litellm.completion(
    model="litellm_proxy/moonshot-v1-8k",
    messages=[{"role": "user", "content": "hello from litellm"}],
    api_base="http://localhost:4000",
    api_key="your-proxy-api-key"
)

print(response.choices[0].message.content)

Proxy를 통한 Moonshot - LiteLLM SDK 스트리밍

import litellm

# Configure LiteLLM to use your proxy with streaming
response = litellm.completion(
    model="litellm_proxy/moonshot-v1-8k",
    messages=[{"role": "user", "content": "hello from litellm"}],
    api_base="http://localhost:4000",
    api_key="your-proxy-api-key",
    stream=True
)

for chunk in response:
    if hasattr(chunk.choices[0], 'delta') and chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")

Proxy를 통한 Moonshot - cURL

curl http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-p...-key" \
  -d '{
    "model": "moonshot-v1-8k",
    "messages": [{"role": "user", "content": "hello from litellm"}]
  }'

Proxy를 통한 Moonshot - cURL 스트리밍

curl http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-p...-key" \
  -d '{
    "model": "moonshot-v1-8k",
    "messages": [{"role": "user", "content": "hello from litellm"}],
    "stream": true
  }'

LiteLLM Proxy 사용에 대한 더 자세한 내용은 LiteLLM Proxy 문서를 참고해 주세요.

이미지 / 비전 지원 (Image / Vision Support)

Moonshot 비전 모델(kimi-k2.5, kimi-latest, moonshot-v1-*-vision-preview 등)은 표준 OpenAI 콘텐츠 배열과 image_url 블록을 받아들여요.

LiteLLM은 메시지에 이미지가 포함되어 있는지 자동으로 감지하고 콘텐츠 배열을 유지해 이미지 페이로드가 Moonshot API에 도달하도록 해요. 텍스트 전용 요청에서는 Moonshot 텍스트 모델이 요구하는 대로 콘텐츠를 일반 문자열로 평탄화해요.

Moonshot 비전 예시

import os
import litellm

os.environ["MOONSHOT_API_KEY"] = ""

response = litellm.completion(
    model="moonshot/kimi-k2.5",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "What is in this image?"},
                {
                    "type": "image_url",
                    "image_url": {"url": "https://example.com/image.png"},
                },
            ],
        }
    ],
)

print(response.choices[0].message.content)

Moonshot AI 제약 사항 및 LiteLLM 처리

LiteLLM은 OpenAI 호환성을 유지하기 위해 다음 Moonshot AI 제약 사항을 자동으로 처리해요.

온도 범위 제한 (Temperature Range Limitation)

  • 제약 사항: Moonshot AI는 온도 범위 [0, 1]만 지원 (OpenAI의 [0, 2] 대비)
  • LiteLLM 처리: 1보다 큰 온도를 자동으로 1로 클램프

온도 + 다중 출력 제한 (Temperature + Multiple Outputs Limitation)

  • 제약 사항: temperature < 0.3이고 n > 1이면 Moonshot AI가 예외를 발생시킴
  • LiteLLM 처리: 이 조건이 감지되면 온도를 자동으로 0.3으로 설정

도구 선택 "required" 미지원 (Tool Choice "Required" Not Supported)

  • 제약 사항: Moonshot AI는 tool_choice="required"를 지원하지 않음
  • LiteLLM 처리: 다음과 같이 변환
    • 메시지 추가: "Please select a tool to handle the current issue."
    • 요청에서 tool_choice 파라미터 제거

출처: 문서

본문

더 알아보기 (Learn more)