Home
CloudflareAgents SDK

Cloudflare Agents SDKで、止まらない調査エージェントを設計する

Durable Objects、Workflow、Queueをどう分担すれば、長時間の技術調査を安全に継続できるのか。

状態と処理を分ける

エージェントを単一の Worker に閉じ込めると、再試行、待機、同時実行の境界が曖昧になります。Wazaly では役割を次のように分けます。

機能担当理由
会話と現在状態Durable Objectentity単位の強整合性
長時間の調査Workflowstepごとの再試行と永続化
大量の収集Queuebackpressureと失敗隔離
生データR2安価なimmutable snapshot

実装の要点

Queue consumer ではメッセージ単位に失敗を扱い、外部 API へのアクセスは必ず timeout と idempotency key を持たせます。

export async function normalizeSource(input: SourceSnapshot) {
  return {
    id: input.canonicalUrl,
    fetchedAt: new Date().toISOString(),
    checksum: await sha256(input.body),
  } satisfies NormalizedSource;
}

この分離により、公開サイトは収集処理の遅延や Vertex AI の一時障害から独立できます。