目次
  1. はじめに:テキスト止まりの AI に飽きたら
  2. スキルからマルチモーダル API を叩くアーキテクチャ
  3. スキル①:image-gen で社内 gpt-image-2 を呼ぶ
  4. なぜ chatgpt-bridge を NAS に立てたのか
  5. スキル②:browser-use で Chromium を直接操作
  6. スキル③:gsk で検索・スライド・動画まで一気通貫
  7. スキル横断ワークフロー:実際の業務シナリオ 3 つ
  8. セキュリティとネットワーク設計の勘どころ
  9. まとめ
本記事のスコープ

本記事は OpenClaw 入門|環境構築完全ガイド、および スキル活用事例①|Obsidian+Redmine 自動化 の続編です。OpenClaw 本体と業務自動化スキルが稼働している前提で、画像・ブラウザ・Web 検索などのマルチモーダルスキルを統合する実装ノウハウを扱います。

はじめに:テキスト止まりの AI に飽きたら

OpenClaw を社内に立てて、Redmine・Obsidian と連携させると、文字情報のやり取りは大部分が AI で完結します。次に欲しくなるのは、「画像も出してほしい」「Web をブラウザ越しに自分で見て報告してほしい」「Google スライドや動画まで作ってほしい」といったマルチモーダルな業務です。

幸い、いま手に入る AI ツールは API もコマンドも OpenAI 互換のものが多く、「OpenClaw のスキルから 1 枚の SKILL.md で外部 API を叩く」パターンに収まります。本記事では、弊社で実装した 3 つの代表スキルとその統合例を公開します。

  • image-gen:社内 NAS に立てた chatgpt-bridge 経由で gpt-image-2 を呼ぶ画像生成スキル
  • browser-use:Browser Use CLI 2.0 で Chromium をエージェントが直接操作
  • gsk:Genspark CLI で Web 検索・Gmail・Notion・スライド・動画(Veo / Kling)まで一気通貫

スキルからマルチモーダル API を叩くアーキテクチャ

マルチモーダル系は外部 API や子プロセスへの依存が増えるため、「スキルがどこに何を投げているか」を最初に固めておくのが事故防止になります。弊社の全体図はこんなイメージです。

┌───────────────────────────────────────────────────────────────┐
│ OpenClaw pod (k3s, Pi5)                                       │
│                                                               │
│   ┌─ skills/image-gen/SKILL.md                                │
│   │     └─ POST http://192.168.11.241:18080/v1/images/...     │
│   │            (NAS の chatgpt-bridge / gpt-image-2)          │
│   │                                                           │
│   ├─ skills/browser-use/SKILL.md                              │
│   │     └─ exec browser-use --task "..." --headless           │
│   │            └─ Chromium 子プロセスが Web を操作            │
│   │                                                           │
│   ├─ skills/gsk/SKILL.md                                      │
│   │     └─ exec gsk <subcommand> (Genspark Pro CLI)          │
│   │            └─ Veo 3.1 / Kling V3 / Gmail / Notion 等      │
│   │                                                           │
│   └─ skills/tvideo/SKILL.md                                   │
│         └─ POST http://192.168.11.242:8001/v1/videos/...      │
│              (EVO-X2 / Wan2.2 / LTX-Video, T2V/I2V/V2V)       │
│                                                               │
└───────────────────────────────────────────────────────────────┘

2 つの呼び出しパターン

パターン利点欠点
HTTP APIimage-gen / tvideo言語非依存、ステートレス、複数 pod で共用サーバを別途立てる手間
CLI 子プロセスbrowser-use / gsk導入が早い、機能が一気に増えるpod に CLI を入れる必要、認証管理

「重い計算が走る・複数人が使う」ものは HTTP API、「個別ツールを使いたいだけ」のものは CLI に寄せる、という方針で運用しています。

スキル①:image-gen で社内 gpt-image-2 を呼ぶ

OpenClaw に「この記事のアイキャッチ画像を作って」「資料用のヒーロー画像を作って」と頼むだけで、社内サーバ上で gpt-image-2 が回って PNG が返ってくる──を実現するスキルです。実は本記事の冒頭ヒーロー画像も、このスキルで OpenClaw 経由で生成しています。

接続情報(SKILL.md 抜粋)

---
name: image-gen
description: 社内NASのChatGPT画像生成API(gpt-image-2)を使用した画像生成。
  画像の作成・生成リクエスト全般で使用。社内LANまたはVPN接続時のみ利用可能
---

# 画像生成スキル(gpt-image-2)

