生成AI入門:議事録を答えるチャットAI(RAGアプリ)を作ってみよう【プログラミング不要】AI・データサイエンス超入門

生成系AIの導入が急速に広がる今、その有用性や活用法が気になる方へ。一例としてプログラミング不要で、“会議の議事録を基に質問に答えてくれる「独自のチャットAI」”の作成を試みます。社会人の目線で、実践的な生成系AIの雰囲気をつかみましょう!

» 2023年11月09日 05時00分 公開
[一色政彦デジタルアドバンテージ]
「AI・データサイエンス超入門」のインデックス

連載目次

 現在、企業への生成系AI*1の導入が急速に拡大しています。2023年10月23日に日本マイクロソフトが記者向けに発表した内容によれば、日本国内でAzure OpenAI Service(Microsoftが提供するクラウドAIサービス)を活用している企業は560社以上、全世界では1万1000社を突破しています。このような状況から、「うちの会社も生成系AIを導入すべきか?」「生成系AIが何の役に立つのか?」と気になっている方は少なくないでしょう。

*1 「生成AI」とも表記されますが、本連載では「生成系AI」という表記を採用しています。


 筆者は、生成系AIが多くの業務効率化に不可欠なテクノロジーであり、大半の企業が導入すべきだと考えています。例えばこの記事自体も、段落ごとに「分かりやすいか?」とChatGPT(チャットAI)に質問しながら推敲(すいこう)を重ねました。また、GitHubというサイトが公開したアンケート調査結果によれば、米国のソフトウェア開発者の92%が既に何らかのAIコーディング(=プログラムのソースコードを書く作業)支援ツールを使用しているそうです。生成系AIは、うまく使いこなせれば本当に便利で、地味な作業を楽にできますからね。営業部員などの非エンジニアからソフトウェア開発者まで多くの社会人にとって、生成系AIの活用は重要になってきていると思います。

 ということで今回は「生成系AI」に焦点を当てます。本連載では、需要予測などの「データ分析(分析系AI)」や、音声認識などの「識別系AI」を体験してきました。連載の最終回である今回は、AIを大まかに「分析」「識別」「生成」と3つに分類したうちの、残る最後のピースを埋めます。

 生成系AIには、Stable Diffusion(ステーブル・ディフュージョン)のような画像生成AIや、Stable Audio(ステーブル・オーディオ)のような音楽生成AI、ChatGPT(チャット・ジー・ピー・ティー)のような文章生成AI(チャットAI)などがあります。これらは直感的に使えるので、例えばチャットAIを使うだけなら前提知識は不要で、特に説明するまでもありません。

 そこで、本稿では少し難易度を上げて“会議の議事録の内容を踏まえて、ユーザーの質問に答えてくれる「独自のチャットAI」”を手軽に作ってみます。このAIは、いわゆるRAGRetrieval-Augmented Generation検索拡張生成、詳細後述)という仕組みを採用したチャットAIアプリケーション(以下、アプリ)です。そして、今回紹介する作成方法は非常に簡単で、プログラミングスキルは一切必要ありません。Webサイト上での数回の入力とクリックだけで、誰でもこのAIを作成できます。具体的には、図1のような生成系AIの作成を体験します。

図1 生成系AIである「議事録を踏まえて答えるAI」の作成イメージ(今回は右側の「検索機能」部分を作成する) 図1 生成系AIである「議事録を踏まえて答えるAI」の作成イメージ(今回は右側の「検索機能」部分を作成する)

 本稿では独自チャットAIの作成体験を通して実践的な生成系AIの雰囲気をお伝えします。本稿が、企業の生成系AI導入やAI&データ活用の一助となれば幸いです。能書きはこれぐらいにして、さっそく作っていきましょう。

連載:

『社会人1年生から学ぶ、AI・データサイエンス超入門』

