生成AIで会社の要件定義プロセスを100倍高速化した話

### News

本記事をベースに、Ledge.ai主催の「[AI勉強会](https://ledge.ai/articles/event_study_ledgeai)」で登壇させていただきました！
その時の登壇資料は[こちら](https://www.tc3.co.jp/ledgeai-presentation-dl-genai-dev-improvement/)からダウンロードすることが出来ます。

## 要約

- 要件定義で生成AIを活用するポイントを整理
- 要件定義に特化したAIシステムのアーキテクチャを紹介
- 一般的なソフトウェア開発プロセスに適用できるので範囲が広い

### 最終的な成果物

↓パワーポイントで作った資料をgifでエクスポートしたもの
![プロジェクト(1)_20241120171130.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/7f13bc61-935b-336f-9685-77066f14dfad.gif)

このパワーポイントの資料、 **まったく人の手で修正をしていません** 。完全自動の生成AIで作成された資料です。もちろん完璧なものにはならないので修正が必要なところも出てくるのですが、修正可能なpptx形式で出力されるのでパワーポイントでサクッと修正ができます。そして **１からこの資料を作るのに15分もかかっていません** 。この"１から"というのはプロジェクトのアイデア段階という意味で、例えばこの資料は例として出すために作ったのですがその内容を考え始めて15分で出来てしまいました。
ちなみに100倍というのはこのような資料を作るのに大体3営業日(=8時間x3=24時間)かかっているという仮定に基づい計算しています(1/4時間 / 24時間 ~= 100倍)。

今回はこの資料を自動生成出来るシステムを作るに至った背景や実際にどのような動作をさせているのかを説明したいと思います。

↓ちなみに任意のテンプレートで生成できます（所属する会社のスライド）
![プロジェクト(1)_20241122134208.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/c1a30bfe-24e5-5f8e-1ad5-c7800e7ae13c.gif)

会社のテンプレートは最適化をしていないので完成度があまり高くないです。最適化の作業をすれば上のスライドと同じように使えるものになると思います。

## 背景
### そもそもどのような課題があったの？

僕は普段ソフトウェア/AI開発に携わっております。これらの開発プロセスでは大きく以下のようなステップがあると思います。

ステップ１：要件定義(提案)
ステップ２：設計(技術調査)
ステップ３：開発
ステップ４：テスト
ステップ５：リリース

どのステップも簡単ではないのですが、個人的にはステップ1の要件定義が重くボトルネックになることが多いと感じていました。要件定義が難しかったり時間がかかる理由はいくつかあると思うのですが

* 人vs人による進め方になる
* 依頼側、開発側それぞれの案件解像度・整理スキルに依存
* マネージする人の質に大きくプロジェクトのスピードや質が左右
* 要件定義によって後段のステップが大きく左右されてしまうため慎重になる

のような要因があるのではないかなと思っています。

### もう少し要件定義プロセスを分解してみる

要件定義といっても色々なレベルがあるのでもう少しブレイクダウンします。()は具体例です。

1. 課題の整理 (ex. 営業部門の成績を上げたい)
2. プロジェクトアイデアの作成 (ex. AIで顧客を分析して戦略を立てる)
3. プロジェクトの概要整理 (ex. 営業部門の成績を上げるため、ブラウザUIのAI分析システムを作る)
4. 大まかなタスクの洗い出し (ex. データ分析をする、分析精度の検証)
5. スケジュール(工数、費用)の見積り (ex. 2人月かかる、予算500万)
6. 上記に基づいた提案資料の作成 (ex. 社内提案書の作成)
7. 提案資料へのフィードバック (ex. 社内レビュー) 
8. 提案資料の修正 (ex. 提案書の最終版完成)

要件定義自体も業種や企業の違いによってスコープのバラつきがあり、手戻りして検討しなおすなども多々発生すると思うのですが、大体こんな流れではないでしょうか。

## 解決法
### 生成AIを活用した細かい部分の解決方法はある

生成AIを活用した解決方法はいくつかあります

* ChatGPTで要件定義をサポートしてもらう
* 生成AIを活用した資料生成のサービスを使う

以前のように要件定義を全て人が担当するよりは生成AIを活用することで効率化が出来てきてると思います。ただ、上のように要件定義を分解してみるとまだまだ効率化出来ていない箇所が多いです。
特に個人的に気になっているポイントがスイッチングコストです。例えば、課題の整理～タスク生成をChatGPTを使い、そのデータはwordやexcelにまとめた後、資料作成サービスにインプットするとします。複数のサービスやツールを跨ぎながら進めていくのは意外と大変で思ったより時間がかかります。

例を整理した図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/e4a282c7-672f-a728-83c8-78764e8c91ca.png)

このように複数のツールやシステムを横断していると、冒頭で話したような15分での完成は難しいと思っています。

### どうすればより効率化できるのか？

#### フォーマットを変える必要性

なぜ複数のツールが必要になってくるかを考えてみると、それは人の理解のためだったりシステムの動作上の制限だったりします。例えばChatGPTの出力のまま説明したり何かに使うわけではないのでコピペしてワードなりのファイルに人が変換します。タスク生成やスケジュール、見積もりではエクセルに数値を入れていくことも多いです。最後にはスライド生成AIへの指示とするためにテキスト化して入れる必要があると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/da69e99b-a1d0-dc73-73d0-e0d25656353c.png)

#### データのフォーマットを変える作業を減らす

例えばChatGPTが自動的にWordやExcelファイルの生成が出来たり、AIスライド生成機能がWord等に基づいて動作するのであれば、人が動く量は減り効率化されると思います。

