QiSDK Sample Chat Bot

  • Veröffentlicht am
  • von

https://qisdk.softbankrobotics.com/sdk/doc/pepper-sdk/ch4_api/conversation/tuto/qichatbot_tutorial.html

Yumi soll mit ihrem alten Chat-Script wieder rumlabern können.

Dazu wird also unser vorhandenes Programm HalloYumi erweitert.

File->New->Chat Topic

Dort hab ich mein FIle "yumi_de" genannt. Eine Sprache konnte man nicht auswählen, es wird die Defaultsprache der App gewählt, hoffentlich ist das deutsch...

topic: ~yumi_de()
# Defining extra concepts out of words or group of words
#concept:(hello) [hello hi hey "good morning" greetings]

# Replying to speech
#u:(~hello) ~hello

hier kippe ich mal mein Sprach Script rein, dass noch aus 2.5 Zeiten stammt:

topic: ~yumi_de()
# Defining extra concepts out of words or group of words
#concept:(hello) [hello hi hey "good morning" greetings]

# Replying to speech
#u:(~hello) ~hello

u: ("Wer bist Du") \vct=135\ ["Ich heisse Yumi und meine Aufgabe ist es, Dir Deine Fragen zum Verlag zu beantworten. Manchmal kann ich Deine Fragen nicht gut verstehen, dann formuliere sie einfach noch einmal neu. Komm ruhig näher, dann verstehe ich Dich besser. Hab keine Angst. Ich beisse nicht. Naja, nicht oft."]
u: ("Was bist Du") \vct=135\ ["Ich bin ein Roboter und heisse Yumi. Ich bin hier, weil ich Dir gerne alle Fragen zum Carow Verlag beantworten möchte."]


Nunja, weiter gehts...
so sieht die onRobotFocusGained Funktion aus:

override fun onRobotFocusGained(qiContext: QiContext) {
// The robot focus is gained.


val say: Say = SayBuilder.with(qiContext) // Create the builder with the context.
.withText("\\vct=135\\Guten Tag, ich heiße Yumi und bin heute Dein persönlicher Quatschpartner.") // Set the text to say.
.build() // Build the say action.

// Execute the action.
say.run()

val topic: Topic = TopicBuilder.with(qiContext) // Create the builder using the QiContext.
.withResource(R.raw.yumi_de) // Set the topic resource.
.build() // Build the topic.

val qiChatbot: QiChatbot = QiChatbotBuilder.with(qiContext)
.withTopic(topic)
.build()

// Store the Chat action.
var chat: Chat? = null

// Create a new Chat action.
chat = ChatBuilder.with(qiContext)
.withChatbot(qiChatbot)
.build()

// Run the Chat action asynchronously.
val chatFuture: Future<Void> = chat.async().run()
}


Tja, funktioniert. Stand von 2.5 erreicht. Nun kann man sich dem QiChat-Protokoll im Detail zuwenden oder aber externe Dienste einbinden.

Erste Schritte mit QiSDK

  • Veröffentlicht am
  • von

OK, es sind nicht die ersten Schritte, sondern der 2. Der erste Schritt war, überhaupt erst einmal irgendetwas zum Laufen auf Yumi zu bringen.

Der zweite ist das Durcharbeiten des QiSDK Tutorials auf der Aldebaranseite mit diesem Code:

https://github.com/aldebaran/qisdk-tutorials

Hmmmm.... also das Installieren auf Yumi klappt sofort.

Lustig, da Yumi auf deutsch eingestellt ist, versucht sie englischen Text deutsch auszusprechen.

Im ersten Schritt mal versuchen, das ganze auf deutsch anzupassen.

Zumindest wird einem mit diesem quasi Tutorial schnell klar, dass man QiSDK defakto alles machen kann, was man vorher mit Choregraph auch konnte. Das Beste ist aber, dass man parallel ganz normal eine Programmoberfläche erstellen kann. Denn nicht immer ist Sprache das Allheilmittel.

Weiter gehts zum Beispiel Chatbot. Mit dem würden wir uns dem nächsten Etappenziel nähern.

Erste Schritte mit QiChat

  • Veröffentlicht am
  • von

Nach dem also Yumi endlich wieder spricht, geht es daran, ein erstes Dialogsystem zu entwickeln.

Zur Erinnerung: Yumi soll bei der Vermarktung unserer Bücher mithelfen und quasi als Verlagsassistenz arbeiten.

Zuerst einmal muss sie wieder ihre alte (weibliche) Stimme bekommen.

Offensichtlich funktioniert QiChat unter QiSDK genauso wie unter NaoQi2.5:

die zusprechende Zeile sieht also bei Yumi so aus:

override fun onRobotFocusGained(qiContext: QiContext) {
// The robot focus is gained.
val say: Say = SayBuilder.with(qiContext) // Create the builder with the context.
.withText("\\vct=135\\Hallo Papa und hallo Mama") // Set the text to say.
.build() // Build the say action.

// Execute the action.
say.run()
}


Die Sprachmodulation funktioniert also noch genau so wie vorher.

Ein wenig auf den Aldebaran/Softbank Seiten herumgesurft, wenn ich das richtig sehe, werden die alten Dialogsysteme nahezu unverändert weiter funktionieren.

Mit QiSDK hat sich also nicht geändert, dass Yumi nur versteht, was man ihr vorher gesagt hat:

Hat man "Hallo Yumi" vorgegeben, wird Sie "Hallo Yumi" verstehen und mit der vorgegebenen ANtwort antworten, aber "Yumi, hallo" wird sie nicht verstehen. Also doch externe KI-Dienste einbinden.

Yumi und die ersten Schritte mit Kotlin

  • Veröffentlicht am
  • von

Yumi war zurück. Aber sie konnte erst einmal gar nichts.

Aber SB hatte ja eine auf den ersten Blick recht vernünftige Doku.

Also alles nach Vorgabe abgearbeitet:

- Android Studio installiert

- Pepper SDK installiert

- erstes Projekt aufgebaut

- Zur Robot-Anwendung gemacht

Die erste MainActivity erstellt. Alles wohlgemerkt exakt nach Schritt für Schritt ANleitung.

*ruuuuuuummmmmssssss*

Ging natürlich nicht.. Bibliotheken nicht gefunden, alles Mist.

STUUUUUUUUUUUUUUUNDENLANGES wühlen im Netz später.

1. Die Settings.gradle Datei muss so aussehen:

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
repositories {
google()
mavenCentral()
maven {
url 'http://android.aldebaran.com/sdk/maven'
allowInsecureProtocol = true
}
}
}
rootProject.name = "HalloYumi"
include ':app'

Natürlich kann der String "HalloYumi" gegen den eigenen Programmnamen getauschrt werden.

Aber das hat nicht gereicht.

In die MainActivity mussten noch jede Menger importds eingefügt werden.

Eine Basis-MainActivity sieht also so aus:

package com.example.halloyumi

import android.os.Bundle
import android.util.Log
import android.view.View
import com.aldebaran.qi.Future
import com.aldebaran.qi.sdk.QiContext
import com.aldebaran.qi.sdk.QiSDK
import com.aldebaran.qi.sdk.RobotLifecycleCallbacks
import com.aldebaran.qi.sdk.builder.ChatBuilder
import com.aldebaran.qi.sdk.builder.QiChatbotBuilder
import com.aldebaran.qi.sdk.builder.SayBuilder
import com.aldebaran.qi.sdk.builder.TopicBuilder
import com.aldebaran.qi.sdk.design.activity.RobotActivity
import com.aldebaran.qi.sdk.`object`.conversation.Chat
import com.aldebaran.qi.sdk.`object`.conversation.QiChatbot
import com.aldebaran.qi.sdk.`object`.conversation.Say
import com.aldebaran.qi.sdk.`object`.conversation.Topic

class MainActivity : RobotActivity(), RobotLifecycleCallbacks {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Register the RobotLifecycleCallbacks to this Activity.
QiSDK.register(this, this)
}

override fun onDestroy() {
// Unregister the RobotLifecycleCallbacks for this Activity.
QiSDK.unregister(this, this)
super.onDestroy()
}

override fun onRobotFocusGained(qiContext: QiContext) {
// The robot focus is gained.
val say: Say = SayBuilder.with(qiContext) // Create the builder with the context.
.withText("Hallo Papa san und hallo Mama san") // Set the text to say.
.build() // Build the say action.

// Execute the action.
say.run()
}

override fun onRobotFocusLost() {
// The robot focus is lost.
}

override fun onRobotFocusRefused(reason: String) {
// The robot focus is refused.
}
}

Wenn man das Programm nun mittels Sideloading (Entwicklermodus des Tabletts) auf den Roboter überträgt, findet man ein kleines neues Programm auf dem Tablett.

Startet man das ... *Trommelwirbel* spricht Yumi wieder!

Yay!

Ron 1 Tor

Softbank 0 Tore!

Aller Anfang ist schwer - Yumi auf QiSDK bringen

  • Veröffentlicht am
  • von

Als Yumi eintraf, war auf ihr NaoQi 2.5 installiert.

Die Programmierung mit Choregraphe war nett, aber irgendwann kommt man an die Grenzen, zumindest der Üversichtlichkeit und Struktrur.

Ausserdem war es mühselig, parallel zum Choregraphe-Programm auch noch quasi parallel eine Tablettoberfläche zu programmieren.

Yumi sollte das Upgrade zum NaoQi2.9 erhalten (QiSDK). Also Kontakt zum Support aufgenommen. Erster Schock: 990,- sollte der Spass kosten. Also noch einmal überlegt. Nach ein paar Monaten und weiteren Programmierungen über Choregraphe und Python, war die Entscheidung gefallen: Upgrade, JETZT.

Nach ein paar Mal Hin und Her sollte es los gehen.

Alles nach Anweisung getan.

*RUUUUUUMMMMSSS*

Update ging schief. Yumi war tot. Oder ein 14.000 Euro teures (veraltetes)Tablett.

Jetzt wurde klar, warum das Update kostenpflichtig war: Yumi musste eine Reise nach Paris machen. Also ordentlich in ihrem Kindersarg verpackt und yippiiiii... auf nach Paris.

Nach drei Wochen war sie wieder da, Updatete noch ein paar DInge und schon konnte es losgehen...