Structured Visual Agentの概要
Dataikuの「Structured Visual Agents」は、従来のシンプルな「ReAct形式(ツール呼び出しのループ)」では実現が困難だった、複雑なステップや条件分岐を伴うAIエージェントを構築するための新機能です。
例えば、「情報を収集し、原因を特定し、状況に応じて処理を分岐させ、最後にレポートをまとめる」といった、厳格なプロセス管理が必要なユースケースに最適です。本記事では、設計の基礎となる以下の3つの基本概念について解説します。
- .ブロック(Blocks):動作を定義する最小単位
- 情報の保持と管理(State / Scratchpad):メモリの使い分け
- 実行フローの制御:開始と遷移のロジック

エージェントの動作を定義する「ブロック」
エージェントの制御フローを構成する最小単位は「ブロック(Block)」と呼ばれます。ブロックはグラフ状に連結され、処理はこのブロック間を移動していきます。
多彩なブロックの種類
用途に応じて、以下の14種類のブロックを使い分けることができます。
- Core Loop:LLMを中心に推論とツール実行を反復し、目的達成まで処理を継続する中核ブロック。
- LLM Request:ツール呼び出しを含む単発のLLM実行を行うブロック。
- Delegate to Other Agent:現在の処理や会話を別のエージェントに委譲するブロック。
- Mandatory Tool Call:LLMの判断を介さず、指定したツールの実行を強制するブロック。
- Manual Tool Call:すべての引数を明示して、LLMを使わずにツールを直接実行するブロック。
- Routing:条件分岐ロジックに基づいて処理フローを分岐させるブロック。
- For Each:リスト内の各要素に対して同一ブロックを繰り返し実行するブロック。
- Reflection:LLMによる自己検証・評価・改善をループ的に行うためのブロック。
- Set State Entries:会話スコープの短期メモリ(状態)を設定・更新するブロック。
- Set Scratchpad Entries:現在のターンや反復処理専用の超短期メモリを設定するブロック。
- Context Compression:過去の会話履歴を要約し、コンテキストサイズを削減するブロック。
- Emit Output:処理結果をそのままユーザーに出力するブロック。
- Generate Artifact:テキストやDOCXテンプレートから成果物を生成するブロック。
- Python Code:Pythonによる任意のカスタムロジックを実行するブロック。

Core Loop
「Core Loop」は、LLMが思考・ツール実行・観察を行うReActループの中核です。今回はCore Loopブロックを例にブロックの設定について紹介します。Core Loopブロックでは以下の項目を設定できます。
- LLM & Instructions: ブロックを制御するモデルと指示を定義します。
- Tools: エージェントが利用できるツールを登録します。
- Next block & Exit conditions
- Default next block: ターン終了時の遷移先。空欄にすると同一ブロックで会話を継続(マルチターン)します。
- Exit conditions: Stateのキーの有無やCEL式により、ループを途中で抜けて別のブロックへ遷移させる「早期終了」の条件を設定できます。
- Output: 回答をユーザーに送信するか、内部会話履歴にのみ追加するかを制御します。
- State and scratchpad: State/Scratchpad awareを有効にすると、LLMが「仮想ツール」を介して情報を自律的に読み書きできるようになります。
- Completion settings: JSON modeを有効にすることで、構造化されたレスポンスをモデルに要求できます。

情報の保持と管理:「State (状態)」と「Scratchpad(スクラッチパッド)」
エージェントが会話の文脈や中間データを保持するために、Key-Value形式の2つのメモリ空間(辞書オブジェクト)を利用します。
| 特徴 | 状態 (State) | スクラッチパッド (Scratchpad) |
| 持続期間 | 会話全体(ユーザーとのターンを跨ぐ) | 単一のブロックシーケンス内のみ |
| 主な用途 | 顧客属性、確定したID、最終結果 | 中間的な推論、一時的な計算結果 |
| 並列処理 | 全体で共有 | 各処理で独立(競合が発生しない) |
これらの情報は、ブロックや、Pythonコードを通じて読み書きが行われます。
実行フローの制御:スタートブロックと次のターンの行動
エージェントの実行は、以下のシンプルなルールに従って制御されます。
- スタートブロック
- 新しい会話が開始される唯一の起点です。
- フローの終端とターンの終了
- 実行中、制御はブロックからブロックへと移動します。「次のブロック(Next block & Exit conditions)」の指定がないブロックに到達した時点でターンは終了し、ユーザーに応答が返ります。
- 次のターンの行動
- ユーザーの返答後、どのブロックから再開するかを決定します。
- Go to starting block: 常にスタートブロックから再実行。
- Go to last block: 前回の最終ブロックから継続。
- Smart mode: LLMがユーザーの意図を汲み取り、再開地点を自動判断。
- ユーザーの返答後、どのブロックから再開するかを決定します。

補足:ターン前後の共通処理
メインフローとは別に、開始時や終了時に必ず実行されるブロックを定義できます。権限チェックや回答のガードレールといった、フローのどこにいても必要な共通処理を実装するのに適しています。

ユースケース例:配送トラブル調査エージェント
ここまで解説した「ブロック」「情報の保持と管理」「実行フローの制御」を組み合わせることで、実際の業務プロセスに即した堅牢なエージェントを構築できます。
例えば、ユーザーからの「商品が届かない」という問い合わせに対応する「配送トラブル調査エージェント」を考えた場合、以下の図のようなフローを設計することで、人間が定めた手順通りの確実な対応を実現できます。

このエージェントは、定義されたブロックに従って以下のように進行します。
- 情報収集と記憶(Core Loop 1 & State)
まず、ユーザーから注文番号を聞き出し、顧客DBを検索します。重要なのは、取得した「注文ID」や「最新の配送ステータス」を、一時的なメモリであるStateに確実に保存することです。
- 状況に応じた自動分岐(Routing)
次に、エージェントはRoutingブロックへ進みます。ここではLLMが都度考えるのではなく、Stateに保存された「配送ステータス」の値に基づいて、明確に定義されたルールに従って進路を自動的に振り分けます。
- 専門的なタスクの実行(Core Loop 2 or 3)
分岐先では、それぞれの状況に特化した処理を行います。「配送済み」なら配送業者のAPIを調査し、「未発送」なら社内の在庫システムを確認します。
- 出力と記録(Generate Artifact)
どちらのルートを通っても、最終的に合流してユーザーへの回答を生成します。同時に、調査結果をまとめた社内用の報告書(Artifact)も自動作成します。
このように、人間が設計した厳格な「業務の型(フローチャート)」をブロックで定義することで、AIは勝手な判断でプロセスを飛ばすことなく、確実に手順を踏んでゴールまで到達できるようになります。
論理的なエージェント構築に向けて
Structured Visual Agentsは、多彩なブロックの組み合わせと実行フローの制御により、高度なエージェントロジックを実現します。
「ブロック」の役割、「情報の保持と管理」の使い分け、そして「実行フロー」の制御という3つの基本要素を正しく理解することが、信頼性の高いエージェント設計の鍵となります。これらの基本要素をマスターし、用途に応じた論理的で効率的なエージェント構築を目指しましょう。