RagWiser について
RagWiserはSpring Boot製のPDF質問応答システムです。文書を自然言語で検索・質問したいユーザー向けで、PostgreSQLのpgvectorに文書ベクトルを保存し、ツールコールバックでRAG機能を提供できます。
主な機能
- 01REST APIによるPDFアップロード
- 02テキスト抽出、分割、ベクトル化
- 03文書のセマンティック検索
- 04検索内容に基づく回答生成
- 05Reactのアップロード・質問応答画面
- 06ツールコールバックによるRAG連携
活用シーン
- 01PDFをアップロードして内容を質問
- 02質問に関連する文書箇所の検索
- 03画面で生成された回答を確認
- 04AIシステムにツールとしてRAGを提供
MCP 対応
READMEでは、Spring AIのツールコールバックを通じて他のAIシステムにRAG機能を提供すると説明されていますが、MCPサーバーやMCPクライアントとの連携は明記されていません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
RagWiser
RagWiserは、Spring Bootで構築された検索拡張生成(RAG)システムです。ユーザーはPDFドキュメントをアップロードして処理し、その内容について自然言語で質問できます。
プロジェクト概要
RagWiserは、Spring AIとPGVectorを使用して高度なドキュメント質問応答システムを構築します。PDFドキュメントを処理し、ベクトル化した表現をpgvector拡張機能を備えたPostgreSQLデータベースに保存します。また、関連するコンテキストを検索し、OpenAIのGPTモデルを使用して回答を生成することで、ユーザーからの質問に答えます。
機能
- PDFドキュメントのアップロード:REST APIを通じてPDFドキュメントをアップロードして処理します
- ドキュメントのベクトル化:PDFからテキストを自動的に抽出してチャンクに分割し、埋め込みを保存します
- セマンティック検索:自然言語を使用してドキュメントを検索します
- RAGを活用した回答生成:ドキュメントの内容に基づいた正確な回答を取得します
- Spring AIとの統合:ベクトルストアとLLMの統合にSpring AIを活用します
- Dockerサポート:pgvector拡張機能を備えたPostgreSQLをコンテナ化します
UI
RagWiserはユーザーインターフェースにReactを使用しており、シンプルで直感的な方法でRAGシステムを操作できます。UIを通じて、ユーザーはPDFドキュメントをアップロードし、質問をして、使いやすい画面で回答を確認できます。

技術スタック
- Java 21
- Spring Boot 3.3.2
- Spring AI 1.0.0-M1
- pgvector拡張機能を備えたPostgreSQL
- Docker
- OpenAI GPT-4
- React
はじめに
前提条件
- Java Development Kit(JDK)21
- DockerおよびDocker Compose
- OpenAI APIキー
- NodeJS
セットアップとインストール
-
リポジトリをクローンします:
git clone https://github.com/RobertoDure/RagWiser.git cd RagWiser -
src/main/resources/application.yamlでOpenAI APIキーを設定します:spring: ai: openai: api-key: YOUR_OPENAI_API_KEY -
pgvectorを使用してPostgreSQLデータベースを起動します:
docker-compose up -d -
Spring Bootバックエンドアプリケーションをビルドして実行します:
./mvnw spring-boot:run -
Reactフロントエンドアプリケーションを実行します:
cd frontend npm install npm start
APIエンドポイント
PDFドキュメントをアップロード
POST /api/rag/upload
Content-Type: multipart/form-data
パラメーター:
file:PDFファイル(必須)
質問する
GET /api/rag?question=YOUR_QUESTION_HERE
パラメーター:
question:回答する質問(デフォルト:「List all the Articles in the Irish Constitution」)
仕組み
-
ドキュメント処理:
- PDFドキュメントは
/api/rag/uploadエンドポイントからアップロードされます - アプリケーションは
PagePdfDocumentReaderを使用してPDFからテキストを抽出します TokenTextSplitterを使用してテキストをチャンクに分割します- テキストチャンクを埋め込み、ベクトルデータベースに保存します
- PDFドキュメントは
-
質問応答:
- ユーザーは
/api/questionエンドポイントから質問を送信します - システムはベクトル類似性検索を使用して、最も関連性の高いドキュメントチャンクを取得します
- プロンプトテンプレートで質問と取得したドキュメントを組み合わせます
- OpenAIのGPTモデルがコンテキストに基づいて回答を生成します
- ユーザーは
-
MCPとの統合:
- このアプリケーションは、Spring AIのTool Callbacksを使用した、ツールベースのRAG機能も提供します
- これにより、他のAIシステムがツールとしてRAG機能を利用できます
データベーススキーマ
このアプリケーションでは、ドキュメントの埋め込みを保存するために、pgvector拡張機能を備えたPostgreSQLデータベースを使用します:
CREATE TABLE vector_store (
id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,
content text,
metadata json,
embedding vector(1536)
);
CREATE INDEX ON vector_store USING HNSW (embedding vector_cosine_ops);
設定
application.yamlの主な設定オプション:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/rag_db
username: postgres
password: postgres
ai:
openai:
api-key: YOUR_OPENAI_API_KEY
chat:
options:
model: gpt-4
vectorstore:
pgvector:
index-type: HNSW
distance-type: COSINE_DISTANCE
dimensions: 1536
servlet:
multipart:
enabled: true
max-file-size: 100MB
max-request-size: 100MB
貢献
貢献を歓迎します!お気軽にプルリクエストを送信してください。
ライセンス
このプロジェクトはMITライセンスの下で公開されています。詳細はLICENSEファイルをご覧ください。
謝辞
- 優れたフレームワークを提供してくれたSpring AIチーム
- ベクトルストレージ機能を提供するPostgreSQLとpgvector
- 強力な言語モデルを提供するOpenAI
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。