NemoClawチャットボット構築の全体像

NemoClawはNVIDIA GTC 2026で発表されたオープンソースのAIエージェントフレームワークです。Nemotronモデルシリーズ・OpenShellランタイム・3種の推論プロファイルを組み合わせることで、カスタムチャットボットを迅速に構築できます。

本ガイドでは「blueprint.yaml の定義」から「本番デプロイ」まで、実装コードを交えてすべての工程を解説します。

ステップ作業内容所要時間(目安)
1要件整理・モデル選定1〜2時間
2blueprint.yaml の作成30〜60分
3推論プロファイル設定15〜30分
4UIコンポーネント統合2〜4時間
5OpenShell ポリシー設定30〜60分
6本番デプロイ・検証1〜2時間

このガイドは NemoClaw v2026.3 以降を対象としています。インストールが済んでいない場合は「NemoClawのインストール方法」を先にご参照ください。

ステップ1:要件整理とNemotronモデルの選定

チャットボットの用途に合わせてNemotronモデルを選定します。NemoClawは以下の3推論プロファイルに対応しており、プロファイルによって使用できるモデルとインフラ要件が異なります。

推論プロファイル対象モデルインフラ要件主な用途
cloudNemotron 3 Super 120B / Nemotron 4 340BNVIDIA APIキーのみPoC・小規模本番・コスト優先
local-nimNemotron 3 Super 120B(ローカル)GPU 80GB以上(A100/H100推奨)データ機密性・低レイテンシ要件
edgeNemotron 3 Nano 8B / Minitron 4BRTX 4090以上またはJetsonエッジデバイス・オフライン動作

チャットボットの要件を以下の観点で整理すると、適切なプロファイルを選べます。

要件選定基準推奨プロファイル
個人情報・機密情報を扱うデータをクラウドに送信できないlocal-nim または edge
レスポンス速度 1秒以内低レイテンシが必要edge(小型モデル)
高精度な日本語対話大規模モデルが必要cloud または local-nim(120B+)
開発・PoC段階インフラ構築を最小化cloud

ステップ2:blueprint.yaml の作成

blueprint.yaml はNemoClawエージェントの全動作を定義するエージェント定義ファイルです。チャットボット向けの設定例を示します。

cloudプロファイル用 blueprint.yaml

# blueprint.yaml(cloudプロファイル・チャットボット基本設定)
profile: cloud

agent:
  name: enterprise-chatbot
  description: "企業向けカスタマーサポートチャットボット"

model:
  provider: nvidia
  name: nemotron-3-super-120b
  api_key: "${NVIDIA_API_KEY}"
  temperature: 0.5         # 一貫性を重視する場合は 0.3〜0.5
  max_tokens: 2048
  top_p: 0.9
  frequency_penalty: 0.1   # 同じ表現の繰り返しを抑制

sandbox:
  enabled: true
  filesystem:
    allow:
      - "./workspace/"
      - "./prompts/"
    deny:
      - "./.env"
      - "/etc/"
      - "/home/"
  network:
    allow: []              # ツール連携なしの場合は外部通信を全遮断
    deny:
      - "*"

memory:
  enabled: true
  backend: file
  path: "./workspace/sessions/"
  max_turns: 20
  summarize_threshold: 15

guardrails:
  enabled: true
  pii_detection: true
  injection_guard: true
  topics:
    deny:
      - "競合他社製品の推薦"
      - "医療・法律の個別アドバイス"

logging:
  level: info
  file: "./workspace/chatbot.log"

temperature はカスタマーサポート用途では 0.3〜0.5、クリエイティブ用途では 0.7〜1.0 が目安です。本番環境では低めの値から始めて調整することを推奨します。

local-nimプロファイル用 blueprint.yaml

# blueprint.yaml(local-nimプロファイル・オンプレミス構成)
profile: local-nim

agent:
  name: secure-chatbot
  description: "機密データ取扱い対応チャットボット(完全オフライン)"

model:
  provider: local
  name: nemotron-3-super-120b
  device: cuda:0            # GPU指定(複数GPUの場合は cuda:0,cuda:1)
  precision: fp16           # A100/H100 では bf16 も選択可

sandbox:
  enabled: true
  filesystem:
    allow:
      - "./workspace/"
      - "./prompts/"
  network:
    deny:
      - "*"                 # 完全オフライン: 外部通信を全遮断

memory:
  enabled: true
  backend: redis
  redis:
    host: "redis.internal"
    port: 6379
    password: "${REDIS_PASSWORD}"
    ttl: 7200
  max_turns: 50

guardrails:
  enabled: true
  pii_detection: true
  injection_guard: true

ステップ3:プロンプト設計とシステムプロンプト定義

チャットボットの応答品質はシステムプロンプトの設計に大きく左右されます。Nemotronモデルに最適化したプロンプト設計の指針を示します。

システムプロンプトの構成要素

