「RAGやエージェント機能をコードなしで実装したいが、どのツールを選べばいいか分からない」
そんな悩みを抱えるLinuxエンジニアやシステム管理者は多い。Ubuntu ServerでOllamaを構築するところまではできても、そこからアプリケーション基盤へ発展させる段階で手が止まってしまう。Open WebUIでチャット画面は作れても、RAGとエージェントを組み合わせてAPIとして外部に提供したいとなると、別の構成が必要になる。
この記事では、OllamaとDifyを連携させて、ローカルLLM環境にチャットボット・RAGナレッジベース・AIエージェントをノーコードで構築する手順を解説する。Difyは2024年以降に国内でも急速に普及したLLMアプリ開発プラットフォームで、Open WebUIがチャット画面特化であるのに対し、Difyはアプリ作成・RAG・エージェント・API公開を一つのUIで管理できる。Ubuntu 24.04 LTS・Docker 26.x以上・Ollama 0.3.x以上の環境を前提に手順を進める。
この記事のポイント
・DifyをDockerでインストールし、OllamaのエンドポイントURLを登録するだけで連携できる
・チャットボット・RAGナレッジベース・AIエージェントをノーコードUIで構築できる
・DifyのAPIエンドポイントを使えば既存の業務システムにローカルLLMを組み込める
・連携時のモデル未認識・Docker疎通エラーは対処パターンが決まっており解消しやすい
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
DifyとOllamaを連携させる前に確認しておくこと
DifyとOllamaを組み合わせると、チャットボット・RAG・エージェント・APIエンドポイントをまとめて管理できる基盤が出来上がる。ただし連携には前提となる設定がいくつかある。事前に整えておくことで、後からトラブルで詰まるリスクを大きく減らせる。DifyはDocker Composeで動作する複数コンテナ構成(API・Worker・Web・PostgreSQL・Redis・Vector DB)をまとめて起動する。このDockerコンテナからホスト上で動いているOllamaのAPIにアクセスする必要があるため、Ollamaのリスニングアドレスをデフォルトのローカルループバックから変更しておく必要がある。
また、Difyはデフォルトで80番ポートを使用するため、ApacheやNginxが動いている場合は事前に停止するか、DifyのNGINX_HTTP_PORT環境変数で別ポートを指定しておく。
1. 動作環境と前提条件を確認する
まずOllamaが正常に動作していることをcurlで確認する。# OllamaのAPIが応答しているか確認する $ curl http://localhost:11434/api/tags {"models":[{"name":"llama3.3:70b-instruct-q4_0","model":"llama3.3:70b-instruct-q4_0","modified_at":"2026-06-10T08:23:11Z","size":43002828624,"digest":"abc123def456...","details":{"format":"gguf","family":"llama","parameter_size":"70B","quantization_level":"Q4_0"}}]}
もしOllamaのモデルをまだ選定中であれば、Llama3.3・Mistral・Gemma 3・Phi-4の性能比較と用途別の使い分けを先に確認しておくと、Difyに接続するモデルの選択がスムーズになる。
2. OllamaのAPIをDockerコンテナからアクセスできる設定に変更する
Ollamaはデフォルトで127.0.0.1にバインドするため、Dockerコンテナからは直接アクセスできない。systemdのOverrideファイルでOLLAMA_HOSTを変更してリスニングアドレスを0.0.0.0に切り替える。# systemd overrideファイルを作成する $ sudo mkdir -p /etc/systemd/system/ollama.service.d/ $ sudo tee /etc/systemd/system/ollama.service.d/override.conf <<'EOF' [Service] Environment="OLLAMA_HOST=0.0.0.0:11434" EOF # 設定を反映してOllamaを再起動する $ sudo systemctl daemon-reload $ sudo systemctl restart ollama # 0.0.0.0でLISTENしていることを確認する $ ss -tlnp | grep 11434 LISTEN 0 128 0.0.0.0:11434 0.0.0.0:* users:(("ollama",pid=3142,fd=7))
DifyをDockerでインストールする方法
DifyはGitHubの公式リポジトリをクローンしてDocker Composeを起動するだけでインストールできる。Web・API・Worker・PostgreSQL・Redis・Weaviateが一括で起動し、ブラウザでの初期セットアップまで含めて15分程度で完了する。1. DockerとDocker Composeの準備
Ubuntu 24.04 LTSでDockerが未導入の場合は公式インストールスクリプトで一括導入する。# Docker公式インストールスクリプトを実行する $ curl -fsSL https://get.docker.com | sudo sh # 現ユーザーをdockerグループに追加する(再ログイン後に有効) $ sudo usermod -aG docker $USER # バージョンを確認する $ docker --version Docker version 26.1.4, build 5650f9b $ docker compose version Docker Compose version v2.27.1
2. DifyのリポジトリをCloneしてコンテナを起動する
公式リポジトリをクローンし、環境変数ファイルをサンプルからコピーしてコンテナを起動する。# リポジトリをクローンする(最新1件のみ取得) $ git clone https://github.com/langgenius/dify.git --depth=1 $ cd dify/docker # 環境変数ファイルをサンプルからコピーする $ cp .env.example .env # コンテナをバックグラウンドで起動する $ docker compose up -d # コンテナの起動状態を確認する $ docker compose ps NAME IMAGE STATUS dify-api-1 langgenius/dify-api Up 3 minutes (healthy) dify-web-1 langgenius/dify-web Up 3 minutes dify-worker-1 langgenius/dify-api Up 3 minutes (healthy) dify-db-1 postgres:15-alpine Up 3 minutes (healthy) dify-redis-1 redis:6-alpine Up 3 minutes (healthy) dify-weaviate-1 semitechnologies/weaviate Up 3 minutes
3. Difyの初期セットアップを完了させる
ブラウザで `http://サーバーIP/install` にアクセスして管理者アカウントを作成する。メールアドレスとパスワードを入力してセットアップを完了させるとダッシュボードが表示される。この画面は初回のみ表示され、2回目以降はログイン画面に切り替わる。チームで使う場合はダッシュボードの「Settings → Members → Invite」からメンバーを招待できる。招待されたメンバーはメールのリンクからアカウントを作成してDifyにログインできるようになる。
DifyにOllamaを接続してモデルを認識させる方法
DifyはOpenAI・Anthropic・Google等の外部APIに加えてOllamaも標準でサポートしている。Settings画面からモデルプロバイダーを追加することで、Dify上のすべてのアプリでOllamaのモデルを選択できるようになる。社内でChatGPTを使えない環境でローカルLLMを展開するアプローチを検討している場合は、社内でChatGPTが使えないときの代替手段としてのローカルLLMも合わせて参考にしてほしい。
1. DifyのSettings画面でOllamaプロバイダーを追加する
ダッシュボード右上のアカウントアイコンから「Settings → Model Provider」に移動する。プロバイダー一覧から「Ollama」を選択して以下の情報を入力する。・Base URL: `http://host-gateway:11434`(DockerコンテナからホストのOllamaに接続するアドレス)
・Model Name: `llama3.3:70b-instruct-q4_0`(ollama listで確認したモデル名をそのまま入力)
・Model Type: LLM
「host-gateway」はDockerがLinuxホストのIPに自動解決する特別なホスト名だ。`localhost` や `127.0.0.1` はDockerコンテナ自身を指すためOllamaには届かない点に注意する。入力後「Save」をクリックして「Connected successfully」が表示されれば接続完了だ。
モデルを複数使い分けたい場合は「Add Model」を繰り返して追加できる。用途別に特化したモデルを複数登録しておき、アプリごとに使い分けるとよい。
2. Playgroundでモデルの動作を確認する
「Explore → Playground」でチャット画面を開き、追加したOllamaモデルを選択してテストメッセージを送る。日本語の質問に正しく応答すれば動作確認完了だ。レスポンスが遅い場合はモデルサイズを下げることを検討する。PoC(概念実証)段階ではGemma 3の4Bモデルや軽量なMistralモデルから始め、品質を確認しながら大型モデルに切り替えるのが現場での定石だ。
Difyでチャットボットアプリを作成する手順
Difyでは「App」という単位でLLMアプリを管理する。チャットボット・テキスト生成・エージェント・ワークフローの4タイプから選んで作成する。チームへの最初の展開にはチャットボットタイプが最もシンプルで使いやすい。1. 新規チャットアプリを作成する
「Studio → Create App → Chatbot」を選択してアプリ名(例:「社内技術QAボット」)を入力し作成する。オーケストレーション画面が開いたら右側の「Model」セクションで先ほど追加したOllamaモデルを選択する。Temperature(応答のランダム性・0.0~1.0)はデフォルトの0.7から変更しなくて構わない。技術的な回答精度を重視する場合は0.3程度に下げるとハルシネーションが減る傾向がある。コンテキスト長(Max Tokens)も必要に応じて調整する。
2. システムプロンプトを設定する
「Instructions」欄にシステムプロンプトを入力する。チャットボットの役割・回答スタイル・制約を日本語で明確に記述することが品質向上のカギとなる。社内技術QAボットであれば次のような内容が効果的だ。
・あなたは社内のLinuxサーバー運用に関する質問に答えるAIアシスタントです
・回答は日本語で行い、コマンドが必要な場合はコードブロック形式で記載してください
・社外秘情報・個人情報への言及は控えてください
・回答が不確かな場合は「確認が必要です」と明示してください
プロンプト設計は試行錯誤が必要な部分だ。DifyはPrompt Logで会話履歴を確認できるため、実際の質問と応答を見ながら継続的に改善できる。
3. チャットアプリを公開してチームに共有する
右上の「Publish」をクリックすると公開URLが発行される。社内ネットワーク内のメンバーがこのURLにアクセスしてチャットを利用できる。Difyのデフォルト設定では認証なしでアクセスできるため、機密性の高い用途ではNginxのBasic認証やIP制限を組み合わせて保護する。DifyにはAPIキーを発行してREST APIとしてアプリを外部公開する機能もある。「API Access」タブからAPIキーを生成すれば、既存の社内システムから `POST /v1/chat-messages` エンドポイントを呼び出してローカルLLMを組み込める。
DifyのナレッジベースにドキュメントをRAGで登録する方法
Difyに内蔵されているRAG機能を使えば、社内マニュアル・手順書・FAQをナレッジベースとして登録して、チャットボットが参照しながら回答できるようになる。LangChainやChromaDBのコードを書かずにUIだけで完結する点が大きな強みだ。1. Embeddingモデルを設定する(nomic-embed-textの導入)
RAGにはテキストをベクトルに変換するEmbeddingモデルが必要だ。OllamaのEmbeddingモデルとして `nomic-embed-text` を使う。まずOllama側でpullする。# Embeddingモデルを追加する $ ollama pull nomic-embed-text pulling manifest pulling 970aa74c0a90... 100% ▕████████████████████▏ 274 MB pulling c71d239df917... 100% ▕████████████████████▏ 11 KB verifying sha256 digest writing manifest success # インストールを確認する $ ollama list | grep nomic nomic-embed-text:latest 0a109f422b47 274 MB 1 minute ago
2. ナレッジベースを作成してドキュメントをアップロードする
「Knowledge」タブから「Create Knowledge」を選択してナレッジベース名を入力する。PDF・TXT・Markdown・Word・CSV・HTMLなど複数形式に対応している。チャンク設定は最初はデフォルト(500トークン・オーバーラップ50トークン)で問題ない。技術マニュアルのように見出しが明確な文書は、Segment identifierに `#`(Markdownの見出し記号)を指定すると見出し単位でチャンクが分割されて精度が上がることがある。
アップロード後にインデックス作成の進捗バーが100%になれば登録完了だ。処理時間はドキュメントのサイズとサーバーの性能に依存する。100ページを超えるPDFは章単位で分割してからアップロードすると処理が安定する。
3. チャットアプリにナレッジベースを紐付ける
チャットアプリのオーケストレーション画面の「Context」セクションで「Add」をクリックして作成したナレッジベースを選択する。これでユーザーの質問に対してナレッジベースを参照しながら回答するようになる。Difyはデフォルトで回答の根拠となったドキュメントと該当箇所を引用情報として表示する機能を持つ。「どの文書のどの部分を参照したか」が分かるため、回答精度の確認と信頼性の担保がしやすい。一つのチャットアプリに複数のナレッジベースを紐付けることも可能で、カテゴリ別にナレッジベースを分けて管理できる。
DifyでAIエージェントを作成してツールを組み込む方法
チャットボット・RAGの次の段階として、外部ツールを自律的に呼び出すAIエージェントをDifyで作成できる。ユーザーの指示に基づいて検索・計算・APIコールをエージェントが選択して実行する形だ。コードを書かずにビジュアル設定だけでエージェントを構築できる。1. エージェントアプリを作成する
「Studio → Create App → Agent」を選択する。推論方式はFunction CallingとReActから選べる。Ollamaで動かすモデルのFunction Calling対応状況はモデルによって異なる。Llama3.3とMistral・Phi-4の最新バージョンはFunction Callingに対応しており比較的安定して動作する。Gemma 3の小型モデル(2B・4B)では対応が不安定な場合があるため、ReActモードを選ぶ方が確実なことがある。
エージェントのTools設定でDify組み込みのツール(DuckDuckGo検索・Wikipedia・計算機・日時取得等)を追加できる。社内システムとの連携にはOpenAPI(OAS 3.0)スキーマを読み込んでカスタムAPIツールとして登録する方法が使える。例えば社内のチケットシステムのAPIをOpenAPI形式で記述しておけば、「チケット#1234の状態を調べて」という自然言語の指示をエージェントがAPIコールに変換して実行できるようになる。
2. エージェントの動作を確認してチューニングする
エージェントアプリ作成後は左側のデバッグ画面で動作を確認する。ツール呼び出しの過程がステップ単位で可視化されるため、どのツールを選択してどんな結果を得たかを一目で追える。ローカルLLMのエージェント機能はクラウドLLMと比べてツール選択の精度が下がることがある。システムプロンプトでツールの使用条件を明示すると精度が向上する。複雑な多段ツール呼び出しを行う前に、ツール1つの単純なケースから動作を確認して積み上げていくのが現場での正解だ。
DifyとOllama連携でよくあるトラブルと対処法
連携設定で詰まりやすいポイントをまとめておく。 モデルが認識されない(Error: model not found)Difyに登録したモデル名がOllamaにpull済みのモデル名と完全に一致していることを確認する。`ollama list` で実際の名前を確認し、量子化タグを含むフルネームを入力する必要がある。`llama3.3` と `llama3.3:70b-instruct-q4_0` は別モデル扱いになるため注意が必要だ。
# pull済みモデルの正確な名前を確認する $ ollama list NAME ID SIZE MODIFIED llama3.3:70b-instruct-q4_0 abc123def456 43 GB 3 days ago nomic-embed-text:latest 789xyz001234 274 MB 1 day ago gemma3:4b def456abc789 2.5 GB 5 hours ago
DockerコンテナからホストのOllamaに接続するには `http://host-gateway:11434` を使う。`localhost` や `127.0.0.1` はコンテナ自身を指すためOllamaには届かない。`host-gateway` でも繋がらない場合は `ip route | grep default` でホストのデフォルトゲートウェイIPを確認し、そのIPを直接指定する方法を試す。
Difyのコンテナが起動しない
`docker compose logs dify-api-1` でログを確認する。PostgreSQLの起動遅延が原因のことが多く、2~3分待ってから `docker compose restart dify-api-1` で再起動すると解消することがある。80番ポートが他のサービスと競合している場合は `.env` の `NGINX_HTTP_PORT=8080` に変更してから `docker compose up -d` を再実行する。
RAGの検索精度が低い
チャンクサイズを300~400トークンに小さくすると精度が改善することがある。ドキュメントをアップロードする前に余分な空白・ページ番号・ヘッダー・フッターを除去した前処理済みファイルを使うと、ノイズが減って関連性スコアが上がる傾向がある。
Embeddingの処理が途中で止まる
大量のドキュメントを一度にアップロードした場合に発生することがある。100ページを超えるPDFは事前に章ごとに分割してからアップロードすることを推奨する。
まとめ
OllamaとDifyを連携させることで、チャットボット・RAGナレッジベース・AIエージェントをノーコードで構築できる。Dockerでインストールして、OllamaのエンドポイントURLをSettings画面に登録するだけで動き始める。社内ドキュメントをナレッジベースに登録するまでの所要時間は1時間程度だ。Difyはチャット画面の提供だけでなく、LLMアプリをAPIエンドポイントとして外部に提供する機能も持つ。既存の社内システムにローカルLLMを組み込む際の入口として使いやすい構成だ。機密データを外部に送らずチームでLLMを活用したい企業にとって、OllamaとDifyの組み合わせは現時点でコストパフォーマンスの高い選択肢の一つだ。
| やりたいこと | 手順・コマンド |
|---|---|
| OllamaをDockerから受け付ける設定 | OLLAMA_HOST=0.0.0.0:11434 をoverride.confに設定してsystemctl restart ollama |
| Difyをインストールする | git clone https://github.com/langgenius/dify.git --depth=1 && cd dify/docker && cp .env.example .env && docker compose up -d |
| DifyからOllamaに接続する | Settings → Model Provider → Ollama → Base URL: http://host-gateway:11434 |
| Embeddingモデルを追加する | ollama pull nomic-embed-text |
| pull済みモデル名を確認する | ollama list |
| Difyコンテナのログを確認する | docker compose logs dify-api-1 --tail=50 |
ローカルLLMとDifyの連携を2日間のハンズオンで体験する
OllamaのセットアップからDifyでRAGチャットボットを動かすまでの全工程を、実機GPU環境で手を動かしながら習得したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。
・Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
・社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
・ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます