Napište si robota za 5 minut. Bude odpovídat na Twitteru

Představte si budoucnost, ve které vám domácí robot načepuje pivo a uvaří večeři. Dnes začneme tím, že si napíšeme robota, který za nás bude odpovídat na Twitteru.

Jednou z hlavních událostí konce minulého týdne bylo bezesporu formální pokoření Turingova testu. Program Eugene, který komunikoval s porotci a snažil se je přesvědčit, že je ve skutečnosti člověk, je už dnes volně k dispozici a může si jej vyzkoušet každý z vás.

Formální překonání Turinga je teprve začátek

Pokud ale očekáváte software z konce 21. století, máte příliš velké oči. Turingův test je starý 65 let a na „inteligentní software“ kladl ještě trošku jiné požadavky než dnešní doba zhýčkaná hollywoodskými sci-fi trháky. Turingovým testem jednoduše projde každý chatbot, který dosáhne alespoň 30% úspěšnosti – tedy přesvědčí soudce alespoň v necelé 1/3 případů o tom, že komunikují s člověkem.

882041548 360161555
Na tuto otázku neznám jednoznačnou odpověď ani já, přestože jsem člověk. Problém tedy nespočívá v tom, že Eugene nezná odpověď – to je pochopitelné, ale především v tom, že to jeho „nevím“ zní příliš strojeně, příliš uměle.

Možná vás napadne, že to je přeci málo, nicméně přesto všechno doposud žádný jiný program test nepokořil. Eugene je opravdu první, i když si budete možná myslet, že je vlastně hloupý. Ano, k dokonalé mluvě má opravdu daleko, ale na software, který dosáhne třebas 95% úspěšnosti, si budeme muset počkat možná i několik dalších desítek let. Počítačový pokrok sice roste prakticky geometrickou řadou – ať už si pod ním představíte surový matematický výkon, nebo miniaturizaci, ale to nestačí, počítač samotný je totiž pouze polotovar, který teprve člověk dokáže skrze jeho software proměnit v dokonalý stroj. Teoretický a praktický výzkum počítačové inteligence je přitom stále na počátku, i když se jeho stavební kameny včetně principů neuronových sítí už běžně používají.

Vytvořte si vlastního hloupého Eugena za pět minut

Zpět ale k jádru dnešního článku. Eugene jistě opět probudil zájem o všemožné chatboty, sám byl totiž několik dnů zcela přetížený. Každý si chtěl povídat.

Chatboty patří k těm nejstarším typům počítačových zábavných programů, protože jediné, co potřebují, je hloupá textová konzole. Proto tento typ her slavil úspěch v dobách DOSových i ještě straších.

Vytvořit si vlastního chatovacího robota – takového malého a nesrovnatelně hloupějšího Eugena – je přitom hračka. Jistě, mohli byste napsat nějaký laciný PHP skript a umístit jej kamsi na webový hosting, jenže my se dnes podíváme na něco chytřejšího. Přesně pro tento typ experimentování se totiž hodí Google Apps Script, o kterém jsme na Živě.cz už mnohokrát psali jako o ideálním prostředí pro testování drobných domácích programů a samostudium.

O veškerou práci se postará Google Apps Script

Apps Script má jednu ohromnou výhodu. Jedná se o Javascript, který se spouští na serverech Googlu a je součástí úložiště Drive. To znamená, že vás nestojí ani korunu. A ještě jednu věc Apps Script dokáže – umí se sám periodicky spouštět třeba každou minutu, čili zvládne i práci jednoduché služby, která kdesi v datovém centru přežvykuje bajty, i když zrovna spíte a máte vypnutý počítač.

Jedním ze specialistů na Apps Script je Amit Agarwal z webu Labnol.org, který udržuje sbírku zajímavých programů napsaných pro toto prostředí. Aktuálně jich na seznamu najdete 45, přičemž je můžete zkopírovat do svého úložiště, prohlížet kód a především spouštět.

Chatbot, který odpovídá na vašem Twitteru

V souvislosti s Eugenem mě na seznamu zaujal návod, jak si během pěti minut spustit vlastní Siri. Jedná se vlastně o skript, který se bude spouštět každou minutu a bude kontrolovat tweety, které chodí na určitý twitterový účet. Program poté zprávičku přepošle pomocí API na znalostní databázi WolframAlpha a na Twitteru publikuje odpověď.