構成要素内容重要度
ペルソナ定義AIの名前・役割・口調の明確化必須
対応範囲回答できる話題・できない話題の明示必須
回答フォーマット箇条書き・段落・コード例などの形式指定推奨
禁止事項答えてはいけない質問・行動の明示必須
エスカレーション人間のオペレーターに引き継ぐ条件推奨
Few-shotサンプル理想の質問・回答の例示(3〜5件)推奨
# prompts/system.md(カスタマーサポートBot用サンプル)

## ペルソナ
あなたは「Ariaサポート」です。株式会社○○のカスタマーサポートAIです。
製品に関するご質問に日本語で丁寧にお答えします。

## 対応範囲
- 製品の使い方・仕様に関する質問
- 注文・配送・返品ポリシーの案内
- トラブルシューティングの初期対応

## 回答スタイル
- 敬語(丁寧語)を使用する
- 手順が3つ以上ある場合は番号付きリストで記述する
- 不確かな情報は「確認が必要です」と明示し推測で回答しない

## 禁止事項
- 他社製品の比較・批評
- 価格交渉・特別割引の約束
- 個人情報(氏名・住所・クレジットカード番号)の取り扱い

## エスカレーション基準
次の場合はオペレーター転送を案内する:
- クレーム・感情的な抗議が続く場合
- 法的問題・返金要求が発生した場合
- 問題が3回の手順案内で解決しない場合

Few-shotサンプルの効果的な設計

Nemotronモデルはfew-shotプロンプティングで応答品質が向上します。良い例・悪い例を対比させたサンプルが特に効果的です。

## 回答例

### 例1: 製品の使い方(良い回答例)
ユーザー: Wi-Fiに接続できません
Ariaサポート:
Wi-Fi接続の問題を解決するため、以下の手順を順番にお試しください。

1. 端末とルーターの再起動: 両方を一旦電源OFFにして30秒待ち、ルーター→端末の順に起動します
2. パスワードの再確認: Wi-Fiパスワードに大文字・小文字・記号が含まれているか確認します
3. 2.4GHz帯への切り替え: 5GHz帯で接続できない場合は2.4GHz帯のSSIDに接続をお試しください

上記で解決しない場合は、お気軽にチャットを続けてください。専門オペレーターにお繋ぎします。

### 例2: 対応範囲外の質問(適切な境界設定の例)
ユーザー: 競合のA社製品と比べてどちらがいいですか?
Ariaサポート:
申し訳ございませんが、他社製品との比較についてはお答えする立場にございません。
弊社製品の詳しい仕様・機能については喜んでご説明します。
どのような用途でお使いになりたいか教えていただけますか?

ステップ4:UIコンポーネントの統合

NemoClawはHTTPエンドポイントを公開するため、既存のWebフロントエンドやモバイルアプリと容易に統合できます。代表的な統合パターンを示します。

REST APIによるチャットUI統合

NemoClawが起動すると http://localhost:8080/v1/chat にREST APIが公開されます。

# NemoClaw サーバー起動
nemoclaw serve --blueprint blueprint.yaml --port 8080
// フロントエンド統合例(JavaScript / fetch API)
async function sendMessage(userMessage, sessionId) {
    const response = await fetch("http://localhost:8080/v1/chat", {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            "X-Session-Id": sessionId,
        },
        body: JSON.stringify({
            message: userMessage,
            stream: false,
        }),
    });

    if (!response.ok) {
        throw new Error(`API error: ${response.status}`);
    }

    const data = await response.json();
    return data.reply;   // モデルの返答テキスト
}

// ストリーミング応答(表示をリアルタイム更新)
async function sendMessageStream(userMessage, sessionId, onChunk) {
    const response = await fetch("http://localhost:8080/v1/chat", {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            "X-Session-Id": sessionId,
        },
        body: JSON.stringify({ message: userMessage, stream: true }),
    });

    const reader = response.body.getReader();
    const decoder = new TextDecoder();
    while (true) {
        const { done, value } = await reader.read();
        if (done) break;
        const chunk = decoder.decode(value);
        onChunk(chunk);   // UIに逐次反映
    }
}

チャットウィジェットの埋め込み

NemoClawはWebSocketにも対応しており、既製のチャットウィジェットライブラリとの統合が可能です。

統合方法特徴適した用途
REST API(ポーリング)最もシンプル。既存フレームワークとの親和性が高い社内ツール・イントラWebアプリ
WebSocket双方向通信。タイピングインジケーター等のリアルタイムUXが可能顧客向けサポートチャット
Server-Sent Events(SSE)ストリーミング表示に最適。HTTPなので CDN・プロキシと相性良いLPや製品ページへの埋め込み
# blueprint.yaml に WebSocket を有効化
server:
  http_port: 8080
  ws_port: 8081
  cors:
    allow_origins:
      - "https://yourapp.example.com"
    allow_methods: ["GET", "POST"]

ステップ5:OpenShellポリシー設定

OpenShellはNemoClawのサンドボックスランタイムです。エージェントが実行できるファイル操作・ネットワーク通信・外部コマンドを細粒度で制御します。本番環境では必ず適切なポリシーを設定してください。