## 接続情報
- エンドポイント: http://192.168.11.241:18080/v1/images/generations
- 認証: Authorization: Bearer <トークン>
- トークン取得: 環境変数 BRIDGE_API_TOKEN
- ネットワーク: 社内LAN または VPN接続時のみ到達可能
- 互換性: OpenAI SDK 互換

呼び出しコード(curl 版)

TOKEN=$BRIDGE_API_TOKEN

curl -X POST http://192.168.11.241:18080/v1/images/generations \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "prompt": "プロンプト内容",
    "quality": "high",
    "size": "1536x1024"
  }' \
| python3 -c "import json,base64,sys; d=json.load(sys.stdin); \
open('output.png','wb').write(base64.b64decode(d['data'][0]['b64_json']))"

Python SDK 版(OpenAI 互換のうれしさ)

from openai import OpenAI
import base64, os

client = OpenAI(
    base_url="http://192.168.11.241:18080/v1",
    api_key=os.environ["BRIDGE_API_TOKEN"],
)

result = client.images.generate(
    model="gpt-image-2",
    prompt="An illustration of an open-source AI assistant ...",
    quality="high",
    size="1536x1024",
)
with open("output.png", "wb") as f:
    f.write(base64.b64decode(result.data[0].b64_json))
OpenAI SDK 互換のうれしさ

エンドポイントが OpenAI 互換なので、Python・Node・curl のどれでも 5 行で叩けます。社内利用者ごとに「公式 OpenAI を直叩きにしたい」「ローカル LLM 経由にしたい」「NAS の bridge にしたい」を切り替えても、コード側は base_url 1 行の差分で済みます。互換性を最優先にプロキシを設計しておくと、後の差し替え自由度が圧倒的に上がります。

なぜ chatgpt-bridge を NAS に立てたのか

「OpenAI を直接叩けばいいじゃないか」と思われるかもしれません。社内 LAN に chatgpt-bridge を立てた理由は次の 4 点です。

  1. トークンの一元管理:OpenAI API キーを各端末にバラまかず、NAS 上の Bearer トークンだけを発行することで利用者管理を統制
  2. 監査ログ:誰が・いつ・どんなプロンプトで叩いたかを bridge の access log として一元集約
  3. レート制限の制御:OpenAI 側の rate limit がチーム全体に効くので、bridge 側で利用者ごとのソフトリミットを入れて事故防止
  4. 切り替え柔軟性:OpenAI / Azure OpenAI / ローカル LLM のどれにバックエンドを切り替えても、利用者側のコードは無変更で済む

bridge の最小構成(参考)

# docker-compose.yml on NAS
services:
  bridge:
    image: ghcr.io/<org>/chatgpt-bridge:latest
    container_name: chatgpt-bridge
    ports: [ "18080:18080" ]
    environment:
      BRIDGE_API_TOKEN: ${BRIDGE_API_TOKEN}
      OPENAI_API_KEY:   ${OPENAI_API_KEY}
      RATE_LIMIT_RPM:   60
    restart: unless-stopped
機密データのプロンプト対策

機密文書をそのまま外部に送らないように、bridge 側で「特定パターン(社員番号・電話番号・口座番号など)を含むプロンプトはマスクしてから外部へ送出」のフィルタを入れています。スキル側に書くと AI が無視する可能性があるので、プロキシ層で強制するのが安全です。

スキル②:browser-use で Chromium を直接操作

OpenClaw に「このページのフォームを埋めてくれ」「ログイン後ダッシュボードのスクリーンショットを取って」と頼めるようにするのが browser-use スキルです。Browser Use CLI 2.0 を pod に同梱し、headless Chromium を子プロセスとして起動して LLM がページ要素を操作します。

SKILL.md 抜粋

---
name: browser-use
description: Browser Use CLI 2.0 を使用したブラウザ自動操作。
  Webページ閲覧、フォーム入力、スクリーンショット取得、
  データ抽出などのブラウザ操作全般で使用
---

## 起動方法
- 基本: browser-use --task "<自然言語タスク>"
- スクショ: browser-use --task "..." --screenshot-dir ./shots
- ヘッドレス: 既定 ON、UI 確認時は --headed
- セッション保持: --session-name <name>

使い方の典型例

# 例1: 社内 Redmine の自分のチケット一覧をスクショ
browser-use --task "https://redmine.technosphere.co.jp/issues?assigned_to_id=me に
              ログインして、ステータスが完了でないチケットを表形式で抽出してくれ" \
            --screenshot-dir /tmp/redmine-shots \
            --session-name technosphere

# 例2: 公開ページの動作検証
browser-use --task "https://poc-h.technosphere.jp/caremente-partner/ を開いて
              CTA ボタンが SP 表示でも崩れていないか PC と SP 両方で確認、
              スクリーンショットを撮って差分があれば指摘してくれ"
