モデル別実行レシピ

n8nとOllamaでローカルAI業務の自動化を始める

フォルダーにPDFを置くと、n8nがテキストを抽出し、Ollamaに要約を依頼して結果をファイルに保存できます。

n8nはワークフローのノードをつないで、ファイル処理やモデルへのリクエストを自動化します。セルフホストAIスターターキットは、n8nと関連サービスをDocker Composeで起動する構成例です。Apple Silicon MacではDockerコンテナからGPU1を直接利用できないため、OllamaをMacアプリとして起動し、Docker内のn8nからホストへ接続します。Ollamaのポートをネットワークから受け付けるため、アクセス範囲を制限してください。

実行条件と要点
  • n8nはトリガー、ファイル、モデルのノードをつないで繰り返し作業を自動化します。
  • Apple SiliconではOllamaをmacOSアプリ、n8nをDockerで実行すると、モデル推論をMacのGPUを使えるホスト側で行えます。
  • コンテナからのOllama接続先はhttp://host.docker.internal:11434/です。Mac上のOllamaがその接続を受け付けるよう設定します。
  • 抽出したPDFテキストがモデルに届き、結果の保存先が機能することを小さなサンプルで確認してから定期実行にします。

n8nはファイル処理とモデルへのリクエストを1つの流れにつなぎます

n8nはスケジュール、ファイル、Webリクエストなどの開始条件と処理ステップをつなぐ自動化ツールです。この例では共有フォルダーからPDFを読み、テキストを抽出してOllamaに韓国語の要約を依頼し、結果を保存します。各段階の入出力を画面で見れば、失敗箇所をすぐ絞れます。

最初のノードにManual Triggerを置いてワークフローを作ります。編集画面のExecute WorkflowをクリックしてPDFを1件処理し、各ノードの入力と出力を確認して要約に必要な情報が残っているか読みます。Schedule Triggerを追加する前に重複処理と再試行の方針を決めます。

画面にパネルがあるノートPC、小型PC、マイク、ノート、ストップウォッチ
ファイル処理、モデルへの依頼、結果保存を個別に確認できる手順に分けます。

DockerスターターキットとMac上のOllamaを準備します

Docker DesktopとOllamaアプリをインストールします。Ollamaのモデルライブラリでモデルを選び、掲載された正確なollama pull ...コマンドを実行してから、ollama listで導入済みの名前を確認します。公式スターターキットによると、MacのDockerコンテナからApple GPUは使えないため、n8nはDocker Composeで起動し、推論はMac上のOllamaが行います。

スターターキットをcloneして環境ファイルを作り、案内されている初期パスワードと暗号化キーを変更します。OllamaをMac上で動かす場合、環境ファイルのOLLAMA_HOSTをhost.docker.internal:11434に設定します。shared/inbox、shared/output、shared/processedを用意してプロジェクトを起動し、http://localhost:5678/を開いてn8nを初期設定します。

n8nスターターキットのフォルダーを作成
git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git n8n-ai-local
cd n8n-ai-local
cp .env.example .env
mkdir -p shared/inbox shared/output shared/processed
新しいフォルダー内で実行し、.envのサンプル秘密情報を変更します。
Macでスターターキットを起動
docker compose up
Apple GPUはDockerコンテナに渡せないため、OllamaはMacアプリとして別に実行します。
ローカルOllama用の環境変数例
OLLAMA_HOST=host.docker.internal:11434
この値は`.env`に設定します。n8n認証情報のBase URLは`http://host.docker.internal:11434/`です。

Ollamaアプリは既定で127.0.0.1:11434だけで接続を受け付けます。DockerからMac上のOllamaに接続するには、Mac側の受信設定も必要です。macOSアプリを使う場合は、公式FAQにあるlaunchctl setenv OLLAMA_HOST 0.0.0.0:11434を設定して、アプリを再起動します。

この設定では、すべてのネットワークインターフェースで接続を受け付けます。Macのファイアウォールで11434番ポートを信頼できるローカル接続に制限し、ルーターでポート転送を設定したり、インターネットに公開したりしないでください。Ollama API2には既定の認証がありません。

macOSアプリのOllamaで接続を受け付ける設定
launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
すべてのインターフェースで待ち受けるため、ファイアウォールで制限し外部公開しないでください。
色付きブロックの入った開いたPCからタブレットや画面型パネルへ線が伸びる図
Mac上のOllamaとDocker内のn8nは異なるアドレス空間で動きます。

PDF要約の流れを手動実行で段階ごとに作ります

