マルチモーダルと他のモデル¶
ここまでは「LLM = テキスト in / テキスト out」で話を進めてきた。現実には AI モデルは画像・音声・動画・ベクトル等様々なモダリティを扱っている。この章では主要な「他のモデル」を整理し、本リポジトリの 01-15 章の知識がそのまま応用できることを示す。
モダリティの一覧¶
現代の AI モデルを入出力モダリティで整理すると:
| カテゴリ | 入力 | 出力 | 例 |
|---|---|---|---|
| LLM | テキスト | テキスト | GPT-5.4 / Claude / Gemini (テキストモード) |
| VLM (Vision-Language Model) | 画像 + テキスト | テキスト | GPT-5.4 / Claude Opus 4.6 / Gemini 2.5 |
| ASR (Automatic Speech Recognition) | 音声 | テキスト | Whisper / Deepgram / ElevenLabs STT |
| TTS (Text-to-Speech) | テキスト | 音声 | ElevenLabs / OpenAI TTS / Google TTS |
| 画像生成 | テキスト (±画像) | 画像 | DALL-E 3 / Midjourney / Stable Diffusion / Flux |
| 動画生成 | テキスト (±画像/動画) | 動画 | Sora / Veo / Runway / Kling |
| 埋め込みモデル | テキスト / 画像 / 音声 | ベクトル | text-embedding-3 / CLIP / Voyage |
| 音声生成 (音楽) | テキスト | 音楽 | Suno / Udio / MusicGen |
| 3D 生成 | テキスト / 画像 | 3D モデル | Meshy / Tripo |
| Omni-modal | 任意 | 任意 | GPT-5.4 / Gemini 2.5 / Claude Opus 4.6 |
近年は単一モデルが複数モダリティを扱う方向に進んでいる (omni-modal)。以下、主要なものを個別に見る。
VLM (Vision-Language Model)¶
画像とテキストを同時に扱える LLM の拡張。基本的には「画像も tokenizer でトークン化して、テキストと同じ transformer に流す」という構造。
入力形式 (OpenAI 互換)¶
messages の content が配列になり、テキストと画像を混在できる:
{
"role": "user",
"content": [
{ "type": "text", "text": "この画像に何が写っていますか?" },
{ "type": "image_url", "image_url": { "url": "https://example.com/photo.jpg" } }
]
}
または base64 エンコードで直接埋め込み:
何ができるか¶
- 画像の説明 (what is in this image?)
- OCR (画像内のテキスト抽出)
- 図表の読み取り (グラフ / スクリーンショット / UI レイアウト)
- Visual QA (画像に対する質問応答)
- 画像の分類 / 検出 (古典的 CV の代替)
- スクリーンショット理解 (UI 自動化 / アクセシビリティ)
エージェントで扱うとき¶
基本的にテキスト LLM と同じ。エージェント側のコード (agent-demo の ChatOpenAI 等) で messages に画像を含めれば、VLM はそのまま動く。tool calling も問題なく使える。
要注意ポイント:
- 画像 1 枚で数百〜数千トークン消費する (コスト / context window 圧迫)
- 画像の解像度を下げると精度も下がる
- 細かい文字の OCR は専用 OCR の方が良いケースも
ASR / TTS (音声)¶
音声 → テキスト (ASR) と テキスト → 音声 (TTS)。従来は専用モデル (Whisper / Deepgram / ElevenLabs) を使ってきたが、最近は omni-modal な LLM が直接扱う。
ASR: Whisper¶
OSS 代表の Whisper (OpenAI) が事実上のスタンダード。
- 多言語対応 (99 言語以上)
- ローカル実行可能 (GPU なしでも動く)
faster-whisper等の高速実装あり
エージェントから使うには tool として wrap するのが自然:
export const transcribeTool = tool(
async ({ audio_url }) => {
const audio = await fetch(audio_url).then(r => r.arrayBuffer());
const result = await whisper.transcribe(audio);
return result.text;
},
{ name: "transcribe", description: "Transcribe audio to text.", schema: z.object({ audio_url: z.string() }) },
);
TTS¶
テキスト → 音声合成。代表的な SaaS:
- ElevenLabs: 高品質・多言語・声のクローニング
- OpenAI TTS: GPT-5.4 内蔵 / API
- Google Cloud TTS / Azure Speech: 企業向け
こちらも tool として wrap。エージェントが応答の一部を音声で返したい場合に使う。
リアルタイム音声対話¶
omni-modal LLM (GPT-5.4 / Gemini Live) はテキストを介さず直接音声入出力をサポート。WebSocket 経由で streaming:
従来の「ASR → LLM → TTS」の 3 段構成よりレイテンシが低く、自然な対話が可能。ただし API が OpenAI Realtime API / Gemini Live のような専用形式で、OpenAI 互換エンドポイントとは別。
画像生成 (Diffusion)¶
テキストから画像を生成するモデル。LLM とは全く違う仕組み (diffusion = ノイズから徐々に画像を作る)。
代表的なモデル¶
- DALL-E 3 (OpenAI): ChatGPT 経由 / API
- Midjourney: Discord bot 経由 (API は限定)
- Stable Diffusion / SDXL / SD3: OSS、ローカル実行可能
- Flux (Black Forest Labs): OSS、SD 系より高品質
- Imagen 3 (Google): Gemini 経由
- Ideogram: テキスト描画に強い
エージェントで扱うとき¶
画像生成もまた tool として wrap:
export const generateImageTool = tool(
async ({ prompt }) => {
const result = await openai.images.generate({ model: "dall-e-3", prompt });
return result.data[0].url;
},
{ name: "generate_image", description: "Generate an image from text.", schema: z.object({ prompt: z.string() }) },
);
LLM は「どういう画像を作るか」を決め、diffusion モデルが実際に生成する。LLM + diffusion の組み合わせで「もっと明るい色にして」「背景を変えて」のような会話的な画像編集ができる。
ローカル実行¶
Stable Diffusion や Flux は M 系 Mac / GPU で動かせる。ComfyUI / Automatic1111 / Fooocus 等の UI ツールが有名。本リポジトリには入っていないが、Ollama と同じくホスト側に直接インストールするのが正道 (GPU を使うので)。
動画生成¶
テキストや画像から動画を生成。2024-2025 で急速に実用化。
- Sora (OpenAI)
- Veo (Google DeepMind)
- Runway Gen-3
- Kling (Kuaishou)
- Pika
入力:
- text-to-video: プロンプトから生成
- image-to-video: 静止画に動きを付ける
- video-to-video: 既存動画を変換
現時点では:
- 5〜10 秒程度の短尺が中心
- コスト高 (1 動画数セント〜数ドル)
- 一貫性 (人物や物体が動いてもブレない) がまだ課題
エージェントからの扱いは画像生成と同じく tool として wrap。
埋め込みモデル (再訪)¶
第 9 章 埋め込み で扱った。text-embedding-3 / BGE / CLIP 等。
- text embedding: 文字列 → ベクトル
- multimodal embedding (CLIP / SigLIP 等): 画像とテキストを同じ空間に埋め込む → 画像検索がテキストクエリで可能
CLIP の応用例:
- 画像の意味検索: "猫の写真" という query で猫画像を検索
- Zero-shot 分類: 事前定義されたラベルではなく任意のテキストで分類
「エージェント = コアモデル + ツール + state」の公式は変わらない¶
本章で挙げた全モダリティに共通するのは、エージェントの骨格が変わらないこと。
[ユーザ] ─ 入力 (テキスト/画像/音声) ─► [エージェント] ─► [コアモデル]
│
▼
[ツール]
│
▼
- Whisper (ASR)
- ElevenLabs (TTS)
- DALL-E / Flux (image gen)
- Runway (video gen)
- CLIP (multimodal search)
- search / calc / fetch (第 5 章)
│
▼
結果
│
▼
[コアモデル]
│
▼
最終応答
コアモデルが LLM でも VLM でも omni-modal でも、「tool を呼んで外部能力を借りる」という構造は同じ。だから:
- 章 01 の API 形式はそのまま
- 章 03 の messages / state もそのまま (content が配列化されるだけ)
- 章 04 の tool calling もそのまま
- 章 05 のエージェントループもそのまま
- 章 07 の observability もそのまま (span の中身に image_url 等が入るだけ)
ここまで学んだ全ての知識は、他のモダリティのエージェントにもそのまま通用する。
代表的な「マルチモーダルエージェント」パターン¶
(1) スクリーンショット操作エージェント¶
- 入力: デスクトップのスクリーンショット
- VLM が「どこに何があるか」を理解
- tool:
click(x, y)/type(text)/scroll()を LLM が決定して呼ぶ - 例: Claude Computer Use / OpenAI Operator / Anthropic Computer Use API
(2) 会議議事録エージェント¶
- 入力: 音声ファイル or リアルタイム音声
- ASR で文字起こし (tool)
- LLM が要約 + アクションアイテム抽出
- tool: Slack / メール送信
(3) ドキュメント読解エージェント¶
- 入力: PDF / 画像 / スキャン
- VLM で画像として読むか、OCR tool でテキスト化
- LLM が質問応答
(4) ビジュアルレポート生成¶
- 入力: データ (JSON / CSV)
- LLM が分析 + グラフの仕様を決定
- tool: plotly / matplotlib でグラフ生成
- (オプション) 画像生成モデルでアイキャッチも作る
まとめ¶
- 現代の AI モデルは LLM / VLM / ASR / TTS / 画像生成 / 動画生成 / 埋め込み 等多様
- VLM は LLM の自然な拡張。
messages.contentが配列化される以外は同じ - ASR / TTS / 画像 / 動画生成 はエージェントからtool として扱うのが基本
- omni-modal モデル (GPT-5.4 / Gemini / Claude Opus 4.6) は単一モデルで複数モダリティを扱う。リアルタイム音声対話も可能
- 「エージェント = コアモデル + ツール + state」という骨格はどのモダリティでも同じ
- 章 01-15 で学んだ知識は全てそのまま他モダリティに応用できる
- 画像生成 / 動画生成は GPU 依存なのでローカル実行はホスト直インストール (Ollama と同じ理由、setup/ollama.md)