社会人1年生から学ぶ、AI・データサイエンス超入門

 この連載では、人工知能(AI)やデータ分析/データサイエンスをこれまでに学んだことがない社会人(新卒の社会人1年生からベテラン社員まで大歓迎!)に向けて、「データ&AIを活用したいなら、最初に知っておくべき全体概要」、具体的にはAI・データサイエンスの概要と、データ分析(数値予測などの分析系AI)、画像認識などの識別系AI、文章生成などの生成系AIを紹介します。
 難しい知識の習得よりもシンプルな経験を重視して、手を動かして体験しながら学べる内容ですので、肩の力を抜いてぜひとも気楽に読み進めてください。今回が最終回ですが、番外編を1本追加予定です。


初めての生成系AI。手軽に体験してみよう

 ここからは、図2に示す流れに沿って、生成系AIの一つであるチャットAIの作成を体験していきます。繰り返しになりますが「作成」と言っても、プログラミングは不要なので手軽に試せます。

図2 今回の独自チャットAI作成の流れ(前回の図4とほぼ同様) 図2 今回の独自チャットAI作成の流れ(前回の図4とほぼ同様)

1. 問題を定義する

 問題定義は、前回の記事で既に示しました。再掲すると、議事録が必須の会社において下記の2つの大きな問題が存在します。

  1. 書記係は、会議中に議事録をリアルタイムで書くのに忙しく、発言するのが難しい
  2. 議事録は作成されるものの、実際にはあまり活用されず、時間効率(タイパ)が悪い

2. 解決策を考える

 ここも前回の再掲になりますが、これらの問題に対する解決策として以下のアイデアが提案されました。

  1. 音声を自動認識してテキスト化する“議事録AI”の開発
  2. 会議内容のテキストデータを業務知識用データベース(ナレッジベースと呼ばれます)に蓄積していき、後から簡単に“検索&参照”できるようにする

 これらのアイデアの実現可能性を検証*2するために、試作版のAI*3を作成する計画が立てられました。

*2 このような検証の工程は「PoC(Proof of Concept:概念実証)」と呼ばれます。

*3 試作品は「プロトタイプ」とも呼ばれます。


3. AIの技術や手法を選定する

 問題は2つありますので、1つずつ解決していきましょう。前回は1つ目の「議事録AIの開発」を行いました。今回は2つ目の「議事録の検索機能」を作成します。より具体的には、チャットAIに質問する形で議事録を検索できるようにします。

チャットAIアプリの開発方法の選定

 まずはチャットAIを開発します。Webで探せばさまざまな開発方法の情報が得られますが、代表的な方法として、下記の2つの方法があると知ったとしましょう。

 (1)「LangChain」ライブラリーを使う方法: プログラミングができる人向け
 (2)「Azure OpenAI Service」クラウドを使う方法: プログラミング経験不要

 自前のローカルPCにPythonというプログラミング言語の環境をインストールして使いこなせる方には、(1)LangChain(ラングチェイン)がお薦めです。LangChainは大規模言語モデル(LLM)を使ったアプリケーション、例えばChatGPTのようなチャットAIアプリを作るのをサポートしてくれるPythonライブラリーです。手元で柔軟な開発が行え、試行錯誤しやすいのが魅力です。最近(2023年11月6日時点)では、『ChatGPT/LangChainによるチャットシステム構築』『LangChain完全入門 生成AIアプリケーション開発がはかどる大規模言語モデルの操り方』といった日本語書籍が出版されており、取り組みやすくなってきています。

 今回は、読者対象をPythonプログラミング未経験の人も含めた社会人としているので、(2)Azure OpenAI Service(アジュール・オープンエイアイ・サービス)を採用することにしました。Azure OpenAI ServiceはチャットAIアプリを作る機能を備えたクラウドプラットフォームです。特にChatGPTの基盤となっている大規模言語モデルと同じGPT-3.5やGPT-4を使えるのが魅力です。ちなみにAzure OpenAI Serviceでは、それだけでなく、前回解説したWhisperという音声認識用のAIモデルも使えるので(参考:Microsoft Learn公式ドキュメント「Azure OpenAI Serviceを使った音声テキスト変換 - Azure OpenAI」)、前回〜今回で作ろうとしているAIソリューションは、Azureでまとめて作ることも可能です。

