中級 17 分RAG

AnythingLLM : RAGがプロダクション対応で ローカル

AnythingLLM(Mintplex Labs)は、Dockerを使って数分でデプロイできるオープンソースのRAGプラットフォームで、ローカルのOllamaバックエンドを企業向けのドキュメントアシスタントに変えます。自作のRAGではLlamaIndex、Chroma、UIを組み合わせる必要がありますが、AnythingLLMは、互いに隔離されたワークスペース、マルチユーザー対応、組み込みエージェント、REST APIを含むスタック全体を提供します。このAnythingLLM RAGチュートリアルでは、Dockerでのインストール手順全体、Ollamaとの接続、ワークスペースの作成、エージェント、そしてアプリケーションから利用できるようにAPIを公開する方法を紹介します。

著者 Mohamed Meguedmi·更新 2026-08-27·Windows・macOS・Linuxでテスト済み

#なぜAnythingLLMなのか?

AnythingLLMは、ローカルRAGのエコシステムで明確な役割を占めています。文書を扱う部分ではOpen WebUIよりも設計方針が明確で、自作のLlamaIndexスクリプトよりもシンプルで、Streamlitのデモよりも本番運用に適しています。このプロジェクトはオープンソース(MIT)で、2023年から継続的にコミットを行っているチーム、Mintplex Labsが開発を支えています。

隔離されたワークスペース
各ワークスペースには、それぞれ専用の文書コーパス、LLM、埋め込み、システムプロンプトがあります。法律関連の RAG とカスタマーサポート用の RAG を混在させることはありません。
マルチユーザー機能を標準搭載
認証、ロール(管理者/マネージャー/ユーザー)、ワークスペースごとの権限を備えています。Pythonで素のRAGを実装する場合のように、リバースプロキシとBasic認証を組み合わせる必要はありません。
切り替え可能なLLMバックエンド
Ollama、LM Studio、llama.cpp server、vLLM、およびクラウド API(OpenAI、Anthropic など)。インデックス化済みの文書を変更せずに、エンジンを切り替えられます。
組み込みエージェント
Webスクレイピング、SQL実行、計算、Web検索、ドキュメントの保存は、チャット内で@agentを使って呼び出せます。さらにLangChainを組み合わせる必要はありません。
ネイティブREST API
APIエンドポイント /api/v1/workspace/{slug}/chat により、任意のアプリケーションが指定されたワークスペースに接続できます。レスポンスフォーマットは安定し、ドキュメント化されています
i
AnythingLLMが適しているケース
チーム向けのRAG機能付き認証が必要で、100から10,000ドキュメントまでを扱いたい場合、Pythonパイプラインを書く必要はありません。単一ユーザー向けの極めてシンプルなRAGにはMstyまたはOpen WebUIが十分です。数十万ドキュメントを扱い、カスタムハイブリッド検索を実現したい場合は、Qdrant + LlamaIndexのスタックがより柔軟です。

#前提条件

ローカルRAGキット

あなたのドキュメント、あなたのAI:あなたのPDF、メモ、メールを扱う信頼性の高いローカルRAG。何もクラウドに送信しません。

  • 永久に利用できるオンラインスペース
  • PDF + ファイル
  • 生涯アップデート
Docker
Mac/WindowsではDocker Desktop、LinuxではDocker Engine。Composeは必須ではありません — 起動には docker run だけで十分です。
Ollamaがインストールされ、正常に動作している
デーモンは http://localhost:11434 で応答する必要があります。ollama listで確認してください。Ollamaがまだインストールされていない場合は、先にインストールしてください。このチュートリアルでは、Ollamaがデフォルトのバックエンドです。
Ollamaで使うLLMモデル
最低でも、qwen3.5:9b(コンテキスト長256k、画像入力対応)やgranite4.2:8bのような8〜9Bのモデルを使用すること。フランス語のRAGで品質を求めるなら、VRAM容量が許す場合はmistral-small(24B)またはqwen3.8:27bを選択肢とすること。
埋め込みモデル
nomic-embed-text(デフォルト)、または多言語でより高い品質を求めるならbge-m3。ollama pull nomic-embed-textで取得する。
RAM / VRAM
コンテナ用の RAM は最低 8 GB、16 GB あれば余裕があります。GPU 側で必要なメモリ容量は、選ぶ Ollama モデルによって異なります(9B Q4 で約 6~7 GB、24B Q4 で約 14 GB)。
4GBのディスクスペース
コンテナ、内部SQLiteデータベース、ベクトルデータベース(デフォルトはLanceDB)用です。文書量に応じて容量を増やすこと。
→
まずOllamaをテスト
AnythingLLM を起動する前に、Ollama が応答することを確認してください。curl http://localhost:11434/api/tags を実行して、モデルの一覧が表示される必要があります。このコマンドが失敗すると、AnythingLLM は Ollama に接続できません。「AnythingLLM が動かない」という問題の 80%は、ここに原因があります。

