Yyatmita

汎用エージェント基盤は「借りる部品」と「自作する部品」でできている——組み立て前の部品表

製品を3類型に分けたとき、その下の『部品レイヤー』はわざと括弧に入れた。今回その括弧を開ける。エージェント基盤を建てる部品は、プラットフォームから借りるもの(skill/hook/MCP/Dynamic Workflows)と、自分で足すもの(外部ループ/決定論ゲート/state外部化)の2系統に割れる。次回はこの部品表で実際に1本のパイプラインを組み立てる。

自分のエージェント基盤を組む#claude-code#agent#architecture#ralph-loop#workflow
← 前の記事: プロジェクトを増やしすぎて方向性を見失ったので、「方向性を相談するプロジェクト」を立てた話

以前ポートフォリオを実コードで分類したとき、製品は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)は、借り物だけでは足りない部分を自作する。どの部品を借り、どこを自作で埋めるかが設計の実体だ。

借りる部品(プラットフォーム供給) 自作する部品(自分で足す) 組み立て:1本のパイプライン skill plugin hook MCP subagent DynamicWorkflows 外部ループralph-loop 決定論ゲートqualify/quality.sh schema契約+意味検証 state外部化tsv/jsonl

借りる部品 — プラットフォームが供給する

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

絵にすると、借りる部品(緑)の穴を、自作部品(桃)が一対一で塞いでいるのが見える。

hook 穴: 何を検査するか 決定論ゲート意味検証 subagent 穴: 反復・収束 外部ループ ralph Dynamic Workflows 穴: 深さ・記憶 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)
資料群 ingest1資料=1 subagent 並列(B: subagent / DW) extractschema で型保証抽出(B: schema / C: 意味検証) compile / reduce断片を統合・品質はここ(C: 決定論ゲート) query統合結果に問い合わせ 外枠 (C): ralph 反復ループ + qualify ゲート + state外部化

借りる部品(B)と自作部品(C)が1本のパイプラインで全部発火する。前回固めた結論——「各ステップ内は Dynamic Workflows で fan-out+schema、ステップ境界はファイル契約+ralph で永続」というハイブリッド——を、最小 PoC で動かして見せる。読み物としての部品表が、再現できる実物に変わる。そこが、この基盤が「便利ツールの寄せ集め」ではなく「世界を上書きするための部品表」だと示せる場所だ。