azosi · 2026.7.22 04:33 · 조회 1
Kimi K2.7 Code Quickstart
상위 문서: ← Kimi Get Started 출처: Kimi API Platform 공식 문서 — Kimi K2.7 Code 한글화 (2026-07-22) 공급사: Moonshot AI (月之暗面)
Kimi K2.7 Code 모델 개요
Kimi K2.7 Code는 Kimi의 코딩 특화 모델입니다. 긴 컨텍스트에서도 명령을 더 안정적으로 따르며, 코딩 작업의 성공률이 더 높습니다. 외부 벤치마크 평가에 따르면, Kimi K2.7 Code는 K2.6 대비 지시 준수율과 장기 코딩 성능을 크게 개선하면서도 과도한 사고(overthinking) 경향은 평균 30% 감소시켰습니다.
Kimi K2.7 Code HighSpeed (kimi-k2.7-code-highspeed) 는 K2.7 Code의 고속 버전으로, 동일한 모델이지만 단문 시나리오에서 약 180 tokens/s, 최대 260 tokens/s 의 출력 속도를 제공해 더 빠른 코딩 경험을 제공합니다. (현재 리소스가 제한적이어서 고속 모델의 경험이 약간 변동될 수 있으며, 점진적으로 리소스를 늘려가고 있습니다.)
장기 코딩 능력의 도약
외부 벤치마크 평가에서 Kimi K2.7 Code는 K2.6 대비 지시 준수율과 장기 코딩 성능을 크게 개선하면서 과도한 사고 경향은 평균 30% 감소.

향상된 에이전틱(Agentic) 능력
K2.6 대비 에이전틱 능력이 10% 향상.