#1. Docker のインストール

公式イメージは、Docker Hubのmintplexlabs/anythingllmで公開されています。Mintplexは安定版タグ(latest、render)を維持しており、イメージにはNode.js、APIサーバー、フロントエンド、ベクトルデータベースとしてのLanceDB、収集用ワーカーがすべて含まれています。

  1. 01
    ストレージフォルダを作成してください
    AnythingLLMはすべてのデータ(設定、ベクトル、ドキュメント)をボリュームに永続的に保存します。ホスト上で専用のフォルダを作成し、イメージのアップデート時にデータを失わないようにしてください。
  2. 02
    コンテナを起動
    以下のコマンドは、ストレージフォルダをマウントし、ポート3001を公開して、SYS_ADMINを有効にします(一部の内部スクレイパーがPDFやウェブページをレンダリングするために必要です)。
  3. 03
    UIを開く
    コンテナが起動すると、http://localhost:3001 でインターフェースを利用できます。初回起動時には、設定ウィザードが管理者パスワードとLLMバックエンドの設定を案内します。
Dockerで起動(Linux/Mac)
mkdir -p $HOME/anythingllm
touch $HOME/anythingllm/.env

docker run -d -p 3001:3001 \
  --cap-add SYS_ADMIN \
  -v $HOME/anythingllm:/app/server/storage \
  -v $HOME/anythingllm/.env:/app/server/.env \
  -e STORAGE_DIR="/app/server/storage" \
  --name anythingllm \
  --restart unless-stopped \
  mintplexlabs/anythingllm:latest
!
Docker ネットワークと Ollama
MacおよびWindowsでは、Ollamaはホスト上で動作しますが、コンテナは隔離されています。AnythingLLMはhttp://host.docker.internal:11434を介してOllamaと通信する必要があります(localhostではなく)。Linuxでは、docker runに--add-host=host.docker.internal:host-gatewayを追加するか、docker0ブリッジのIP(通常は172.17.0.1)を使用してください。
コンテナの確認
docker logs -f anythingllm

# À l'écran : "Primary server in HTTP mode listening on port 3001"
# puis : "Collector hot directory found and ready"

#2. Ollama をバックエンドとして接続

http://localhost:3001 に初めてアクセスすると、AnythingLLM の初期設定が始まり、LLM Provider、埋め込みモデル、ベクトルデータベースの指定と管理者アカウントの作成を求められます。設定は後から Settings でも行えます。

  1. 01
    LLM Provider → Ollama
    リストから Ollama を選択してください。ベースURLを入力してください:http://host.docker.internal:11434(Mac/Windows)または http://172.17.0.1:11434(Linuxのデフォルト)。
  2. 02
    チャットモデルの選定
    ドロップダウンメニューには、Ollama のモデル一覧が表示されます。メインの LLM を選択してください(例:フランス語での品質と VRAM 使用量のバランスを重視するなら mistral-small (24B)、VRAM がさらに限られているなら qwen3.5:9b)。モデルが対応している場合は、コンテキストウィンドウを 8192 または 16384 に設定してください。
  3. 03
    Embedding Provider → Ollama
    エンベディングにも同じバックエンドを使うか、Ollamaに埋め込みモデルを読み込みたくない場合はNative(内蔵のローカルモデル)を選ぶ。AnythingLLMでフランス語を扱うなら、nomic-embed-textで十分ですが、bge-m3(Ollama経由)のほうが優れています。
  4. 04
    Vector Database
    デフォルトのLanceDBをそのまま使用してください。組み込み型で、外部依存がなく、数十万チャンクまでは高い性能を発揮します。すでに別の環境でQdrantやChromaを管理している場合は、ここでそれらを設定することもできます。
OS別のOllamaのURL
Mac / Windows : http://host.docker.internal:11434
Linux (bridge)  : http://172.17.0.1:11434
Linux (--network host) : http://localhost:11434
→
接続できることを確認する
Settings → LLM Preferenceの「Save changes」ボタンを押すと、Ollamaへのテスト呼び出しが行われます。「Could not reach」エラーは、ほとんどの場合、URLにhost.docker.internalとlocalhostのどちらを指定するかという問題を示しています。先に進む前に修正してテストしてください。

#3. ワークスペース、ドキュメントおよび埋め込み

