RAG API
LangchainとFastAPIを使用して、ドキュメントのインデックス作成および検索を行うためのRetrieval-Augmented Generation (RAG) APIを設定します。このAPIはLibreChatと統合され、ユーザーがアップロードしたファイルに基づいたコンテキストアウェアな応答を提供します。
RAG APIは、ユーザーがアップロードしたファイルをインデックス化し、関連するパッセージを検索してプロンプトを補強することで、LibreChatがドキュメントに基づいたコンテキストを認識した回答を提供できるようにします。これは、PostgreSQL + pgvectorデータベースをバックエンドとする独立したFastAPIサービスとして実行されます。
RAGは初めてですか?
RAG API Presentation では、このコンセプトについてより詳細に説明しており、役立つ動画へのリンクも掲載されています。このページでは、セットアップと設定について解説します。
可用性
RAGはAgentsのほか、Custom Endpoints、OpenAI、Azure OpenAI、Anthropic、Googleと連携して動作します。
OpenAI Assistantsは、「Retrieval(検索)」機能を通じて独自のRAG実装を備えています(詳細はこちら)。OpenAIはファイルストレージとRetrievalの両方に対して課金を行うため、Assistants APIでRAG APIを使用することには依然として価値があります。この統合は将来のアップデートで予定されています。
Docker クイックスタート
Dockerの場合、RAG APIはデフォルトの docker-compose.yml と deploy-compose.yml の両方のファイルですでに設定されており、RAG_API_URL の値も含まれています。最新のイメージとcomposeファイルを実行していることを確認するだけで済みます。更新方法が不明な場合は、DockerでのLibreChatの更新ガイドを参照してください。
共有 .env ファイル
デフォルトの Docker セットアップでは、.env ファイルは LibreChat と RAG API 間で共有されます。RAG 変数はその同じファイル内で定義してください。全リストは RAG API README に記載されています。
使用するembeddingsプロバイダーを選択してください。
OpenAI embeddingsを使用してRAGを利用します。 これがデフォルトの設定です。
RAG API URLを設定します。 .env ファイルに以下を追加してください:
OpenAI APIキーを提供します(必要な場合)。 OpenAI APIキーが user_provided に設定されている場合は、埋め込み(embeddings)用のキーを追加してください。すでに .env ファイルでOpenAIキーを提供している場合は、この手順をスキップしてください。
コンテナを起動します。
Lite版とフル版のイメージ
DockerはデフォルトでRAG APIの「lite」イメージ(registry.librechat.ai/danny-avila/librechat-rag-api-dev-lite:latest)を使用します。これは、OpenAIからのリモート埋め込み、または設定済みのリモートHuggingFace/Ollamaサービスのみをサポートしています。
ローカル埋め込み(embeddings)を使用するには、composeファイル内のイメージをフルビルド版である registry.librechat.ai/danny-avila/librechat-rag-api-dev:latest に切り替えてください。この変更は Docker Compose Override File で行ってください。例については、プロジェクトのルートにある docker-compose.override.yml.example を参照してください。
PostgreSQL + pgvector データベースと Python API のみを含む compose ファイルが必要な場合は、プロジェクトのルートにある rag.yml を参照してください。
データベースストレージ
デフォルトのcomposeファイルは、pgvector/PostgreSQLのデータをDocker管理下の pgdata2 ボリュームに保存します。これは意図的な仕様です。データベースファイルはホストから直接編集する必要がなく、管理されたボリュームを使用することで、所有権や権限に関する一般的な問題を回避できるためです。ユーザーが直接編集するファイル(アップロード、ログ、画像、MongoDBデータ、NGINX設定)については、ホストからの直接アクセスが有用であるため、プロジェクトフォルダにバインドマウントされています。
ローカルセットアップ
コンテナを使用しないセットアップは、より手作業が必要になります。RAG API repo の指示に従ってください。
LibreChatの.envファイルでRAG_API_URLを、セットアップからAPIにアクセス可能な場所に設定してください。これは、デフォルトのdocker-compose.ymlファイルですでに値が設定されているDockerの場合とは異なります。
設定
APIがアクセス可能な .env ファイル内の環境変数を通じて、RAG APIオプションを設定します。選択したプロバイダーが必要とする認証情報やパスを除き、ほとんどはオプションです。デフォルト設定では、RAG_OPENAI_API_KEY のみが必須となります。
環境変数
| Key | Type | Description | Example |
|---|---|---|---|
| RAG_API_URL | string | RAG APIサービスのURL。 | RAG_API_URL=http://host.docker.internal:8000 |
| RAG_OPENAI_API_KEY | string | 埋め込み用のOpenAI APIキー。RAGにおいてOPENAI_API_KEYを上書きします。 | # RAG_OPENAI_API_KEY=sk-your-key |
| RAG_OPENAI_BASEURL | string | RAG埋め込み用のカスタムOpenAIベースURL。 | # RAG_OPENAI_BASEURL= |
| RAG_USE_FULL_CONTEXT | boolean | 上位4件の結果ではなく、ファイルコンテキスト全体を取得します。デフォルト: false。 | # RAG_USE_FULL_CONTEXT=true |
| EMBEDDINGS_PROVIDER | string | Embeddingsプロバイダー: openai、azure、huggingface、huggingfacetei、またはollama。デフォルト: openai。 | # EMBEDDINGS_PROVIDER=openai |
| EMBEDDINGS_MODEL | string | 使用するEmbeddingsモデル。デフォルトはプロバイダーによって異なります。 | # EMBEDDINGS_MODEL=text-embedding-3-small |
| RAG_PORT | number | RAG APIが実行されるポート。デフォルト: 8000。 | # RAG_PORT=8000 |
| RAG_HOST | string | RAG APIのホスト名。デフォルト: 0.0.0.0。 | # RAG_HOST=0.0.0.0 |
| COLLECTION_NAME | string | Vector storeコレクション名。デフォルト: testcollection。 | # COLLECTION_NAME=testcollection |
| CHUNK_SIZE | number | テキストチャンクのサイズ。デフォルト: 1500。 | # CHUNK_SIZE=1500 |
| CHUNK_OVERLAP | number | チャンク間のオーバーラップ。デフォルト: 100。 | # CHUNK_OVERLAP=100 |
| OLLAMA_BASE_URL | string | Ollama embeddingsを使用する際のOllamaベースURL。 | # OLLAMA_BASE_URL=http://host.docker.internal:11434 |
認証情報の優先順位
OPENAI_API_KEY は RAG エンベディングに使用できますが、認証情報の競合を避けるために RAG_OPENAI_API_KEY がそれを上書きします。
変数とその説明の完全なリストについては、RAG API repo を参照してください。
使用方法
RAG APIが実行されると、LibreChatと自動的に統合されます。ユーザーが会話にファイルをアップロードすると、APIはそれらをインデックス化し、コンテキストを認識した応答のために使用します。
会話にファイルをアップロードします。 RAG_API_URL が設定されていないか、到達できない場合、アップロードは失敗します。
通常通りチャットします。 ユーザーがモデルと対話する際、RAG APIは入力に基づいてインデックス化されたファイルから関連するパッセージを検索し、それらを使用してプロンプトを拡張します。
ファイルがクエリされるタイミングを制御します。 デフォルトでは、ファイルが添付された会話で新しいメッセージが送信されるたびに、ベクトルストアに対してクエリが実行されます。これに合わせてプロンプトを作成してください。
会話設定で Resend Files をオフにすると、ファイルがメッセージに明示的に添付されている場合にのみ、ファイルをクエリするようになります。
インデックス化されたファイルを再利用する。 ファイルを一度アップロードすれば、サイドパネルから新しいメッセージや会話にいつでも添付できます。
ファイルは「Host」ストレージにある必要があります。「OpenAI」ファイルは扱いが異なり、Assistants専用であるため、Assistants endpointが選択されアクティブな状態でアップロードされたものであってはなりません。ファイルはサイドパネルから表示および管理できます。
トラブルシューティング
RAG APIのセットアップや使用中に問題が発生した場合は、以下を参照してください:
.envファイルに必要なすべての環境変数が正しく設定されていることを確認してください。- ベクトルデータベースが設定され、アクセス可能であることを確認してください。
- OpenAI APIキーまたはその他のプロバイダーの認証情報が有効であることを確認してください。
- LibreChat と RAG API の両方のログで、エラーや警告を確認してください。
問題が解決しない場合は、RAG APIのドキュメントを参照するか、GitHub DiscussionsまたはDiscordのLibreChatコミュニティで質問してください。
このガイドはいかがでしたか?