AI・機械学習
中級

ChatML(チャットエムエル)

OpenAIが設計したLLMの会話フォーマット。`<|im_start|>` / `<|im_end|>` トークンで役割(system/user/assistant)とメッセージを区切り、マルチターン会話を構造化する標準形式。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
チャットテンプレート
会話フォーマット
OpenAI
プロンプト形式
LLM

ChatML — LLM会話フォーマットの事実上標準

ChatML(Chat Markup Language)は、OpenAIが2023年に導入したLLMの会話構造化フォーマット。マルチターン会話を明確に区切るための特殊トークンを定義し、system/user/assistantの役割を持つメッセージをシリアライズする方式として、現在のLLMエコシステムで広く採用されている。

ChatMLの基本構造

&lt;|im_start|>system
あなたは役立つアシスタントです。&lt;|im_end|>
&lt;|im_start|>user
自作PCのCPUを選ぶコツは?&lt;|im_end|>
&lt;|im_start|>assistant
CPU選択では用途・予算・ソケット対応を確認します。&lt;|im_end|>
&lt;|im_start|>user
予算3万円の場合は?&lt;|im_end|>
&lt;|im_start|>assistant
  • &lt;|im_start|> : メッセージ開始特殊トークン
  • &lt;|im_end|> : メッセージ終端特殊トークン
  • im は "imaginary monologue" の略(OpenAI内部的な呼称)
  • 最後のassistantターンで生成が開始される

主要LLMのChatML採用状況

モデルChatML採用備考
GPT-3.5/GPT-4ネイティブAPIのtokenizer内部で使用
Mistral 7B Instruct v0.2+採用[INST]ベースから移行
Qwen2.5系採用im_startトークン完全対応
Yi-34B Chat採用ChatMLをベースに微調整
DeepSeek系変形ChatML類似形式
Llama 3独自形式begin_of_text系を採用

HuggingFace Transformersでの使い方

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B-Instruct")

messages = [
    {"role": "system", "content": "あなたはPC自作の専門家です。"},
    {"role": "user", "content": "DDR5とDDR4の違いを教えてください"}
]

formatted = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

ChatMLの設計上の特徴

  • 役割の明示: system/user/assistantの3役割で会話を構造化
  • ターン境界の明確化: 特殊トークンによる曖昧さのない区切り
  • マルチターン対応: 複数往復の会話を1つのプロンプトに統合可能
  • システムプロンプト分離: instructionとユーザー発話を明確に分離

よくある質問

Q: ChatMLとOpenAI Messages APIは同じ? A: 同じ概念の異なる層。Messages API(JSONオブジェクト)がモデルに渡る前にChatMLにシリアライズされる。APIユーザーはChatMLを直接見ないが、tokenizerレベルでは使用されている。

Q: ChatMLは著作権保護されているか? A: OpenAIはChatMLを標準フォーマットとして公開しており、オープンソースモデルが採用することに制限はない。

Q: ChatMLとLlama 3形式はどちらが主流? A: 2025年現在、両方が広く使われる。Metaエコシステム(Llama系)はLlama 3形式、それ以外(Qwen/Mistral/Yi系)はChatMLが多い。

この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/7