汎用エージェント基盤は「借りる部品」と「自作する部品」でできている——組み立て前の部品表
製品を3類型に分けたとき、その下の『部品レイヤー』はわざと括弧に入れた。今回その括弧を開ける。エージェント基盤を建てる部品は、プラットフォームから借りるもの(skill/hook/MCP/Dynamic Workflows)と、自分で足すもの(外部ループ/決定論ゲート/state外部化)の2系統に割れる。次回はこの部品表で実際に1本のパイプラインを組み立てる。
← 前の記事: プロジェクトを増やしすぎて方向性を見失ったので、「方向性を相談するプロジェクト」を立てた話以前ポートフォリオを実コードで分類したとき、製品は3類型(製品内蔵型・外枠拘束型・自律ループ型)に割れ、選択は「ループ内に人間がいるか/安いオラクルがあるか」で決まる、というところまで詰めた。だがあのとき、ひとつだけ意図的に括弧に入れた層がある。enforcement の部品レイヤーだ。前回は「検証層がどこから来るか」で型を分けただけで、その検証層を実際に何で組み立てるか——「外で判定して突き返す」ための道具や検証器そのもの——には踏み込まなかった。
今回その括弧を開ける。製品を「型」で見るのではなく、何を組み合わせて建てるか=部品で見る。そして次回、この部品表で実際に1本のパイプラインを組み立てる。部品の話の次に組み立てのチュートリアルが来るのは、当然の順序だ。
部品は2系統に割れる
エージェント基盤の部品は、出所で2つに分かれる。
- 借りる部品 — プラットフォーム(Claude Code / Agent SDK)が供給する。skill・plugin・hook・MCP・subagent・Dynamic Workflows
- 自作する部品 — 自分のフレームワークで足す。外部ループ(ralph-loop)・決定論ゲート(qualify / quality.sh)・収束条件・schema 契約・state 外部化
この区分は3類型の F 軸——「enforcement 層の出所が、ホスト製品か/自作か/不在か」——の延長だ。製品内蔵型(manginus)は enforcement をほぼ借りる。外枠拘束型(文書生成系, 3big)と自律ループ型(autoresearch)は、借り物だけでは足りない部分を自作する。どの部品を借り、どこを自作で埋めるかが設計の実体だ。
借りる部品 — プラットフォームが供給する
skill — 再利用可能な手順
特定タスクの手順とドメイン知識をひとまとめにした単位。「PDF を OCR する」「KDP に出稿する」のような繰り返す作業を、その都度プロンプトで説明し直さずに呼び出せる。部品としての役割=手続きの再利用。組み立てでは「ingest の前処理」のような定型工程を skill 化して差す。
plugin — 配布と束ねの単位
skill・command・hook・MCP 設定をまとめて配布できるパッケージ。${CLAUDE_PLUGIN_ROOT} で自分のパスを解決し、他人の環境でも動く。部品としての役割=部品の容れ物。自作部品を含めて1つの「基盤キット」として配るとき、これが外殻になる。
hook — 決定論的な割り込み
PreToolUse / PostToolUse / Stop などのイベントで、コードを強制実行する。危険なコマンドをブロックする、ツール実行後に検査を走らせる、といった「外で判定して突き返す」をプラットフォーム側で借りられる。部品としての役割=借り物の enforcement。ただし hook が供給するのは決定論的な割り込みであって、「この出力は意味として正しいか」の判定はしてくれない。そこは後述の自作部品で埋める。
MCP — 外部ツール・検証器の口
Model Context Protocol。外部のツール・データ源・検証器を、エージェントから叩ける形で繋ぐ標準の口。専門ドメインの一次情報を引く参照系 MCP や、全文検索の kbsearch——これらは取得にも使えるが、本質的には出力後の照合に使える検証器だ。部品としての役割=事実の供給と照合。組み立てでは「extract した引用を MCP で原文照合する」継ぎ目に効く。
subagent — 文脈を分離した実行単位
親の文脈を汚さず、独立したコンテキストで1仕事をさせる単位。並列に何体も立てられる。部品としての役割=分割統治の最小単位。「1資料=1サブエージェント」で ingest を並列化する、検証を複数視点に割る、といった fan-out の素になる。
Dynamic Workflows — オーケストレーション部品
サブエージェントの群れを JavaScript で決定論的に編む層。前回詳しく実測したが、pipeline(バリアなし連結)・parallel(バリアあり)・schema(型保証出力)・verify(反証パネル)という小さなプリミティブの組み合わせだ。部品としての役割=部品同士の配線。subagent が「実行単位」なら、Dynamic Workflows は「それらをどう並べ、どう待ち合わせるか」を書く部品。
自作する部品 — 自分のフレームワークで足す
借りる部品だけでは、無人で回す基盤は完成しない。プラットフォームは「意味の検証」と「ループの記憶」を供給してくれないからだ。そこを自作で埋める。
外部ループ — ralph-loop
claude -p を反復で叩き、状態をファイルに外部化する12-Factor の stateless reducer 型エンジン。ループの記憶をエージェントの文脈内に持たせず、毎イテレーション外部ファイルから読み直す。3big・autoresearch をはじめ、専門ドメインのリサーチ系・文書生成系のパイプラインが揃ってこれを「外で判定して突き返す層」の背骨に使う、自分のポートフォリオのハウスパターンだ。部品としての役割=反復と収束の制御。Dynamic Workflows が「幅(同時並列)」を編むのに対し、ralph は「深さ(反復して良くする)」を司る。
決定論ゲート — qualify / quality.sh / check_match.sh
出力を機械的に検査して、基準を満たさなければ突き返すスクリプト群。3big の qualify_*.py(26個)、リサーチ系の quality.sh(参照 PDF の実在チェック)、文書生成系の check_match.sh(一次資料でない出典を直接根拠扱いするのを機械 reject)。部品としての役割=致命的失敗面への継ぎ目検査。外枠拘束型の品質は、この決定論ゲートをどこに置くかで決まる。hook が「割り込みの場所」を借りられるのに対し、「何を検査するか」は自作するしかない。
schema 契約と意味検証
出力の形を保証するのが schema(Dynamic Workflows の schema も、自前パイプラインの JSON フォーマット指定も同じ役割)。検証がツール呼び出し層で走り、合わなければモデルがリトライするので、手で JSON.parse する脆さが消える。出力の意味を検証するのが LLM judge や DeepEval HallucinationMetric(文書生成系で EDD 稼働中)。部品としての役割=形と意味の二段チェック。決定論ゲートが「形・構造」を、意味検証が「内容の妥当性」を担当する。
state 外部化 — results.tsv / log.jsonl / gap.md
ループの記憶をエージェントの外に置くファイル群。autoresearch の results.tsv / changelog.md、文書生成系の log.jsonl / gap.md。部品としての役割=ループをまたぐ永続記憶。これがあるから、途中で落ちても再開でき、どの入力からどう出力したかの監査証跡が残る。前回 Dynamic Workflows と比べて「自分のパイプラインの方が重い」と感じた正体の一部はこれで、重さと引き換えに再実行性と監査を買っている。
借りる × 自作の対応
部品は単独では意味が薄い。借り物が供給しない穴を、自作部品が埋める対応で見ると効く。
| 借りる部品が供給するもの | 供給しない穴 | 埋める自作部品 |
|---|---|---|
| hook = 決定論的な割り込みの場所 | 何を検査するか(意味の判定) | 決定論ゲート / 意味検証 |
| subagent = 並列実行単位 | 反復して収束させる仕組み | 外部ループ(ralph) |
| Dynamic Workflows = 幅の配線 | 深さ(壁時計 timeout・ループ記憶) | ralph + state 外部化 |
| MCP = 事実の供給と照合の口 | 「照合を必ず通す」強制 | 決定論ゲートに照合を組み込む |
| schema = 出力の形の保証 | 内容が妥当かの判定 | LLM judge / DeepEval |
絵にすると、借りる部品(緑)の穴を、自作部品(桃)が一対一で塞いでいるのが見える。
この対応が、組み立ての設計図そのものになる。
参考までに、Anthropic 自身の出荷済み縦型エージェントも同じ部品構成で読める。Claude for Legal の grounding は MCP 的な事実照合と検証層の組み合わせで、派手な自律エージェントというより部品の堅実な配線だった。違うのは、彼らがホスト製品として enforcement を内製・供給しているのに対し、自分は借りる部品+自作部品で同じ機能を組む点だ。汎用基盤の上でここまで組める、というのがこのシリーズの主張の核心になる。
次回:この部品表で組み立てる
部品が揃ったら、当然その次は組み立てだ。次回は、この部品表を使って小さな資料群を ingest → extract → compile → query する最小パイプラインを1本、実際に建てる。
- ingest … 1資料=1 subagent で並列取り込み(borrowed: subagent / Dynamic Workflows の fan-out)
- extract … schema で型保証して抽出(borrowed: schema / self: 意味検証)
- compile(reduce) … 断片を統合する。map-reduce 型の品質はここに宿る(self: 決定論ゲート)
- query … 統合結果に問い合わせる
- 外側に ralph の反復ループ+qualify ゲート+state 外部化(self)
借りる部品(B)と自作部品(C)が1本のパイプラインで全部発火する。前回固めた結論——「各ステップ内は Dynamic Workflows で fan-out+schema、ステップ境界はファイル契約+ralph で永続」というハイブリッド——を、最小 PoC で動かして見せる。読み物としての部品表が、再現できる実物に変わる。そこが、この基盤が「便利ツールの寄せ集め」ではなく「世界を上書きするための部品表」だと示せる場所だ。