Moonshot AI
Moonshot AI
개요 (Overview)
| 속성 | 내용 |
|---|---|
| 설명 | Moonshot AI는 moonshot-v1 시리즈와 kimi 모델을 포함한 대규모 언어 모델을 제공해요. |
| LiteLLM 제공자 라우트 | moonshot/ |
| 제공자 문서 링크 | Moonshot AI ↗ |
| Base URL | https://api.moonshot.ai/ |
| 지원 작업 | /chat/completions |
모든 Moonshot AI 모델을 지원해요. completion 요청 시 moonshot/ 접두어를 붙이면 돼요.
필요한 변수 (Required Variables)
환경 변수
os.environ["MOONSHOT_API_KEY"] = "" # your Moonshot AI API key
주의:
Moonshot AI는 글로벌 전용과 중국 전용 두 가지 별개의 API 엔드포인트를 제공해요.
- 글로벌 API Base URL: https://api.moonshot.ai/v1 (현재 구현된 것)
- 중국 API Base URL: https://api.moonshot.cn/v1
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파라미터 제거
출처: 문서