使用 Webhook¶
在使用 LangGraph Cloud 时,你可能希望在 API 调用完成后使用 Webhook 来接收更新。Webhook 可用于在一次运行处理完成后触发你服务中的操作。要实现这一点,你需要暴露一个能够接受 POST
请求的端点,并在 API 请求中将此端点作为 webhook
参数传递。
目前,SDK 不提供定义 Webhook 端点的内置支持,但你可以使用 API 请求手动指定它们。
支持的端点¶
以下 API 端点接受 webhook
参数:
操作 | HTTP 方法 | 端点 |
---|---|---|
创建运行 | POST |
/thread/{thread_id}/runs |
创建线程定时任务 | POST |
/thread/{thread_id}/runs/crons |
流式运行 | POST |
/thread/{thread_id}/runs/stream |
等待运行完成 | POST |
/thread/{thread_id}/runs/wait |
创建定时任务 | POST |
/runs/crons |
无状态流式运行 | POST |
/runs/stream |
无状态等待运行完成 | POST |
/runs/wait |
在本指南中,我们将展示如何在流式运行完成后触发一个 Webhook。
设置你的助手和线程¶
在进行 API 调用之前,先设置好你的助手和线程。
from langgraph_sdk import get_client
client = get_client(url=<DEPLOYMENT_URL>)
assistant_id = "agent"
thread = await client.threads.create()
print(thread)
import { Client } from "@langchain/langgraph-sdk";
const client = new Client({ apiUrl: <DEPLOYMENT_URL> });
const assistantID = "agent";
const thread = await client.threads.create();
console.log(thread);
curl --request POST \
--url <DEPLOYMENT_URL>/assistants/search \
--header 'Content-Type: application/json' \
--data '{ "limit": 10, "offset": 0 }' | jq -c 'map(select(.config == null or .config == {})) | .[0]' && \
curl --request POST \
--url <DEPLOYMENT_URL>/threads \
--header 'Content-Type: application/json' \
--data '{}'
示例响应¶
{
"thread_id": "9dde5490-2b67-47c8-aa14-4bfec88af217",
"created_at": "2024-08-30T23:07:38.242730+00:00",
"updated_at": "2024-08-30T23:07:38.242730+00:00",
"metadata": {},
"status": "idle",
"config": {},
"values": null
}
在图运行中使用 Webhook¶
要使用 Webhook,请在 API 请求中指定 webhook
参数。当运行完成时,LangGraph Cloud 会向指定的 Webhook URL 发送一个 POST
请求。
例如,如果你的服务器在 https://my-server.app/my-webhook-endpoint
监听 Webhook 事件,请在请求中包含此 URL:
input = { "messages": [{ "role": "user", "content": "Hello!" }] }
async for chunk in client.runs.stream(
thread_id=thread["thread_id"],
assistant_id=assistant_id,
input=input,
stream_mode="events",
webhook="https://my-server.app/my-webhook-endpoint"
):
pass
const input = { messages: [{ role: "human", content: "Hello!" }] };
const streamResponse = client.runs.stream(
thread["thread_id"],
assistantID,
{
input: input,
webhook: "https://my-server.app/my-webhook-endpoint"
}
);
for await (const chunk of streamResponse) {
// Handle stream output
}
curl --request POST \
--url <DEPLOYMENT_URL>/threads/<THREAD_ID>/runs/stream \
--header 'Content-Type: application/json' \
--data '{
"assistant_id": <ASSISTANT_ID>,
"input": {"messages": [{"role": "user", "content": "Hello!"}]},
"webhook": "https://my-server.app/my-webhook-endpoint"
}'
Webhook 有效负载¶
LangGraph Cloud 以 运行 的格式发送 Webhook 通知。有关详细信息,请参阅 API 参考。请求有效负载在 kwargs
字段中包含运行输入、配置和其他元数据。
保护 Webhook¶
为确保只有经过授权的请求才能访问你的 Webhook 端点,可考虑添加一个安全令牌作为查询参数:
你的服务器在处理请求之前,应提取并验证此令牌。
测试 Webhook¶
你可以使用以下在线服务来测试你的 Webhook:
- Beeceptor – 快速创建一个测试端点并检查传入的 Webhook 有效负载。
- Webhook.site – 实时查看、调试和记录传入的 Webhook 请求。
这些工具可帮助你验证 LangGraph Cloud 是否正确触发 Webhook 并将其发送到你的服务。
通过遵循这些步骤,你可以将 Webhook 集成到你的 LangGraph Cloud 工作流程中,根据已完成的运行自动执行操作。