はじめに
山一情報システム ビジネスデベロップメント部の hoshi です。
生成AIにどこまで開発や保守を任せられるか、いくつか試しています。その1つとして、あるソースをAIに読ませ、保守用の仕様書を書かせてみました。
それらしい仕様書はすぐに出来上がりますが、読みやすくするのには苦労しました。改善しようとルールを足すほど、AIはそのルールの通りに書き、かえって別の読みにくさが出てきたからです。
今回は、ルールを足していくうちに起きたことと、そこからどのように改善したのかをご紹介します。
取り組みの内容
仕様書はクラスごとに1冊ずつ、全部で200冊以上を作らせてみました。
最初はシンプルな指示だけで書かせてみましたが、読んでみると引っ掛かる所があちこちにあり、1冊ずつ手で直していては追い付かないので、直し方そのものをルールとして残していくことにしました。
AIがソースを読み仕様書を書く
→ 仕様書を読んで引っ掛かった所をAIに伝える
→ AIが直し方をルールとして残す
→ 次からはAIがそのルールを読んで書く
こうしてルールを積み重ねていけば、仕様書の形式は自然とそろっていき、一度伝えた引っ掛かりも次からは出なくなるのではないかと考えました。
人が200冊を直すのではなく、人がAIに「直し方」を教えることで、AI自身が次の仕事に生かしていく。そんな進め方ができるのではないかと考えました。
起きたこと
ルールの通りに書かれた文章
ところが、実際には引っ掛かりがなくなるどころか、別の問題が出てきました。
AIは足したルールを文字通りに守ります。ルールが合わない所でも、その通りに書いてしまい、それが今度は以下のような別の引っ掛かりを生むことになりました。
| 足したルール | 足した後に起きたこと |
|---|---|
| 同じ文を2度書かない | 同じ文は無くなったが、言い回しを変えて同じ説明が2回書かれた |
| 用語を統一する | 統一した用語が合わない所にまで、無理に当てはめて使われた |
| 中身の少ない文は消す | 残しておくべき文まで消された |
伝えた所は直ったように見えても、実際にはルールに合わせてその場だけ整えたもので、文章全体の読みやすさが改善したとは言えない状態でした。
そこで、引っ掛かった所を伝え直し、その書き方を禁止したり、別の書き方を指定したりしていました。
増え続けたルール
これを繰り返すうちにルールは100を超え、AIに毎回読ませる量も20万字近くにまで膨らみました。
ルールが多くなるにつれて把握しきれなくなり、似たようなことを違う言葉で説明しているルールや、前のルールと食い違うものも混ざり、AIにどのルールを適用させればいいのか分からなくなっていきました。
それに加え、文言の禁止をするルールが多くなることで、
いつの間にかAIの書き方を縛り、かえって不自然な文章を生成するようになっていたのです。
改善したこと
そこで、2段階に分けてルールを見直しました。
目的の書き出しとルールの整理
まず、仕様書を誰が読み、何のために読むのか、読んだ結果どうなってほしいのかを詳しく書き出しました。
例えば、次のような内容です。
| 書き出したこと | 中身 |
|---|---|
| 何のための仕様書か | そのコードを知らない人が、読んで使えるようになるためのもの |
| 誰が読むか | プログラマ。言語やオブジェクト指向の一般的な考え方は分かる |
| 読む人が知らないこと | そのコードが何をするのか。何を持っていて、どう動くのか |
| 読む人が知りたいこと | 何をするものか、どう使い始めるか、どれを呼ぶか、どう書くか |
これらをAIに読ませて目的を認識させ、目的にそぐわないルールを削除した事で仕様書は読みやすくなりました。ただ、それでも納得できる品質には届きませんでした。
問いの形のルールと手本
そこで、これまでの経験からAIは直し方をルールとして渡すと、そのルールを守ることに注力してしまうように感じていたので、書き方を細かく決めるのではなく、目的に合った仕様書を書くことに注力させる仕組みにしました。
具体的には、ルールを「こう書く」「〜しない」という形ではなく、簡潔な問いの形に書き直しました。
例えば、用語については「用語を統一する」というルールをやめ、「その言葉だけで、何を指すか思い浮かべられるか」と問うだけにしました。目指す方向を示すにとどめ、文章をどう書くかはAIに任せる、という考え方です。
また、手本となる文章も渡し、目指すものを見せるようにしました。「こう書いてください」と細かく指定するのではなく、実際の文章を見せることで、完成形を伝える方法です。
「引っ掛かり」をルールにしない
引っ掛かった所の扱いも変えました。
これまでは、伝えた引っ掛かりを細かい直し方のルールに書き換えていましたが、直し方を細かく決めるほど、出来上がる文章はかえって悪くなっていきました。
そこで、AIに伝えた引っ掛かりは、伝えたときの言葉のまま残すことにしました。どう直すかは、目的と手本に照らして、その都度AIに考えさせます。
つまり、
「この場合はこう直す」
と決めるのではなく、
「ここが引っ掛かった。目的と手本を踏まえて、どう直すか考えてみて」
という形に変えました。
結果、目的と手本を示し、具体的な直し方はAIに任せることで、ある程度満足できる水準まで文章を改善できました。
おわりに
今回の取り組みでは、AIは渡したルールを、合わない所でも書いてある通りに守ろうとしました。そのため、引っ掛かりが出る度に書き方を決めるルールを足していくと、そのルール通りの書き方が、次の引っ掛かりを生むことになりました。
書き方を細かく決めるのではなく、目指す方向だけを示すようにしたことが、改善のきっかけになりました。
目的を明確にし、問いの形で方向を示す。そして、手本を見せる。具体的な書き方はAIに任せることで、個々の内容に合った文章を目指せるようになりました。
同じようにAIに仕様書を書かせている方の参考になれば幸いです。
最後まで読んでいただき、ありがとうございました。