de Paul Pinard

Faceți cunoștință cu Sato Cryptobot, care este capabil să preia orice preț de criptomonedă dintr-un API extern!

Cum sa construiesti un criptobot in Python si sa il

Chatbot-urile au un potențial incredibil. Cu toate acestea, pentru ca roboții să fie eficienți, trebuie să integreze și să facă schimb de date cu serviciile și procesele existente.

Capacitatea de a prelua date din API-ul extern permite un caz de utilizare mai complex decât o logică simplă de întrebări și răspunsuri. Mai mult, această abilitate combinată cu NLP oferă și mai multe oportunități.

De exemplu, Sato – criptobotul pe care îl vom construi astăzi – este capabil să recunoască toate criptomonedele, chiar și cele care nici măcar nu sunt listate încă. Nu va trebui să fac nimic pentru ca el să poată procesa interogări cu privire la criptare care apar chiar și peste ani, pentru că Sato, în adâncime, a înțeles ce este un simbol al criptomonedei (după ce a fost hrănit cu mii dintre ele).

Ce construim astăzi?

Până la sfârșitul acestui tutorial, vom avea un bot capabil să preia date dintr-un API terță parte, în funcție de ceea ce introduc utilizatorii noștri și să le răspundem cu valoarea preluată. Iată rezultatul final al ceea ce vom construi astăzi: un cryptobot cunoscut și sub numele de chatbot capabil să aducă orice preț de criptomonedă.

Cum sa construiesti un criptobot in Python si sa il
Ce veți avea până la sfârșitul acestui tutorial

Într-o grabă? Iată tot ce aveți nevoie pentru a vă construi propriul:

Trebuie să-l vezi ca să-l crezi? Este înțelept! Clic aici!

Sau dacă preferați să înțelegeți cum a fost realizat, continuați cu tutorialul.

1. Construiți baza chatbotului: alegeți-vă calea

Scopul de astăzi este de a construi un robot capabil să recunoască o întrebare despre prețurile oricărei criptomonede. Lasă-ți imaginația să curgă, ar putea fi cu adevărat orice lucru care implică date disponibile pe API-urile terților.

Înainte să ne scufundăm în tutorial, permiteți-mi să vă ofer câteva informații despre cum funcționează Sato.

Faceți cunoștință cu Sato, criptobotul

Sato este un robot creat pentru a răspunde la întrebări de bază despre criptomonede și pentru a obține prețurile acestora. Iată o prezentare generală a ceea ce poate face:

  1. Preluarea prețurilor criptomonedelor (ceea ce vom construi astăzi): Sato recunoaște simbolul criptomonedelor („ETH”, „BTC”) și preia prețul lor pe API criptocompare pentru a returna în cele din urmă valoarea BTC și USD utilizatorului.
  2. Răspundeți la întrebările utilizatorilor despre portofele – portofele online, portofele de schimb, portofele reci și portofele hardware.
  3. Adresați întrebări despre cheile private și publice, precum și despre securitatea criptomonedelor.
  4. Prezentați pe scurt principalele criptomonede, în prezent BTC, ETH, BCH și LTC.

În interiorul lui Sato

Astăzi, ne vom concentra pe abilitatea de a obține prețurile criptografice, deoarece necesită un apel API extern. În esență, Sato are nevoie de trei lucruri pentru a putea detecta o întrebare despre prețul cripto și a returna valoarea cerută:

În primul rând, are nevoie de o intenție (@crypto_price) cu expresii și criptomonede diverse menționate, astfel încât să poată recunoaște în mod eficient aceste întrebări. Iată câteva dintre expresiile folosite pentru a defini intenția @crypto_price:

1611535809 533 Cum sa construiesti un criptobot in Python si sa il
Un eșantion al expresiilor utilizate pentru a defini intenția @crypto_price

În al doilea rând, pentru ca Sato să poată recunoaște toate criptomonedele, va avea nevoie de cea mai mare listă pe care o puteți găsi. Am găsit peste 1200 pe CoinMarketCap, ceea ce este suficient de bun pentru început. Am creat o gazetă a numelor criptografice pentru a-i îmbunătăți înțelegerea.

În al treilea rând, va trebui să construim o abilitate care se declanșează atunci când este recunoscută intenția @ask_price sau entitatea #crypto_name:

1611535810 418 Cum sa construiesti un criptobot in Python si sa il
Sato – declanșatoare de abilități Cryptobot / crypto_main

De asemenea, puteți adăuga #crypto_name ca cerințe, pentru a vă asigura că niciun API apelat nu este lansat fără parametri:

1611535810 486 Cum sa construiesti un criptobot in Python si sa il
Sato – Cerințe de abilități Cryptobot / crypto_main

Această abilitate trebuie să vă apeleze și webhook-ul pe care îl vom configura mai jos:

