Kaip sukurti nemokamą, serverio nereikalaujantį „Telegram“ dirbtinio intelekto pokalbių robotą

Kaip sukurti nemokamą, serverio nereikalaujantį „Telegram“ dirbtinio intelekto pokalbių robotą

Kūrimui naudosime šiuos įrankius:
 -  „CloudFlare Workers“ AI platformoje esantį „llama-2-7b-chat-int8“ modelį;
 -  „CloudFlare Workers“ aplikaciją;
 -  „Cloudflare KV“ („key-value“) duomenų saugojimo sistemą pokalbių istorijai saugoti.

1. Pirmiausia sukurti „Telegram“ botą galite „Telegram“ aplikacijoje susisiekę su @BotFather botu ir įvykdę komandą /newbot, taip pat sugalvodami roboto pavadinimą.


Sukūrę botą, gausite pranešimą su boto HTTP API raktu. Nusikopijuokite šį raktą ir išsaugokite jį tolimesniam naudojimui. Taip pat matysite savo pokalbių roboto adresą.

2. Prisijungę prie „Cloudflare“ adresu: https://www.cloudflare.com/, turite sukurti „KV“ duomenų saugojimo vietą. Ji būtina norint saugoti pokalbių istoriją.


3. Toliau, „Workers & Pages“ skiltyje, sukurkite naują aplikaciją.


4. Kuriant aplikaciją, galite pasirinkti „LLM App“ šabloną.


5. Sukurkite pavadinimą botui ir išsaugokite https:// adresą, kuris bus naudojamas būsimajam botui pasiekti.


6. Toliau pasirinkite „Configure Worker“.


7. „Settings“ skiltyje pasirinkite „Variables“ ir joje rasite dalį, pavadinimu „KV Namespace Bindings“.


8. Rasite anksčiau sukurtą KV duomenų saugyklą, pavadinkite ją „KV“ ir išsaugokite paspausdami „Deploy“.


9. Toje pačioje „Variables“ skiltyje rasite „Environment Variables“ skiltį, paspauskite „Add Variable“ ir pridėkite „Telegram“ boto HTTP API raktą, gautą 1 žingsnyje. Pavadinkite jį „BOT_TOKEN“ ir išsaugokite.


10. Toliau reikia boto webhook'ą prikabinti prie aplikacijos. Tai galite padaryti atidarę bet kokį terminalo langą ir įvedę šią komandą:

curl -F "url=https://aplikacijos-pavadinimas.subdomenas.workers.dev" https://api.telegram.org/bot<BOT_TOKEN>/setWebhook

Naudojant HTTP raktą, gautą pirmajame žingsnyje, o pilną aplikacijos https:// adresą, kurį gavote penktajame žingsnyje.

11. Atlikus dešimtą žingsnį, grįžkite prie kurtos aplikacijos „Workers & Pages“ skiltyje, pasirinkite „Edit Code“ ir įveskite žemiau nurodytą kodą:

import { Ai } from './vendor/@cloudflare/ai.js';
export default {
  async fetch(request, env) {
    if (request.method !== 'POST') {
      return new Response('Expected POST', { status: 405 });
    }
    let reqBody;
    try {
      reqBody = await request.json();
    } catch (error) {
      return new Response('Bad request', { status: 400 });
    }
    if (!reqBody || !reqBody.message || !reqBody.message.text) {
      return new Response("No message text provided", { status: 400 });
    }

    const { text } = reqBody.message;
    const chatId = reqBody.message.chat.id;
    let history = await env.KV.get(`history_${chatId}`);
    history = history ? JSON.parse(history) : [];
    if (history.length >= 20) { // Pakeiskite skaičių priklausomai nuo to, kokio ilgio istoriją norite saugoti
      history = history.slice(-20);
    }
    history.push({role: 'user', content: text});
    const ai = new Ai(env.AI);
    let aiInput = {
      messages: history.map(msg => ({ role: msg.role, content: msg.content }))
    };
    let aiResponse, responseText;
    try {
      aiResponse = await ai.run('@cf/meta/llama-2-7b-chat-int8', aiInput);
      responseText = aiResponse.response || "Sorry, I couldn't generate a response.";
      if (!responseText) {
        responseText = "Sorry, I couldn't generate a response.";
      }
    } catch (error) {
      return new Response("AI processing failed", { status: 500 });
    }
    history.push({role: 'ai', content: responseText});
    await env.KV.put(`history_${chatId}`, JSON.stringify(history));
    try {
      const telegramResponse = await fetch(`https://api.telegram.org/bot${env.BOT_TOKEN}/sendMessage`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          chat_id: chatId,
          text: responseText
        })
      });
      const telegramResult = await telegramResponse.json();
      return new Response('Message sent to Telegram', { status: 200 });
    } catch (error) {
      return new Response('Fetch failed', { status: 500 });
    }
  }
};

Įvedę šį kodą ir paspaudę „Deploy“, jūsų pokalbių robotas turėtų pradėti veikti.

11. Grįžkite į „Telegram“ aplikaciją, eikite į pirmame žingsnyje nurodytą savo sukurto roboto adresą ir išbandykite savo pokalbių robotą.