OpenShell ポリシーの基本構造

# blueprint.yaml の sandbox セクション(OpenShellポリシー詳細版)
sandbox:
  enabled: true

  # ファイルシステムポリシー
  filesystem:
    allow:
      - "./workspace/"      # エージェントの作業領域
      - "./prompts/"        # プロンプトファイル(読み取り専用)
    deny:
      - "./.env"            # 環境変数ファイルを保護
      - "/etc/"
      - "/home/"
      - "/root/"
    readonly:
      - "./prompts/"        # prompts/ は書き込み不可

  # ネットワークポリシー
  network:
    allow:
      - "api.slack.com"     # Slack API(ツール連携時のみ追加)
    deny:
      - "*"                 # デフォルトは全遮断

  # プロセス実行ポリシー
  process:
    allow:
      - "python3"           # ツールスクリプト実行のみ許可
    deny:
      - "bash"
      - "sh"
      - "curl"
      - "wget"
    timeout_seconds: 30     # ツール実行タイムアウト

  # リソース制限
  resources:
    max_memory_mb: 512      # エージェントプロセスのメモリ上限
    max_cpu_percent: 50     # CPU使用率上限

本番デプロイ前のOpenShellチェックリスト

確認項目推奨設定リスク
sandbox.enabledtrue 必須false だとサンドボックス無効化
filesystem.deny.env / /etc/ / /home/ を列挙機密ファイルへのアクセス
network.deny不要なドメインは * で全遮断意図しないデータ送信
process.denybash / sh / curl を禁止シェルインジェクション
guardrails.injection_guardtrue 必須プロンプトインジェクション攻撃
guardrails.pii_detectiontrue 推奨個人情報の意図しない処理
# OpenShellポリシーの動作確認コマンド
nemoclaw policy-check --blueprint blueprint.yaml

# 出力例
[OK] sandbox.enabled = true
[OK] filesystem: 4 allow rules, 5 deny rules
[OK] network: 1 allow domain, deny-all active
[OK] process: 1 allow, 3 deny rules
[WARN] resources.max_memory_mb not set (unlimited)
[OK] guardrails.injection_guard = true
[OK] guardrails.pii_detection = true

ステップ6:本番デプロイと動作検証

開発・テストが完了したチャットボットを本番環境にデプロイします。systemdによるサービス管理とNginxによるリバースプロキシ設定を解説します。

デプロイ手順

# ファイル転送(.env と workspace/ は除外)
rsync -avz \
  --exclude=".env" \
  --exclude="workspace/" \
  ./my-chatbot/ \
  deploy@prod-server:/opt/nemoclaw/my-chatbot/

# 本番サーバーで .env を直接作成(ファイル転送禁止)
ssh deploy@prod-server
cat > /opt/nemoclaw/my-chatbot/.env << "EOF"
NVIDIA_API_KEY=nvapi-prod-xxxxxxxxxxxxxxxx
EOF
chmod 600 /opt/nemoclaw/my-chatbot/.env

# systemd サービスユニット作成
sudo tee /etc/systemd/system/nemoclaw-chatbot.service > /dev/null << "EOF"
[Unit]
Description=NemoClaw Chatbot Service
After=network.target

[Service]
Type=simple
User=nemoclaw
WorkingDirectory=/opt/nemoclaw/my-chatbot
ExecStart=/usr/local/bin/nemoclaw serve --blueprint blueprint.yaml --port 8080
Restart=on-failure
RestartSec=5
EnvironmentFile=/opt/nemoclaw/my-chatbot/.env

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable nemoclaw-chatbot
sudo systemctl start nemoclaw-chatbot
sudo systemctl status nemoclaw-chatbot
# Nginx リバースプロキシ設定例
server {
    listen 443 ssl http2;
    server_name chatbot.yourcompany.com;

    location /api/chat/ {
        proxy_pass         http://127.0.0.1:8080/;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        proxy_read_timeout 120s;

        # レート制限(1IPあたり毎分60リクエスト)
        limit_req          zone=chatbot_limit burst=10 nodelay;
    }
}

デプロイ後の動作検証チェックリスト

検証項目確認方法合格基準
ヘルスチェックcurl https://chatbot.example.com/api/chat/healthHTTP 200 / status: ok
正常応答テスト質問を10件送信期待通りの回答率 95%以上
ガードレール禁止トピック5件を送信すべて適切に拒否・誘導
セッション継続性同一セッションで20ターン会話文脈が維持されている
OpenShellサンドボックスインジェクション文字列を送信遮断されエラーにならない
レスポンスタイム10並列でリクエスト送信平均 3秒以内
ログ出力workspaceのchatbot.logを確認ERRORログが発生していない
# nemoclaw test コマンドによる自動検証
nemoclaw test \
  --blueprint blueprint.yaml \
  --target https://chatbot.example.com/api/chat/ \
  --test-cases ./tests/production_test.yaml \
  --report ./workspace/deploy-test-report.json

よくある質問