Chat Completion

チャット補完

Chat Completion を分かりやすく

Chat Completion(チャット補完)は、AI モデルとチャット形式で対話するための API パターンです。

例え話をしましょう。あなたが友人と会話をしているとします。

単純な質問応答(Text Completion)

  • あなた「今日の天気は?」
  • 友人「晴れです」
  • あなた「明日は?」
  • 友人「...?(前の会話を覚えていない)」

会話形式(Chat Completion)

  • あなた「今日の天気は?」
  • 友人「晴れです」
  • あなた「明日は?」
  • 友人「明日も晴れの予報です」(前の会話を理解している)

Chat Completion は、会話の文脈を保持しながら、自然な対話を実現します。AI は過去のやり取りを記憶し、それを踏まえて応答します。

Chat Completion の基本構造

Chat Completion API では、会話を「メッセージの配列」として扱います。各メッセージには「役割(role)」と「内容(content)」があります。

3つの役割

  1. system: AI の振る舞いを指示する
  2. user: ユーザーからのメッセージ
  3. 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 アプリケーションにおける標準的な対話パターンです。会話履歴を管理しながら、自然で文脈を理解した応答を実現します。

重要なポイント

  1. メッセージの役割 - system、user、assistant の3つの役割を適切に使い分ける
  2. システムメッセージ - AI の振る舞いを制御する最も重要な要素
  3. 会話履歴の管理 - スライディングウィンドウ、要約、重要度ベースで効率化
  4. パラメータ調整 - temperature、top_p などで応答の品質を制御
  5. 実用パターン - ロールプレイ、Few-Shot、段階的対話などを活用

Chat Completion を使うべき場面

  • カスタマーサポートチャットボット
  • 教育用の対話型チュータリング
  • コーディングアシスタント
  • キャリアカウンセリングや相談サービス
  • マルチターンで情報を収集するアプリケーション

従来の Text Completion を使うべき場面

  • 単発の文章生成(記事の続きを書くなど)
  • テンプレート型の生成タスク
  • 会話の文脈が不要なタスク

Chat Completion を適切に実装することで、ユーザーは AI と自然な対話を楽しめるようになります。会話履歴の管理とパラメータ調整を工夫することで、高品質な対話体験を提供できます。