MENU

Knowledge Oasisは主にAIとAWSの知識を共有するブログです。その他ITに関する知識やまれに生活に役立つ知識も共有するかもしれません。

KOふみ
名前はKOふみ(こふみ)。独立系SIerで20年のキャリアを持ち、新人研修の講師から請負開発まで幅広く経験。現在はAIを駆使したソリューション開発に従事。資格は応用情報技術者、データベーススペシャリスト、プロジェクトマネージャー、PMP、簿記2級。AWS学習中で、将来はAWSアンバサダーを目指す。

リアルタイムRAG構築メモアプリを作った話

リアルタイムRAG構築メモアプリを作った話
  • URLをコピーしました!

2024年の夏季休暇に学習をかねて1つアプリを作ろうと思い、リアルタイムRAG構築メモアプリを作りました。約1週間で朝活と隙間時間にChatGPTを駆使して学習しながらなんとか形にしました。

目次

リアルタイムRAG構築メモアプリとは?

メモや日記は検索性が良くないと感じていました。そこで生成AIを使って検索できるメモアプリがあれば便利だと考えました。「2024年の夏休みは何してた?」のように自然言語で検索するとChatGPTのように要約して回答してくれるアプリです。これを実現するためにはユーザーが入力したデータでRAGを構築する必要があります。

技術スタック

AWS

Amazon Bedrockのナレッジベース以外は使ったことがあるサービス。

サービス用途
IAMサービス間の権限制御
S3メモの保存とシングルページアプリケーションの公開
Amazon BedrockS3をデータソースとしたナレッジベース
ナレッジベースを使用したRAG問い合わせ
API Gateway業務ロジックのAPI
Lambda業務ロジックの実装(Python)
AWSで使ったサービス

シングルページアプリケーション

開発環境を作るためのnpmからインストール。シングルページアプリケーションは初挑戦だったのでReact、Vue.js、Angularのどれにしようか悩みました。それぞれでHello Worldを動かしてみて現在の自分のスキルに合っている感じがしたReactを採用。

技術用途
npmパッケージ管理
Reactシングルページアプリケーションの構築
MUI画面のレイアウト
シングルページアプリケーションを作るのに使った技術

AWS構成図

AWSの構成図は以下の通りです。

  • S3のバケットはメモ用とシングルページアプリケーション用と分ける
  • S3はユーザーごとにprefixを分けてメモを保存する
  • S3にメモを保存する際にメタデータ(.metadata.json)を付与する
  • S3にメモが保存されたことをトリガーにBedrockのデータソースを同期する
  • Bedrockでナレッジベース検索を行う際、メタデータのユーザーでフィルタリングする

API仕様

リソースメソッド処理
/knowledgePOSTログイン時にS3のprefix作成
/knowledgePUTS3にメモを登録・更新
/knowledge/{user}GETS3からメモを取得
/knowledge/list/{user}GETprefixとメモの一覧を取得
/knowledge/conversationPOSTBedrock問い合わせ
各リソースOPTIONSCORS対応
API Gatewayで作ったAPI

画面仕様

画面機能
ログインメールアドレスでユーザーのS3プレフィックスを作成
メモ一覧プレフィックスとメモをカードで一覧表示
メモ編集メモを編集
会話メモの内容をチャット形式で問い合わせ
画面一覧

画面イメージ

  • ログイン画面。メールアドレスとパスワードで認証を行います。
    ログイン画面。メールアドレスとパスワードで認証を行います。

学習になったこと

node.jsの管理

公式ページのPackage Managerを参考にインストールしました。fnm という今まで使ったことが無いコマンドで、調べてみると複数のnode.jsのバージョンを管理するためのコマンドでした。npmnpx は今まで使ったことがありましたが、今回fnm を学習することができました。

Bedrockのナレッジベースをユーザー単位に問い合わせる

当初はユーザー単位のS3プレフィックスごとにデータソースを作成すればユーザー単位にナレッジベース検索を行えると考えていました。データソースが分かれているので他のユーザーの情報を誤って参照してしまうことが無いので安心だろうと。しかし、よくよく調べてみるとナレッジベースは1アカウントで50個までしか作成できないようです。50ユーザーしか使えないサービスは残念なのでこの方式はあきらめました。

S3オブジェクトにメタデータを作成してナレッジベースの検索時にメタデータでフィルタリングできることが分かったのでこちらの方式を採用しました。S3オブジェクトを作成する際にメタデータ(.metadata.json)を一緒に作成するようにしました。

CORS

Lambda関数を作成して、API Gatewayでのテストでは上手く動くことを確認しました。しかし、ローカル環境で構築中のシングルページアプリケーションからAPIを呼び出すとCORSのエラーが発生してAPIを呼び出すことができませんでした。これによりAPI GatewayでCORSを回避する方法を学ぶことができました。

まとめ

とてもシンプルなアプリケーションですが初めてのことが多かったので沢山のことを学習することができました。AWSとChatGPTがあれば未経験の技術スタックでも短時間で構築できることが分かりました。皆さんも作ってみたいと思うアプリケーションがあったらとりあえず作り始めてみましょう。その過程で多くのことを学ぶことができますよ!

リアルタイムRAG構築メモアプリを使ってみたいという人はコメントで依頼してください。

  • URLをコピーしました!

コメント

コメントする

目次