1611535810 613 Cum sa construiesti un criptobot in Python si sa il
Sato – acțiuni de îndemânare Cryptobot / crypto_main

Nu uitați să adăugați o resetare a memoriei după declanșarea webhook, este necesar să curățați memoria după fiecare răspuns.

În cele din urmă, vom testa botul nostru direct în Messenger, deci va trebui să creați o pagină și o aplicație și să le conectați. Totul este documentat în CONNECT filă și în tutorial de început.

Pentru a-l păstra concis, acest tutorial nu va detalia detaliile despre crearea unui bot. Vom începe deja de la un bot funcțional.

Pentru a mă întâlni acolo, aveți două opțiuni:

  • Opțiunea A: construiți-vă propriul bot (care nu trebuie să fie criptobot) urmând tutorialul de început și creând un cont pe SAP Conversational AI.
  • Opțiunea B: furca Sato și începe de aici. De aceea, SAP Conversational AI este o platformă de chatbot colaborativă. Funcționează cam ca GitHub!
1611535811 293 Cum sa construiesti un criptobot in Python si sa il
Crearea unui bot pe SAP Conversational AI

2. Codul și cerințele de bază ale serverului

Din moment ce dorim să interacționăm cu robotul nostru, vom avea nevoie de un server pentru a putea primi rezultatele NLP făcute de SAP Conversational AI și pentru a trimite răspunsurile noastre înapoi.

Pe constructor de bot, du-te la CODE pentru a găsi un exemplu de cod de bază necesar pentru a porni API-ul. Dăm exemple în Node.JS, PHP, Python și Ruby. Acest tutorial va fi numai Python.

Iată codul de bază pentru Python:

from flask import Flask, request, jsonify import json app = Flask(__name__) port="5000" @app.route('/', methods=['POST']) def index():   print(json.loads(request.get_data()))   return jsonify(     status=200,     replies=[{       'type': 'text',       'content': 'Roger that',     }]  )  @app.route('/errors', methods=['POST']) def errors():   print(json.loads(request.get_data()))   return jsonify(status=200)  app.run(port=port)

Luați ceva timp să vă uitați la cod pentru a înțelege mai bine ce vom face: ne vom baza pe acest cod în timpul acestui tutorial. Îl puteți salva în editorul de text preferat pentru moment.

Cerințe

După cum puteți vedea, scriptul serverului utilizează Flask ca cadru web, așa că vom avea nevoie de el.

Pentru apelul API, vom folosi, de asemenea Cereri. Să mergem mai departe și să le instalăm pe ambele:

pip install Flaskpip install requests

3. Testați serverul: NGROK

Acum că avem serverul de bază, să-l facem să ruleze și să-l testăm. Ne va permite să fim mai incrementali în proces, astfel încât depanarea (dacă există) este simplificată.

Pentru a expune serverul nostru local la internet, vom avea nevoie de ngrok.

Notă: Dacă utilizați Windows ca mine, există un manager de pachete minunat, Ciocolată care funcționează cam ca apt-get pe UNIX. Cu acesta, veți putea instala ngrok într-o singură linie choco install ngrok_portable. Mai mult, Chocolatey adaugă ngrok la PATH, permițându-vă să porniți ngrok de la orice terminal, pur și simplu tastând ngrok.

Acum este momentul să pornim serverul și să-l testăm, aceasta implică:

  1. Setați un declanșator webhook în botul dvs. (detaliat la pasul 1)
  2. Rulați scriptul python
  3. Expuneți portul 5000 la internet cu ngrok: ngrok http 5000
  4. Copiați formularul URL de redirecționare ngrok și treceți-l ca adresa URL de bază a botului dvs. în SAP Conversational AI

4. Pregătirea apelului API extern

E timpul să începem să construim! Să aruncăm o privire la apelul API pe care îl vom face pentru a obține prețul oricărei criptomonede. Există mai multe API-uri disponibile în acest scop, așa că am continuat și am ales una: API Cryptocompare.

API Cryptocompare oferă mii de posibilități, dar pentru simplitate, vom rămâne cu elementele de bază. Vrem prețul criptelor potrivite în BTC, USD și EUR.

Iată cum este structurat apelul (aici pentru ETH):

https://min-api.cryptocompare.com/data/price?fsym="ETH"&tsyms=BTC,USD,EUR"

Aveți doi parametri:

  • fsym: simbolul criptomonedei, aici va trebui să preluăm numele crypto_name recunoscut în entitatea #crypto_name.
  • tsyms: moneda în care va fi returnat prețul. Am ales BTC, USD și EUR aici.

Deci, în cazul nostru, va trebui doar să adaptăm fsym parametru pentru criptocurrency recunoscut, în timp ce restul apelului rămâne același.

