不用为超时焦虑的有状态工作流。
节点恢复运行时,LangGraph Platform 会调用你的端点。这个节点在完成之前,可能还要再发起两次大模型调用。AnyHook 给你留出余量。
时限问题
LangGraph Platform 的 Webhook 回调表示一个暂停的工作流已经可以恢复运行。恢复的节点经常会再触发模型调用,这正是有状态工作流的意义所在。
如果你把 LangGraph 串在 Stripe 或 GitHub 事件后面,就会卡住:上游发送方给你 10 到 20 秒,LangGraph 及其下游调用却需要 60 到 120 秒。AnyHook 把这两条时间线解耦。
60–120 秒
LangGraph 恢复运行的典型耗时
10 秒
GitHub 公布的 Webhook 超时
AES-256-GCM
请求体静态加密
一键
在套餐的重放窗口内重放任意事件
通过 AnyHook 转发 LangGraph 回调
把 LangGraph 配置为在工作流需要回到你的处理程序恢复运行时,调用 AnyHook 的接收 URL。AnyHook 先应答再转发,你按自己的节奏处理。
import { verifyWebhook } from "anyhook-verify";
import { Client } from "@langchain/langgraph-sdk";
const lg = new Client({ apiUrl: process.env.LANGGRAPH_API_URL });
export async function POST(req: Request) {
if (!(await verifyWebhook(req, process.env.ANYHOOK_SIGNING_SECRET!))) {
return new Response("invalid", { status: 401 });
}
const { thread_id, node_id, payload } = await req.json();
// Resume the LangGraph thread. Two more model calls + a vector
// search are common here. Total ~90s.
const result = await lg.runs.create(thread_id, "agent", {
input: payload,
config: { configurable: { resume_from: node_id } },
});
await persistRun(result);
return new Response("ok", { status: 200 });
}团队常问的问题
- AnyHook 会处理 LangGraph 可恢复状态的语义吗?
- AnyHook 是 HTTP 层的基础设施,不理解 LangGraph 的检查点。工作流状态仍由你的处理程序负责。AnyHook 只保存恢复信号,并按套餐的重试计划重试投递给你的处理程序,仍然失败的可以重放。
- 能把一个 LangGraph 回调扇出到多个下游服务吗?
- 可以。在 AnyHook App 上配置多个转发目标,每次投递相互独立:一个成功时,另一个可以还在重试。
- 单次投递尝试最长可以持续多久?
- Free 套餐 60 秒,Pro 套餐 120 秒,Scale 套餐 300 秒(5 分钟)。大多数 LangGraph 恢复回调在 Pro 的时限内都绰绰有余。
只改一个 URL。LangGraph 处理程序不用动。
Free 套餐包含每月 10,000 个事件。无需 SDK:把 LangGraph 指向你的 AnyHook 接收 URL。