会話プレフィックス継続とは
会話プレフィックス継続(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 Completion | FIM補完 | |
|---|---|---|
| API | /v1/chat/completions | /v1/completions |
| 制御方法 | assistantメッセージのプレフィックス | prompt + suffixパラメータ |
| 思考モード | 思考モード対応 | 非思考モードのみ |
| 適用シナリオ | 形式制御、テンプレート埋め込み、口調設定 | コード補完、中間埋め込み |
| 安定性 | Beta | Beta |
注意事項
- 現在はBeta機能であり、APIや動作が変更される可能性があります
- メッセージリストの最後がassistantメッセージの場合のみ有効です
- プレフィックスの長さは出力トークン消費に含まれます
- プレフィックスは短く(100トークン以内)することをお勧めします。モデルに創造の余地を残すためです
- JSON Modeと組み合わせて使用できます:プレフィックスをJSONの冒頭に設定 + response_format制約