5. Adaptați apelul API pentru a include simbolul recunoscut în intrarea utilizatorului

Acum, că știm cum să preluăm prețurile, trebuie să ne întoarcem la codul serverului nostru și să îl actualizăm, astfel încât să poată:

  • Cunoașteți #crypto_name recunoscut de SAP Conversational AI.
  • Efectuați un apel API către Cryptocompare folosind #crypto_name.

Să începem!

Pasul 1: Găsirea datelor noastre în SAP Conversational AI JSON

Să aruncăm o privire asupra datelor returnate de SAP Conversational AI pe o intrare de utilizator. Pentru a face acest lucru, faceți clic pe CHAT WITH YOUR BOT butonul prezent pe toate paginile, în colțul din dreapta jos. Apoi, puteți comuta între conversație și vizualizarea JSON făcând clic pe cercul portocaliu de informații, după cum urmează:

1611535811 293 Cum sa construiesti un criptobot in Python si sa il
Verificați JSON-ul conversației.

Aici, simbolul nostru este accesibil cu ['conversation']['memory']['crypto']['raw']. Deoarece valoarea și brutul și identice în acest caz, puteți utiliza oricare.

Pe serverul nostru, JSON returnat de panoul de testare al site-ului web este încapsulat în data dicţionar (vezi codul serverului). Deci, avem nevoie de un pas suplimentar pentru al prelua pe serverul nostru:

# FETCH THE CRYPTO NAMEcrypto_name = data['conversation']['memory']['crypto']['value']

Pasul 2: efectuați un apel API utilizând entitatea recunoscută

import requestsr = requests.get("https://min-api.cryptocompare.com/data/price?fsym="+crypto_name+"&tsyms=BTC,USD,EUR")

Continuați și imprimați-l, dar s-ar putea să fiți dezamăgit:

1611535811 686 Cum sa construiesti un criptobot in Python si sa il

Într-adevăr, dacă doriți să obțineți valorile returnate de apel, trebuie să imprimați r.json(). Vestea bună este că JSON returnat de Cryptocompare este într-adevăr cât de simplu ar putea fi:

1611535812 729 Cum sa construiesti un criptobot in Python si sa il
Cryptocompare JSON

Grozav! Acum, trebuie doar să ne dăm seama de un ultim pas: returnarea prețurilor către utilizator.

Pasul 3: returnarea datelor preluate utilizatorului

Acum, este timpul să finalizăm actualizarea codului serverului nostru de bază: trebuie să modificăm răspunsurile returnate pentru a include datele noastre recent preluate. Pentru a face acest lucru, vom edita mesajul returnat de codul serverului nostru:

return jsonify(     status=200,     replies=[{       'type': 'text',       'content': 'Roger that',     }],

Vom edita numai răspunsurile, pentru a include prețurile pe care le-am preluat:

replies=[{      'type': 'text',      'content': 'The price of %s is %f BTC and %f USD' % (crypto_name, r.json()['BTC'], r.json()['USD'])    }],

Deoarece răspunsul este un șir, trebuie să folosim operatorul modulo (%) pentru a include prețurile noastre în șir. Aici, primul% s îi spune lui Python să caute un șir în timp ce următorii doi% f indică plutirea.

Serverul nostru actualizat este acum terminat, iată întregul cod:

from flask import Flask, request, jsonifyimport jsonimport requestsapp = Flask(__name__)port="5000"@app.route('/', methods=['POST'])def index():  data = json.loads(request.get_data())  # FETCH THE CRYPTO NAME  crypto_name = data['conversation']['memory']['crypto']['raw']  # FETCH BTC/USD/EUR PRICES  r = requests.get("https://min-api.cryptocompare.com/data/price?fsym="+crypto_name+"&tsyms=BTC,USD,EUR")  return jsonify(    status=200,    replies=[{      'type': 'text',      'content': 'The price of %s is %f BTC and %f USD' % (crypto_name, r.json()['BTC'], r.json()['USD'])    }]  )@app.route('/errors', methods=['POST'])def errors():  print(json.loads(request.get_data()))  return jsonify(status=200)app.run(port=port)

Cu noul nostru server finalizat, avem acum toate piesele puzzle-ului nostru. Să-l montăm:

  1. Rulați scriptul Python,
  2. Expuneți portul 5000 la internet cu ngrok: ngrok http 5000,
  3. Copiați formularul URL de redirecționare ngrok și treceți-l ca adresa URL de bază a botului dvs. în SAP Conversational AI

Acum, că aveți elementele de bază pentru a construi un bot capabil să preia date de la terți, ce va fi? Ne arăți!

PS: Deoarece acest tutorial folosește ngrok, computerul trebuie să fie pornit și ngrok să ruleze pentru ca botul dvs. să funcționeze.

Publicat inițial la Blogul SAP Conversational AI.