はじめに
先日、AIと要件定義の話をしていて、思わぬところで認識のズレが発生しました。
要件として書いたのは、
当月を含み過去3ヶ月分を表示する
という一文。
私は当然、
- 4月
- 5月
- 6月(当月)
の 3ヶ月分 が表示されると思っていました。
ところがAIは、
- 3月
- 4月
- 5月
- 6月(当月)
の 4ヶ月分 と解釈しました。
「いやいや、『当月を含み』って書いてるやん!」
と思わずツッコミを入れたのですが、このやり取りが意外と要件定義の本質的な話につながっていました。
人間の感覚ではなぜ3ヶ月なのか
多くの人は、
当月を含み過去3ヶ月分
という文章を見たとき、
「当月も含めた上で3ヶ月分」
と解釈します。
例えば現在が6月なら、
| 月 | 含まれる |
|---|---|
| 6月 | ○ |
| 5月 | ○ |
| 4月 | ○ |
| 3月 | × |
合計3ヶ月です。
これは日本語として非常に自然な解釈です。
日常会話でも、
過去3日間
と言われたら、
今日を含めるケースもあれば含めないケースもありますが、前後の文脈で自然に補完します。
人間同士は曖昧な表現をかなりの割合で補完しながら会話しています。
AIはなぜ4ヶ月と考えたのか
AIの解釈は意外とシンプルです。
文章を次のように分解します。
- 当月を表示する
- 過去3ヶ月を表示する
すると、
| 月 | 理由 |
|---|---|
| 6月 | 当月 |
| 5月 | 過去1ヶ月 |
| 4月 | 過去2ヶ月 |
| 3月 | 過去3ヶ月 |
となり、合計4ヶ月になります。
つまりAIは、
当月を含む過去3ヶ月
ではなく、
当月 + 過去3ヶ月
として解釈したわけです。
実はAIだけの問題ではない
面白いのは、これがAI特有の問題ではないことです。
実際の開発現場でも、
- 発注者
- 開発者
- テスター
で解釈が分かれることがあります。
例えば開発者が、
for (int i = 0; i <= 3; i++)
と実装すると、
- 0ヶ月前(当月)
- 1ヶ月前
- 2ヶ月前
- 3ヶ月前
となり4ヶ月表示になります。
一方で発注者は、
「3ヶ月分って言ったよね?」
となる。
つまり、
AIと喧嘩しているようで、実は人間同士でも起きる認識ズレだった
ということです。
AIを使うと曖昧さが可視化される
これまで人間同士の開発では、
- なんとなく伝わる
- 誰かが察する
- レビューで修正される
という流れがありました。
しかしAIは察してくれません。
むしろ、
曖昧な日本語を機械的に解釈する
ので、人間が普段見逃している曖昧さをあぶり出してくれます。
今回も、
「AIが間違えた」
というより、
「要件に解釈の余地があった」
と考える方が本質に近いと思います。
今後の要件定義ではどう書くべきか
NG例
当月を含み過去3ヶ月分を表示
人によって、
- 3ヶ月
- 4ヶ月
の解釈が発生する可能性があります。
OK例① 件数を明示する
当月を含む直近3ヶ月分を表示
OK例② 対象期間を明示する
表示対象は当月および過去2ヶ月
OK例③ 具体例を書く
2026年6月時点では
4月、5月、6月を表示する
これが最も誤解が少ないです。
AI時代の要件定義で大切だと思ったこと
今回のやり取りで感じたのは、
AIに伝わる文章を書くことは、
実は人間にも伝わる文章を書くこととほぼ同じ
ということでした。
人間は曖昧な表現を補完できます。
しかし、
- AI
- 開発者
- テスター
- 将来の自分
は必ずしも同じ解釈をしてくれるとは限りません。
だからこそ、
「たぶん伝わる」
ではなく、
「他の解釈が存在しない」
レベルまで具体化することが重要になります。
まとめ
今回の認識ズレは、
当月を含み過去3ヶ月分を表示
という一文を、
私(人間)は
当月を含めて合計3ヶ月
と解釈し、
AIは
当月 + 過去3ヶ月
と解釈したことで発生しました。
一見するとAIの読解力の問題に見えますが、本質は要件の曖昧さです。
AIを開発に活用する機会が増えている今、
- AIに伝わる要件
- 人間に伝わる要件
を分けて考えるのではなく、
誰が読んでも同じ解釈になる要件を書く
ことがますます重要になっていると感じました。
AIと喧嘩したつもりが、要件定義の勉強になった話でした。