초장문 컨텍스트 지원
kimi-k2.7-code,kimi-k2.7-code-highspeed,kimi-k2.6,kimi-k2.5모델 모두 256K 컨텍스트 윈도우 제공.
Long-Thinking (장기 사고) 능력
- Kimi K2.7 Code는 여전히 강력한 추론 능력을 갖추고 있으며, 다단계 도구 호출과 추론을 지원 — 복잡한 논리적 추론, 수학 문제, 코드 작성 등에서 탁월.
- K2.7 Code는 비사고(non-thinking) 모드를 지원하지 않습니다.
사용 예제
OpenAI SDK 설치
Kimi API는 OpenAI의 API 포맷과 완전히 호환됩니다. OpenAI SDK를 다음과 같이 설치하세요:
pip install --upgrade 'openai>=1.0'
설치 확인
python -c 'import openai; print("version =", openai.__version__)'
# 출력 예: version = 1.10.0 — OpenAI SDK v1.10.0이 설치되어 Python 환경에서 사용되고 있음을 의미
빠른 시작
- Playground에서 시도: Dev Workbench의 인터랙티브 환경에서 비즈니스 시나리오 모델 성능 테스트
- API Key 신청: API 호출로 즉시 테스트
멀티모달 도구 능력 예제
Kimi K2.7 Code 모델은 여러 능력을 결합합니다. 다음 예제는 K2.7 Code의 시각 이해 + 도구 호출 능력을 보여줍니다.
먼저 샘플 비디오를 로컬 머신에 다운로드하세요 (예: ~/Download/test_video.mp4).
샘플 비디오: https://mintcdn.com/moonshotai/AP772Is8kVTEjpLL/assets/pics/test_video.mp4
그다음 아래 코드를 실행하세요:
import base64
import json
import os
import subprocess
import tempfile
from pathlib import Path
from openai import OpenAI
tools = [{
"type": "function",
"function": {
"name": "watch_video_clip",
"description": "Watch a video file or a sub-clip of it. If start_time and end_time are not provided, the entire video will be returned.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "The path to the video file to watch"
},
"start_time": {
"type": "number",
"description": "The start time of the clip in seconds (optional, defaults to 0)"
},
"end_time": {
"type": "number",
"description": "The end time of the clip in seconds (optional, defaults to end of video)"
}
},
"required": ["path"]
}
}
}]
def watch_video_clip(path: str, start_time: float | None = None, end_time: float | None = None) -> list[dict]:
"""Watch a video file or a sub-clip of it."""
video_path = Path(path)
if not video_path.exists():
raise FileNotFoundError(f"Video file not found: {path}")
if start_time is None and end_time is None:
with open(path, "rb") as f:
video_base64 = base64.b64encode(f.read()).decode("utf-8")
return [
{"type": "video_url", "video_url": {"url": f"data:video/mp4;base64,{video_base64}"}},
{"type": "text", "text": f"Full video: {video_path.name}"}
]
probe = subprocess.run(
["ffprobe", "-v", "quiet", "-print_format", "json", "-show_format", path],
capture_output=True, text=True
)
duration = float(json.loads(probe.stdout)["format"]["duration"])
start_time = start_time or 0
end_time = end_time or duration
clip_duration = end_time - start_time
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmp:
tmp_path = tmp.name
try:
subprocess.run([
"ffmpeg", "-y", "-ss", str(start_time), "-i", path,
"-t", str(clip_duration), "-c:v", "libx264", "-c:a", "aac",
"-preset", "fast", "-crf", "23", "-movflags", "+faststart",
"-loglevel", "error", tmp_path
], check=True)
with open(tmp_path, "rb") as f:
video_base64 = base64.b64encode(f.read()).decode("utf-8")
return [
{"type": "video_url", "video_url": {"url": f"data:video/mp4;base64,{video_base64}"}},
{"type": "text", "text": f"Clip from {video_path.name}: {start_time}s - {end_time}s"}
]
finally:
if os.path.exists(tmp_path):
os.unlink(tmp_path)
client = OpenAI(
api_key=os.environ.get("MOONSHOT_API_KEY"),
base_url="https://api.moonshot.ai/v1"
)
def agent_loop(user_message: str):
"""Simple agent loop with multimodal tool support."""
messages = [
{"role": "system", "content": "You are a video analysis assistant. Use watch_video_clip to examine specific portions of videos."},
{"role": "user", "content": user_message}
]
while True:
response = client.chat.completions.create(
model="kimi-k2.7-code",
messages=messages,
tools=tools,
tool_choice="auto"
)
message = response.choices[0].message
messages.append(message.model_dump())
if not message.tool_calls:
return message.content
for tool_call in message.tool_calls:
if tool_call.function.name == "watch_video_clip":
args = json.loads(tool_call.function.arguments)
result = watch_video_clip(
path=args["path"],
start_time=args.get("start_time"),
end_time=args.get("end_time")
)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
# 사용 예
answer = agent_loop("Analyze what happens between seconds 8-13 in ~/Download/test_video.mp4")
print(answer)
Best Practices (모범 사례)
지원 형식
- 이미지:
png,jpeg,webp,gif - 비디오:
mp4,mpeg,mov,avi,x-flv,mpg,webm,wmv,3gpp
토큰 계산 및 과금
이미지와 비디오의 토큰 사용량은 동적으로 계산됩니다. 토큰 추정 API로 이미지/비디오가 포함된 요청의 예상 토큰 소비량을 사전에 확인할 수 있습니다.
일반적으로 이미지 해상도가 높을수록 더 많은 토큰을 소비합니다. 비디오의 경우, 키프레임 수와 그 해상도에 따라 토큰 수가 결정됩니다 — 키프레임이 많고 해상도가 높을수록 토큰 소비가 큽니다.
Vision 모델은 moonshot-v1 모델 시리즈와 동일한 과금 방식을 사용하며, 처리된 총 토큰 수를 기준으로 과금됩니다. 자세한 정보는 아래 참고.
권장 해상도
- 이미지 해상도는 4K (4096×2160) 이하 권장
- 비디오 해상도는 FHD (1920×1080) 이하 권장
더 높은 해상도는 처리 시간만 늘리고 모델 이해도를 개선하지는 않습니다.
파일 업로드 vs Base64
요청 본문 크기 제한 때문에, 매우 큰 비디오는 vision 기능을 활용하려면 반드시 파일 업로드 방식을 사용해야 합니다. 여러 번 참조될 이미지/비디오도 파일 업로드를 권장합니다. 파일 업로드 제한은 File Upload 문서 참고.
- 이미지 수량 제한: Vision 모델은 이미지 수에 제한이 없으나, 요청 본문 크기가 100M를 넘지 않아야 함
- URL 형식 이미지: 지원하지 않음 — 현재는 base64 인코딩된 이미지 콘텐츠만 지원
토큰 가격
토큰 가격 상세는 Model Pricing — K2.7 Code 참고.
요청 본문 파라미터 차이
파라미터는 chat API 문서에 정리되어 있습니다. 단, 일부 파라미터의 동작이 k2.7-code / k2.6 / k2.5 모델에서는 다를 수 있습니다.
권장: 기본값을 사용하고 수동으로 설정하지 마세요.
차이점은 아래와 같습니다.
| 필드 | 필수 | 설명 | 타입 | 값 |
|---|---|---|---|---|
max_tokens | 선택 | chat completion이 생성할 최대 토큰 수 | int | 기본 32k (32768) |
thinking | 선택 | 신규! 이 요청에서 사고 모드 활성화 여부 | object | 기본 {"type": "enabled"}. K2.7 Code는 사고 모드 비활성화 시 에러 발생 |
temperature | 선택 | 샘플링 temperature | float | K2.7 Code는 고정값 1.0 사용. 다른 값 입력 시 에러 |
top_p | 선택 | 샘플링 방법 | float | K2.7 Code는 고정값 0.95 사용. 다른 값 입력 시 에러 |
n | 선택 | 입력 메시지당 생성할 결과 수 | int | K2.7 Code는 고정값 1 사용. 다른 값 입력 시 에러 |
presence_penalty | 선택 | 텍스트에 새 토큰이 등장했는지 기반 페널티 | float | K2.7 Code는 고정값 0.0 사용. 다른 값 입력 시 에러 |
frequency_penalty | 선택 | 토큰의 기존 등장 빈도 기반 페널티 | float | K2.7 Code는 고정값 0.0 사용. 다른 값 입력 시 에러 |
Tool Use Compatibility (도구 사용 호환성)
도구 사용 시 모델 성능을 위해 다음 제약을 지켜주세요.
tool_choice는"auto"또는"none"만 설정 가능 (기본"auto") — 사고 콘텐츠와 명시된tool_choice간 충돌 방지. 다른 값 입력 시 에러- 다단계 도구 호출 중에는 현재 턴 도구 호출의 assistant 메시지에 포함된
reasoning_content를 컨텍스트에 반드시 유지 — 그렇지 않으면 에러 발생
Model Pricing
토큰 가격 상세는 Model Pricing — K2.7 Code 참고.
더 알아보기
- K2.7 Code 벤치마크 테스트: benchmark best practice
- Claude Code에서 Kimi K2 시리즈 모델 사용
- Thinking Model 설정과 사용
- 전체 모델 가격: 여기, Billing & Rate Limit 상세, Web Search 가격
변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-07-22 | 초판 작성 (공식 Kimi K2.7 Code 가이드 한글화) |
| 2026-07-22 | 제목에 "Kimi" 접두사 추가, 본문 H1 중복 제거 |
댓글
아직 댓글이 없습니다.
댓글을 작성하려면 로그인이 필요합니다.