Hub documentation

Webhook kılavuzu: LLM yanıtlarıyla bir Tartışma botu oluşturma

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Webhook kılavuzu: LLM yanıtlarıyla bir Tartışma botu oluşturma

Hugging Face Webhooks kullanarak, Hub'daki Discussion yorumlarına, Hugging Face Inference Providers üzerinden seçtiğiniz bir LLM tarafından üretilen bir yanıtla cevap veren bir bot oluşturmak için kısa bir rehber:

Kullanıcı profilinizde Webhook'unuzu oluşturun

Öncelikle ayarlarınızdan bir Webhook oluşturalım.

  • Webhook'ünüzün dinleyeceği birkaç hedef depo girin.
  • Şimdilik sahte bir Webhook URL'si girebilirsiniz, ancak webhook'unuzu tanımlarsanız, ona gönderilecek olayları inceleyebilir (ve hata ayıklama için faydalı olacak şekilde bunları yeniden oynatabilir)siniz.
  • Daha güvenli olması için bir gizli anahtar girin.
  • Bir Tartışma botu oluşturduğumuz için Topluluk (PR & tartışmalar) etkinliklerine abone olun.

Webhook'ünüz şu şekilde görünecektir:

webhook-creation

Yeni bir Bot kullanıcı profili oluşturun

Bu kılavuzda, bir Space barındırmak ve yorum yapmak için ayrı bir kullanıcı hesabı oluşturuyoruz:

discussion-bot-profile

Hub'da diğer kullanıcılarla etkileşime girecek bir bot oluştururken, hesabın bir “Bot” olarak açıkça etiketlenmesini (profil ekran görüntüsüne bakın) rica ederiz.

Webhook'unuza yanıt verecek bir Space oluşturun

Üçüncü adım, aslında Webhook olaylarını dinlemektir.

Bunu yapmak için kolay bir yol, bir Space kullanmaktır. Biz, oluşturduğumuz kullanıcı hesabını kullanıyoruz, ancak isterseniz ana kullanıcı hesabınızdan da yapabilirsiniz.

Space'in kodu burada.

Bunu NodeJS ve TypeScript kullanarak uyguladık, ancak herhangi bir dil veya framework aynı derecede iyi çalışır. Docker Spaces hakkında daha fazla bilgiyi burada okuyabilirsiniz.

Ana server.ts dosyası burada

Bu dosyada neler olduğunu inceleyelim:

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" });
	}
	...

Burada, / adresine yapılan POST isteklerini dinler ve ardından X-Webhook-Secret başlığının daha önce tanımladığımız gizli anahtarla eşit olup olmadığını kontrol ederiz (bunu doğrulayabilmek için Space ayarlarınızda WEBHOOK_SECRET gizli anahtarını da tanımlamanız gerekir).

	const event = req.body.event;
	if (
		event.action === "create" &&
		event.scope === "discussion.comment" &&
		req.body.comment.content.includes(BOT_USERNAME)
	) {
		...

Etkinliğin yükü (payload) JSON olarak kodlanır. Burada, Webhook'umuzun yalnızca şu durumlarda çalıştırılacağını belirtiriz:

  • olay bir tartışma yorumuyla ilgilidir
  • olay bir oluşturma olayıdır, yani yeni bir yorum gönderilmiştir
  • yorum içeriği @discussion-bot içeriyor, yani botumuz bir yorumda anıldı.

Bu durumda, bir sonraki adıma geçeceğiz:

	const CHAT_API_URL =
		"https://router.huggingface.co/v1/chat/completions";
	const SYSTEM_PROMPT = `You are a helpful bot that replies to discussions about machine learning. Keep your responses concise and friendly.`;

	const response = await fetch(CHAT_API_URL, {
		method: "POST",
		headers: {
			"Authorization": `Bearer ${process.env.HF_TOKEN}`,
			"Content-Type": "application/json",
		},
		body: JSON.stringify({
			model: "moonshotai/Kimi-K2.6",
			messages: [
				{ role: "system", content: SYSTEM_PROMPT },
				{ role: "user", content: req.body.comment.content },
			],
			max_tokens: 500,
		}),
	});
	if (response.ok) {
		const output = await response.json();
		const continuationText = output.choices[0].message.content;
		...

En heyecan verici kısım şu: Hugging Face Inference Providers kullanarak bir sistem istemi ve kullanıcının yorumuyla açık ağırlıklı bir modeli (moonshotai/Kimi-K2.6) çağırıyoruz. Model bir yanıt üretiyor ve biz bunu choices[0].message.content içinden çıkarıyoruz.

mevcut modeller listesi nden herhangi bir model seçebilirsiniz — yalnızca model alanını değiştirin.

Son olarak, bunu aynı tartışma başlığında bir yanıt olarak paylaşacağız:

	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'ünüzü, olayları Space'inize göndermesi için yapılandırın

Son olarak, Webhook'unuzu Space'inize POST istekleri gönderecek şekilde yapılandırmanız gerekecektir.

Önce bağlamsal menüden Space’imizin “direct URL”ini alalım. “Embed this Space” seçeneğine tıklayın ve “Direct URL”i kopyalayın.

embed this Space direct URL

Webhook'unuzu o URL'ye istek göndermek üzere güncelleyin:

webhook settings

Sonuç

discussion-result

Update on GitHub