Ano, i něco takového můžete napsat s pomocí Javascriptu v bezplatném prostředí od Googlu a za provoz tedy neutratíte ani korunu.

Skript dodnes funguje – asistenta najdete na Twitteru pod jménem @DearAssistent. Stačí mu položit anglický dotaz, třeba jaké je počasí v New Yorku, a nejspíše se dočkáte odpovědi.

Stavíme robota krok za krokem

Chtěl jsem si vyzkoušet, jestli spustím podobného asistenta na Twitteru i já, ale WolframAlpha bohužel nenabízí bezplatné API pro každého. To ale vlastně vůbec nevadí, můj chatbot totiž může být i úplně pitomý. Jde spíše o ukázku toho, jak snadno něco podobného spustíte a „inteligenci“ robota můžete později postupně rozšiřovat.

Čili co k tomu budete potřebovat? Samozřejmě úložiště Google Drive a Twitter.

Začněme na Twitteru. Abyste mohli používat jeho API a z Apps Scriptu zpracovávat tweety, potřebujete zaregistrovat vlastní aplikaci na této adrese.  

Název aplikace a její popis je na vás, důležitá je ale kolonka Callback URL, kam je třeba zadat adresu https://spreadsheets.google.com/macros.

652366331
Vytvoření aplikace na straně Twitteru

Po potvrzení podmínek přejděte na kartu Permissions zvolte možnost Read and Write, poněvadž chcete, aby měl skript právo tweety nejen číst, ale i sám vytvářet.

819233424
Náš chatbot musí mít právo Twitter nejen číst, ale také na něj psát

Nakonec klepněte na tlačítko vpravo nahoře Test OAuth a poznamenejte si hodnoty Consumer key a Consumer secret, které budete potřebovat v aplikaci Apps Script.

582500119
Získání klíčových hodnot, které potřebujeme pro spojení s Twitterem

Tak, to je ze strany Twitteru vše a teď hurá na Javascript. Pokud se budete chtít rýpat v kódu původního znalostního chatbota od Amita, můžete si uložit jeho kopii. Moji upravenou a jednodušší verzi s českým komentářem zkopírujete klepnutím zde.

Jak už jsem napsal dříve, nepodporuje dotazování na WolframAlpha, poněvadž bezplatný přístup k API nedostane každý zájemce jen tak na počkání.

557819471
Webový editor aplikací napsaných pomocí Apps Script

Upravené verzi se nyní budu blíže věnovat a vysvětlím, jak to vlastně celé funguje.  Po zkopírování a otevření skriptu ve webovém editoru přejděte na řádek číslo 80, kde začíná kód instalační funkce INICIALIZOVAT_A_SPUSTIT. Podstatné je to, že právě sem musíte zadat hodnoty Consumer key, Consumer secret a twitterovou přezdívku účtu, aby skript věděl, jak se má skrze API připojit k mikrobologovací síti.

848875744
Nastavení propojovacích hodnot na Twitter

Stejná funkce o něco níže v kódu nastaví trigger, tedy časový spouštěč, na jednu minutu a další funkci jménem zkontrolovatTwitter. Jinými slovy, instalační funkce se postará o to, aby Google každou minutu pomocí API vyhledal poslední tweety, které dorazily na předdefinovaný účet a mohl na ně odpovědět.

Aby se toto vše stalo, je třeba ručně spustit funkci INICIALIZOVAT_A_SPUSTIT výběrem z nabídky Spustit v hlavní liště. Při první inicializaci si po vás Google vyžádá další práva. Na začátku pak musíte jednorázově autentizovat ještě Twitter. Z nabídky tedy vyberte funkci zkontrolovatTwitter a spusťte ji. Skript se pokusí spojit s Twitterem, vyskočí na vás další okénko prohlížeče s klasickým dialogem povolení přístupu k Twitteru naší aplikací a instalace je hotová. Teď už skript může pracovat opravdu zcela autonomně. 

840616722
Základní instalace a inicializace chatbota spuštěním vybraných funkcí

Pokud byste jej chtěli zastavit, stačí skript uložený na Drivu jako běžný soubor opět otevřít a tentokrát ručně spustit funkci ZASTAVIT, která smaže dříve nastavený spouštěč a Google již napříště nic periodicky spouštět nebude.

