見出し画像

n8n-io/self-hosted-ai-starter-kit:完全自ホスティング型AIワークフロー統合環境ーーGensparkの解説

プロジェクト概要

Self-hosted AI Starter Kitは、n8n、Ollama、Qdrant、PostgreSQLを統合したDocker Compose テンプレートで、包括的なローカルAI・ローコード開発環境を迅速に構築できる完全自ホスティング型のプラットフォームです。400以上の統合機能と高度なAIコンポーネントを活用して、自作AIエージェントの構築が可能です。

統合コンポーネント

1. n8n(コアワークフロープラットフォーム)

  • 400以上の統合: API、データベース、クラウドサービス等との連携

  • ビジュアルワークフロー: ノードベースのドラッグ&ドロップエディター

  • 高度なAIノード: LangChainベースのAIエージェント、テキスト分類、情報抽出

  • リアルタイム実行: トリガーベースの自動ワークフロー実行

2. Ollama(ローカルLLM実行環境)

  • 多様なモデル: Llama3.2、Mistral、CodeLlama等のオープンソースLLM

  • GPU/CPU対応: NVIDIA、AMD、CPU環境での最適化実行

  • モデル管理: 自動ダウンロードとバージョン管理

  • API互換性: OpenAI API互換のローカルインターフェース

3. Qdrant(ベクトルデータベース)

  • 高性能ベクトル検索: 大規模データセットでの意味検索

  • 包括的API: RESTful APIとgRPCサポート

  • スケーラビリティ: 分散環境での水平スケーリング

  • 多様な距離関数: コサイン、ユークリッド、ドット積等

4. PostgreSQL(リレーショナルデータベース)

  • 堅牢なデータ管理: 大量データの安全な処理

  • JSON/JSONB: 半構造化データの効率的格納

  • 拡張性: pgvector等のAI関連拡張機能

  • トランザクション: ACID準拠の信頼性

  Docker Compose 構成

完全な統合環境設定

Copyversion: '3.8'

services:
  # n8n ワークフロー実行環境
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=${N8N_HOST:-localhost}
      - N8N_PORT=5678
      - N8N_PROTOCOL=${N8N_PROTOCOL:-http}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - QUEUE_BULL_REDIS_HOST=redis
    volumes:
      - n8n_data:/home/node/.n8n
      - ./shared:/data/shared
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    restart: unless-stopped

  # PostgreSQL データベース
  postgres:
    image: postgres:15
    container_name: postgres
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 10
    restart: unless-stopped

  # Qdrant ベクトルデータベース
  qdrant:
    image: qdrant/qdrant:latest
    container_name: qdrant
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - qdrant_data:/qdrant/storage
    restart: unless-stopped

  # Redis キャッシュ・キュー
  redis:
    image: redis:7-alpine
    container_name: redis
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5
    restart: unless-stopped

  # Ollama LLM実行環境(GPU版)
  ollama-gpu:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    restart: unless-stopped
    profiles: ["gpu-nvidia"]

  # Ollama LLM実行環境(CPU版)
  ollama-cpu:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    restart: unless-stopped
    profiles: ["cpu"]

  # モデル自動プル(初回セットアップ)
  ollama-pull-llama:
    image: ollama/ollama:latest
    container_name: ollama-pull-llama
    volumes:
      - ollama_data:/root/.ollama
    depends_on:
      - ollama-gpu
    command: pull llama3.2
    profiles: ["gpu-nvidia"]

volumes:
  n8n_data:
  postgres_data:
  qdrant_data:
  ollama_data:

networks:
  default:
    name: n8n-ai-network

 インストール・セットアップ

1. リポジトリクローン

Copygit clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git
cd self-hosted-ai-starter-kit
cp .env.example .env

2. 環境変数設定(.env)

Copy# n8n設定
N8N_HOST=localhost
N8N_PROTOCOL=http
N8N_ENCRYPTION_KEY=your_encryption_key_here

# PostgreSQL設定
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=your_postgres_password

# Ollama設定
OLLAMA_HOST=ollama:11434

# セキュリティ設定
WEBHOOK_URL=http://localhost:5678/
GENERIC_TIMEZONE=Asia/Tokyo

