生成AI初心者のすゝめ

皆さん、メリークリスマス！
今年もクリスマス近辺の投稿枠を狙ってやってきました、クリスマス男のぶくろです。今年も[OpenStandiaのAdvent Calendar](https://qiita.com/advent-calendar/2024/nri-openstandia)に参加しています。
昨年は[BI を導入しよう！ Power BI と Tableau と Domo と Qlik を比較してみた](https://qiita.com/s-shimabukuro/items/af18a7b8fa6fe4ef91a1)という記事を書きましたが、今年は生成AIに関する取り組みについてお話ししたいと思います。

## 対象読者

- 「生成AI案件立ち上げたい！」と考えている方
- 「立ち上げたけど何したらいいかわからない！」と悩んでいる方

## ご注意

- AOAI等を利用した開発Tipsなど具体的な話は登場しません
- 情報漏洩防止の観点で曖昧な記載、抽象度の高い表現があります

## 本題

### 活動背景や状況

2023年後半に「生成AIの活動を始めよう」という話が持ち上がりました。この記事ではちょうど1年経って、AI案件をやるにあたり「何が大事だったか」を振り返ります。生成AIどころかAIすら素人な筆者がキャッチアップに使ったものとして、以下の資料を参考にしました。

- 生成AIのキャッチアップに使った参考資料
  - 内部仕様の理解：[Attention is All you need](https://www.youtube.com/watch?v=j3_VgCt18fA)
  - サービス仕様の理解：[Azure AI Search 公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/search/)
  - 生成AI適用の考え方の理解：[METI/AI事業者ガイドライン](https://www.meti.go.jp/shingikai/mono_info_service/ai_shakai_jisso/20240419_report.html)
    - AI事業者ガイドラインに関しては筆者が[勉強会向けに要約した](https://www.slideshare.net/slideshow/20240621_ai-_-_seiyashimabukuro/269784741)ものも合わせてご参照ください

本記事はAI事業者ガイドラインに則り、案件の活動が位置づけられる「AI提供者」(活動A)のパートと、それに派生して立ち上がった部門内特定業種プロジェクトへの生成AI活用を支援する「AI利用者」(活動B) のパートの2部構成で紹介します。

![活動Aと活動Bの位置づけ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697039/05449b5e-8aa1-d8d6-706b-511660236b07.png)
[^1] 
  
[^1]: [METI/AI事業者ガイドライン](https://www.meti.go.jp/shingikai/mono_info_service/ai_shakai_jisso/20240419_report.html) より抜粋および追記

### 生成AI導入活動

#### 【活動Ａ】AI提供者としての活動

![活動Aフォーカス.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697039/1c186025-fef0-15ac-2c60-88ce759e2841.png)
[^1]

生成AIを活用する業務のターゲティングはもちろん、必要な機能のディスカッションを行い、下図（モック）のような画面を開発チームに実装していただきました。  
概ね現在世に出ている生成AI系サービスと大きく差異のないUIになっているかと考えています。  
クイックに活用をはじめるため、画面デザインにはコストをかけすぎず、利用イメージをつけていくことを優先しています。  
また、RAGの機能では回答に加えて、回答に用いた参照元情報がどのようなファイルかプレビュー＋ダウンロードできる機能になっています。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697039/195c0539-fcdd-514c-86c2-d9bf80aabf90.png)  
[^2] 

[^2]: s-shimabukuro が Miro で作成

PoC的に利用を進めていく中で業務の情報を扱う需要が高まってきました。  
そこで扱われる情報の機密性を確認し、情報セキュリティ担当者や部門内と機密度の高い情報に対して以下のような機能的アプローチ or 運用的アプローチの議論を実施しました。

| 対応したリスク | 対応方法 |
| --- | --- |
| 機密性の異なる部門内ファイルが混在することにより、生成AIが関係者外へ情報を提供する | データソース（部外秘、部門内研修資料など機密性の異なるファイル群）ごとにインデックステーブルを分け、RAG利用時に画面からデータソースを選択できるようにする |
| 生成AIからの回答の根拠となるデータソースが本来持ち出し禁止のファイルで画面から持ち出される可能性がある | データソースの機密性に応じて引用元ファイル名の表示だけ行い、ダウンロードやプレビュー表示ができないようにした |
| 生成AIからの回答を利用者が鵜呑みにして誤情報が出回るリスクがある | 回答に注意書きを行い、回答にハルシネーションが含まれる可能性を示唆し、必ず利用者で内容チェックをするよう促した |


AI提供者の立ち上げ時の動きとしては  
- すぐ使える環境を **クイックに提供** できる
- **セキュリティリスクの対応を優先的** に行う
  - 扱われる情報の機密性を分類し、それぞれにあわせたアプローチを決める
  - 全てを機能で対応するのではなく **運用で回避するべき** 部分も決める  

といったことが大事だったと考えています。

---

#### 【活動Ｂ】AI利用者の支援活動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697039/fafa9ef7-44c1-81c5-d5cc-9c11dac07a69.png)
[^1] 

活動Bについては、活動Aにより構築された生成AI（RAG）基盤をもとに、特定部署にて顧客からの問合せ回答（①）と議事録の要約（②）で生成AIを活用する活動を行いました。

##### 活動概況
- <INS>①問合せ回答のユースケース</INS>
  - 問合せ回答の検討はWIPな状態で、チューニングなしだと20-25%の回答しか「ほぼ完璧」な状態になく、他は実用不可あるいは人力での修正が多数となることがわかっています。
    - これについてはWIPな部分もあるため詳細は割愛します。
- <INS>②議事録の要約</INS>
  - 同じような会議を数百回というオーダーで行う業務があり、その議事録の要約に対して生成AIを活用できないか検討しました。  
  - 対象の打合せは同様のアジェンダで200-300の対象者にヒアリングを行うもので、議事録フォーマットも決まっているものでした。
    - この活動を「プロンプトエンジニアリング」の "エンジニアリング" 部分に着目して考えてみました。

###### 議事録の要約

通常のエンジニアリング、特にシステム開発における工程は下図のようになります。

![通常のV字.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697039/74788374-a6de-66b4-c282-2170d7c494be.png)
[^3]

[^3]:  s-shimabukuro が Napkin AI により生成＋加筆修正

これを議事録要約のプロンプトエンジニアリングに当てはめると以下のようになると考えました。  

![議事録要約のV字.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697039/47c539ed-5029-b9b5-206c-362f51838462.png)
[^4]

[^4]:  s-shimabukuro が Napkin AI により生成＋加筆修正

__要件確認～プロンプト作成__
要件には「全ての打合せでアジェンダ・ヒアリング項目が同じ」「議事録として整理したい項目も同じ」「特定の業界用語や略語を使って会話する」といったことがあり、それを踏まえてプロンプトにはアジェンダの骨子、アウトプットの項目（議事録の要点）、用語などを記載しました。

__打合せの実施（文字起こし＋プロンプト適用）～コンテキスト確認__
本来であれば「議事録の作成」「作成した議事録のチェック（誤字脱字レベルから内容・要点まで）」はアウトソースし、人力で行う部分となります。  
今回はそのうちの「議事録の作成」「作成した議事録のチェック（誤字脱字レベルから字句・構文の意味確認まで）」が生成AIにより工数削減することができました。  
削減できなかったのは会議のコンテキストを文章化する部分で、特に「前の打合せで話した」「対面で会った時に話した」などの本会議中に出現しなかったトピックに関する言及は人が補足・確認しなければならないことになりました。  
    
__結果__
今回の対象の打合せは「同じ内容を別々の人に200-300回繰り返す」というもので、生成AIを活用するために要するプロンプトの作成等のコストが上がっても、繰り返すからこそ「文字起こし」から「意味確認」で下げられるコストの削減によって打ち消されるようにできると考えました。  
そのため、（生成AIに限らずではありますが）生成AIの適用の前に「準備にかかる工数」と「削減される見込み」の工数がどの程度になるのか、ということを見定めておく必要があると考えています。  

![天秤.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697039/3bf3de93-6329-ab64-6675-0bb4858bc49c.png)
[^4]  

[^4]: s-shimabukuro が Napkin AI により生成＋加筆修正

## おわりに

最後に伝えたいのは「生成AIの導入対象は繰り返し行われる業務であること」に使われるとよいのではないかと考えています。議事録作成の事例で示した通り、導入コストが高いのでコスト回収できるような業務を対象にすると生産性向上に繋がるのではないかと感じました。

たとえば、本記事は「 **生成AIに全て書かせて細かい手直しだけする** 」をポリシーに記載しました。  
これをすることにより来年も骨子・コンテンツを箇条書きで書くだけで全体の文章は生成AIが書けるようになった（＝私が楽になる）のではないかな... と考えています。
参考になれば幸いです！ それではまた！

## ご参考

- 本記事の文章生成に利用したモデル: [GPT-4o](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models?tabs=python-secure%2Cglobal-standard%2Cstandard-chat-completions#gpt-4o-and-gpt-4-turbo)
- 本記事の作図で利用した生成AI関連サービス： [Napkin AI](https://www.napkin.ai/), [Miro](https://miro.com/ja/)