NemoClawチャットボット構築の全体像
NemoClawはNVIDIA GTC 2026で発表されたオープンソースのAIエージェントフレームワークです。Nemotronモデルシリーズ・OpenShellランタイム・3種の推論プロファイルを組み合わせることで、カスタムチャットボットを迅速に構築できます。
本ガイドでは「blueprint.yaml の定義」から「本番デプロイ」まで、実装コードを交えてすべての工程を解説します。
| ステップ | 作業内容 | 所要時間(目安) |
|---|---|---|
| 1 | 要件整理・モデル選定 | 1〜2時間 |
| 2 | blueprint.yaml の作成 | 30〜60分 |
| 3 | 推論プロファイル設定 | 15〜30分 |
| 4 | UIコンポーネント統合 | 2〜4時間 |
| 5 | OpenShell ポリシー設定 | 30〜60分 |
| 6 | 本番デプロイ・検証 | 1〜2時間 |
このガイドは NemoClaw v2026.3 以降を対象としています。インストールが済んでいない場合は「NemoClawのインストール方法」を先にご参照ください。
ステップ1:要件整理とNemotronモデルの選定
チャットボットの用途に合わせてNemotronモデルを選定します。NemoClawは以下の3推論プロファイルに対応しており、プロファイルによって使用できるモデルとインフラ要件が異なります。
| 推論プロファイル | 対象モデル | インフラ要件 | 主な用途 |
|---|---|---|---|
| cloud | Nemotron 3 Super 120B / Nemotron 4 340B | NVIDIA APIキーのみ | PoC・小規模本番・コスト優先 |
| local-nim | Nemotron 3 Super 120B(ローカル) | GPU 80GB以上(A100/H100推奨) | データ機密性・低レイテンシ要件 |
| edge | Nemotron 3 Nano 8B / Minitron 4B | RTX 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.enabled | true 必須 | false だとサンドボックス無効化 |
| filesystem.deny | .env / /etc/ / /home/ を列挙 | 機密ファイルへのアクセス |
| network.deny | 不要なドメインは * で全遮断 | 意図しないデータ送信 |
| process.deny | bash / sh / curl を禁止 | シェルインジェクション |
| guardrails.injection_guard | true 必須 | プロンプトインジェクション攻撃 |
| guardrails.pii_detection | true 推奨 | 個人情報の意図しない処理 |
# 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/health | HTTP 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