セッションとログインの扱い

ログインが必要なページを操作するときは、事前に手動で --headed で 1 回ログイン → セッション保持のパターンが安定します。AI に毎回ログインさせると、2FA や CAPTCHA で詰まることが多いです。弊社では Redmine / GitHub / Google など主要サービスは pod 上の Chromium プロファイルに事前ログイン済みです。

失敗パターンと回避策

  • 動的 DOM の同期失敗:SPA のフェッチ完了を待たずに次操作に進んで失敗 → SKILL.md に「画面遷移後 1 秒以上待機」を明記
  • iframe 入れ子:Google フォーム等で iframe 内部要素を取れない → Browser Use の --frame オプションを使うようスキルに明記
  • ファイルダウンロード:headless でダウンロードがブロックされる → ダウンロードディレクトリを指定して許可

スキル③:gsk で検索・スライド・動画まで一気通貫

もう 1 つの強力カードが gsk スキルです。Genspark Pro の CLI(80+ tools)を OpenClaw から叩けるようにしてあり、Web 検索・Gmail・Google Workspace・Notion・GitHub・スライド/ドキュメント生成・動画生成(Veo 3.1 / Kling V3)まで一発で扱えます。

SKILL.md 抜粋(gsk)

---
name: gsk
description: Genspark Tool CLI (gsk) を使った Web 検索 / 動画生成 /
  画像生成 / メール / Google ワークスペース / 議事録 /
  Notion / GitHub / スライド・ドキュメント生成等 81+ ツールの統合。
---

## よく使うサブコマンド
| 用途                   | コマンド例                                |
|------------------------|-------------------------------------------|
| Web 検索               | gsk websearch "<query>"             |
| Gmail 送信             | gsk gmail send --to ... --subject ...     |
| スライド生成           | gsk slides create --title ... --topic ... |
| 動画生成(Veo 3.1)    | gsk video create --provider veo3 ...      |
| 議事録                 | gsk meeting summary --file recording.mp3  |

導入時のひと工夫:PVC に npm-global を置く

OpenClaw 公式イメージは npm i -g が pod 再起動で消えます。これを回避するため、PVC 上に npm-global ディレクトリを置き、PATH 環境変数で先頭に通す運用にしました。

# deployment.yaml(抜粋)
env:
  - name: PATH
    value: /home/node/.openclaw/npm-global/bin:/usr/local/sbin:/usr/local/bin:...

# 初回セットアップ(pod 内で 1 回だけ)
npm config set prefix /home/node/.openclaw/npm-global
npm install -g @genspark/cli

これで pod を再起動しても gsk が PATH に残り、Genspark API トークンも Secret 経由で自動投入されるため、いつでも呼べる状態を維持できます。

スキル横断ワークフロー:実際の業務シナリオ 3 つ

スキルを個別に呼ぶだけでも価値はありますが、本領は 1 つの指示から複数スキルが連鎖するところにあります。弊社で実際に走っている例を 3 つ。

シナリオ A:ブログ記事の準備〜デプロイ

👤 「STM32 の DMA 周辺で新しいブログ記事を書きたい。
   最新情報を踏まえつつ、ヒーロー画像も作って」

🤖 OpenClaw:
   1. gsk websearch "STM32 DMA 2026" で最新情報を集める
   2. 既存記事をリポジトリから読み、構成案を作成
   3. image-gen でヒーロー画像(1536x1024)を生成
   4. PIL で hero.jpg / og.jpg / webp に変換し
      www/assets/img/blog/ に配置
   5. PHP テンプレートを既存記事のフォーマットで作成
   6. blog/index.php にカードを追加
   7. obsidian-log に「作業N: 技術記事追加」を記録
   8. redmine-ticket で「ブログ記事追加」チケットを完了化

実際にこのシナリオで本記事を含む OpenClaw シリーズ 3 本を 1 セッションで仕上げました。記事構成・画像生成・PHP 作成・index 更新・記録まで AI 1 体で完結します。

シナリオ B:客先打ち合わせ前の準備

👤 「ハッピー様との来週の対面打ち合わせの準備を進めたい」

🤖 OpenClaw:
   1. redmine-ticket: ハッピー様関連のチケットを期間絞り込みで一覧化
   2. obsidian-log: 直近1ヶ月の作業ログから関連項目を抽出
   3. gsk websearch でハッピー社の最新ニュースを取得
   4. gsk slides create で打ち合わせ用スライドを下書き
   5. image-gen で提案ビジュアル 3 種を生成(採用候補)
   6. 打ち合わせ準備のタスクを Obsidian の「今日のタスク」に追加

シナリオ C:開発・テスト・スクショ・報告

