Hub 文档
Webhook 指南:构建一个基于 BLOOM 的讨论机器人
并获得增强的文档体验
开始使用
Webhook 指南:构建一个基于 BLOOM 的讨论机器人
Webhooks 现已公开!
这是一个关于如何使用 Hugging Face Webhooks 构建一个机器人以回复 Hub 上讨论评论的简短指南。该机器人将使用免费的推理 API,并通过 BLOOM(一个多语言语言模型)生成回复。
在您的用户资料中创建您的 Webhook
首先,让我们从您的设置中创建一个 Webhook。
- 输入几个您的 Webhook 将监听的目标存储库。
- 您现在可以放置一个虚拟的 Webhook URL,但是定义您的 Webhook 将允许您查看将发送给它的事件(并且您可以重播它们,这对于调试很有用)。
- 输入一个密钥,因为它会更安全。
- 订阅社区(PR 和讨论)事件,因为我们正在构建一个讨论机器人。
您的 Webhook 将如下所示
创建一个新的机器人用户资料
在本指南中,我们创建了一个独立的用户帐户来托管 Space 并发布评论
创建一个对您的 Webhook 作出反应的 Space
第三步是实际监听 Webhook 事件。
一个简单的方法是为此使用 Space。我们使用我们创建的用户帐户,但如果您愿意,也可以从您的主用户帐户执行此操作。
Space 的代码在这里。
我们使用 NodeJS 和 Typescript 来实现它,但任何语言或框架都可以同样适用。在此处阅读有关 Docker Spaces 的更多信息:这里。
主要的 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 编码。在这里,我们指定仅在以下情况下运行 Webhook:
- 事件与讨论评论相关
- 事件是创建事件,即发布了新评论
- 评论内容包含
@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 的“直接 URL”。单击“嵌入此 Space”并复制“直接 URL”。
更新您的 Webhook 以向该 URL 发送请求