ChatGPTで文字数指定が守れない理由と対処法を解説

「ChatGPTに文字数を指定しても、なぜかいつもオーバーする…」そんな経験はありませんか？

ブログやSNS投稿、SEO対策などで「30〜40字以内でタイトルを作って」と依頼したはずなのに、実際にはそれを超えてしまう。しかも、ChatGPTに文字数を聞いてみると人間のカウントと大きくズレている…。

本記事では、**なぜChatGPTが文字数を正確にカウントできないのか** という疑問に迫りつつ、**より意図に近い文章を生成させるためのプロンプトの工夫や実践的な対処法** について、わかりやすく解説します。

> ※使用ツール：ChatGPT（GPT-4oモデル）
> ※本記事の内容は、2024/10/21時点の仕様です。

# ChatGPTに文字数を守らせるのは難しい？
ChatGPTは高精度な回答を生成できますが、文字数指定を厳密に守るのは苦手です。

以下では、「Microsoft To Doでタスクを簡単に整理！生産性向上のための使い方徹底解説」というタイトルを生成してもらいました。

一見、30～35字で生成してくれたように見えますが、別のツールで文字数をカウントしてみると、42文字（スペースなし40文字）でした。指定文字数を大幅に超えてしまっていて、修正が必要になります。

![2242205f-21a0-4f0c-93c3-b09d37bf6a78.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629176/e9892ec4-68a2-45db-98b3-9708b98cf110.png)


次に、上記で生成したタイトルの文字数もカウントしてもらいました。

![364e290f-1ff3-493d-986f-641093f550c5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629176/ef1cc6fc-40a2-4a38-bd37-80ca383e5b05.png)

* 人間のカウントは42文字
* ChatGPTのカウントは34文字

ChatGPTはカウント自体がそもそもできていません。

このように、ChatGPTでは文字数を数えるのが苦手です。では、どうしてこのようになってしまうのでしょうか。

# なぜChatGPTは正確な文字数をカウントできないのか
ChatGPTが文字数カウントでずれを起こす主な原因は、日本語を文字単位ではなく **「トークン」** いう単位で処理しているためです。

ChatGPTでは、文字を日本語として認識しておらず、トークンという別の単位で認識しています。

英語では1単語＝1トークン。
日本語では1文字≒1～3トークン。

また、特殊記号や絵文字なども複数トークンとしてカウントされるようで、ここにズレの生じる原因があります。

そのため、人間から見たら同じ文字数でも、使っている言語や文章の内容によってカウントは大きくずれてしまうと考えられます。

# ChatGPTに文字数指定する時の効果的な工夫とは？
では、文字数を指定する意味はないのかというと、そうではありません。少しの工夫でうまく使えるようになると思います。

工夫できるポイントとしては、次の2つが挙げられます。

1. プロンプトの書き方を工夫する
2. 出力結果に対して、追加で依頼する

結論から言うと、どちらも必要になります。

## 1. プロンプトの書き方を工夫する
プロンプトの書き方を工夫する場合、どのような書き方が良いでしょうか。以下の4パターンで検証してみました。

* 【パターンA】文字数指定無し
* 【パターンB】文字数指定のみ
* 【パターンC】文字数指定＋文字数が指定内に収まっているかを確認させる
* 【パターンD】文字数指定＋文字数のカウント方法を説明

### 【パターンA】文字数指定無し
<details open><summary>プロンプト例</summary>

```
織田信長について説明してください。

・テキストのみで直接出力してください。
・マークダウンにはしないでください
```
</details>

<details><summary>出力結果</summary>

![e54b2e36-bd25-4401-9e01-e47cbe4f6977.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629176/99fa8624-a4f0-41ce-807c-018cf1d2cdc4.png)

</details>

:::note
生成された文章の文字数は、1052文字
文字数指定してないためだらだらと長い文章が生成されています。
:::

### 【パターンB】文字数指定のみ
<details open><summary>プロンプト例</summary>

【パターンA】に **「#文字数」** を追加しています。

```
織田信長について説明してください。
​
・テキストのみで直接出力してください。
・マークダウンにはしないでください

# 文字数
・下限：400文字
・上限：500文字
```
</details>

<details><summary>出力結果</summary>

![53f78321-0640-431f-9660-4c6b7bee9cf7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629176/53c8e747-d56c-4c8a-94e2-3e09fcfa4623.png)

</details>

:::note
生成された文章の文字数は、561文字
指定文字数に近くなりましたが、少し多くなっています。
:::


