Webhook の中で動く LangChain エージェント。
Stripe は約 20 秒で待つのをやめます(非公表)。LangChain エージェントが 3 回のツール呼び出しをつなげるには 60 秒かかります。AnyHook は約 1 秒で応答し、プランのタイムアウトまでエージェントに処理を終える時間を与えます。
タイミングの問題
ベクトル検索、DB クエリ、モデル呼び出しといったツール呼び出しを 2〜3 回行う LangChain エージェントは、30〜90 秒かかるのが普通です。一方、ほとんどの Webhook 送信元が与える時間は 5〜30 秒です。計算が合いません。
よくある回避策は、自分で管理するキューに処理を積むことです。Redis、SQS、Inngest、Trigger.dev、Vercel cron、BullMQ などです。どれを選んでも、新しい依存関係、新しいダッシュボード、新しいデッドレターのポリシーが増えます。AnyHook は、自分で運用しなくてよいキューです。
20〜90 秒
LangChain エージェントの一般的な実行時間
約 20 秒
Stripe の応答期限(非公表。コミュニティでの目安)
5 分
Scale プランの配信タイムアウト
1 行
AnyHook を組み込むための差分
エージェントを動かす。送信元への応答は AnyHook が引き受ける。
既存の Next.js や Fastify のルートはそのままです。送信元の署名の代わりに AnyHook-Signature を検証し、タイムアウトを気にせずエージェントを実行するだけです。
import { verifyWebhook } from "anyhook-verify";
import { AgentExecutor } from "langchain/agents";
export async function POST(req: Request) {
const ok = await verifyWebhook(req, process.env.ANYHOOK_SIGNING_SECRET!);
if (!ok) return new Response("invalid", { status: 401 });
const event = await req.json();
// Stripe / GitHub / Shopify already saw a 200 from AnyHook.
// You have up to 5 minutes (Scale plan) to finish.
const result = await agentExecutor.invoke({
input: `Process this event: ${JSON.stringify(event)}`,
});
await persistToDb(result);
await maybeNotify(result);
return new Response("ok", { status: 200 });
}よくある質問
- AnyHook は LangGraph でも使えますか?
- はい。/for/langgraph-webhooks を参照してください。LangGraph のステートフルなワークフローも同じ形をしています。さらにモデル呼び出しを起動する必要がある Webhook コールバックです。
- エージェントが途中で失敗したら?
- ハンドラーから 5xx を返してください。AnyHook はそれをリトライ対象として扱い、設定されたバックオフのスケジュールを適用します。元のイベントは暗号化して保存されているので、バグを直した後にダッシュボードから再送できます。
- Inngest や Trigger.dev と比べてどうですか?
- それらは永続実行のプラットフォームで、それぞれの DSL でワークフローを書くと、そのプラットフォームが実行します。AnyHook はその上流にあり、同期的な Webhook を信頼できる非同期の配信に変えるだけです。ワークフローには引き続き Inngest を使えます。AnyHook はトリガーとなるイベントが確実に Inngest に届くようにするだけです。
変えるのは URL 1 つだけ。LangChain のハンドラーはそのまま。
Free プランには月 10,000 件が含まれます。SDK は不要です。LangChain の Webhook を AnyHook の受信 URL に向けるだけです。