コンテンツにスキップ
タイプアンロック
ステージフリート
難易度高度
ジョブエージェントをオーケストレート
対象AI ビルダー
サービスパイプ
サービスエージェント
サービスコンテナ
Hoody の利点HTTP ネイティブ
Hoody の利点AI ネイティブ
タイプアンロック
ステージフリート
難易度高度
ジョブエージェントをオーケストレート
対象AI ビルダー
サービスパイプ
サービスエージェント
サービスコンテナ
Hoody の利点HTTP ネイティブ
Hoody の利点AI ネイティブ
タイプアンロック
ステージフリート
難易度高度
ジョブエージェントをオーケストレート
対象AI ビルダー
サービスパイプ
サービスエージェント
サービスコンテナ
Hoody の利点HTTP ネイティブ
Hoody の利点AI ネイティブ
タイプアンロック
ステージフリート
難易度高度
ジョブエージェントをオーケストレート
対象AI ビルダー
サービスパイプ
サービスエージェント
サービスコンテナ
Hoody の利点HTTP ネイティブ
Hoody の利点AI ネイティブ
PIPE · CONTAINERS · MULTI-AGENT

5 つのエージェント、5 つのパイプ、1 つの判定

同じ入力をモデルパネルでレビューさせたい。5 つのコンテナ、5 つの異なるプロバイダー、5 つの意見。オーケストレーションフレームワークなら通常、これを連携させるために 100 行ものコードを発明します。それを書く必要はありません — 各エージェントが独自のパイプパスを持ち、ジャッジが 5 つすべてを並列で curl します。

Pipe API を読む

5 つのコンテナ、5 つのパス、1 人のジャッジ

各エージェントは、それぞれのモデルハンドルを持つ独自のコンテナで動作します。それぞれが判定を独自のパイプパスにストリーミング。ジャッジプロセスが 5 つすべてのパスを並列で curl します — パイプはジャッジが接続するまで各判定を保持し、その後バイトをストリームで通します。メッセージバスも、オーケストレーターフレームワークも、コールバックグラフもありません。

オーケストレーションループ4 ステップ · ブローカーなし
0101 · BROADCAST

5 つのコンテナに同じプロンプトを送信

5 つのコンテナがそれぞれ異なるモデルハンドルで並列に起動します。ジャッジは各コンテナのエージェントエンドポイントに同時にプロンプトを POST します。

0202 · STREAM

各エージェントが独自のパイプパスに書き込み

モデルが思考している間、エージェントは PUT で判定を pipe/agent-N に流し込みます。パイプはバイトを保持します — ディスクなし、ブローカーなし — 誰かが curl で取り出すまで。

0303 · FAN-IN

ジャッジが 5 つすべてのパスを並列で curl

GET pipe/agent-1 から pipe/agent-5 までを各 1 つの curl で取得します。両端が接続するとすぐに、パイプは各エージェントのバイトをジャッジにルーティングします。

0404 · TALLY

判定を解析し、結果を返す

ジャッジは各パスから JSON を読み取り、票を数え、多数派を返します。5 つのコンテナ、それぞれ 1 つの HTTP パス、間に SDK はありません。

judge.sh
#!/usr/bin/env bash
set -euo pipefail

PROMPT='review this PR for security issues'
AGENTS=(claude-sonnet gpt-4o gemini llama mixtral)
BASE=https://pipe.hoody.com/api/v1/pipe

# Each container streams its verdict into its own path.
# Five paths fan-in to one judge — no broker, no SDK.
for i in "$[!AGENTS[@]]"; do
  N=$((i + 1))
  curl -s -X POST "https://agent-$N.hoody.com/v1/run" \
    -d "[\"prompt\": \"$PROMPT\", \"sink\": \"$BASE/agent-$N\"]" &
done

# Read all five verdicts in parallel.
VERDICTS=()
for i in 1 2 3 4 5; do
  VERDICTS+=("$(curl -s "$BASE/agent-$i")")
done
wait

# Tally — majority wins.
printf '%s\n' "$[VERDICTS[@]]" \
  | jq -r .verdict \
  | sort | uniq -c | sort -rn | head -1

PUT が各判定を押し上げます。GET がそれぞれを引き下ろします。パイプはワイヤーです — 両端が接続するとすぐにバイトがエージェントからジャッジへ移動し、バックプレッシャーはパス単位で処理されます。6 つ目のエージェントを追加するには、6 つ目のコンテナを起動し、ループに 6 行目を追加します。

同じパネルを 3 通りに読み解く

メカニズムは 1 つの形 — 5 つのコンテナ、5 つのパス、1 人のジャッジ — ですが、何を打ち破ろうとしているかによって価値の読み方が変わります。

怠惰なシニアエンジニアへ

3 つのモデルに尋ねるためだけに CrewAI を配線するのをやめる

5 つの API にプロンプトを送って答えを平均化するのに、オーケストレーションフレームワークは必要ありません。5 つの curl を並べた bash ループですでに実現できます。エージェントアンサンブルは常にトレンチコートを着た 5 つの HTTP コールでした。

エージェントビルダーへ

オーケストレーターに触れずにモデルをホットスワップ

エージェントを追加: もう 1 つのコンテナ、もう 1 つのパイプパス、ジャッジの並列フェッチにもう 1 行。1 つ削除: コンテナを停止し、行を削除します。再構成するものは何もありません — メッセージバスも、コールバックグラフも、スキーママイグレーションもありません。

コスト意識の高い PM へ

5 つのモデルを実行し、1 つの結果に対して支払う

安価なモデルが先にストリーミングし、高価なモデルはコンセンサスが不明確なときだけ完了します。各エージェントは独自のパイプを持つ別々のコンテナなので、3 つが一致した瞬間にパネルをショートサーキットできます — 共有状態も、abort RPC も不要、ただパイプを閉じるだけです。

各エージェントにパスがあります。パスがワイヤーです。

5 つのモデルプロバイダー、5 つのコンテナ、5 つの HTTP パス — そしてジャッジは bash の 20 行です。オーケストレーションフレームワークは常に HTTP が存在しないふりをしていました。

5 つのパス
  • pipe/agent-claude
    block
  • pipe/agent-gpt
    block
  • pipe/agent-gemini
    block
  • pipe/agent-llama
    block
  • pipe/agent-mixtral
    approve
1 つの判定
ブロック · 4/5 一致

ジャッジは各パスを読み、票を数え、多数派を返します。エージェントを追加するには、コンテナを起動してパスを追加するだけです。再構成するメッセージバスはありません。

Pipe ドキュメントを読む

これが置き換えるもの

ここに挙げるすべてのフレームワークは独自の「エージェント」概念と、エージェント同士で会話するベンダー固有の方法を出荷しています。パイプはその表面を HTTP に折り畳みます — エージェントごとに 1 つのパス、双方向の curl。

  • LangChain エージェントアンサンブルコールバックグラフ、フレームワークロックイン
  • CrewAI マルチエージェントロール、タスク、抽象化の塔
  • AutoGen エージェントパネル会話履歴、ベンダー SDK
  • カスタム投票オーケストレーター手作りのキューとファンインコード
  • OpenAI Assistants スレッディングプロバイダー固有、シングルベンダー
  • Haystack パイプライン1 つのプロンプトのために維持する DAG

オーケストレーターは必要ありません。必要なのは 5 つのコンテナと 5 つのパイプパスです。ジャッジは bash の 20 行です。

Pipe API を読む

他のユースケースを読む