DeepSeek Harness: マルチモーダルサポート
最終更新:2026-08-31
テキストは Agent が世界を理解する一つの手段に過ぎません——画像、音声、動画が現実世界の言語です。DSH のマルチモーダルサポートにより、Agent は「コードを読む」だけでなく、「インターフェースを見る」「フィードバックを聞く」「動画を見る」ことも可能になり、Agent の知覚の境界が大幅に拡張されます。
📋 前提知識:06-tools.md の完了、ツールシステムの基礎に精通していること
1. 学習内容
- DSH マルチモーダルアーキテクチャの概要
- 画像入力処理方法
- 音声/動画入力のサポート状況
- マルチモーダルツール統合
- ファイル添付と解析機構
2. マルチモーダルアーキテクチャの概要
(1) マルチモーダルデータフロー
graph TB
subgraph Input Sources
IMG[Image<br/>PNG/JPG/WebP]
AUD[Audio<br/>MP3/WAV]
VID[Video<br/>MP4/WebM]
DOC[Documents<br/>PDF/CSV]
end
subgraph DSH Processing
PARSE[Attachment Parser]
ENCODE[Multimodal Encoding]
LLM[LLM Multimodal Reasoning]
end
subgraph Output
TEXT[Text Reply]
TOOL[Tool Calls]
end
IMG --> PARSE
AUD --> PARSE
VID --> PARSE
DOC --> PARSE
PARSE --> ENCODE
ENCODE --> LLM
LLM --> TEXT
LLM --> TOOL
(2) マルチモーダルサポートマトリックス
| 入力タイプ | フォーマットサポート | 安定性 | 最大サイズ | 備考 |
|---|---|---|---|---|
| 画像 | PNG, JPG, WebP, GIF | ✅ 安定 | 20MB/画像 | 最も成熟したマルチモーダル機能 |
| 音声 | MP3, WAV, OGG | ⚠️ 実験的 | 50MB | 音声対応モデルが必要 |
| 動画 | MP4, WebM | ⚠️ 実験的 | 100MB | フレーム抽出分析 |
| ドキュメント | PDF, CSV, XLSX | ✅ 安定 | 50MB | テキスト抽出+構造化 |
(3) モデル要件
マルチモーダル機能は LLM のマルチモーダル能力に依存します:
| モデル | 画像 | 音声 | 動画 | ドキュメント |
|---|---|---|---|---|
| deepseek-chat | ✅ | ❌ | ❌ | ✅ |
| gpt-4o | ✅ | ✅ | ✅ | ✅ |
| gpt-4-vision | ✅ | ❌ | ❌ | ✅ |
| claude-3.5-sonnet | ✅ | ❌ | ❌ | ✅ |
3. 画像入力処理
(1) Web UI での画像追加
Web UI のチャットエリアで、ドラッグ&ドロップまたはペーストで画像を追加できます:
┌─ Chat Area ──────────────────────────────┐
│ │
│ 👤 Alice: │
│ 📎 [screenshot.png] [ui-mockup.jpg] │
│ この2つの UI デザインはどちらが良い? │
│ │
│ [Send] │
└───────────────────────────────────────────┘
サポートされる操作:
- 画像をチャットエリアにドラッグ&ドロップ
- クリップボードから画像をペースト(Ctrl+V)
- 添付ボタンをクリックしてファイルを選択
- 1メッセージあたり最大5枚の画像
(2) CLI モードでの画像追加
▶ サンプル 1:CLI モードでの画像添付
# 画像を添付して CLI を起動
dsh cli --attach ./screenshot.png
# 会話中に /attach コマンドを使用
> /attach ./ui-mockup.jpg
> What's wrong with this UI?
# 複数画像を添付
> /attach ./before.png ./after.png
> What's the difference between these two versions?
(3) SDK での画像添付
▶ サンプル 2:Python SDK での画像送信
from dsh import DSHClient
client = DSHClient(base_url="http://127.0.0.1:3080")
session = client.create_session(workspace="/home/alice/project")
# 単一画像の添付
response = session.send(
"What's wrong with this UI screenshot?",
images=["./screenshot.png"]
)
print(response.content)
# 複数画像を添付して比較
response = session.send(
"Compare these two designs, which is better?",
images=["./design-a.png", "./design-b.png"]
)
(4) 実践的な画像分析
▶ サンプル 3:UI バグ分析
👤 Alice:[error-page-screenshot.png を添付]
このエラーページの何が問題?修正して
🤖 Agent:
🔍 Analyzing image...
以下の問題を検出しました:
1. エラーメッセージテキストがコンテナの境界をはみ出している
2. 「Retry」ボタンが切り取られ、半分しか表示されていない
3. 背景色がデザイン仕様と不一致(#f5f5f5 のはずが白)
📝 Using tool: file_edit (edit)
→ Path: src/pages/ErrorPage.tsx
→ Fix 1: Add text-overflow: ellipsis
→ Fix 2: Adjust button margin
→ Fix 3: Change background color
⚠️ Approval Required: Edit file src/pages/ErrorPage.tsx
(5) 画像処理の制限
| 制限 | 説明 |
|---|---|
| 1画像の最大サイズ | 20MB |
| 1メッセージの最大画像数 | 5枚 |
| 解像度 | 4096×4096 を超えないことを推奨 |
| アニメーション GIF | 最初のフレームのみ使用 |
| フォーマット変換 | モデルサポート形式に自動変換 |
4. 音声/動画入力
(1) 音声入力(実験的)
音声入力には音声理解をサポートするモデル(例:GPT-4o)が必要です:
▶ サンプル 4:SDK で音声送信
# 音声ファイルの送信
response = session.send(
"Transcribe this audio and summarize the key points",
audio=["./meeting-recording.mp3"]
)
print(response.content)
# Audio transcription results and summary...
(2) 動画入力(実験的)
動画処理はフレーム抽出戦略を使用します:
graph LR
VID[Video File] --> EXTRACT[Frame Extraction<br/>1 frame/second] --> SELECT[Key Frame Selection<br/>Scene Change Detection] --> ENCODE[Multi-frame Encoding] --> LLM[LLM Analysis]
▶ サンプル 5:SDK で動画送信
# 動画ファイルの送信
response = session.send(
"Analyze this demo video, list the features shown",
video=["./demo.mp4"]
)
print(response.content)
# 1. User login feature (0:00-0:15)
# 2. Dashboard display (0:15-0:45)
# ...
(3) 現在の制限
音声と動画機能はまだ実験段階です:
| 制限 | 音声 | 動画 |
|---|---|---|
| 最大長 | 10分 | 5分 |
| 最大ファイルサイズ | 50MB | 100MB |
| モデル要件 | GPT-4o 等 | GPT-4o 等 |
| フレーム抽出 | — | 1フレーム/秒、最大300フレーム |
| 安定性 | ⚠️ タイムアウトの可能性 | ⚠️ タイムアウトの可能性 |
5. ドキュメント添付と解析
(1) サポートされるドキュメント形式
| 形式 | 解析方法 | 出力 |
|---|---|---|
| テキスト抽出 + OCR | 構造化テキスト | |
| CSV | 行と列の解析 | テーブルデータ |
| XLSX | ワークシートの解析 | テーブルデータ |
| DOCX | テキスト抽出 | 構造化テキスト |
| Markdown | 直接読み取り | 生テキスト |
▶ サンプル 6:PDF ファイルの添付
# PDF ドキュメントの分析
response = session.send(
"Summarize the core points of this technical document",
files=["./api-specification.pdf"]
)
print(response.content)
(2) CSV データ分析
▶ サンプル 7:CSV データの分析
# CSV データの分析
response = session.send(
"Analyze this sales data, find trends and outliers",
files=["./sales-2026.csv"]
)
print(response.content)
# Data analysis results...
Agent はツールを使ってさらに処理することも可能です:
🤖 Agent:
📊 Analyzing CSV data...
→ Rows: 12,450
→ Columns: 8
→ Date range: 2026-01 to 2026-08
Key findings:
1. 月平均成長率12%、ただし3月は8%減少(季節性の疑い)
2. 上位3製品が総収入の65%を占める
3. 顧客維持率が72%から68%に低下
🔧 Using tool: shell
→ Command: python3 -c "import pandas; ..."
→ Generating visualization...
6. マルチモーダルツール統合
(1) マルチモーダルとツールの連携
Agent はマルチモーダル入力とツール呼び出しを組み合わせることができます:
graph TB
INPUT[Multimodal Input] --> AGENT[Agent Analysis]
AGENT -->|Image → Code| FE[file_edit]
AGENT -->|Video → Script| SH[shell]
AGENT -->|Document → Database| DB[database.query]
▶ サンプル 8:画像+ツール連携
👤 Bob:[api-response-screenshot.png を添付]
この API レスポンスフォーマットが間違っている、コードを確認して
🤖 Agent:
🔍 Analyzing screenshot...
→ Expected format: { data: [...], meta: {...} }
→ Actual format: { results: [...] }
🔍 Using tool: search
→ Pattern: "results"
→ Type: content
→ Found in: src/api/handlers.ts:45
📝 Using tool: file_edit (read)
→ Reading src/api/handlers.ts
📝 Using tool: file_edit (edit)
→ Fixing response format at line 45-52
→ Changing "results" to "data", adding "meta" field
(2) バッチ画像処理
▶ サンプル 9:バッチ画像+ファイル編集
import glob
screenshots = glob.glob("./screenshots/*.png")
response = session.send(
"Review all screenshots, find pages with UI issues, and fix them one by one",
images=screenshots[:5] # Max 5 images
)
(3) マルチモーダルチェーン推論
👤 Alice:[architecture-diagram.png を添付]
このアーキテクチャ図に基づいて Docker Compose 設定を生成して
🤖 Agent:
🔍 Analyzing architecture diagram...
→ Identified 4 services: API, Worker, Database, Cache
→ Connections: API → Database, API → Cache, Worker → Database
📝 Using tool: file_edit (create)
→ Creating docker-compose.yml
→ 4 services with proper networking
✅ Docker Compose 設定が生成されました:
- api-service (Express.js, port 3000)
- worker-service (Node.js, background jobs)
- postgres (PostgreSQL 16, volume mounted)
- redis (Redis 7, cache layer)
7. 設定と最適化
(1) マルチモーダル設定
# dsh.config.yaml
multimodal:
# 画像設定
images:
max_size_mb: 20
max_per_message: 5
resize_large: true # Auto-resize oversized images
max_resolution: [4096, 4096]
# 音声設定
audio:
max_duration_minutes: 10
max_size_mb: 50
transcription_model: "whisper-1"
# 動画設定
video:
max_duration_minutes: 5
max_size_mb: 100
frame_rate: 1 # Frames per second to extract
max_frames: 300
# ドキュメント設定
documents:
max_size_mb: 50
pdf_ocr_enabled: true
csv_max_rows: 100000
(2) パフォーマンス最適化
マルチモーダル入力はトークン消費と応答時間を増加させます:
| 最適化戦略 | 説明 | 効果 |
|---|---|---|
| 画像圧縮 | アップロード前に適切な解像度に圧縮 | 画像トークン50-80%削減 |
| キーフレーム選択 | 動画はキーフレームのみ送信 | 動画フレーム90%削減 |
| テキスト抽出 | PDF は OCR よりテキスト抽出を優先 | より高速で正確 |
| バッチ送信 | 大量の画像はバッチで送信 | タイムアウトを回避 |
❓ よくある質問
📖 まとめ
- DSH マルチモーダルは画像(安定)、音声/動画(実験的)、ドキュメント(安定)をサポート
- 画像入力:Web UI ドラッグ/ペースト、CLI
/attach、SDKimagesパラメータ - 音声/動画にはマルチモーダル対応 LLM モデルが必要
- ドキュメント解析は PDF、CSV、XLSX 等をサポート
- マルチモーダル+ツール連携:画像→コード修正、ドキュメント→データ分析
- 設定ファイルでサイズ制限、フレームレート、OCR 切替等を調整可能
- マルチモーダルはトークン消費を増加させる;最適化戦略に注意
📝 練習問題
1. ⭐ 基礎:Web UI で UI スクリーンショットをアップロードし、Agent にスクリーンショットの内容を説明させてください。Agent の分析結果と使用ツールを記録すること。
2. ⭐⭐ 応用:CSV データファイルをアップロードし、Agent にデータを分析させて可視化を提案させてください。SDK を使ってこの操作のスクリプトを書くこと。
3. ⭐⭐⭐ チャレンジ:マルチモーダルワークフローを設計してください——UI デザイン画像をアップロードし、Agent にデザインに基づいてフロントエンドコードを生成させ、スクリーンショットを撮って生成結果と元のデザインを比較する。完全なツール呼び出しチェーンを記録すること。