### 【パターンC】文字数指定＋文字数が指定内に収まっているかを確認させる
<details open><summary>プロンプト例</summary>

【パターンB】に **「#文字数のカウント方法」** を追加しています。
```
織田信長について説明してください。
​
・テキストのみで直接出力してください。
・マークダウンにはしないでください

# 文字数
・下限：400文字
・上限：500文字

# 文字数のカウント方法
日本語での文字数は、単語数ではなく文字数で1文字とカウントします。
例：ShareGate ProtectでSharePointとTeamsの運用管理を効率化
この場合、合計43文字になります。内訳は以下の通りです
・ShareGate Protect：17文字
・SharePoint：10文字
・Teams：5文字
・運用管理を効率化：8文字
```
</details>

<details><summary>出力結果</summary>

![b01749d1-93dc-46a6-a425-c19b6e463278.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629176/4d0ed682-e684-4c27-8aee-144a88f135aa.png)

</details>

:::note
生成された文章の文字数は、534文字
パターンBと同様、指定文字数に近いですが少し多いです。
:::

### 【パターンD】文字数指定＋文字数のカウント方法を説明
<details open><summary>プロンプト例</summary>

【パターンB】に **「#手順」** を追加しています。
```
織田信長について説明してください。
​
・テキストのみで直接出力してください。
・マークダウンにはしないでください

# 手順
1. 織田信長について　# 文字数　で説明してください。
2. 出力する前に、文字数をカウントしてください
・カウント方法は、 #文字数のカウント方法 を参照し、正確に文字数をカウントしてください
・カウントした結果、#文字数 の条件を満たしていることを確認できた場合のみ、タスクを終了してください
・カウントした結果、#文字数 の条件を満たしていない場合は、#文字数 の条件を満たすまで文字を追加したり削除したりして処理を繰り返してください。

# 文字数
・下限：400文字
・上限：500文字
```
</details>

<details><summary>出力結果</summary>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629176/d96e619d-94fe-4254-a8ad-57fd137e274c.png" alt="ChatGPTプロンプト">
</details>

:::note
生成された文章の文字数は、541文字
パターンB・Cと同様、指定文字数に近いですが少し多いです。
文字数が指定内に収まっているかを確認させる処理は、ChatGPT自身が正確に文字数をカウントできないのであまり意味はないかもしれません。
:::

上記4パターンの結果を見ると、
* 文字数指定を入れないと狙った文字数で出力はしてくれないため、文字数自体は指定した方が良い
* ChatGPT自身に文字数が指定内に収まっているかを確認させたり、カウント方法を説明しても意味がない

という結論に至りました。


## 2. 出力結果に対して、追加で依頼する
文字数を指定するだけでは、うまく範囲内に収めることができないため、追加で依頼をしてみます。（いわゆる壁打ちのようなものです。）

以下の例では **【パターンB】文字数指定あり** の出力結果に対して、追加で文字数の増減を指示してみました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629176/57eaa1b7-891c-41cb-bcb2-d7ddacdc5665.png" alt="ChatGPT壁打ち">

何度か壁打ちをして、最終的には **415文字** に調整されました。
（472文字と出力されており間違ってはいますが、結果的には範囲内に収められています。）

# ChatGPTで狙った文字数に収めるためのコツ
ChatGPTに希望の文字数で文章を生成してもらうためには、以下のような工夫が必要です。

* **文字数を指定して文章を生成してもらう** 
※ChatGPT自身に文字数が指定内に収まっているかを確認させたり、カウント方法を説明しても意味がないので、文字数だけを指定するだけでも十分
* **人間が文字数をカウントし、範囲内に収まるよう修正依頼を繰り返す** 

今回の検証を通して、ChatGPTの苦手な部分を人間が補ってあげるというように、完全に任せるのではなくあくまでもツールとしてうまく飼い鳴らすことが大事だなと改めて感じました。

# 最後に
テンダでは、「こんなプロジェクトに挑戦したい」「こんなチームで働きたい」「理想のチームを創りたい」と願う仲間を求めています。
カジュアル面談も随時受付中です。ぜひ一度お話ししましょう！:sunny:

[募集職種一覧](https://hrmos.co/pages/tenda/jobs)
[カジュアル面談の申込](https://hrmos.co/pages/tenda/jobs/031002/apply)
[テンダで働く人や社風について](https://note.com/tenda_recruit)
[テンダのMicrosoftサービス](https://mssp.tenda.co.jp/)