azosi · 2026.7.28 01:38 · 조회 0

Kimi Partial Mode

상위 문서: ← Kimi Core workflows 출처: Kimi API Platform 공식 문서 — Use Kimi API's Partial Mode 한글화 (2026-07-22) 공급사: Moonshot AI (月之暗面)

Partial Mode는 Kimi LLM이 빈 응답을 생성하는 대신 주어진 텍스트에서 이어서 생성하도록 만듭니다. 다음 상황에서 사용:

  • 답변 시작을 고정 (예: "안녕하세요, 고객님"으로 모든 답변 시작하는 CS 봇)
  • 잘린 장문 출력 이어쓰기
  • 롤플레이에서 캐릭터 일관성 강화

1. 주어진 접두사에서 이어쓰기

Partial Mode를 사용하려면 messages 리스트 끝에 role=assistant + partial=True 메시지를 추가하고, 이어갈 텍스트를 content에 두세요. 모델은 그 콘텐츠에서 답변을 시작합니다.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["MOONSHOT_API_KEY"],
    base_url="https://api.moonshot.ai/v1",
)

completion = client.chat.completions.create(
    model="kimi-k3",
    messages=[
        {"role": "system", "content": "You are Kimi, an AI assistant provided by Moonshot AI..."},
        {"role": "user", "content": "안녕하세요?"},
        {
            "partial": True,  # <-- Partial Mode 활성화
            "role": "assistant",  # <-- user 다음 assistant 메시지
            "content": "안녕하세요, 고객님,",  # <-- 이어갈 텍스트
        },
    ]
)

# 모델이 이어서 생성한 응답을 수동으로 결합
print("안녕하세요, 고객님," + completion.choices[0].message.content)

핵심 포인트:

  1. messages 리스트 끝에 role=assistant + partial=True 메시지 추가
  2. content에 이어갈 텍스트를 두면 모델이 그 위치에서 생성 시작
  3. 수동으로 결합해 완전한 답변 구성

2. max_tokens로 잘린 출력 이어쓰기

max_tokens가 너무 작아 출력이 잘린 경우(finish_reason="length"), 이미 생성된 콘텐츠를 접두사로 전달해 이어쓸 수 있음.

completion = client.chat.completions.create(
    model="kimi-k3",
    messages=[{"role": "user", "content": "출사표를 완전히 읊어줘"}],
    max_tokens=1200,  # 일부러 작게 설정
)

if completion.choices[0].finish_reason == "length":
    prefix = completion.choices[0].message.content
    reasoning_content = completion.choices[0].message.reasoning_content
    print(prefix, end="")  # 잘린 부분 출력
    print("「이어서 생성--------->」")
    
    # 이어서 생성 — 더 큰 max_tokens로
    completion = client.chat.completions.create(
        model="kimi-k3",
        messages=[
            {"role": "user", "content": "출사표를 완전히 읊어줘"},
            {"role": "assistant", "content": prefix, "partial": True, "reasoning_content": reasoning_content},  # 사고 모드는 reasoning_content 필수
        ],
        max_tokens=86400,
    )
    print(completion.choices[0].message.content)

⚠️ 사고 모드 주의: 사고는 max_tokens를 먼저 소모. kimi-k3는 사고가 기본 활성화되어 있어, max_tokens가 작으면 사고 도중 잘릴 수 있음 → content는 비어있지만 finish_reason="length". 접두사가 비어 이어쓰기가 처음부터 다시 시작될 수 있음. 사고가 content 단계에서 잘리도록 max_tokens를 충분히 크게 설정.

3. name 필드로 캐릭터 정체성 고정

Partial Mode의 name 필드는 모델이 자신의 역할을 이해하도록 도와, 지정된 캐릭터의 목소리로 출력하게 만듦. name 필드는 출력 접두사의 일부.

completion = client.chat.completions.create(
    model="kimi-k3",
    messages=[
        {"role": "system", "content": "이제 Kelsier 역할을 합니다. Kelsier의 말투로 대화해 주세요. Kelsier는 모바일 게임 어크나이츠의 6성 메딕 클래스 오퍼레이터입니다..."},
        {"role": "user", "content": "Therace와 Amiya에 대한 생각은?"},
        {
            "partial": True,
            "role": "assistant",
            "name": "Kelsier",  # <-- 캐릭터 이름 설정
            "content": "",  # <-- 출력 내용은 비워두고 역할만 지정
        },
    ],
    max_tokens=65536,
)
print(completion.choices[0].message.content)  # Kelsier의 말투로 답변

4. 긴 대화에서 캐릭터 일관성 유지

  • 명확한 캐릭터 설명 제공 (성격·배경·특이한 점)
  • 말투·스타일·배경·동기 등 추가 디테일
  • 다양한 상황에서 캐릭터가 어떻게 행동해야 하는지 가이드
  • 주기적으로 system prompt 재삽입 (특히 모델이 어긋나기 시작할 때)
# 긴 대화 중간에 system prompt 재삽입 예시
messages=[
    {"role": "system", "content": "[Kelsier 설정 다시]"},
    {"role": "user", "content": "이전 질문..."},
    # ... 중간 대화들 ...
    {"role": "system", "content": "[Kelsier 설정 다시]"},  # <-- 재강조
    {"role": "assistant", "partial": True, "name": "Kelsier", "content": ""},
]

변경 이력

날짜변경
2026-07-22초판 작성 (공식 Partial Mode 가이드 한글화)
2026-07-22제목에 "Kimi" 접두사 추가, 본문 H1 중복 제거

댓글

아직 댓글이 없습니다.

댓글을 작성하려면 로그인이 필요합니다.