ChatGPT 出力の文字数制御テクニック
ChatGPT をはじめとする大規模言語モデル (LLM) は、文章生成の強力なツールとして広く活用されています。しかし、「500 文字で要約して」と指示しても正確に 500 文字にはならない、出力が途中で切れてしまう、といった文字数に関する悩みを抱えるユーザーは少なくありません。本記事では、ChatGPT の出力文字数を効果的に制御するためのプロンプト設計テクニック、トークンと文字数の関係、そして各モデルの出力上限について詳しく解説します。
トークンと文字数の関係
ChatGPT の出力制限を理解するには、まず「トークン」の概念を把握する必要があります。LLM は文字数ではなくトークン数で入出力を管理しています。
| 言語 | 1 トークンあたりの文字数 | 1,000 文字あたりのトークン数 | 備考 |
|---|---|---|---|
| 日本語 (ひらがな) | 約 0.5〜1 文字 | 約 1,000〜2,000 トークン | ひらがなは効率が低い |
| 日本語 (漢字混じり) | 約 0.7〜1.5 文字 | 約 700〜1,400 トークン | 漢字は比較的効率的 |
| 英語 | 約 4〜5 文字 | 約 200〜250 トークン | 英語は最も効率的 |
| 中国語 | 約 0.5〜1.5 文字 | 約 700〜2,000 トークン | 日本語と同程度 |
| 韓国語 | 約 0.5〜1 文字 | 約 1,000〜2,000 トークン | ハングルは効率が低い |
日本語は英語に比べてトークン効率が低いため、同じトークン数でも生成できる文字数が少なくなります。日本語 1,000 文字は約 700〜1,400 トークンに相当し、英語の 3〜5 倍のトークンを消費します。この差は API の利用コストにも直結するため、日本語での利用時はトークン消費量を意識することが重要です。
主要 LLM モデルの出力上限比較
各モデルの出力トークン上限と、日本語に換算した場合の概算文字数を比較します。
| モデル | 最大出力トークン | 日本語換算 (概算) | コンテキストウィンドウ |
|---|---|---|---|
| GPT-4o | 16,384 トークン | 約 8,000〜16,000 文字 | 128K トークン |
| GPT-4 Turbo | 4,096 トークン | 約 2,000〜4,000 文字 | 128K トークン |
| GPT-3.5 Turbo | 4,096 トークン | 約 2,000〜4,000 文字 | 16K トークン |
| Claude 3.5 Sonnet | 8,192 トークン | 約 4,000〜8,000 文字 | 200K トークン |
| Gemini 1.5 Pro | 8,192 トークン | 約 4,000〜8,000 文字 | 1M トークン |
| Amazon Nova Lite | 5,120 トークン | 約 2,500〜5,000 文字 | 300K トークン |
出力トークン上限を超えると、文章が途中で切れる「トランケーション」が発生します。長文を生成する場合は、複数回に分けて出力させるか、出力上限の大きいモデルを選択する必要があります。
プロンプトで文字数を制御するテクニック
ChatGPT に特定の文字数で出力させるためのプロンプト設計テクニックを紹介します。LLM は文字数を正確にカウントする能力が限定的であるため、工夫が必要です。
- 文字数ではなく「量」で指定する: 「500 文字で書いて」よりも「3 段落で書いて」「箇条書き 5 項目で書いて」の方が、期待に近い出力が得られます。1 段落は約 100〜200 文字、箇条書き 1 項目は約 30〜80 文字が目安です
- 文字数の範囲を指定する: 「ちょうど 500 文字」ではなく「400〜600 文字の範囲で」と幅を持たせると、より自然な文章が生成されます
- 出力形式を具体的に指定する: 「見出し 3 つ、各見出しの下に 2〜3 文の説明」のように構造を指定すると、文字数のコントロールがしやすくなります
- 「簡潔に」「詳細に」のキーワードを使う: 「簡潔に 1 文で」は 20〜50 文字、「詳細に説明して」は 300〜800 文字程度の出力になる傾向があります
- max_tokens パラメータを設定する (API 利用時): OpenAI API では max_tokens パラメータで出力トークン数の上限を設定できます。日本語 500 文字を目安にする場合、max_tokens を 700〜1,000 に設定します
文字数制御の実践例
具体的なプロンプト例と、期待される出力文字数を示します。
| プロンプト例 | 期待される出力文字数 | 精度 |
|---|---|---|
| 「一言で要約して」 | 20〜50 文字 | 高い |
| 「3 行で要約して」 | 60〜120 文字 | 高い |
| 「100 文字以内で説明して」 | 60〜130 文字 | 中程度 |
| 「500 文字程度で書いて」 | 300〜700 文字 | 低い |
| 「箇条書き 5 項目で」 | 150〜400 文字 | 高い (項目数) |
| 「Twitter 投稿用に 140 文字以内で」 | 80〜160 文字 | 中程度 |
| 「見出し 3 つ、各 100 文字で」 | 250〜400 文字 | 中程度 |
LLM は文字数を正確にカウントする能力が弱いため、「ちょうど 500 文字」のような厳密な指定は困難です。出力後に文字数を確認し、必要に応じて「もう少し短くして」「あと 100 文字追加して」と調整するのが現実的なアプローチです。
API での文字数制御パラメータ
OpenAI API を使用する場合、プログラム的に出力文字数を制御できるパラメータがあります。
- max_tokens: 出力の最大トークン数を指定します。日本語の場合、目標文字数の 1.0〜1.5 倍のトークン数を設定するのが目安です。例えば 500 文字の出力を得たい場合、max_tokens を 500〜750 に設定します
- temperature: 0 に近いほど決定的な出力になり、文字数のばらつきが小さくなります。文字数の安定性を重視する場合は 0.3〜0.5 が推奨です
- stop: 特定の文字列が出現した時点で出力を停止します。「。」を stop に設定すると、最初の文で出力が止まります
- system プロンプト: 「あなたは常に 200 文字以内で回答するアシスタントです」のようにシステムプロンプトで文字数制約を設定すると、一貫した文字数制御が可能です
長文生成時の文字数管理
出力上限を超える長文を生成する場合のテクニックを紹介します。
- 分割生成: 「まず第 1 章を書いて」「次に第 2 章を書いて」のように、セクションごとに分割して生成します。各セクションの文字数を指定することで、全体の文字数をコントロールできます
- アウトライン先行: 最初にアウトライン (見出しと各セクションの概要) を生成し、その後各セクションを個別に展開します。アウトラインで全体の構成と文字数配分を決めておくと、バランスの取れた長文が生成できます
- 「続きを書いて」の活用: 出力が途中で切れた場合、「続きを書いて」と指示すると、前の出力の続きから生成されます。ただし、文脈が失われることがあるため、前の出力の末尾を引用して「以下の続きを書いて: [末尾の文]」とする方が確実です
ChatGPT の出力文字数に関するよくある問題
ChatGPT の文字数制御で遭遇しやすい問題と、その対処法を紹介します。
- 出力が途中で切れる: 出力トークン上限に達した場合に発生します。「続きを書いて」で継続するか、max_tokens を増やします。GPT-4o は最大 16,384 トークンまで出力可能です
- 指定した文字数と大きくずれる: LLM は文字数を正確にカウントできないため、±30% 程度のずれは想定内です。構造 (段落数、箇条書き数) で指定する方が精度が高くなります
- 日本語の出力が英語より短い: 日本語はトークン効率が低いため、同じトークン数でも英語より短い出力になります。日本語で長文を生成する場合は、max_tokens を多めに設定しましょう
- 繰り返しが発生する: 長文生成時に同じ内容が繰り返されることがあります。frequency_penalty パラメータを 0.5〜1.0 に設定すると、繰り返しを抑制できます
まとめ
ChatGPT の出力文字数は、トークン数によって制限されます。日本語は 1 トークンあたり約 0.7〜1.5 文字で、英語の 3〜5 倍のトークンを消費します。文字数を制御するには、構造 (段落数・箇条書き数) で指定するのが最も効果的です。ChatGPT で生成した文章の文字数確認には、文字数カウントスをぜひご活用ください。