RAG(検索拡張生成)の仕組みと技術の選定

 次に、チャットAIアプリに「議事録の検索機能」を組み込みます。外部データベース(例:業務知識のナレッジベース)からコンテキストに合わせた情報を検索/取得することで、大規模言語モデルが事前に学習していない情報(例:企業独自の業務情報)も回答できる(ように機能拡張した文章生成の)仕組みを、RAGRetrieval-Augmented Generation検索拡張生成)と呼びます。RAGの仕組みを使ったチャットAIアプリのアーキテクチャーは、基本的に図3のようになります。

図3 RAG(検索拡張生成)の仕組みを使ったチャットAIアプリの基本的なアーキテクチャー 図3 RAG(検索拡張生成)の仕組みを使ったチャットAIアプリの基本的なアーキテクチャー

 図3の流れを簡単に説明します(厳密さよりも、分かりやすさ重視)。

  • (1) 質問: ユーザーが、チャットAIアプリに質問を入力。
  • (2) 検索: チャットAIアプリは【内部で】、質問内容を基にデータベース(ナレッジベース)を検索。
  • (3) 結果データ: チャットAIアプリは【内部で】、検索結果を取得。
  • (4) 質問+結果データ: チャットAIアプリは【内部で】、質問と検索結果を使って大規模言語モデルに質問。
  • (5) 回答: チャットAIアプリは【内部で】、質問に対する回答を取得。
  • (6) 回答: チャットAIアプリは、ユーザーに回答を表示。

 図3で示したRAGの仕組みの構築は、Azure OpenAI Serviceにお任せすればよいので、特に難しく考える必要はありません。図にしたり、手順を示したりすると複雑に感じるかもしれませんが、一度試して経験することでさらに理解が深まるでしょう。

 Azure OpenAI Serviceでは基本的に、外部データベース(ナレッジベース)として、Azure Cognitive Search(アジュール・コグニティブ・サーチ)というクラウド検索サービスと、Azure Blob Storage(アジュール・ブロブ・ストレージ)というクラウドストレージサービスを組み合わせて使います。詳しくは後述します。

 ということで、開発方法や技術を選定できました。次は、実際に試作版を作成していきます。

4. 試作版のAIを作成する: RAG採用のチャットAIの検証まで

 Azure OpenAI Serviceの今後の機能アップデートに伴い、「画面内容が変わる」などの理由で記載内容が陳腐化する可能性があるため、本稿では詳細な手順を省略します。その代わり、重要なポイントだけを強調してご説明します。従って、今回の内容は実際に手を動かして試す必要はありません。記事を通じて、チャットAIの作成を“疑似”体験していただくことを目指します。


マナブ

 実際に手を動かして試してみたい方は、2023年11月6日現在、事前に「Azure OpenAI Serviceへのアクセス申請」が必要となります(参考:Microsoft Learn公式ドキュメント「Limited access to Azure OpenAI Service」)。筆者の場合、申請翌日には許可が得られました。

 費用については、本稿の内容を実践した結果、約35円かかりました。一見、少額に思えますが、検索サービス「Azure Cognitive Search」のBasic(基本)レベルは、使用していない時間も1時間で約20円かかるので、24時間だと約480円かかります。そのため、サービスの停止を忘れないように気を付けてください。

 Azure OpenAI Serviceを利用する際のアクセス申請や費用は初心者にとって少しハードルが高いかもしれませんが、一度使用してみると、その利便性と簡便さに驚かれることでしょう。もし余裕があれば、ぜひ実際に体験してみてください。


