Hub 文件

Webhook 指南:構建一個基於 BLOOM 的討論機器人

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Webhook 指南:構建一個基於 BLOOM 的討論機器人

Webhooks 現已公開!

這是一個關於如何使用 Hugging Face Webhooks 構建一個機器人以回覆 Hub 上討論評論的簡短指南。該機器人將使用免費的推理 API,並透過 BLOOM(一個多語言語言模型)生成回覆。

在您的使用者資料中建立您的 Webhook

首先,讓我們從您的設定中建立一個 Webhook。

  • 輸入幾個您的 Webhook 將監聽的目標儲存庫。
  • 您現在可以放置一個虛擬的 Webhook URL,但是定義您的 Webhook 將允許您檢視將傳送給它的事件(並且您可以重播它們,這對於除錯很有用)。
  • 輸入一個金鑰,因為它會更安全。
  • 訂閱社群(PR 和討論)事件,因為我們正在構建一個討論機器人。

您的 Webhook 將如下所示

webhook-creation

建立一個新的機器人使用者資料

在本指南中,我們建立了一個獨立的使用者帳戶來託管 Space 併發布評論

discussion-bot-profile

當建立與 Hub 上其他使用者互動的機器人時,我們要求您明確將該帳戶標記為“機器人”(請參閱個人資料截圖)。

建立一個對您的 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”。

embed this Space direct URL

更新您的 Webhook 以向該 URL 傳送請求

webhook settings

結果

discussion-result

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.