3. 環境別起動

NVIDIA GPU環境

Copydocker compose --profile gpu-nvidia up -d

AMD GPU環境(Linux)

Copydocker compose --profile gpu-amd up -d

CPU環境

Copydocker compose --profile cpu up -d

Mac環境(ローカルOllama)

Copy# Ollamaをローカルインストール
curl -fsSL https://ollama.ai/install.sh | sh

# .envでホスト設定変更
OLLAMA_HOST=host.docker.internal:11434

# Docker Compose起動
docker compose up -d

  具体的な使用例・ワークフロー

1. 文書要約エージェント

Copy{
  "name": "PDF要約エージェント",
  "nodes": [
    {
      "type": "n8n-nodes-base.webhook",
      "name": "PDF受信",
      "parameters": {
        "httpMethod": "POST",
        "path": "pdf-summary"
      }
    },
    {
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", 
      "name": "PDF読み込み",
      "parameters": {
        "dataType": "file",
        "filePath": "/data/shared/{{$json.filename}}"
      }
    },
    {
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "name": "ベクトル化",
      "parameters": {
        "qdrantUrl": "http://qdrant:6333",
        "collectionName": "documents"
      }
    },
    {
      "type": "@n8n/n8n-nodes-langchain.chainSummarization",
      "name": "要約生成",
      "parameters": {
        "model": {
          "type": "ollama",
          "baseUrl": "http://ollama:11434",
          "model": "llama3.2"
        }
      }
    }
  ]
}

2. Slackボット統合

Copy{
  "name": "インテリジェントSlackボット",
  "nodes": [
    {
      "type": "n8n-nodes-base.slackTrigger",
      "name": "Slack受信",
      "parameters": {
        "events": ["app_mention"]
      }
    },
    {
      "type": "@n8n/n8n-nodes-langchain.agent",
      "name": "AIエージェント",
      "parameters": {
        "model": {
          "type": "ollama",
          "baseUrl": "http://ollama:11434", 
          "model": "llama3.2"
        },
        "memory": {
          "type": "bufferWindowMemory",
          "maxTokens": 2000
        },
        "tools": [
          {
            "type": "vectorStoreRetriever",
            "vectorStore": {
              "type": "qdrant",
              "url": "http://qdrant:6333"
            }
          }
        ]
      }
    },
    {
      "type": "n8n-nodes-base.slack",
      "name": "Slack返信",
      "parameters": {
        "operation": "postMessage",
        "channel": "{{$json.channel}}",
        "text": "{{$json.response}}"
      }
    }
  ]
}

3. 金融文書分析システム

Copy{
  "name": "金融文書分析",
  "nodes": [
    {
      "type": "n8n-nodes-base.scheduleTrigger",
      "name": "定期実行",
      "parameters": {
        "rule": {
          "interval": [{"field": "hours", "value": 1}]
        }
      }
    },
    {
      "type": "n8n-nodes-base.httpRequest",
      "name": "文書取得",
      "parameters": {
        "url": "https://api.example.com/financial-docs",
        "authentication": "headerAuth"
      }
    },
    {
      "type": "@n8n/n8n-nodes-langchain.textSplitter",
      "name": "テキスト分割",
      "parameters": {
        "chunkSize": 1000,
        "chunkOverlap": 200
      }
    },
    {
      "type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
      "name": "エンベディング",
      "parameters": {
        "baseUrl": "http://ollama:11434",
        "model": "nomic-embed-text"
      }
    },
    {
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "name": "ベクトル保存",
      "parameters": {
        "mode": "insert",
        "qdrantUrl": "http://qdrant:6333",
        "collectionName": "financial_docs"
      }
    },
    {
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "name": "情報抽出",
      "parameters": {
        "model": {
          "type": "ollama",
          "baseUrl": "http://ollama:11434",
          "model": "llama3.2"
        },
        "schema": {
          "revenue": "number",
          "profit": "number", 
          "risk_factors": "array"
        }
      }
    }
  ]
}

  カスタムAIエージェント構築例

高度なRAGエージェント

