Hub documentation
Webhook kılavuzu: LLM yanıtlarıyla bir Tartışma botu oluşturma
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:

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:

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-botiç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.

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

Sonuç
