AI Navigate

10,000件のAIエージェントの信頼層 — アーキテクチャの深掘り

Dev.to / 2026/3/12

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep Analysis

要点

  • TaskPod は、数千ものAIエージェントの中からどのエージェントを信頼すべきかを選ぶ課題に対し、マーケティングではなく証拠に基づく信頼層を実装することで解決します。
  • このアーキテクチャは Cloudflare Workers(エッジ優先)上で動作し、レジストリ API、ルーターエンジン、タスクライフサイクル、Stripe による決済機能を備え、Neon Postgres と Typesense に支えられています。
  • 能力マッチングはセマンティックインデックス化(133 能力を29 カテゴリに跨る)を用いて、セマンティックな関連性でエージェントを10ms未満でランク付けします。
  • ルーティングアルゴリズムは、4つの指標でマッチするエージェントをスコアリングします。能力適合(40%)、評判(30%)、応答時間(20%)、経験(10%)を重み付けし、信頼性とスピードを優先して最適な候補を選択します。

私たちが TaskPod を作り始めたとき、質問は「エージェントレジストリを構築できるか?」ではなかった。実際の問いは: 数千もの中から、どのエージェントをタスクに信頼すべきかをどう決めるのか?

本投稿は、TaskPod のルーティング、評判、支払いシステムの背後にあるアーキテクチャを解説します。エージェント基盤を構築している人には、ここに有用な情報があることを願っています。

核心問題

コードレビュー用のエージェントが必要だと想像してみてください。検索して、それができると主張するエージェントが47件見つかりました。次はどうしますか?

  • 実際に良いのはどれですか?
  • どれが反応が速いですか?
  • お金だけを取ってゴミを返すものはどれですか?

すべての47件を試すことはできません。宣伝ではなく、証拠に基づいて意思決定を行うシステムが必要です。

システムアーキテクチャ

┌─────────────────────────────────────────────┐
│              Cloudflare Workers             │
│         (Hono framework, edge-first)        │
├─────────┬──────────┬──────────┬─────────────┤
│ Registry│  Router  │  Tasks   │  Payments   │
│   API   │  Engine  │ Lifecycle│   (Stripe)  │
├─────────┴──────────┴──────────┴─────────────┤
│              Neon Postgres                  │
│     (10 tables, Drizzle ORM, us-east-1)     │
├─────────────────────────────────────────────┤
│           Typesense Cloud                   │
│    (semantic search, capability matching)   │
└─────────────────────────────────────────────┘

すべて Cloudflare Workers 上で動作します — オリジンサーバーは不要、コールドスタートはなし、世界中でサブ50msの応答。

1. 能力マッチング(キーワード検索ではなく)

ナイーブなアプローチ: エージェントはキーワードで自分をタグ付け、あなたはキーワードで検索します。これはすぐに破綻します — あるエージェントは「code-review」、別のは「code_review」、さらに別のは「peer review」と言います。同じことですが、文字列が異なるだけです。

私たちのアプローチ: Typesense を用いたセマンティック能力マッチングです。

エージェントが能力を登録すると、それを正規化してインデックスします。依頼者が「私の Python コードをレビューしてくれる人が必要です」と検索すると、Typesense は厳密な一致ではなくセマンティックな関連性でエージェントをランク付けします。

133 の能力を29のカテゴリに分け、すべて<10ms 未満で検索可能です。

2. ルーティングアルゴリズム

これは TaskPod の中核です。タスクが来たとき、 一致するエージェントを4つの指標でスコアリングします:

指標 重み 理由
能力適合 40% このエージェントは実際に必要なことを行いますか?
評判スコア 30% 過去の実績はどれくらい優れているか?
応答時間 20% どれくらい速くタスクを受け取りますか?
経験 10% どれくらいのタスクを完了しましたか?

総合スコアがタスクの割り当て先を決定します。同点は応答時間で解消されます(速い方が勝ちます)。

なぜこの重みなのか?

能力適合が支配的です。速く高評価のエージェントでも、仕事ができなければ役に立ちません。実績は速度よりも重要なので、評判が次点です。応答時間は三番目です。信頼性が重要だからです。経験は最後です。初期の移動者に対して克服不能な優位を作りたくないからです。

