階層型エージェント構成案

大きなモデルで計画し、小さなモデルで実装する——VRAM 4GB の本PCでその構成が成立するかを設計する
📅 作成: 2026-08-25 / 更新: 2026-08-25

目次

  1. 構想と、それを阻む制約
  2. 同時に何が動くか — VRAM の割り当て
  3. 構成案の比較
  4. 採用案とアーキテクチャ
  5. タスク分解と検証の設計
  6. 段階的な実装計画
  7. この案が失敗する条件

この文書の位置づけ

「メインの大きなモデルが作業手順を計画し、小さなモデルのサブエージェントを複数使って実装する」という構想を、 ローカルLLM 実行計画で得た実測値の上で設計する。 結論を先に言えば、構成としては組めるが、本PCでは「複数のサブエージェントを並列に走らせる」部分だけが物理的に成立しない。 その代替と、そもそもこの構成が割に合う条件を整理する。

構想と、それを阻む制約

やりたいこと

  1. メインエージェント(大きなモデル)が、目的を受け取って作業手順に分解する
  2. サブエージェント(小さなモデル)が、分解された個々のタスクを実装する
  3. サブエージェントは複数動かし、量をこなす

狙いは役割分担にある。計画のような「判断が要る仕事」は賢いモデルに、 実装のような「量が要る仕事」は速いモデルに振り分ける。

本PCの実測値(計画書 第10章より)

項目実測この構成にとっての意味
空き VRAM3287 MiBここがすべてを決める
Qwen3-4B2376 MiB / 56.5 tok/sサブエージェント候補。速い
gemma-4-E4BGPU 2868 MiB / 45.2 tok/sメイン候補。思考を経るぶん正確
API 経由の実効速度39.5 tok/sHTTP 込みの体感値。エージェントはこちらで動く
サーバ起動7.5 秒モデル切り替えのたびに払うコスト

最初にぶつかる壁

2つのモデルを同時に立てようとすると、それだけで VRAM を超える

組み合わせ必要 VRAM空き 3287 MiB に対して
Qwen3-4B ×2(サブを2つ)約 4752 MiB超過1465 MiB 足りない
E4B(メイン)+ 4B(サブ)約 5244 MiB超過1957 MiB 足りない
Qwen3-4B ×1 のみ約 2376 MiB収まるKV と合わせて余裕あり
「小さなモデルを複数」は、モデルを複数プロセス立てることを意味しない。 本PCで実現するなら、1つのモデルに複数の会話スロットを持たせる形になる。 llama.cpp の --parallel がそれにあたる。詳細は第2章で扱う。

同時に何が動くか — VRAM の割り当て

2つの実現方法

方法A: モデルを2つ立てる — 収まらない Qwen3-4B #1 2376 MiB Qwen3-4B #2 2376 MiB — 枠外へはみ出す ← 空き VRAM 3287 MiB の限界 方法B: 1モデルに並列スロットを持たせる — 収まる Qwen3-4B(重みは1つだけ) 2376 MiB KV ×4 スロット 4タスク同時 重みは共有され、増えるのは会話ごとの KV キャッシュだけ 代償: 総コンテキストがスロット数で割られる(-c 8192 --parallel 4 → 各 2048 トークン) 注意: 帯域は共有のため、4並列でも合計スループットは4倍にならない(実測が必要)

--parallel で何が起きるか

項目挙動
モデルの重み1つだけ読み込まれ、全スロットで共有される。ここが増えないのが利点
KVキャッシュ-c で指定した総量がスロット数で等分される
スループットバッチ処理により単発の合計より効率は上がるが、帯域が共有なので N 倍にはならない
1タスクあたりの体感同時実行するぶん、個々の応答は遅くなる

コンテキストの割り当て試算

設定スロット数1スロットあたり実装タスクに足りるか
-c 8192 --parallel 118192余裕ただし逐次実行になる
-c 8192 --parallel 224096実用的指示+対象コード+出力が収まる
-c 8192 --parallel 442048窮屈タスクを相当細かく割る必要がある
-c 8192 --parallel 881024不足まとまったコードを渡せない
コンテキストを増やして解決はできない。 計画書 第10章で実測したとおり、-c 16384 にすると KV が VRAM を超えて 1.30 tok/s まで崩壊する。8192 が上限である以上、 並列数を上げることは1スロットの余裕を削ることと同義になる。

構成案の比較

案1 — クラウドで計画、ローカルで実装(逐次)

