はじめに
この記事は 女性エンジニア Advent Calendar 2025 の15日目の記事です。
現在、私は CWBJ(Code; Without Barriers in Japan)という、日本マイクロソフトが主催する女性向けAI人材育成支援プログラムに参加しています。
この取り組みは、生成AIやMicrosoft 365 Copilotの活用スキルを身につけることで、女性がIT分野で活躍できる機会を広げることを目的としています。
詳しくは CWBJ公式サイト をご覧ください。
非公式の相談会に継続的に参加する中で、蓄積されたFAQをナレッジとして整理・公開して欲しいというニーズが生まれてきました。
CWBJの非公式相談会の運営から、NotebookLMのように資料を読み込んで自然言語で質問に答えてくれるナレッジBotを作れないかという話がありました。
そこで私は、Microsoft製品+Azureを使って、同様の仕組みを再現できないか卒業制作として取り組むことにしました。
今回は、Azure OpenAI Service(GPT-4)とStreamlitを組み合わせて、FAQをベースにしたナレッジBotを構築し、Webアプリとして公開する方法を検討しました。
「みんながテナント外にいる」という前提のもと、Microsoft 365製品だけでは対応が難しい部分を、Azureの機能でどう補えるかを実際に試してみました。
NotebookLMの理想像と課題意識
NotebookLMは、Googleが提供するAIアシスタントです。
ChatGPTやCopilotのように広範な知識を使うのではなく、ユーザーがアップロードしたPDFやテキスト、URLなどの資料だけを参照して、自然言語の質問に答えるのが最大の特徴です。
NotebookLMでできること
- 資料のアップロード(PDF、Googleドキュメント、Webページ、YouTube字幕など)
- アップロード資料の自動要約
- 資料に基づいた自然言語での質問応答(引用元付き)
- ノートブック単位で資料とチャット履歴を管理・共有
CWBJ非公式相談会では、「誰でもアクセスできるナレッジ」を目指してFAQの整備が進められており、私はその活用方法の一つとしてナレッジBotの構築に挑戦しました。
NotebookLMのような「資料ベースのAI応答」をMicrosoft製品+Azureで再現できれば、テナント外ユーザーにも開かれたFAQナレッジBotが実現できるのでは──そんな仮説をもとに、卒業制作として検証を進めました。
Microsoft製品での制約
CWBJの非公式相談会では、参加者の多くがMicrosoft 365テナントに所属していない「テナント外ユーザー」です。
そのため、FAQをナレッジ化して公開する際には、「誰でもアクセスできる」ことが必須条件になります。
| 製品・機能 | テナント外での利用可否 | 備考 |
|---|---|---|
| SharePoint | ❌ 匿名アクセス不可(既定) | 外部共有には設定変更が必要。制限多め |
| Loop | ❌ 外部共有不可(2025年現在) | テナント外ユーザーはアクセスできない |
| Copilot for Microsoft 365 | ❌ 利用不可 | ライセンスが必要。外部ユーザーは対象外 |
| Copilot Studio(旧PVA) | ⚠️ 条件付きで可能 | Azure Bot+Webチャット構成で外部公開は可能 |
| OneNote | ✅ 閲覧専用リンクで外部公開可能 | 編集不可。検索性に課題あり |
このような制約を踏まえ、Azure OpenAI ServiceとStreamlitを使ってFAQナレッジBotを構築する方向で試してみることにしました。
Azure OpenAI × Streamlit構成の設計
使用技術と役割
| 技術 | 役割 |
|---|---|
| Azure OpenAI Service | GPT-4系モデルによるFAQ応答生成 |
| Streamlit | Web UIの構築(質問入力・応答表示) |
| Python | アプリ全体の実装言語 |
| Notion | FAQの管理場所(今回はテキスト化してBotに組み込み) |
| YouTube(限定公開) | 動作確認動画の提出先 |
この構成により、Microsoft 365の制約を回避しつつ、誰でもアクセスできるFAQナレッジBotの試作が可能になりました。
FAQデータの扱いとプロンプト設計
FAQはまず Notionに蓄積・整理しました。
今回は試作のため、NotionのFAQをテキスト化し、以下のようなQ&A形式でプロンプトに埋め込みました。
Q: Azureの登録にはどのメールアドレスを使えばいいですか?
A: 個人のMicrosoftアカウント(@outlook.jpなど)を使って登録しました。
Q: Azureの課金はいつから始まりますか?
A: リソースを作成しただけでは課金されませんが、実行やデプロイを行うと使用量に応じて課金が発生します。無料枠の範囲内であれば請求はありません。
Q: Pythonのバージョンはどれを使えばいいですか?
A: 学習用の動画では3.9.2が使われていましたが、実際に同じバージョンで動かすとエラーが出るケースがありました。受講者の間では3.13を使っている人が多く、特に問題なく動作しています。Azure FunctionsやStreamlitとの互換性を考えると、3.10以降が推奨されます。
今回は Notion APIを直接呼んだわけではなく、テキスト化したFAQをBotに組み込む形で実現しました。
これらをプロンプトに埋め込み、「このFAQに基づいて答えてください」とGPT-4に指示する構成にしました。
この構成は、RAG(Retrieval-Augmented Generation)を使わずに、NotebookLM的な応答を簡易的に再現するための工夫です。
実装の流れと工夫点
- Azure OpenAI ServiceのAPIキーとエンドポイントを取得
- Python+StreamlitでWeb UIを構築(質問欄+応答表示)
- FAQをプロンプトに埋め込み、GPT-4に応答させる構成に
- 動作確認を録画し、YouTube(限定公開)にアップロード
工夫点として、Streamlitを使うことでWebアプリとして外部公開できる形にし、FAQを直接プロンプトに埋め込むことでNotebookLM的な応答を再現しました。
動作確認と提出動画の準備
卒業制作の提出要件として、アプリの動作確認動画を録画・提出する必要がありました。
Streamlitアプリを起動し、実際にFAQに質問を投げて応答が返ってくる様子を録画しました。
録画にはXbox Game Bar(Windows)を使用し、動画は限定公開のYouTubeリンクとして提出しています。
動作の様子は以下の限定公開動画でも確認できます:
FAQナレッジBotの動作確認(YouTube)
できたこと/できなかったこと
✅ できたこと
- FAQベースの自然言語応答を実現
- Webアプリとして外部公開可能な構成に
- 卒業制作の提出要件(Azure AI活用・動画提出)を満たした
- Notionに蓄積したFAQをBotの知識源として活用
❌ できなかったこと
- Notion APIによる直接読み込みは未実装
- 引用付き回答や動的FAQ更新は未対応
- FAQが長くなるとプロンプト肥大化 → RAG構成が必要
今後の展望
- Notion APIやCSV/TXT読み込みによるFAQ更新性の向上
- Azure Bot Service+Copilot StudioによるWebチャット化
- Microsoft 365製品の外部共有機能が拡充されれば構成の幅が広がる
おわりに
卒業制作として「誰でも使えるFAQナレッジBot」を目指した構成を紹介しました。
今回はNotionに蓄積したFAQをテキスト化してBotに組み込む形でしたが、今後はAPI連携やRAG構成によって更新性・精度を高めていく予定です。
同じような構成を検討している方の参考になれば幸いです。
関連リンク
※この記事は現在勉強中の内容を整理したものであり、技術的に不正確な点が含まれている可能性があります。
ご指摘や改善案などがあれば、コメントで教えていただけると嬉しいです。