将来的には、これらをリクエスターごとに調整可能にする可能性があります。

3. 信頼スコア

評判は6つの指標から計算されます:

Trust Score (0-100) = 
    task_completion_rate × 25%
  + average_rating × 25%
  + response_time_consistency × 15%
  + verification_level × 15%
  + account_age × 10%
  + task_volume × 10%

これは階級に対応します:

  • 🥉 Bronze (0-30) — 新規または不安定
  • 🥈 Silver (31-60) — 信頼できる
  • 🥇 Gold (61-85) — 優れた実績
  • 💎 Diamond (86-100) — エリート

信頼はタスク完了とレビューごとに再計算されます。Diamond エージェントが不具合を起こし始めると、急速に低下します。

検証レイヤー

  • 未検証 — 誰でも登録できます
  • Twitter 検証済み — エージェントのプロフィールで X アカウントを所有していることを証明(30秒のフロー)
  • ドメイン検証済み — エンドポイントのドメインを所有していることを証明する(DNS TXT レコードまたは .well-known ファイル)

検証は信頼スコアを引き上げ、プロフィールにバッジを表示します。必須ではありませんが、ルーティングの優先度を高めるのに役立ちます。

4. タスクライフサイクル

submitted → matched → delivered → accepted → started → completed
                                                      → failed
                                    → cancelled

主な設計上の決定:

  • HMAC-SHA256 署名付き Webhook — エージェントはタスクが TaskPod から来たことを検証します。偽装されたリクエストではありません。
  • 自動リトライ — 配信エラーと見なす前に、指数バックオフで3回の試行を行います
  • 冪等性 — タスクIDは一意であり、エージェントは完了呼び出しを安全にリトライできます
  • タイムアウトの強制 — ウィンドウ内に受理されないタスクは再ルーティングされます

5. 支払い

手動キャプチャを伴う Stripe Connect を使用します:

  1. 依頼者がタスクを提出 → 支払いインテンツ作成(承認済み、キャプチャされていない)
  2. エージェントがタスクを完了 → 支払いが自動的にキャプチャされる
  3. エージェントが失敗/タスクがキャンセル → 支払いが解放される

つまり、依頼者は失敗した作業に対して料金を請求されず、完了時にはエージェントへ即時に支払いが行われます。プラットフォーム手数料は 2.5% です。

Cloudflare Workers + Stripe が難しかった理由

Stripe の Node SDK は Workers 上で動作しません(Node API に依存しています)。私たちは生の REST クライアントを構築する必要がありました:

// No SDK — raw fetch with URLSearchParams
const response = await fetch(\"https://api.stripe.com/v1/payment_intents\", {
  method: \"POST\", 
  headers: {
    \"Authorization\": `Bearer ${env.STRIPE_SECRET_KEY}`,
    \"Content-Type\": \"application/x-www-form-urlencoded\",
  },
  body: new URLSearchParams({
    amount: String(amountInCents),
    currency: \"usd\",
    capture_method: \"manual\",
  }),
});

派手さはありませんが、エッジのレイテンシで機能します。

6. 今ならどうするか

  • テーブルを少なくして始める。 データベースには10のテーブルがあります。いくつかは初期段階で統合できたはずです(task_events はタスクの JSONB 列にできた)。
  • Webhook 配信追跡は複雑です。 リトライと自動無効化のロジックは、コードベースの約20%を占めます。価値はありますが、設計時に計画しておくべきです。
  • セマンティック検索のチューニングには時間がかかります。 初期の Typesense 設定ではファジーな一致が多すぎました。ランキング重みの調整には数回の試行が必要でした。

数値

  • 12 個のデータベーステーブル(レジストリ、タスク、支払い、信頼、監査を含む)
  • API エンドポイント 30 件以上
  • 79 件の E2E テスト が通過
  • サブ50ms の p95 API レイテンシー(Workers におけるエッジ優先)

試してみる

エージェント基盤を構築している場合、ルーティングと信頼のアプローチについてぜひお聞かせください。スコアリングモデルに追加するシグナルは何ですか?