メインは Claude 等のクラウドモデル。計画を構造化データで出力させ、 オーケストレータがタスクを1つずつローカルの llama-server に投げる。

案2 — 完全ローカル 2段構え(モデル切り替え)

計画は gemma-4-E4B(reasoning・正確)、実装は Qwen3-4B(速い)。 同時常駐できないため、llama-swap のようなプロキシか、オーケストレータ自身がプロセスを立て直す。

案3 — 1モデル+並列スロット

Qwen3-4B を --parallel 4 で立て、独立したタスクを同時投入する。

案4 — ハイブリッド

計画と最終検証はクラウド、実装の量はローカル並列、検証で落ちたタスクだけクラウドに差し戻す。

比較表

観点案1
クラウド計画
案2
完全ローカル
案3
並列スロット
案4
ハイブリッド
計画の品質
サブの並列性なしなしありあり
1タスクの文脈量8192819220482048〜4096
オフライン動作不可不可
実装の手間
失敗時の回復手動手動手動自動

採用案とアーキテクチャ

採用: 案4(ハイブリッド)を、案3の実測を経て組む

最終形は案4とする。ただし案4の中核は案3(並列スロット)であり、 そこが何倍のスループットを出すかが分からないまま全体を組むのは順序が逆。 第6章の段階計画では、案3の実測を最初に置く。

全体の流れ

メイン 大きなモデル 目的を受け取り分解 タスク定義 JSON 検証方法を各件に添える サブ #1(スロット1) サブ #2(スロット2) サブ #3(スロット3) llama-server 1プロセス / --parallel 検証 ビルド / テスト 不合格 → メインに差し戻す(自動) オーケストレータ(PowerShell) タスクの配分・API 呼び出し・検証の実行・結果の集約・差し戻しの判断を担う 要点: サブエージェントは「別プロセス」ではなく「同一サーバの別スロット」 エージェントらしさはオーケストレータ側の制御で作る。モデル側は状態を持たない

各層の責務

担当やることやらせないこと
メインクラウド
または E4B
目的の解釈、タスク分解、検証方法の指定、差し戻しの処理個々の実装。ここで書くなら分解する意味がない
サブQwen3-4B
並列スロット
与えられた1タスクの実装。入出力が明確なもの設計判断・良し悪しの評価。4B には荷が重い
オーケストレータPowerShell配分、API 呼び出し、検証コマンド実行、集約、リトライ内容の判断。ここは機械的処理に徹する

通信の形

サブエージェントとの通信は、計画書 第10章で動作確認済みの OpenAI 互換エンドポイントを使う。

POST http://127.0.0.1:8080/v1/chat/completions
{
  "messages": [
    { "role": "system", "content": "あなたは与えられた1つのタスクだけを実装します。" },
    { "role": "user",   "content": "<タスク定義>" }
  ],
  "max_tokens": 1024,
  "temperature": 0.2
}

サブエージェント側は状態を持たない。会話履歴を積まず、1タスク1リクエストで完結させる。 文脈が 2048 トークンしかない以上、履歴を持たせる余裕がないという事情もある。

エージェントらしさは、モデルではなくオーケストレータが作る。 4B に「自律的に考えて動く」ことを期待すると破綻する。 ループ・分岐・リトライ・検証はすべてコード側に持たせ、モデルには単発の変換だけをさせる。 この切り分けが、小さなモデルを使う構成が成立するかどうかの分かれ目になる。

タスク分解と検証の設計

4B が扱えるタスクの条件

計画書 第10章の品質評価で、Qwen3-4B は次の結果を出している。

設問結果この構成への示唆
形式の指示
(5項目・各20字)
完璧指示どおり形式が決まった出力は任せられる
コード生成
(PowerShell)
惜しい動くが -Recurse を落とした要件の取りこぼしが起きる。検証が必須
知識を問う説明誤答量子化を量子力学と混同知識に依存する判断は任せられない

タスクの適性

適性タスクの例理由
向く定型的な変換、同じ修正の多数ファイルへの適用、テストケースの雛形生成、命名の一括変更正解が機械的に判定でき、判断を含まない
条件付き関数単位の実装(入出力とテストが与えられている場合)テストが通るかで合否が決まるなら成立する
向かない設計判断、既存コードの読解を要する修正、「より良く直す」類の指示正解が一つでなく、検証もできない

タスク定義に必要な項目

メインが出力するタスク定義には、検証方法まで含める。これが無いとオーケストレータが合否を判定できない。

