Webhook 指南:基于 BLOOM 构建讨论机器人
提示
Webhook 现已对所有用户开放!
本指南演示如何使用 Hugging Face Webhook 构建一个机器人。当 Hub 的讨论中有人发表评论时,机器人会调用 BLOOM(多语言语言模型)的免费推理 API,自动生成回复。
在个人资料中创建 Webhook
首先,在Webhook 设置页面创建一个 Webhook。
- 输入若干目标仓库,Webhook 将监听这些仓库。
- 先填一个占位的目标 URL;这样可以查看将发 送的事件,并可重放(调试非常有用)。
- 设置密钥以增强安全性。
- 订阅社区事件(PR 与讨论),因为我们要构建讨论机器人。
Webhook 设置如下所示:

创建新的“Bot”用户
本示例中,我们创建一个独立的用户账号,既用于托管 Space,也用于发布评论:

提示
如果机器人要在 Hub 上与其他用户交互,请清晰地将账号标注为 “Bot”(见上图)。
创建响 应 Webhook 的 Space
第三步是监听 Webhook 事件。
最简单的方式是使用 Space。我们使用刚创建的机器人账号,你也可以使用主账号。
Space 代码位于这里。
我们用 NodeJS 与 TypeScript 实现,但你也可以使用任意语言或框架。更多 Docker Space 信息请阅读文档。
主要的 server.ts 文件在这里
我们逐段说明此文件的运行流程:
app.post("/", async (req, res) => {
if (req.header("X-Webhook-Secret") !== process.env.WEBHOOK_SECRET) {
console.error("incorrect secret");
return res.status(400).json({ error: "incorrect secret" });
}
...
此处监听指向 / 的 POST 请求,并检查 X-Webhook-Secret 头是否与之前设置的密钥一致(需在 Space 设置中配置 WEBHOOK_SECRET)。
const event = req.body.event;
if (
event.action === "create" &&
event.scope === "discussion.comment" &&
req.body.comment.content.includes(BOT_USERNAME)
) {
...
事件负载为 JSON。我们指定只在以下情况触发机器人:
- 事件为讨论评论
- 动作为“创建”,即新增评论
- 评论内容包含
@discussion-bot,即机器人被提及
满足条件后进入下一步:
const INFERENCE_URL =
"https://api-inference.huggingface.co/models/bigscience/bloom";
const PROMPT = `Pretend that you are a bot that replies to discussions about machine learning, and reply to the following comment:\n`;
const response = await fetch(INFERENCE_URL, {
method: "POST",
body: JSON.stringify({ inputs: PROMPT + req.body.comment.content }),
});
if (response.ok) {
const output = await response.json();
const continuationText = output[0].generated_text.replace(
PROMPT + req.body.comment.content,
""
);
...
这是最有趣的部分:我们向 BLOOM 的推理 API 发起调用,传入 PROMPT,得到模型生成的续写文本。
最后,将生成的内容作为回复发布到同一讨论中:
const commentUrl = req.body.discussion.url.api + "/comment";
const commentApiResponse = await fetch(commentUrl, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HF_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ comment: continuationText }),
});
const apiOutput = await commentApiResponse.json();
将 Webhook 与 Space 对接
最后,需要将 Webhook 的 POST 请求指向你的 Space。
先在 Space 的上下文菜单中获取 “Direct URL”。点击 “Embed this Space”,复制 “Direct URL”。

将 Webhook 的目标 URL 更新为该地址:

效果