Copy// ワークフローのJavaScriptノード例
const agent = {
  systemPrompt: `あなたは企業の内部文書を基に質問に答えるAIアシスタントです。
  以下のルールに従ってください:
  1. 提供された文書のみを情報源として使用する
  2. 不明な点は明確に伝える
  3. 引用元を明記する`,
  
  tools: [
    {
      name: "document_search",
      description: "企業文書を検索する",
      parameters: {
        query: "検索クエリ",
        limit: 5
      }
    },
    {
      name: "web_search", 
      description: "最新情報をWeb検索する",
      parameters: {
        query: "検索クエリ"
      }
    }
  ],
  
  memory: {
    type: "conversation_buffer_window",
    maxTokens: 4000
  }
};

return { agent };

マルチステップワークフロー

Copy# ワークフロー定義(YAML形式)
name: "カスタマーサポートエージェント"
trigger:
  type: webhook
  path: "/support"

steps:
  - name: "問い合わせ分類"
    type: text_classifier
    model: "ollama:llama3.2"
    categories:
      - "技術的問題"
      - "請求に関する問い合わせ"
      - "製品情報"
      - "その他"

  - name: "関連文書検索"
    type: vector_search
    vectorStore: "qdrant:support_docs"
    query: "{{$json.question}}"
    limit: 3

  - name: "回答生成"
    type: llm_chain
    model: "ollama:llama3.2"
    template: |
      カテゴリ: {{$node.問い合わせ分類.output.category}}
      関連文書: {{$node.関連文書検索.output}}
      質問: {{$json.question}}
      
      上記の情報を基に、丁寧で正確な回答を生成してください。

  - name: "結果送信"
    type: http_request
    method: POST
    url: "{{$json.callback_url}}"
    body:
      answer: "{{$node.回答生成.output}}"
      category: "{{$node.問い合わせ分類.output.category}}"
      confidence: "{{$node.問い合わせ分類.output.confidence}}"

  パフォーマンス最適化

リソース管理設定

Copy# docker-compose.override.yml
services:
  ollama-gpu:
    deploy:
      resources:
        limits:
          memory: 16G
        reservations:
          memory: 8G
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

  qdrant:
    deploy:
      resources:
        limits:
          memory: 4G
          cpus: '2'
        reservations:
          memory: 2G
          cpus: '1'

  n8n:
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: '1'

Qdrant最適化設定

Copy{
  "collection_config": {
    "vectors": {
      "size": 1536,
      "distance": "Cosine"
    },
    "optimizers_config": {
      "default_segment_number": 2,
      "max_segment_size_kb": 200000,
      "memmap_threshold_kb": 100000
    },
    "hnsw_config": {
      "m": 16,
      "ef_construct": 100
    }
  }
}

Ollama並列処理設定

Copy# Ollama環境変数
OLLAMA_NUM_PARALLEL=4
OLLAMA_MAX_LOADED_MODELS=2
OLLAMA_MAX_QUEUE=512

  セキュリティ・本番環境対応

セキュリティ強化設定

Copy# セキュア版 docker-compose.yml
services:
  n8n:
    environment:
      - N8N_PROTOCOL=https
      - N8N_SSL_KEY=/certs/key.pem
      - N8N_SSL_CERT=/certs/cert.pem
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=${N8N_USER}
      - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
    volumes:
      - ./certs:/certs:ro

  postgres:
    environment:
      - POSTGRES_SSL_MODE=require
    volumes:
      - ./postgres-certs:/var/lib/postgresql/certs:ro

  qdrant:
    environment:
      - QDRANT_API_KEY=${QDRANT_API_KEY}
    volumes:
      - ./qdrant.yaml:/qdrant/config/config.yaml:ro

バックアップ・復旧

Copy#!/bin/bash
# backup.sh

# PostgreSQL バックアップ
docker exec postgres pg_dump -U ${POSTGRES_USER} ${POSTGRES_DB} > backup_$(date +%Y%m%d).sql

# Qdrant データバックアップ
docker exec qdrant tar -czf /tmp/qdrant_backup_$(date +%Y%m%d).tar.gz /qdrant/storage

# n8n ワークフローバックアップ
docker exec n8n n8n export:workflow --all --output=/data/shared/workflows_$(date +%Y%m%d).json

  クラウドデプロイメント

