- HOME >
- Jamstack用語集 >
- Chat Completion
Chat Completion
チャット補完
Chat Completion を分かりやすく
Chat Completion(チャット補完)は、AI モデルとチャット形式で対話するための API パターンです。
例え話をしましょう。あなたが友人と会話をしているとします。
単純な質問応答(Text Completion)
- あなた「今日の天気は?」
- 友人「晴れです」
- あなた「明日は?」
- 友人「...?(前の会話を覚えていない)」
会話形式(Chat Completion)
- あなた「今日の天気は?」
- 友人「晴れです」
- あなた「明日は?」
- 友人「明日も晴れの予報です」(前の会話を理解している)
Chat Completion は、会話の文脈を保持しながら、自然な対話を実現します。AI は過去のやり取りを記憶し、それを踏まえて応答します。
Chat Completion の基本構造
Chat Completion API では、会話を「メッセージの配列」として扱います。各メッセージには「役割(role)」と「内容(content)」があります。
3つの役割
- system: AI の振る舞いを指示する
- user: ユーザーからのメッセージ
- assistant: AI からの応答
会話の例
[
{
"role": "system",
"content": "あなたは親切なアシスタントです。"
},
{
"role": "user",
"content": "Pythonとは何ですか?"
},
{
"role": "assistant",
"content": "Pythonはプログラミング言語です..."
},
{
"role": "user",
"content": "それは初心者に向いていますか?"
}
]
このように、会話履歴を配列として管理することで、AI は文脈を理解して応答できます。
システムメッセージの重要性
システムメッセージは、AI の「性格」や「振る舞い」を定義します。会話の最初に一度だけ設定し、AI がどのように応答すべきかを指示します。
基本的なシステムメッセージ
あなたは親切で丁寧なアシスタントです。
ユーザーの質問に対して、正確で分かりやすい回答を提供してください。専門的なシステムメッセージ
あなたはPython専門のプログラミング講師です。
初心者にも分かりやすく、コード例を交えて説明してください。
不確実な情報は提供せず、分からない場合は正直にそう伝えてください。システムメッセージを工夫することで、AI の応答品質を大きく向上させられます。
会話履歴の管理
Chat Completion では、会話が長くなるほどメッセージの配列が大きくなります。これを適切に管理することが重要です。
課題 1: コンテキストウィンドウの制限
AI モデルには、一度に処理できるトークン数に上限があります。会話が長くなりすぎると、古いメッセージが処理できなくなります。
課題 2: コストの増加
多くの AI API は、入力トークン数に応じて課金されます。会話履歴が長いほど、毎回のリクエストのコストが増加します。
課題 3: レスポンス時間
処理するメッセージが多いほど、AI の応答時間が長くなります。
会話履歴の管理戦略
これらの課題を解決するために、いくつかの管理戦略があります。
戦略 1: スライディングウィンドウ
最新の N 件のメッセージだけを保持し、古いものは破棄します。
最新10件を保持する例:
[system] あなたは親切なアシスタントです
[user] こんにちは
[assistant] こんにちは!
...(7件)
[user] 最新の質問古いメッセージは破棄されますが、最近の文脈は維持されます。
戦略 2: 要約による圧縮
古い会話を要約することで、重要な情報を保持しながらトークン数を削減します。
【圧縮前】(1,500トークン)
[user] 今日の天気は?
[assistant] 晴れです。気温は25度...
[user] 傘は必要?
[assistant] 今日は晴れなので不要です...
【圧縮後】(200トークン)
[system] 過去の会話要約: ユーザーは天気について質問。
今日は晴れで25度、傘は不要と回答済み。戦略 3: 重要度に基づく保持
すべてのメッセージを平等に扱うのではなく、重要なものだけを残します。
保持優先度:
1. システムメッセージ(必須)
2. ユーザーの基本情報や設定
3. 現在のタスクに関連するメッセージ
4. 最新の数件の会話
5. その他の雑談(削除候補)パラメータの調整
Chat Completion API には、応答の品質を調整するためのパラメータがあります。
temperature(創造性)
- 範囲: 0.0 〜 2.0
- 低い値(0.0〜0.3): 決定的で一貫性のある応答
- 高い値(0.7〜1.0): 創造的で多様な応答
- 推奨: 事実確認は 0.2、クリエイティブな文章は 0.8
max_tokens(最大長)
- 生成する応答の最大トークン数
- 推奨: 短い応答は 256、長文は 2048 以上
top_p(多様性)
- 範囲: 0.0 〜 1.0
- 上位 P% の確率を持つトークンから選択
- 推奨: temperature との併用は避け、どちらか一方を使う
frequency_penalty(繰り返し抑制)
- 範囲: -2.0 〜 2.0
- 正の値: 同じ表現の繰り返しを抑制
- 推奨: 0.3 〜 0.5 で繰り返しを適度に防ぐ
presence_penalty(話題の多様性)
- 範囲: -2.0 〜 2.0
- 正の値: 新しい話題への転換を促進
- 推奨: 0.3 〜 0.6 で多様な話題を引き出す
実用的なパターン
Chat Completion を効果的に使うための実用パターンを紹介します。
パターン 1: ロールプレイ
[
{
"role": "system",
"content": "あなたは経験豊富なキャリアカウンセラーです。相談者の悩みに共感しながら、具体的なアドバイスを提供してください。"
},
{
"role": "user",
"content": "転職すべきか悩んでいます..."
}
]
システムメッセージで具体的な役割を与えることで、専門性の高い応答が得られます。
パターン 2: Few-Shot プロンプト
[
{
"role": "system",
"content": "文章を要約してください。"
},
{
"role": "user",
"content": "長い文章1..."
},
{
"role": "assistant",
"content": "要約結果1"
},
{
"role": "user",
"content": "長い文章2..."
},
{
"role": "assistant",
"content": "要約結果2"
},
{
"role": "user",
"content": "実際に要約してほしい文章"
}
]
過去の例を示すことで、AI に期待する形式を学習させます。
パターン 3: 段階的な対話
[
{
"role": "system",
"content": "ユーザーの要望を段階的に聞き出してください。不明点があれば質問してください。"
},
{
"role": "user",
"content": "旅行の計画を手伝って"
},
{
"role": "assistant",
"content": "いくつか質問させてください。1) いつ頃の旅行ですか? 2) 何日間の予定ですか? 3) 予算はどのくらいですか?"
}
]
AI から質問を引き出すことで、インタラクティブな対話を実現します。
マルチターン対話のベストプラクティス
複数回のやり取りを伴う対話では、以下のベストプラクティスが有効です。
1. システムメッセージを明確に
AI の役割、制約、出力形式を明確に指示します。
2. 会話の文脈を維持
ユーザーが「それ」「あれ」といった指示語を使っても、AI が理解できるように会話履歴を保持します。
3. エラー時の復旧
AI が誤解した場合、ユーザーが訂正できるように設計します。
ユーザー: 「明日の予定を教えて」
AI: 「明日は会議が3件あります」
ユーザー: 「いえ、明後日の予定です」
AI: 「失礼しました。明後日は...」4. 会話のリセット機能
長い対話では、ユーザーが会話をリセットして新しいトピックを始められるようにします。
まとめ
Chat Completion は、現代の AI アプリケーションにおける標準的な対話パターンです。会話履歴を管理しながら、自然で文脈を理解した応答を実現します。
重要なポイント
- メッセージの役割 - system、user、assistant の3つの役割を適切に使い分ける
- システムメッセージ - AI の振る舞いを制御する最も重要な要素
- 会話履歴の管理 - スライディングウィンドウ、要約、重要度ベースで効率化
- パラメータ調整 - temperature、top_p などで応答の品質を制御
- 実用パターン - ロールプレイ、Few-Shot、段階的対話などを活用
Chat Completion を使うべき場面
- カスタマーサポートチャットボット
- 教育用の対話型チュータリング
- コーディングアシスタント
- キャリアカウンセリングや相談サービス
- マルチターンで情報を収集するアプリケーション
従来の Text Completion を使うべき場面
- 単発の文章生成(記事の続きを書くなど)
- テンプレート型の生成タスク
- 会話の文脈が不要なタスク
Chat Completion を適切に実装することで、ユーザーは AI と自然な対話を楽しめるようになります。会話履歴の管理とパラメータ調整を工夫することで、高品質な対話体験を提供できます。