2024年の夏季休暇に学習をかねて1つアプリを作ろうと思い、リアルタイムRAG構築メモアプリを作りました。約1週間で朝活と隙間時間にChatGPTを駆使して学習しながらなんとか形にしました。
リアルタイムRAG構築メモアプリとは?
メモや日記は検索性が良くないと感じていました。そこで生成AIを使って検索できるメモアプリがあれば便利だと考えました。「2024年の夏休みは何してた?」のように自然言語で検索するとChatGPTのように要約して回答してくれるアプリです。これを実現するためにはユーザーが入力したデータでRAGを構築する必要があります。
技術スタック
AWS
Amazon Bedrockのナレッジベース以外は使ったことがあるサービス。
サービス | 用途 |
---|---|
IAM | サービス間の権限制御 |
S3 | メモの保存とシングルページアプリケーションの公開 |
Amazon Bedrock | S3をデータソースとしたナレッジベース ナレッジベースを使用したRAG問い合わせ |
API Gateway | 業務ロジックのAPI |
Lambda | 業務ロジックの実装(Python) |
シングルページアプリケーション
開発環境を作るためのnpmからインストール。シングルページアプリケーションは初挑戦だったのでReact、Vue.js、Angularのどれにしようか悩みました。それぞれでHello Worldを動かしてみて現在の自分のスキルに合っている感じがしたReactを採用。
技術 | 用途 |
---|---|
npm | パッケージ管理 |
React | シングルページアプリケーションの構築 |
MUI | 画面のレイアウト |
AWS構成図
AWSの構成図は以下の通りです。
- S3のバケットはメモ用とシングルページアプリケーション用と分ける
- S3はユーザーごとにprefixを分けてメモを保存する
- S3にメモを保存する際にメタデータ(.metadata.json)を付与する
- S3にメモが保存されたことをトリガーにBedrockのデータソースを同期する
- Bedrockでナレッジベース検索を行う際、メタデータのユーザーでフィルタリングする
API仕様
リソース | メソッド | 処理 |
---|---|---|
/knowledge | POST | ログイン時にS3のprefix作成 |
/knowledge | PUT | S3にメモを登録・更新 |
/knowledge/{user} | GET | S3からメモを取得 |
/knowledge/list/{user} | GET | prefixとメモの一覧を取得 |
/knowledge/conversation | POST | Bedrock問い合わせ |
各リソース | OPTIONS | CORS対応 |
画面仕様
画面 | 機能 |
---|---|
ログイン | メールアドレスでユーザーのS3プレフィックスを作成 |
メモ一覧 | プレフィックスとメモをカードで一覧表示 |
メモ編集 | メモを編集 |
会話 | メモの内容をチャット形式で問い合わせ |
画面イメージ
学習になったこと
node.jsの管理
公式ページのPackage Managerを参考にインストールしました。fnm
という今まで使ったことが無いコマンドで、調べてみると複数のnode.jsのバージョンを管理するためのコマンドでした。npm
やnpx
は今まで使ったことがありましたが、今回fnm
を学習することができました。
Bedrockのナレッジベースをユーザー単位に問い合わせる
当初はユーザー単位のS3プレフィックスごとにデータソースを作成すればユーザー単位にナレッジベース検索を行えると考えていました。データソースが分かれているので他のユーザーの情報を誤って参照してしまうことが無いので安心だろうと。しかし、よくよく調べてみるとナレッジベースは1アカウントで50個までしか作成できないようです。50ユーザーしか使えないサービスは残念なのでこの方式はあきらめました。
S3オブジェクトにメタデータを作成してナレッジベースの検索時にメタデータでフィルタリングできることが分かったのでこちらの方式を採用しました。S3オブジェクトを作成する際にメタデータ(.metadata.json)を一緒に作成するようにしました。
CORS
Lambda関数を作成して、API Gatewayでのテストでは上手く動くことを確認しました。しかし、ローカル環境で構築中のシングルページアプリケーションからAPIを呼び出すとCORSのエラーが発生してAPIを呼び出すことができませんでした。これによりAPI GatewayでCORSを回避する方法を学ぶことができました。
まとめ
とてもシンプルなアプリケーションですが初めてのことが多かったので沢山のことを学習することができました。AWSとChatGPTがあれば未経験の技術スタックでも短時間で構築できることが分かりました。皆さんも作ってみたいと思うアプリケーションがあったらとりあえず作り始めてみましょう。その過程で多くのことを学ぶことができますよ!
リアルタイムRAG構築メモアプリを使ってみたいという人はコメントで依頼してください。
コメント