{
  "id": "task-003",
  "goal": "html2md.ps1 の Convert-Table に colspan 展開のテストを追加する",
  "context_files": ["src/scripts/70_html2md/html2md.ps1"],
  "constraints": [
    "既存の関数シグネチャを変えない",
    "PowerShell 5.1 で動作すること"
  ],
  "verify": {
    "command": "pwsh -File tests/run-tests.ps1 -Filter Convert-Table",
    "expect_exit_code": 0
  },
  "max_retry": 2
}

検証の階層

段階内容失敗時
1. 構文生成物がパースできるか。PowerShell なら構文解析、HTML ならタグ対応同じサブに再試行
2. 静的制約条件を満たすか(禁止パターンを含まない、シグネチャが変わっていない)同じサブに再試行
3. 実行verify.command を実行して終了コードを見る再試行 → 上限でメインへ差し戻し
4. 統合全タスク完了後、全体としてビルド・テストが通るかメインへ差し戻し
検証を用意できないタスクは、この構成に載せてはいけない。 4B の出力は「もっともらしく間違える」ことが実測で分かっている。 人間が目視で確認する前提なら、確認の手間が実装の手間を上回る。 自動検証が書けるかどうかを、タスク分解時の採否基準にする。

段階的な実装計画

Phase 1 — --parallel の実測

ここが最初に来る。並列時の合計スループットが分からないまま全体を組むと、 「並列にした意味がなかった」という結論を最後に知ることになる。

測る条件見たいこと
--parallel 1 で1リクエスト基準値。第10章の 39.5 tok/s と一致するか
--parallel 2 で2本同時合計スループットが何倍か
--parallel 4 で4本同時同上。頭打ちの位置を探す
各条件で VRAMスロット増でどれだけ増えるか

判断

Phase 2 — 単一タスクの往復

オーケストレータの最小形を作り、1タスクを投げて検証まで回す。

ここまでで「4B が実際にタスクを完了できるか」が分かる。できないなら以降は無意味になる。

Phase 3 — 複数タスクの投入

Phase 4 — 計画フェーズの接続

成果物の置き場

src/scripts/80_agent/
  orchestrator.ps1     … タスク配分・API 呼び出し・検証・集約
  orchestrator.cmd     … ランチャー
  tasks/               … タスク定義 JSON
  results/             … 実行結果とログ
docs/plan/agent-architecture.html  … 本書
Phase 1 だけなら、追加のダウンロードも新しいモデルも要らない。 既にある Qwen3-4B と llama-server で測れる。 所要は数十分程度で、その結果が案3の採否を決める。

この案が失敗する条件

失敗のパターン

条件何が起きるか検知できる段階
並列で速くならない帯域律速のため --parallel の効果が小さい。逐次と変わらないPhase 1
2048 トークンに収まらない対象コードを渡しきれず、サブが文脈不足で誤った実装をするPhase 2
成功率が低い再試行と差し戻しが増え、人が直した方が速い状態になるPhase 3
分解コストが上回るタスクを4Bが扱える粒度まで割り、検証まで書く手間が、直接実装する手間を超えるPhase 4

最大のリスクは4番目

技術的には Phase 1〜3 で解決できる問題が並ぶが、4番目だけは技術で解決できない

4B が扱えるタスクは「入出力が明確で、機械的に検証でき、判断を含まない」ものに限られる。 そこまで細かく分解し、検証コマンドまで用意する作業を誰かがやらねばならない。 それをメインエージェントにやらせるなら、メインが直接実装するのと手間が変わらない場面が相当ある

それでも成立する条件

条件理由
同種のタスクが大量にある分解の設計コストを1回払えば、N 件に償却できる。これがこの構成の本命
検証が既に存在するテストが揃っているコードベースなら、検証を書く手間が消える
クラウド利用を減らしたい速度でなく費用が動機なら、逐次実行でも価値がある
オフラインで動かす必要がある速度・品質より可用性が優先される場合

この計画で決まっていないこと

Phase 1 の実測を、適用先が決まる前にやっておく価値はある。 「並列に意味があるか」は用途に依存しない事実であり、 ここが否定されれば構成そのものを案1(逐次)に単純化できる。 逆に肯定されても、適用する作業が無ければ実装は保留でよい。

参考資料

本書は設計案であり、実装も実測もしていない。 第2章のコンテキスト割り当て、第6章 Phase 1 のスループット判断基準は、 いずれも実測前の想定である。Phase 1 の結果次第で構成そのものが変わりうる。