ワークスペースはAnythingLLMの基本単位です。文書群、LLM、チャットの設定、関連する会話をひとまとめにします。通常は、法務、サポート、人事、技術動向の調査といった分野ごとにワークスペースを作成します。

  1. 01
    ワークスペースの作成
    左側のサイドバー → New Workspace。わかりやすい名前(例:"contrats-2026")を付けてください。スラッグは自動生成され、APIのURLで使用されます。
  2. 02
    ドキュメントのアップロード
    ワークスペース内のアップロードアイコンをクリックしてください。AnythingLLM は PDF、DOCX、TXT、MD、CSV、EPUB など、さまざまな形式をサポートしています。また、Web URL または GitHub リポジトリへのリンクを指定することも可能です。内部のスクレイパーがコンテンツを取得します。
  3. 03
    Move to Workspace + Embed
    アップロードしたファイルは、まず「Document Picker」(一時領域)に入ります。インデックスを作成するファイルを選び、「Move to Workspace」を実行してください。AnythingLLM はテキストをチャンクに分割し、Ollama を使って埋め込みを計算して、LanceDB に保存します。
  4. 04
    システムプロンプトの設定
    Workspace settings → Chat Settings → Prompt。ここで役割を設定します(「あなたは法務アシスタントです。常に契約書の該当条項を正確に引用してください」)。検索のtop-K(Document Similarity Threshold)もここで設定します。
Chunk size
デフォルトは1000文字で、重複部分は20文字。各条項が重要な法的契約書では500文字に減らす。コードブロックを含む技術文書では1500文字に増やす。
Embeddingモデル
nomic-embed-text(768次元)は高速ですが、フランス語での精度はそこそこです。bge-m3(1024次元、多言語対応)は、フランス語コンテンツで精度が10~15%向上します。mxbai-embed-largeは、両者の中間に位置する良い選択肢です。
チャットモードとクエリモード
Chat は会話履歴と RAG を使用します。Query は RAG に厳密に限定されたモードで、ドキュメント内に該当する情報がなければ、LLM は回答を拒否します。ハルシネーションが許されない用途には、Query が適切な設定です。
i
Pin Document
ワークスペース内のドキュメントは、画びょうアイコンでピン留めできます。ピン留めすると、通常のRAGによる情報検索に加えて、そのドキュメントの全文が各プロンプトに挿入されます。業務用語集や、常にコンテキストに含めておく必要がある規範文書に最適です。
Ollama 経由で埋め込みモデルを取得
# Modèle par défaut, multilingue correct
ollama pull nomic-embed-text

# Meilleur pour le français, 1024 dimensions
ollama pull bge-m3

# Vérifier qu'ils tournent
ollama list | grep embed

#4. 内蔵エージェント

AnythingLLMはRAGだけにとどまらず、エージェントシステムも搭載しています。チャットで@agentを呼び出すと、LLMがスキル(ツール)を使って文書データベースの外から情報を取得できるようになります。LangChainを使ったり、ツール呼び出しのコードを書いたりする必要はありません。機能が組み込まれています。

web-browsing
エージェントがURLを開き、ページを読み取ります(生のHTMLだけではなく、レンダリングされたDOMを読み取ります)。RAGに含まれていない情報についてアシスタントに回答させるのに役立ちます。
web-scraping
別の方法:ページをスクレイピングし、ドキュメントとしてワークスペースに追加します。必要に応じてその場でコーパスを充実させるのに便利です。
save-document
エージェントは文書(要約、まとめ)を生成し、ワークスペースに保存します。「10本の記事を読む → ノートを作成する」といったワークフローに役立ちます。
sql-connector
PostgreSQL/MySQLのデータベースを接続すると、エージェントがSQLクエリを作成・実行し、分析に関する質問に回答できます。当然ながら、読み取り専用のSQLアカウントと組み合わせて使用してください。
rag-memory
会話をまたいで保持される長期記憶。エージェントは事実を保存し、将来のセッションで取り出すことができます。
チャット内でエージェントの呼び出し
@agent va sur https://blog.example.com/rapport-2026 et fais-moi
un résumé en 5 points des chiffres-clés.

@agent connecte-toi à la base postgres-prod et donne-moi le top 10
des clients par chiffre d'affaires sur le trimestre.

@agent enregistre la conversation précédente sous forme de note
dans ce workspace, titre : "Synthèse veille IA juin 2026".
!
ツール呼び出しに適した強力なモデル
エージェントには、関数呼び出し(function calling)を正しく行えるLLMが必要です。ローカルで使うなら、glm-4.7-flash(MoE 30B-A3B、エージェント用途に非常に優れる)またはqwen3.8:27bが候補となり、mistral-smallも堅実な代替候補です。最低限の選択肢はqwen3.5:9bです。ツール使用向けのファインチューニングを受けていない極小モデル(2〜3B)は、ツール呼び出しでハルシネーションを起こします。エージェントがループしたり、呼び出しに失敗したりする場合、原因はほぼ常にここにあります。

