WordPress のコンテンツを元に RAG を使った生成 AI チャットボットを簡単に作れるプラグインを開発したので、仕組みとかを簡単に説明します。
プラグインのソースやインストール方法などは、以下の GitHub レポジトリを参照してください。
mobalab/wp-rag: A WordPress plugin for building RAG
RAG とは
私の環境では検索するとこちらのサイトが一番上に出てくるので、ご存じない方はこちらをどうぞ。
仕組み
構成
システムの大雑把な構成は以下の通りです。
WordPress plugin <-> バックエンド API <-> OpenAI API
各要素について簡単に説明します。
- WordPress plugin
- PHP で書かれています(当たり前ですが)
- 主な役割
- チャットボット画面 UI の実装
- 管理画面
- バックエンド API
- Python で書かれています
- Flask, LangChain などを使っています
- ベクトルデータベースの機能も持たせています
- 主な役割
- WordPress 投稿の取得
- ベクトルデータベースへの保管、検索
- OpenAI API (Embeddings) を使って埋め込みの生成
- OpenAI API (Text generation) を使って回答の生成
- OpenAI API
- 主な役割: 埋め込みの生成と回答生成
処理の流れ
- サイトの登録
- プラグインの管理画面から登録ボタンを押す
- API サーバーから WordPress サイトにアクセスが発生し、正しいレスポンスが返ってくればサイト登録完了
- WordPress 投稿の取得
- プラグインの管理画面からボタンを押す
- API サーバーから WordPress の REST API にアクセスし、取得した投稿を API サーバーに保存
- 埋め込みの取得・保存
- プラグインの管理画面からボタンを押す
- 取得・保存した投稿を OpenAI API に投げて埋め込み表現(embeddings)を取得
- ベクトルデータベースに保存
- チャットボットとのチャット
- チャットボットウィンドウで質問文を入力して送信
- API サーバーで以下の処理を行う
- OpenAI API に投げて、質問文の埋め込み表現を取得
- ベクトルデータベースで、質問文と似ている投稿を取得
- 似ている投稿+質問文を OpenAI API に投げる
- 得られた回答をプラグイン側に返信する
動作例
「WP RAG とは何ですか。」という質問をした場合の回答です。Related info では、回答の生成に使われた投稿(コンテキスト)が表示されます。(スクリーンショットでは1つしか見えませんが、下の方が隠れているので、実際には4つ表示されています。)
改善したい点
全般
- 色々カスタマイズできるようにしたい。
- 使う言語モデル
- プロンプト
- 各種パラメータ
検索関連
- WordPress のタグとかのメタ情報も使う
- 全文検索と組み合わせる
プラグイン
- 新規投稿や既存投稿の更新時に自動的に埋め込み表現を生成してベクトルデータベースに保存する
- 見栄えをもう少し良くする
- L10n
その他
- WordPress の管理画面からプラグインをインストールできるようにしたかったが、今回みたいに外部 API に依存しているものはダメらしい。
- 思ったより簡単に実装できた。
- RAG はチューニングのポイントがいっぱいあるし、新しい手法が色々出てくるので、もっと勉強したい。