このアプリケーションは香水に関する情報を検索・閲覧できる RAG(Retrieval Augmented Generation)システムです。
33.mp4
- 検索条件を入れて「探す」をクリック
- おすすめの香水が表示される
- 「おすすめポイントを知る」を押すと、「香水のコンセプト」と「あなたにおすすめのポイント」が表示される
RAG(Retrieval Augmented Generation)は以下の 3 つのコンポーネントから構成されています。このアプリケーションでの実装は次のとおりです:
-
Retrieval(検索):
- 実装:
searchDocs()
関数(utils/searchDocs.js
) - 機能: ユーザーのクエリをベクトル化し、データベースから類似度の高い香水情報を検索します
- 処理: ユーザー入力を embedding モデルで変換し、ベクトル検索を実行して関連度の高いドキュメントを取得します
- 実装:
-
Augmentation(拡張):
- 実装:
buildPrompt()
関数(utils/buildPrompt.js
) - 機能: 検索結果を構造化し、LLM へのプロンプトに統合します
- 処理: 検索で得られた香水情報をフォーマットし、ユーザークエリと合わせてコンテキスト豊かなプロンプトを生成します
- 実装:
-
Generation(生成):
- 実装:
fetchLLMResponse()
関数(utils/fetchLLMResponse.js
) - 機能: 拡張されたプロンプトを LLM に送信し、回答を生成します
- 処理: Ollama API を通じて Llama 3.2 モデルと通信し、検索結果を基にした適切な回答を生成します
- 実装:
このアプリケーションでは、香水に関するデータを Chroma ベクトルデータベースに保存し、ユーザーの質問に対して関連する香水情報を検索・拡張し、LLM を活用して知識に基づいた回答を生成します。
- Node.js(推奨バージョン: 18.x 以上)
- npm
- LLM への接続環境(作者は Ollama を使用)
- リポジトリをクローンします
git clone <repository-url>
cd <repository-directory>
- 依存関係をインストールします
npm install
- データの準備
- 自分で用意したデータを
data
ディレクトリに配置します(例をexample.json
に入れました) - scripts ディレクトリに移動し、データ準備スクリプトを実行します
- 自分で用意したデータを
cd scripts
node prepare-data.js
cd ..
- 開発サーバーを起動します
npm run dev
-
ブラウザで http://localhost:3000/test にアクセスして、LLM との接続をテストします
-
接続が確認できたら、http://localhost:3000/ にアクセスして香水の検索を開始できます!
- プロンプトインジェクションの対策は実装されていません
- LLM 接続にはローカルで動作する Llama 3.2 を使用しています(作者は Ollama を使用)
- Llama 3.2 だと現状のプロンプトはハルシネーションを起こす傾向にあります。プロンプトエンジニアリングにチャレンジしてみてください!(動作動画ではAnthropicのAPI Keyを使用しています)
- 接続設定やモデルの変更は
.env
ファイルで行えます
- Next.js
- Vector Database(Chroma/Pinecone 等)
- LLM
このプロジェクトは MIT ライセンスの下で公開されています。詳細は LICENSE ファイルをご覧ください。