适用于 1M token 上下文的 Gemini Webhook。

Gemini 的长上下文调用要 30–60 秒。以前要在 Webhook 处理程序里触发一次这样的调用,要么轮询,要么上队列。有了 AnyHook,两样都不需要。

时限问题

Gemini API 按 Standard Webhooks 规范投递 Webhook,失败的投递会以指数退避重试 24 小时,所以慢的处理程序会被一遍又一遍地打。

对 1M token 上下文做一次 Gemini 1.5 Pro 调用要 30 到 60 秒。把它包进 Webhook 处理程序(比如每个 Stripe 事件都对私有语料做一次 RAG),就意味着你没法及时应答。重试越积越多,成本层层叠加。

30–60 秒
Gemini 长上下文调用的耗时
1M
单个 Gemini 上下文的 token 数
24 小时
Gemini 持续重试漏掉的 Webhook 的时长
$0
Free 套餐包含每月 10,000 个事件

在 Webhook 处理程序里跑长上下文 Gemini

AnyHook 先应答再转发。你对完整语料运行 Gemini 调用。不用轮询循环,不用 Redis 队列,也不用 Cloud Tasks。

import { verifyWebhook } from "anyhook-verify";
import { GoogleGenerativeAI } from "@google/generative-ai";

const gemini = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!);

export async function POST(req: Request) {
  if (!(await verifyWebhook(req, process.env.ANYHOOK_SIGNING_SECRET!))) {
    return new Response("invalid", { status: 401 });
  }

  const event = await req.json();

  // Run RAG over the full corpus. 45 seconds. Stripe doesn't care.
  const model = gemini.getGenerativeModel({ model: "gemini-1.5-pro" });
  const result = await model.generateContent([
    fullCorpusFor(tenantOf(event)),
    `Process: ${JSON.stringify(event)}`,
  ]);

  await persistDecision(result.response.text());
  return new Response("ok", { status: 200 });
}

团队常问的问题

AnyHook 支持 Gemini 的 Webhook 签名方案吗?
支持。Gemini 使用 Standard Webhooks 签名方案。把 App 的来源设为 Standard Webhooks,粘贴签名密钥:AnyHook 会在边缘节点验证每次投递,再进行转发。
如果 Gemini 调用触发了限流怎么办?
让处理程序返回 429。AnyHook 会把它视为可重试错误,按指数退避重试,并在控制台里展示整条重试链。等你的配额重置后,可以重放原始事件。
这只适用于 Gemini API 的 Webhook,还是也适用于 Vertex AI?
两者都适用。任何发送 HTTP Webhook 的服务都可以经过 AnyHook。文档中列出的签名方案(包括 Standard Webhooks)会在边缘节点验证;不在其中的发送方按 Generic 来源处理,原始请求头会转发给你自行验证。

只改一个 URL。Gemini 处理程序不用动。

Free 套餐包含每月 10,000 个事件。无需 SDK:把 Gemini 指向你的 AnyHook 接收 URL。