Azure OpenAI Serviceのリソースを作成する

 まず、Microsoft Azureポータルサイト(https://portal.azure.com/)にアクセスし、Azure OpenAI Serviceのリソース*4を作成します。図4は、「RAG-for-ChatAI-RG」という名前の[リソース グループ]*5を新規に作成し、「ChatAI-Instance」という[名前]でリソースのインスタンス(=実体)を作成しているところです。[価格レベル]では、「Standard S0」のみが選択可能でした。

*4 リソースとは、Microsoft Azureクラウドサービスで利用できる個々のアイテムのこと。

*5 リソースをまとめたグループをリソースグループと呼ぶ。


図4 Azure OpenAI Serviceのリソースを作成しているところ 図4 Azure OpenAI Serviceのリソースを作成しているところ

 具体的な手順は、Microsoft Learn公式ドキュメント「操作方法: Azure OpenAI Service リソースを作成してデプロイする」を参考にしてください(リソース作成方法は[ポータル]を選択)。

Azure OpenAI StudioでチャットAIを作成する

 次に、Azure OpenAI Studio(https://oai.azure.com/)(アジュール・オープンエイアイ・スタジオ)というWebツール(図5)にアクセスします。

図5 Azure OpenAI Studioを開いたところ 図5 Azure OpenAI Studioを開いたところ

 図5はAzure OpenAI Studioを開いたところ、つまりトップページです。Azure OpenAI Studioの左側にある[管理]配下の[デプロイ](=モデルの配置)をクリックします。これにより表示される[デプロイ]ページで、その上部にある[新しいデプロイの作成](図6の暗い部分に見えています)をクリックします。これにより表示される[モデルのデプロイ]ダイアログで、モデルやそのバージョンを選択できます。

図6 Azure OpenAI Studioでモデルのデプロイを作成しているところ 図6 Azure OpenAI Studioでモデルのデプロイを作成しているところ

 本稿では図6のように、より長いテキスト(トークン)の入力が可能な「gpt-35-turbo-16k」モデルを選択し、「ChatAI-Model」という名前でモデルのデプロイを作成しました。ちなみに、「gpt-35-turbo」モデルはOpenAIの通常のGPT-3.5に相当します。2023年11月6日時点で、Azure OpenAI StudioではGPT-4のモデルは選択できない状態でした。[モデルを選択してください]からは「text-embedding-ada-002」(詳細後述)というモデルも選択可能ですが、これはベクトル検索が必要な場合に使用します。

 以上で、チャットAIアプリを試す準備が整いました。

 Azure OpenAI Studioの左側にある[プレイグラウンド]配下の[チャット]をクリックすると、[チャット プレイグラウンド]ページが表示されます。[チャット プレイグラウンド]ページはWebブラウザを横を長くして表示すると、図7のように[アシスタントのセットアップ][チャット セッション][構成]というセクションが横並びで表示されます。横を短くして表示すると縦並びになり、スクロール操作によりセクションを切り替えられます。以下では字が見えやすいように縦並びにした状態でスクリーンキャプチャーしています。

図7 Webブラウザを横長くして[チャット プレイグラウンド]ページを表示した例 図7 Webブラウザを横長くして[チャット プレイグラウンド]ページを表示した例

 図8では、[チャット プレイグラウンド]ページ内の[チャット セッション]セクションを表示しています。ここでは、実際にチャットAIの動作を試すことができます。図8では、「中途採用でKaggler枠を用意すると、企業にはどのようなメリットがありますか?」という質問を投げかけています。

図8 チャットAIアプリ(のプレイグラウンド)で質問しているところ 図8 チャットAIアプリ(のプレイグラウンド)で質問しているところ

 確かに、ChatGPTのようなチャットAIを作成できました。簡単でしたね。

 ただし、実際に他の人に試してもらうためには、Webアプリとしてのデプロイが必要です。[チャット プレイグラウンド]ページの最上部にある[配置先]ボタン(図9の右上に見えています)からWebアプリも簡単に作成してデプロイできますが、本稿ではプレイグラウンドでの動作確認までを扱うこととします。ここで説明した手順について詳しくはMicrosoft Learn公式ドキュメント「クイックスタート: Azure OpenAI Service で GPT-35-Turbo と GPT-4 を使い始める」(使用方法は[スタジオ]を選択)を参照してください。

 図8に示されている回答は一般的なものでしたが、次のステップではRAGを活用して会議の議事録に基づいた独自の回答を得られるようにします。具体的には、議事録(独自情報)の検索機能を追加する方法を次に説明します。

データの追加(RAG)をセットアップする

 先ほどと同じ[チャット]ページの最上部にある[アシスタントのセットアップ]欄の[データの追加 (プレビュー)]タブを開くと、その下にある[データソースの追加]ボタン(図9)からRAGは簡単にセットアップできます。詳しい手順は、Microsoft Learn公式ドキュメント「クイック スタート: 独自のデータを使用して Azure OpenAI モデルとチャットする」(使用方法は[スタジオ]を選択)を参考にしてください。

図9 データの追加(RAG)をセットアップを開始したところ 図9 データの追加(RAG)をセットアップを開始したところ

 次に表示されるダイアログ画面の[データソースを選択する]欄から「Azure Blob Storage」「Azure Cognitive Search」「Upload files(ファイルのアップロード)」のいずれかを選択できます。今回は「Upload files」を選択しましたが、これによりAzure Blob StorageとAzure Cognitive Searchの組み合わせが構成されます。図10がその構成例ですが、Azure Blob Storageは先ほどと同じ「RAG-for-ChatAI-RG」リソースグループ内に「ragchataistorage」というストレージアカウント名で新規作成し、Azure Cognitive Searchは同リソースグループ内に「rag-chatai-search」というサービス名で[価格レベル]に「基本」を選択して新規作成しました。


マナブ

 Azure Cognitive Searchの[価格レベル]には「Free(無料)」もありますが、RAGを使用する場合は「Basic(基本)」や「Standard(標準)」以上が必要です。前述したように「Basic(基本)」レベルの料金は「1時間で約20円」(2023年11月6日現在)です。


図10 RAGを構成しているところ 図10 RAGを構成しているところ

 最後にAzure Blob Storageから情報を取得して蓄積(=検索インデックスを作成)するためのCognitive Searchのインデックス名を「meeting-logs-index」として設定しました(図10)。これにより、「ragchataistorage」ストレージアカウントに「fileupload-meeting-logs-index」という(太字部分が自動的に足されている)名前のコンテナ(=Windows OSのフォルダと同じようなもの)も自動作成されます。

独自情報(議事録)ファイルをアップロードする

 前回の議事録AIで文字起こした内容はテキストファイルとして、Azure Blob Storage内のコンテナ内にアップロードして保存します。初回のアップロードは、図10の次の設定ページで、図11のように議事録(独自情報)ファイル群をドラッグ&ドロップ後に[ファイルのアップロード]ボタンをクリックするだけで、それらのファイル群を「fileupload-meeting-logs-index」コンテナに簡単にアップロードできます。

図11 議事録テキストファイルをアップロードしているところ 図11 議事録テキストファイルをアップロードしているところ

 この例では「会議の議事録.txt」をアップロードしましたが、筆者が以前に執筆した「企業の“Kaggler枠”って実際どうなの?」というイベントレポート記事の原稿で代用しました(読者も同じ作業を行いたい場合は、この記事のテキストをコピーしてテキストエディターなどに貼り付け、UTF-8文字コードでテキストファイルとして保存して使ってください)。


マナブ

 Azure Blob Storageのコンテナにアップロードされた議事録(独自情報)ファイル群が、Azure Cognitive Searchの検索インデックス作成に使われます。ただし、本稿で説明したようにデータソースを「Upload files」にすると、順次、追加の独自情報ファイルをアップロードするような運用はできません。

 日々の議事録をアップロードして、それを時間ごと(Hourly)/日ごと(Daily)に自動的に取得して蓄積(=検索インデックスを作成)したい場合は、先ほどの[データソースを選択する]欄で「Azure Blob Storage」を選択する必要があります。なお、選択するには、事前に(例えば「meeting-logs」という名前で)コンテナを手動作成しておく必要があります。あとはそのコンテナ上に、追加の独自情報ファイルを順次、アップロードしていくだけです。

 よって「次にすべきこと」として、[データソースを選択する]欄で「Azure Blob Storage」を選択するのを試してみるのがよさそうです。


 図11の次の設定ページでは[検索の種類]として「キーワード」が選択できます。これは、よくある「キーワード検索」を意味します。


マナブ

 前述した「text-embedding-ada-002」モデルのデプロイも作成していた場合、「ベクトル検索」(もしくはベクター検索)も選択できます。ベクトル(vector)とは数学のベクトルのことで、12、34、56、78、……のように数値が並んだものです。テキストをベクトルに変換する処理を埋め込みembedding)と呼び、その変換を行うためのモデルが「text-embedding-ada-002」というわけです。

 「RAG」といえば「ベクトル検索」を筆者は思い浮かべますが、必ずしもベクトル検索がキーワード検索よりも優れているわけではないようです。公式ドキュメントの「検索オプション」の節にまとめられていますが、Azure OpenAI Serviceでは「キーワード検索+ベクトル検索」のハイブリッドも可能です。

 よって「次にすべきこと」として、「どの検索オプションを採用するのが適切か」を調べるのがよさそうです。


 以上で検索機能の追加も完了しました。それでは完成した「RAGの仕組みを使ったチャットAI」を試してみましょう。

RAGの仕組みを使ったチャットAIを試す

 再び[チャット セッション]までスクロールして、議事録の内容を回答してくれるかどうか試してみます。ここでは「DeNAにもKaggler枠はありますか? ある場合、どう役立っていますか?」と質問してみました。

図12 RAGに対応したチャットAIアプリ(のプレイグラウンド)で質問しているところ 図12 RAGに対応したチャットAIアプリ(のプレイグラウンド)で質問しているところ

 図12の回答には「参照」−「[1]会議の議事録.txt - Part 5」という引用のリンクがあり、それをクリックすると引用の該当箇所が表示されます。このように、独自情報(この例では「議事録」に見立てたイベントレポート記事)に基づいて回答できるようになりました。

 これだけでも実用的だと感じられますね。しかし一般的には、RAG採用のチャットAIも万能ではなく、質問の仕方などによって思ったように適切な回答が得られない場合があります。場合によっては、適切な回答を得るための工夫が必要になります(「【書籍出版記念】LangChainから学ぶLLMを使ったアプリケーションの工夫 - Speaker Deck」というプレゼン資料に「HyDE」「FLARE」といった工夫の仕方が紹介されていますので、興味がある方は参照してください)。

 それに一例しか試していないので、さらなる検証が必要です。これも「次にすべきこと」になるでしょう。

 ここまでに「次にすべきこと」として下記の3点を挙げました。

  • [データソースを選択する]欄で「Azure Blob Storage」を選択するのを試す
  • 「どの検索オプションを採用するのが適切か」を探る
  • より多くの例で試して、さらなる検証を実施する

 興味がある方は、これらの課題にもぜひチャレンジしてみてください。本稿での試作版AIの作成はいったん「ここまで」とします。

5. 正式版のAIの開発に向けて

 より高度な機能をチャットAIアプリに実装しようとすれば、独自の実装内容やLangChainを用いたプログラミングなどが必要となります。そのため最終的には、自らがプログラミングを学んで実装するか、ITエンジニアやAI専門家に作業を依頼する必要があるでしょう。


 今回、私たちは生成系AIの一部を体験しました。生成系AIに興味を持った方は、冒頭で紹介したStable DiffusionやStable Audioなども今度は自分だけで試してみることをお勧めします。

 前回も説明しましたが、生成系AIがカバーできる範囲は増えてきており、識別系AIが解決できるタスクの一部は生成系AIでも解決できたり、データ分析の作業も例えばChatGPTの「高度なデータ分析(旧Code Interpreter)」である程度は自動的に処理できたり(自律型AIエージェントとも呼ばれます)します。AIは現在進行形で発展しており、できることはどんどん変わってくると考えられます。

 しかし、より良いAIが登場するのを待ち続けるだけでは、いつまでも行動を起こすことはできません。今できることで、まずは取り組むのが、どのタイミングでもベストではないかと思います。本連載では「分析」「識別」「生成」というテーマでAIを体験してきました。それらの体験が、皆さんの会社にマッチするデータ&AI活用の起点となっていればうれしいです。

 以上で本連載は完結です。最後まで読んでいただきありがとうございました。

「AI・データサイエンス超入門」のインデックス

AI・データサイエンス超入門

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。