Tyto triggery/spouštěče můžete konfigurovat i v grafickém editoru, který otevřete klepnutím na nabídku Zdroje – Spouštěče aktuálního projektu, nicméně vzhledem k tomu, že my jsme je vytvořili přímo v kódu, vaše ruční nastavení by opět přepsalo nové zavolání funkce INCIALIZOVAT_A_SPUSTIT.  

659025088
Spouštěč nemusíte vytvářet přímo v kódu, ale i v grafickém editoru

Pro začátek velmi jednoduchá logika

Tolik tedy k běhu aplikace a nyní se konečně pojďme podívat na samotný mozek toho všeho, tedy automatické odpovídání. Pro přehlednost jsem jej umístil hned na začátek kódu do funkce vytvoritOdpoved(q), která má vstupní parametr q, který obsahuje samotný text tweetu.

115676335
Naše klíčová funkce pro vytváření jednoduchých odpovědí, které se budou posílat na Twitter

Jelikož jsem chatbota spustil přímo na svém vlastním Twitteru @pesvklobouku, pochopitelně nechci, aby reagoval na každý tweet od jiného uživatele.

Můj robot tedy bude reagovat jen na tweety, které mají na začátku text „Q:“ – Q jako question, tedy otázka.

Robot tedy nebude reagovat na tweet:

@pesvklobouku Kolik je hodin?

Ale zareaguje na:

@pesvklobouku Q: Kolik je hodin?

Protože se dnes pokouším čtenářům přiblížit především to, jak snadné je podobného robota v Apps Scriptu vytvořit a to zcela zdarma a bez klasického hostingu třeba s PHP, příliš jsem se nezabýval jeho inteligencí. Ta je pochopitelně spíše tragikomická.

Letmým pohledem do dalšího kódu funkce vytvoritOdpoved zjistíte, že chatbot reaguje smysluplně pouze v případě, kdy text tweetu obsahuje:

  • Výraz „hodin“ – pak do odpovědi napíše aktuální čas
  • Výraz „se máš“ – pak odpoví „Mám se dobře“
  • Výrazy „let“, „starý“, nebo „roků“ – pak odpoví, že se narodil v červnu

Pakliže tweet s dotazem nic takového neobsahuje, nezbývá než doufat v náhodu, na což ostatně spoléhá každý chatbot, a zvolit některou z náhodných odpovědí, jejichž seznam najdete v další funkci nahodnaOdpoved.

503992699
Pokud si robot nebude vědět rady, vybere náhodnou odpověď z tohoto seznamu

Jestliže jsou náhodné odpovědi dobře zkonstruované, mohou odvést docela dobrou práci. Pokud totiž chatbot odpoví na otázku další univerzální otázkou, může celkem obstojně skrýt fakt, že vůbec netuší, na co se ho vlastně ptáte. I naprosto hloupý robot bez náznaku AI tedy může s několika málo fígly diskuzní psychologie vtáhnout druhou stranu do hry.

Příklad náhodné odpovědí, která je zároveň další otázkou.

Můj seznam náhodných odpovědí je příliš krátký a jednoduchý. S elementární znalostí Javascriptu jej ale můžete libovolně rozšiřovat, upravovat a na Twitteru poté testovat, jak to vlastně celé funguje.

Opravdu univerzální Apps Script

Takže si to shrňme. Vytvořili jsme jednoduchý skript pro Apps Script a nastavili přístup k API na Twitteru. Program každou minutu stahuje seznam tweetů, hledá v nich postupně otázky, a snaží se odpovědět.

Jistě, Eugene to dozajisté není, Turingovu cenu tentokrát neodstanete, ale pokud ovládáte klávesové zkratky CTRL+C a CTRL+V, během pěti minut byste se měli o svůj Twitter opravdu dělit s robotem. Meze představivosti se přitom nekladou. Nemusí to být hned chatovací robot, ale třeba automatický odpovídač, který bude reagovat jen na některé konkrétní uživatele, případně za vás o půlnoci všem popřeje dobrou noc. To je už opravdu jen kosmetická úprava.

Takže s chutí do toho!

Diskuze (14) Další článek: Supertenká klávesnice má klávesy s magnetickou levitací

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,