会話プレフィックス継続とは

会話プレフィックス継続(Chat Prefix Completion)を使用すると、開発者はassistantメッセージに「冒頭」を事前に設定し、モデルにその冒頭から続きを書かせることができます。これは以下のシナリオで非常に役立ちます:

  • モデルに特定の形式(JSON、Markdownテーブルなど)で返信を開始させる
  • 会話テンプレートの欠落部分を埋める
  • モデルに特定の口調や人格で返信を開始させる

基本的な使い方

messagesにassistantメッセージを事前に入力し、prefixパラメータをtrueに設定します:

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ.get('DEEPSEEK_API_KEY'),
    base_url='https://api.deepseek.com'
)

response = client.chat.completions.create(
    model='deepseek-v4-flash',
    messages=[
        {"role": "system", "content": "あなたはプロのメール作成アシスタントです。"},
        {"role": "user", "content": "休暇申請メールを書いてください。件名:体調不良のため、1日休暇を申請します。"},
        # 冒頭を事前設定 - モデルはここから続きを書きます
        {"role": "assistant", "content": "拝啓\n\nお世話になっております。"}
    ],
    # プレフィックス継続を有効化
    extra_body={"chat_prefix_completion": True}
)

print(response.choices[0].message.content)
# 出力:
# 拝啓
#
# お世話になっております。
# 体調不良のため、1日休暇を申請いたします...(続き)

JSON出力の冒頭を強制

モデルが純粋なJSONを出力しない問題を解決します:

response = client.chat.completions.create(
    model='deepseek-v4-pro',
    messages=[
        {"role": "system", "content": "あなたはデータアナリストです。JSON形式でレポートを出力してください。"},
        {"role": "user", "content": "Q2の売上データを分析:総売上500万、前年比20%増"},
        # JSONで始まることを強制
        {"role": "assistant", "content": "{\n  \"report\": "}
    ],
    extra_body={"chat_prefix_completion": True}
)

# 出力は必ず{"report": で始まります

Markdownテーブルの継続

response = client.chat.completions.create(
    model='deepseek-v4-flash',
    messages=[
        {"role": "user", "content": "Pythonの主要なWebフレームワーク3つとその特徴を挙げてください"},
        # テーブルヘッダーを事前設定 - モデルがテーブル内容を埋めます
        {"role": "assistant", "content": "| フレームワーク | 特徴 | 適用シナリオ |\n|------------|------|----------|\n"}
    ],
    extra_body={"chat_prefix_completion": True}
)

# 出力は必ずMarkdownテーブル形式で始まります

Chat PrefixとFIMの比較

Chat Prefix CompletionFIM補完
API/v1/chat/completions/v1/completions
制御方法assistantメッセージのプレフィックスprompt + suffixパラメータ
思考モード思考モード対応非思考モードのみ
適用シナリオ形式制御、テンプレート埋め込み、口調設定コード補完、中間埋め込み
安定性BetaBeta

注意事項

  • 現在はBeta機能であり、APIや動作が変更される可能性があります
  • メッセージリストの最後がassistantメッセージの場合のみ有効です
  • プレフィックスの長さは出力トークン消費に含まれます
  • プレフィックスは短く(100トークン以内)することをお勧めします。モデルに創造の余地を残すためです
  • JSON Modeと組み合わせて使用できます:プレフィックスをJSONの冒頭に設定 + response_format制約