先頭をManual Triggerにします。ホストのn8n-ai-local/shared/inbox/brief.pdfにPDFを置き、Read/Write Files from Diskを接続します。OperationはRead File(s) From Disk、File(s) Selectorは/data/shared/inbox/*.pdf、Put Output File in Fieldはdataです。Composeがsharedを/data/sharedにマウントするため、選択欄にはコンテナ内のパスを指定します。

Extract From FileのOperationをExtract From PDF、Input Binary Fieldをdataにします。抽出本文はtextに入ります。Basic LLM ChainにOllama Chat Modelを接続し、認証情報のBase URLをhttp://host.docker.internal:11434/に設定します。ollama listの正確なモデル名を選び、次の文をチェーンのPrompt3欄に入力します。

チェーンのPromptに入れる要約指示
문서의 핵심을 5개 항목 이내로 요약하세요. 날짜·금액·고유명사는 원문대로 유지하세요.

{{ $json.text }}

チェーンの出力はtextフィールドです。Convert to FileでOperationをConvert to Text File、Text Input Fieldをtext、File Nameを{{ $('Read/Write Files from Disk').item.binary.data.fileName.replace(/\.pdf$/i, '.summary.txt') }}にします。

最後のRead/Write Files from DiskではWrite File to Diskを選び、File Path and Nameを/data/shared/output/{{ $('Read/Write Files from Disk').item.binary.data.fileName.replace(/\.pdf$/i, '.summary.txt') }}、Input Binary Fieldをdataにします。

最初の出力はホスト側のn8n-ai-local/shared/output/brief.summary.txtです。スキャンPDFで抽出textが空ならOCR4手順を追加します。

すべてのノードを接続してから編集画面のExecute Workflowを押します。各ノードの入出力を確認し、ホストのshared/output/brief.summary.txtを原文と照合します。

チェックマークと書類アイコンがあるモニターの前に座る人と書類の束
抽出テキストと要約を確認してから定期実行を有効にします。

要約を確認してからスケジュールトリガーを追加します

定期実行の前に、ファイル読み込みとPDF抽出の間へRemove Duplicatesを追加します。OperationはRemove Items Processed in Previous Executions、Keep Items WhereはValue Is New、Value to Dedupe Onは{{ $binary.data.fileName }}、ScopeはNodeです。同じファイル名は次の実行で除外され、モデルへ再送されません。

この実習ではファイル名を文書IDにします。修正版はbrief-v2.pdfのような新しい名前で入れ、失敗した入力も名前を変えて再処理します。以前の要約を残す場合は別名で保存します。異なる文書でファイル名が重ならないよう管理してください。

同じファイルを2回実行し、2回目は重複除去ノードの先に送られないことを確認します。その後Schedule Triggerを追加し、低い頻度でワークフローを有効化します。最初の定期実行後に履歴と出力フォルダーを確認します。

モデルが応答しない、ファイルが空の場合は経路を切り分けます

Ollamaモデルノードで接続エラーが出たら、MacでOllamaが起動し、ollama listにモデルが表示されるか確認します。次に、Credentialsにはhttp://host.docker.internal:11434/、.envにはhost.docker.internal:11434が入っていることを確認します。モデルノードでは一覧の正確な名前を選びます。

ファイルノードがパスを見つけられない場合は、Macのパスではなく/data/shared/...のようなコンテナ内のパスを使っているか確認します。Extract From Fileの出力が空なら、PDFに選択可能なテキストがあるか調べます。実行履歴で読み込み、抽出、モデルリクエスト、保存のどこが失敗したか確認すれば、フロー全体を作り直さずに該当部分を修正できます。

用語の注釈

  1. GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。

    本文に戻る
  2. API — 別のコードからプログラムの機能を呼び出すための決められたインターフェースです。

    本文に戻る
  3. プロンプト — モデルに送る入力文です。生成モデルでは作りたい結果を説明する文になり、出力の構成や内容を大きく左右します。

    本文に戻る
  4. OCR — 画像やスキャン文書の文字を認識してテキストにする処理です。表の配置や読み順は、元の画像を合わせて確認する必要があります。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
n8nはワークフローのノードをつないで、ファイル処理やモデルへのリクエストを自動化します。セルフホストAIスターターキットは、n8nと関連サービスをDocker Composeで起動する構成例です。Apple Silicon MacではDockerコンテナからGPUを直接利用できないため、OllamaをMacアプリとして起動し、Docker内のn8nからホストへ接続します。Ollamaのポートをネットワークから受け付けるため、アクセス範囲を制限してください。
選ばないほうがよいのはどのような場合ですか?
この設定では、すべてのネットワークインターフェースで接続を受け付けます。Macのファイアウォールで11434番ポートを信頼できるローカル接続に制限し、ルーターでポート転送を設定したり、インターネットに公開したりしないでください。Ollama APIには既定の認証がありません。