#5. APIを公開する

アプリケーション(内部チャットボット、Slackプラグイン、ビジネス統合)にAnythingLLMを接続するには、REST APIが標準的なインターフェースです。各ワークスペースは、そのコーパスに限定されたエンドポイントになります。

  1. 01
    APIキーの生成
    Settings → API Keys → Generate New API Key。キーを記録してください。表示されるのは一度だけです。クライアントアプリケーションごとに1つなど、複数作成し、個別に失効させることもできます。
  2. 02
    ワークスペースのslugを識別する
    ワークスペースを開いているときに、URLで確認できます:.../workspace/contrats-2026 → slug = contrats-2026。
  3. 03
    curlでテスト
    メインのエンドポイントはPOST /api/v1/workspace/{slug}/chatです。ヘッダーはAuthorization: Bearer YOUR_KEY、JSON形式のリクエストボディにはmessageとmode(chatまたはquery)を指定します。
curlによるAPI呼び出し
curl -X POST http://localhost:3001/api/v1/workspace/contrats-2026/chat \
  -H "Authorization: Bearer VOTRE_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Quelle est la durée de préavis dans le contrat ACME ?",
    "mode": "query"
  }'
Pythonクライアント
import requests

API_KEY   = "votre-cle-api"
WORKSPACE = "contrats-2026"
BASE_URL  = "http://localhost:3001"

def ask(question: str, mode: str = "chat") -> dict:
    response = requests.post(
        f"{BASE_URL}/api/v1/workspace/{WORKSPACE}/chat",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
        },
        json={"message": question, "mode": mode},
        timeout=120,
    )
    response.raise_for_status()
    return response.json()

result = ask("Résume la clause 4 du contrat ACME signé en mars.")
print(result["textResponse"])
for source in result.get("sources", []):
    print(" -", source["title"])
→
ストリーミングおよび高度なエンドポイント
APIは、トークン単位でストリーミングする /chat/stream(SSE)、サーバー側で複数ターンの会話を管理する /thread/new、インデックス作成を自動化する /documents にも対応しています。完全なドキュメントは Settings → API → Open API Docs(組み込みのSwagger UI)にあります。

#トラブルシューティング

"Could not reach Ollama at ..."
最もよくあるエラーです。URLを確認してください。Dockerコンテナ内から見ると、localhostはホストを指しません。MacやWindowsではhost.docker.internalを、LinuxではブリッジのIPアドレスまたは--network hostを使用してください。
埋め込みが非常に遅い
Ollamaでモデルをpullしていない場合、埋め込みモデルはデフォルトでCPU上で動作します。埋め込みプロバイダーとしてOllamaを明示的に指定し、インデックス作成中にollama psでGPUが稼働していることを確認してください。
RAGが見つかるはずの文章を検索できない
よくある原因は3つです。チャンクが大きすぎる(1000文字から500文字に減らしてください)、埋め込みモデルのフランス語性能が低い(bge-m3に切り替えてください)、またはワークスペース設定のDocument Similarity Thresholdが厳しすぎることです。
エージェントがツール呼び出しを繰り返す
モデルの能力が足りません。glm-4.7-flash、可能ならqwen3.8:27b、またはmistral-smallに切り替えてください。エージェントには、ツール使用向けのファインチューニングを受けていない極小モデル(2~3B)を使わないでください。
コンテナが数時間後に強制終了される
カーネルのOOM:Dockerに割り当てられているメモリが不足しています。Docker Desktopでは、RAMの上限を8~16GBに引き上げてください(Settings → Resources)。
イメージの更新
docker pull mintplexlabs/anythingllm:latestを実行し、その後docker rm -f anythingllmを実行して、同じボリュームを指定してrunを再実行します。$HOME/anythingllm内のデータは保持されます。

#さらに詳しく

進みたい方向に応じて:

AnythingLLM をノーコードの代替案と比較
「Ollamaでコードを書かずにローカルRAGを使う(Open WebUI、AnythingLLM)」では、同じOllamaバックエンドを使って、Open WebUIと直接比較しています。
フランス語のエンベディングを最適化する
「フランス語の最優秀埋め込みモデル」では、bge-m3、Solon、E5を比較し、AnythingLLM向けの適切な設定を紹介しています。
本番環境のスタックをさらに発展させる
「Docker ComposeでLLMをプロダクション環境にデプロイする」では、AnythingLLMをTraefikのリバースプロキシ、外部Qdrant、自動バックアップと組み合わせる方法を示します。
このガイドは役に立ちましたか?

ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。