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の基本構造
<|im_start|>system
あなたは役立つアシスタントです。<|im_end|>
<|im_start|>user
自作PCのCPUを選ぶコツは?<|im_end|>
<|im_start|>assistant
CPU選択では用途・予算・ソケット対応を確認します。<|im_end|>
<|im_start|>user
予算3万円の場合は?<|im_end|>
<|im_start|>assistant
<|im_start|>: メッセージ開始特殊トークン<|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が多い。