👤 「caremente-partner の SP 表示で CTA ボタンが崩れてる気がする。
   確認して、必要なら修正してプルリク出して」

🤖 OpenClaw:
   1. browser-use で PC/SP 両方のスクショを取得
   2. スクショを比較、崩れ位置を特定(DOM クラス名まで)
   3. SCSS を修正、ビルド
   4. browser-use で再確認、修正完了を確認
   5. git commit -m "refs #137 CTA ボタン SP表示崩れ修正" → PR 作成
   6. redmine-ticket: ステータスを「レビュー依頼中」に
   7. obsidian-log に「作業N: CTA ボタン修正」を記録
「複数スキル連鎖」を成立させる条件

3 つ以上のスキルを連鎖させて使いこなすには、各スキルの description が衝突しないこと、SKILL.md に「他スキルとの組み合わせ例」を明記することが効きます。AI は単独スキルの呼び方は得意でも、組み合わせは事例ベースで判断する傾向があるので、SKILL.md に シナリオを書いておくと採用される確率が上がります

セキュリティとネットワーク設計の勘どころ

マルチモーダルスキルが増えるほど、AI が触れる外部リソースも増えます。弊社で意識している運用ルールをまとめます。

① 「外に出すもの」と「中に閉じるもの」を分離

用途外部 SaaS社内閉鎖網
画像生成(gpt-image-2)○ NAS の chatgpt-bridge
動画生成(社内 GPU)○ EVO-X2 (Wan2.2 / LTX)
Web 検索・ニュース○ Genspark
営業メール文面生成○ Codex Pro
機密文書要約○ ローカル Qwen / Gemma

② 認証トークンは Secret + 環境変数のみ

BRIDGE_API_TOKEN・REDMINE_API_KEY・GSK_API_KEY・X/IG/FB の SNS トークンなど、すべて Kubernetes Secret に集約し、SKILL.md にも Git リポジトリにも実値を書かない。SKILL.md には「環境変数 BRIDGE_API_TOKEN を使う」とだけ書きます。

③ 失敗時の振る舞いを SKILL.md に明記

「API トークンが未設定なら『管理者に依頼してください』と案内」「外部到達できないなら『社内LAN または VPN 接続をお試しください』と案内」のように、失敗時の応答パターンを SKILL.md に書いておくと、ユーザーの自力解決率が一気に上がります。エンジニアがいない打ち合わせ中でも対処できる。

④ 監査ログを取る

画像生成・動画生成・ブラウザ操作・SNS 投稿系は必ず access log を残します。bridge / browser-use / SNS poster の各サービスで OpenClaw 由来のリクエストにユーザーID とセッション ID を付け、誰がいつ叩いたかを後追いできる状態に。

SNS 自動投稿は別 Pod を立てる

X / Instagram / Facebook など 「世の中に発信される」操作は誤発火のリスクが高いため、OpenClaw 本体とは別の openclaw-sns pod に隔離して、明示的なスキル呼び出し以外で動かないようにしています。本体 pod のセッション暴走で SNS まで巻き込まれない構成です。

まとめ

この記事のまとめ

  • OpenClaw のスキルは HTTP API or CLI 子プロセスのいずれかで外部マルチモーダル機能と接続できる
  • image-gen スキルで 社内 chatgpt-bridge 経由の gpt-image-2 画像生成を社内に閉じて運用
  • browser-use スキルで Chromium を AI が直接操作し、フォーム入力・スクショ・動作検証を自動化
  • gsk スキルで Genspark CLI を取り込み、Web 検索・スライド・動画・SNS 連携を一気通貫で扱える
  • 本記事のヒーロー画像も image-gen スキルで生成済み(実運用そのもの)
  • スキル横断シナリオ(ブログ記事生成・打ち合わせ準備・テスト&PR)で 1 発言から十数アクションが走る
  • セキュリティは「外と中を分離」「Secret に集約」「失敗時応答を明記」「監査ログ必須」「SNS は別 pod 隔離」の 5 原則で運用

テクノスフィアでは、OpenClaw・Claude Code・Codex などを核に、社内マルチモーダル AI 基盤の構築・スキル設計・社内 API 連携をご支援しています。「画像・動画・ブラウザまで AI に任せて業務を回したい」「社内 LAN に閉じてマルチモーダル AI を運用したい」といったご相談はお気軽にどうぞ。

/この内容の受託開発・PoC相談はこちら\

画像 × AI × ブラウザ操作の業務自動化

現場画像の自動分類・図面読み取り・Web 上の繰り返し作業を、マルチモーダル AI × ブラウザ自動操作で半自動化する PoC を構築します。画像検査 AI の現場導入もご相談ください。

次に読む|OpenClaw シリーズ