もう一つの方法としては、1ツールのカバー範囲を広げること。例えばチャットで要件定義する機能とAIでスライドを生成する機能を２つ実装してしまい、それぞれの機能で連携してしまえば内部で共通のフォーマットになります。ただし、wordやexcelとしない分、UI上で分かりやすく表示するなどの工夫が必要になってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/5985c591-3f8b-87c2-860f-44cc29ac41a0.png)

## 要件定義プロセスに特化したシステムの開発

### システムワークフロー

今回開発したシステムでは以下の機能を持たせています

1. 事前知識機能
2. AIチャット機能
3. AI同士のディスカッション機能
4. タスク生成機能
5. パワーポイント生成機能
6. 資料レビュー機能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/f4a03cf7-1e14-101a-9c96-90546d9d6498.png)

### 環境情報

* フロントエンド/バックエンドはStreamlitを使用(UIの見た目より機能を優先)
* LLMにはOpenAIのGPT4, gpt-4-turbo, GPT4o等を機能ごとに分けて使用
* 重い処理は全部API経由で任せられるのでインスタンス自体のスペックは低め

### 簡単に機能を紹介

#### 1. 事前知識機能

プロジェクトを進める上で背景資料は多くの場面であると思います。毎回それを手打ちしたりコピペするのは本当に大変なので事前知識として取り込める機能を実装しました。基本的にはPDFパーサーでPDFを読み込んで処理すればいいので難易度は低めです。
その他の実装として参照先にURLがあってその知識を前提としたディスカッションもあったりするのでそのURL先を読めるようにもしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/c7ca11d5-aef2-4a77-cbe0-18cd74419782.png)

#### 2. AIチャット相談機能

まず考え始めたのがこの機能です。基本的にはChatGPTのようなイメージですが、いくつかポイントがあって

* 事前知識を利用できるようにする
* AIに背景情報を教える(プロンプトチューニング)
* 最終的なゴールを決める

という点です。ただのChatGPTだといつまで使えばいいのか分からないので、今回のシステムではプロジェクトシートと呼ばれる構造化データを作成できるまでを目標にしています。

AIとのディスカッションが進み、プロジェクトシートが出力された図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/a00fd3e1-b9f4-e83c-1f76-d56dd093ab0b.png)

#### 3. AI同士のディスカッション機能

ChatGPTのようなチャット形式のUIは使いづらいという指摘も最近では出ています。確かに毎回文字を打って相談していくのは大変な作業です。実際に僕も使っていてそう思い、 **後は勝手にAIが話し合って具体化してくれないかな** とこの機能を実装しました。これが思った以上に良い機能で、ハルシネーションも多かったりするのですが新しいアイデアを出したりしてくれるので、AIチャット相談からより深い議論が出来るようになりました。

これもAIチャット機能と同じでゴールを決めないと永遠に話し合ってしまうので、要件定義書(とはいえ人間が作るようなクオリティにはなってない)の作成をゴールとしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/1c33f47c-94cc-2993-1848-c0481eff5d86.png)

#### 4. タスク生成機能

今まで整理した内容や議論をベースに作業タスクを作ってくれる機能です。背景ややりたいことは分かった、じゃあこれから何をしていくの？というポイントは要件定義において一番重要と言っても過言ではない部分です。
実際に開発してみるとここはかなり難しい機能でした。まだまだ改善点も多くあります。特に素のChatGPTでは難しい要素が沢山あり、プロンプトをかなり作りこんだり複数回の試行でアウトプット出したりさせ精度を上げていく必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/9e7cb18b-494e-ee19-2d13-5ba8f193045d.png)

#### 5. パワーポイント生成機能

今までの内容をまとめてパワーポイント資料を作ってくれる機能です。要件定義プロセスでは最終的に人（社内の上長、お客様、チームメンバー）に内容を説明し納得してもらう必要があるので、分かりやすい資料を作り上げる必要があります。
この機能で重要だと思う点はパワーポイントで出力する点です。よく生成AIの活用例として挙げられるのはLLM + Marpで資料を作るコンビです。この利点はLLMの強力なコード生成能力をフル活用して資料を作れる点で、今回のシステムでも最初はこれを利用して資料を作成していました。しかし大きな弱点があり、出力はPDF・パワーポイントなど選べるのですが、出力後のファイルは編集できないのです。
PDFはもちろんそのまま編集できない（Adobe Acrobatならできる？）ですし、パワーポイントも画像のような形になってしまい文字が編集できません。なので、今回のシステムではpython-pptxというパワーポイントを操作できるライブラリを採用しています。この場合、Marpを使った時のようなLLMの動作がさせられないのでプロンプトを作りこむ必要があります。

#### 6. 資料レビュー機能

生成された資料を読み込みAIにレビューしてもらう機能です。基本的な技術としては事前知識機能のものと同様です。表形式にして指摘内容を分かりやすくしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/b9d6152c-a3fd-69a0-38ea-b174b4a35f6b.png)

## まとめ

今回は会社の要件定義プロセスを改善するシステムを作成し、実際に効率化が出来たのでその内容を紹介しました。ChatGPTを活用して効率化しているという方は多くいると思いますが、その先に進みたいと思われている方のお役に立てれば何よりです。
また、このシステムを使ってみたいという方がいらっしゃったら弊社ホームページ (https://www.tc3.co.jp/) からお声がけ頂ければ無料で使うことが可能です。
もう少し詳細に知りたいという方はこちら(https://info.gigcomet.com/intro) をご覧ください！

## 今後の発展について

試しに僕の学生時代の論文の１つを入れてみましたが、思ったよりいい紹介スライドが出来ていてびっくりしました。今回はソフトウェア/AI開発を想定していましたが、それ以外の多くの分野に使えるのかもと思っています。

(現役学生の時に欲しかった...)
![my論文_20241125042640.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128334/20201677-fa8c-eb62-0df9-6ea8e00adbf4.gif)