AWS ECS デプロイ

Copy{
  "family": "n8n-ai-starter",
  "taskDefinition": {
    "containerDefinitions": [
      {
        "name": "n8n",
        "image": "n8nio/n8n:latest",
        "memory": 2048,
        "portMappings": [{"containerPort": 5678}],
        "environment": [
          {"name": "DB_TYPE", "value": "postgresdb"},
          {"name": "DB_POSTGRESDB_HOST", "value": "rds-endpoint"}
        ]
      },
      {
        "name": "ollama",
        "image": "ollama/ollama:latest",
        "memory": 8192,
        "resourceRequirements": [
          {"type": "GPU", "value": "1"}
        ]
      }
    ]
  }
}

Kubernetes Helm Chart

Copy# values.yaml
n8n:
  replicaCount: 2
  image:
    repository: n8nio/n8n
    tag: latest
  service:
    type: LoadBalancer
    port: 5678

ollama:
  enabled: true
  resources:
    requests:
      nvidia.com/gpu: 1
    limits:
      nvidia.com/gpu: 1

qdrant:
  persistence:
    enabled: true
    size: 100Gi
    storageClass: fast-ssd

postgresql:
  enabled: true
  primary:
    persistence:
      size: 50Gi

  企業導入のメリット

開発効率向上

  • ノーコード開発: 技術者以外でもAIワークフロー構築可能

  • 迅速プロトタイピング: アイデアから実装までの時間短縮

  • 再利用可能性: ワークフローテンプレートの組織内共有

コスト削減

  • オープンソース: ライセンス費用不要

  • ローカル実行: クラウドAPI使用料の削減

  • 統合環境: 複数ツールの統一管理

セキュリティ・コンプライアンス

  • データ主権: 機密情報の外部流出防止

  • プライベート処理: 全てのAI処理がローカル環境で完結

  • 監査対応: 詳細なログとワークフロー履歴

n8n-io/self-hosted-ai-starter-kitは、AI/MLワークフローの民主化を実現し、組織全体でのAI活用を促進する包括的なプラットフォームです。Docker Composeによる簡単な導入から本格的な企業利用まで、段階的なスケーリングが可能な柔軟なソリューションを提供します。

GitHub Repository | n8n ドキュメント | ワークフローテンプレート


「うちの業務は複雑すぎてAIなんて無理…」

そう諦めていた現場こそ、DX化のチャンスです。

.Aiエージェントを手掛けるカスタマークラウドは、日本初となる企業AI脳「LBAI」やAIがAIを進化させる「AI2AI」の概念を提唱し、 数百社におよぶレガシー産業のDX化・AI導入を成功に導いてきました。私たちが、御社の現場の生の課題に寄り添い、“結果に繋がる” 仕組みを共に創り上げます。

\ Lark公式パートナー カスタマークラウド /
✅ Lark公式パートナーとして初年度で200社以上を支援
✅ 建築DX・整備DXなど、業界別ソリューション多数
✅ 日本初のLLMO特化サービス「.Ai SEO」でPRを革新

💬 まずは、無料オンライン相談で、業務・組織課題に
あわせたロードマップを一緒に描きましょう。

\ 世界を手に入れよう、ワンタップで /
📍【今すぐ無料相談を申し込む
📲【LINEで質問・相談してみる
🆓【Larkの無料登録・デモ依頼


\ AI × Larkで切り拓く「ツール統合革命」/
業界ごとの課題や業務に精通したノウハウを活かし、デジタル変革をリードする開発・営業パートナーを全国で募集しています!
▶︎ 参加・ご相談はこちらから

📍 オールインワンDXツール「Lark」が選ばれる理由
✅ 世界最大級ユニコーンの成長ノウハウを凝縮
✅ 業界課題に応える“完全統合型”ソリューション
✅ 国際基準を満たす堅牢なセキュリティ(国内AWSサーバーを使用、ISO/IEC 27017、27001、27018、27701 情報セキュリティ認証取得、国土交通省認定)

今すぐ、Lark × .Ai のパートナーになりましょう!
▶︎ 共創パートナー募集中|今すぐ参加する
代理店制度について / 協働コミュニティについて





いいなと思ったら応援しよう!