valuecloud-website-logo-60x60-min

Leistungen

Haystack & Rasa als Dreamteam für Chatbots mit Experten-Charakter

Die Herausforderung:

Chatbots sind schon lange Teil von diversen Software Anwendungen wie Webshops, FAQ Seiten oder Apps. Meistens lassen uns diese Chatbots aber relativ schnell im Stich, insbesondere wenn es um fachliche komplexere Fragen geht. Wenn ein Chatbot anfänglich noch bei einfachen und standardisierten Fragen helfen kann (beispielsweise wie viele verschiedene Produkte ein Webshop im Angebot hat), wird es bei komplexeren Fragestellung (z.B. ob ein Produkt mit einem anderen kompatibel ist) schon schwieriger. Chatbots können sich an vorgefertigte Skripte halten (welche oft mit einem hohen Zeitaufwand erstellt werden müssen). Weicht die Konversation von diesem Skript ab, ist der Chatbot oft nicht mehr handlungsfähig.

Um einem Endanwender trotzdem das Gefühl zu geben, mit einem Experten zu interagieren, müssen wir „schlauere“ Systeme bauen. Was wir brauchen ist Conversational AI.

Über die Autorin

Caroline Wagner

AI Innovation Manager, ValueCloud GmbH

Der ValueCloud Ansatz

Conversational AI geht weit über normale Chatbots heraus und verwendet Machine Learning, NLP und große Datenmengen, um Bots, Sprachassistenten aber auch andere User Interfaces intelligenter und „menschlicher“ zu machen.

Wir bei ValueCloud haben es uns zur Aufgabe gemacht, maßgeschneiderte Lösungen für reale Probleme zu finden. Im heutigen Blogbeitrag möchten wir euch einen Lösungsansatz vorstellen, der „Conversational AI“ mit Hilfe des Question & Answering Frameworks „Haystack“ und dem smarten Chatbot Framework „Rasa“ umsetzt. Das Ziel ist es, einen smarten Assistenten zu entwickeln, der Produktspezifische Fragen zu technisch komplexen Produkten beantworten kann. Hier am Beispiel von Smarthome Hubs, intelligenten Thermostaten und weiteren Smart Home Gadgets. Denkbar sind aber auch Anwendungsfälle aus dem Bereich Medizintechnik, Maschinen und Anlagenbau oder Hardware bzw. elektronische Bauteile.

Unsere Lösung besteht im Kern aus einer Question & Answering Engine umgesetzt mit Haystack und einer smarten Chatbotkomponente implementiert mit Rasa.

Quelle: https://www.deepset.ai/blog/build-smart-conversational-agents-with-chatbots-qa

Eine Question & Answering Engine (QA Engine) ist spezialisiert darauf, spezifische Fragen in natürlicher Sprache zu Themen zu beantworten welche zuvor in einem schriftlichen Korpus hinterlegt wurden. Dies könnte z.B. der Wikipedia Korpus sein, der das Wissen der Wikipedia enthält, oder auch fachspezifische Korpora z.B. bestehen aus Produktdatenblättern, Betriebsanleitungen oder Fachliteratur.

Strukturiertes Vorgehen

Die QA-Engine wird in unserem Beispiel zunächst mit Herstellerdatenblättern und Betriebsanleitungen befüllt. Diese werden, ganz komfortabel in einem Elasticsearch Docker Container abgelegt, was auch den Einsatz großer Datenmengen (also viele tausende Dokumente) ermöglicht. Mit diesen Daten als Grundlage wird unter Verwendung eines vortrainierten German Bert QA Modelles das eigentliche QA Modell trainiert. Das Haystack Framework bietet hier eine hervorragende Unterstützung beim Trainingsprozess und Parametertuning.

Haben wir unser Modell trainiert, brauchen wir natürlich auch noch eine API, damit unser smarter Bot auch mit dem QA Modell kommunizieren kann. Auch hier bietet Haystack einfache Möglichkeiten eine REST API zu integrieren.

Jetzt brauchen wir aber noch unseren smarten Bot. Rasa bietet hier einfache und schnelle Möglichkeiten Bots zu erstellen. Ein weiteres nettes Feature von Rasa ist, dass die erstellten Bots immer „schlauer“ werden mit der Zeit, denn aus den gespeicherten Chats kann der Bot immer weiter trainierten werden und auch komplexere Chatverläufe lassen sich so einfach implementieren.

Wie genau ein solcher Rasa Bot erstellt wird ist nicht Bestandteil dieses Blogbeitrages. Für unser Beispiel reicht es, einen sehr simplen Rasa Bot zu erstellen.

Zusammenfügen der Teile

Kommen wir aber nun zum spannenden Teil unseres Lösungsansatzes. Wie können die QA Engine und der Rasa Bot so interagieren, dass dem Endanwender der Eindruck eines smarten Assistenten, wenn nicht sogar eines menschlichen Chatpartners vermittelt wird. Dazu brauchen wir zwei Dinge:

  • zum einen braucht Rasa einen Intent um zu erkennen, dass eine fachliche Frage gestellt wird. Dies könnte zum Beispiel sein: Kann ein Danfoss Zwave Thermostat mit einem OpenHAB hub gesteuert werden. Dieser Intent wird mit einigen Beispielfragen gefüttert, woraus dann das Rasa Bot Modell lernt auch ähnliche Fragen zu erkennen.
  • zum Beantworten der Frage, muss diese dann auch noch an die Haystack API geschickt werden, welche die Frage wiederum an die QA Engine weiterleitet. Die QA Engine beantwortet dann die Frage basierend auf dem gelernten Wissen aus den Datenblättern und Produktbeschreibungen und schickt die Antwort über die API wieder zurück.

Nun muss Rasa die Antwort nur noch über das UI dem Endanwender zur Verfügung stellen. Die eben beschriebene Logik und Kommunikation läuft bei Rasa über einen Action Server der für diesen Fall implementiert werden muss.

Ein Action Server könnte Bspw. so aussehen:

				
					from typing import Any, Text, Dict, List
import os
import requests
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher

API_ENDPOINT = os.getenv("API_ENDPOINT", "http://localhost:8000")
DOC_REQUEST = "query"

def retrieve_doc(query, filters=None, top_k_reader=5, top_k_retriever=5):
    # Query Haystack API
    url = f"{API_ENDPOINT}/{DOC_REQUEST}"
    req = {"query": query, "filters": filters, "top_k_retriever": top_k_retriever, "top_k_reader": top_k_reader}
    response_raw = requests.post(url, json=req).json()

    # Format response
    result = []
    answers = response_raw["answers"]
    for i in range(len(answers)):
        answer = answers[i]["answer"]
        if answer:
            context = "..." + answers[i]["context"] + "..."
            meta_name = answers[i]["meta"]["name"]
            relevance = round(answers[i]["probability"] * 100, 2)
            document_id = answers[i]["document_id"]
            offset_start_in_doc = answers[i]["offset_start_in_doc"]
            result.append(
                {
                    "context": context,
                    "answer": answer,
                    "source": meta_name,
                    "relevance": relevance,
                    "document_id": document_id,
                    "offset_start_in_doc": offset_start_in_doc,
                }
            )
    return result

class ActionAskQuestion(Action):
    def name(self) -> Text:
        return "action_intent_question"
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        message = tracker.latest_message.get('text')
        results = retrieve_doc(message, top_k_reader=1, top_k_retriever=3)
        dispatcher.utter_message(text = "Hier ist deine Antwort:")
        for result in results:
            answer = result["answer"]
            message = format(answer)
            dispatcher.utter_message(text=message)
        return []

				
			

Ergebnis und Fazit

Abschließend lässt sich sagen, dass man unter Verwendung der beiden Open Source Frameworks mit wenig manuellem Aufwand schnell und unkompliziert Service und Expertensysteme aufsetzten kann, die deutlich mehr sind als nur ein „vor-gescripteter“ Chatbot.

Haystack & Rasa als Dreamteam für Chatbots mit Experten-Charakter

Stehen Sie vor einer ähnlichen Herausforderung?

Unsere Experten freuen sich auf den Austausch mit Ihnen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Neueste Artikel

Clouster
Christian Gilcher

Warum wir Clouster auf den Markt bringen

Die Zeit ist gekommen, eine Kubernetes-basierte Cloud Plattform für die Entwicklung, Ausbringung und den Betrieb moderner Geschäftsanwendungen in den Markt zu bringen. Optimiert für europäische IaaS-Dienste. Mit Enterprise-Grade Security & Compliance Features.

Weiterlesen »
Conversational AI
Caroline Wagner

Haystack & Rasa als Dreamteam für Chatbots mit Experten-Charakter

Chatbots sind schon lange Teil von Webshops, FAQ Seiten oder Apps. Meistens lassen uns diese Chatbots aber relativ schnell im Stich, insbesondere wenn es um fachliche komplexere Fragen geht. Um einem Endanwender trotzdem das Gefühl zu geben, mit einem Experten zu interagieren, müssen wir „schlauere“ Systeme bauen. Was wir hier brauchen ist „Conversational AI“.

Weiterlesen »
Tech Strategie
Christian Gilcher

Kostenfalle Hyperscaler (und mögliche Auswege)

Viele Unternehmen nutzen Cloud Plattform-Komponenten der großen Hyperscaler, um digitale Innovation möglichst schnell in den Markt zu bringen. Mit steigender Last werden Hyperscaler Angebote jedoch sehr schnell sehr teuer. ValueCloud bietet strategische Alternativen zur Reduzierung der Kostenlast, die zudem auf europäischen IaaS Diensten laufen und Datenschutz-Bedenken ausräumen. In Summe entstehen Kosten-optimierte, „intelligente“ Multi-Cloud Szenarien.

Weiterlesen »
Machine Learning
Matthias Bender

Time-Series Forecasting mit ARIMA / SARIMAX

In vielen Bereichen der Wirtschaft wird täglich der Ruf nach Prognosen lauter. Gerade zum Ende des Geschäftsjahres soll oftmals eine Aussage getroffen werden, wie die erwarteten Kosten in den einzelnen Bereichen sein werden. Werden höhere Ausgaben erwartet, oder kann auch ein Gewinn verzeichnet werden? Hilfreich wäre es also, ein Werkzeug zu besitzen, welches einem mit Hilfe historischer Daten ein mögliches Szenario in der (nahen) Zukunft vorhersagen kann.

Weiterlesen »
Tech Strategie
Christian Gilcher

Was ist eigentlich „Cloud native“ Software (und warum ist das wichtig)?

Ich rede jeden Tag mit Leuten, die über „die Cloud“ sprechen aber gar nicht wissen, was es damit auf sich hat. Ich möchte das gerne ändern. Insbesondere werden Begriffe wie „Cloud“, „Cloud Computing“ und „cloud native Software“ sehr häufig in einen Topf geworfen, obwohl damit unterschiedliche Dinge gemeint sind.

Weiterlesen »

ValueCloud GmbH

Europaallee 10

D-67657 Kaiserslautern

P: +49-631-3435-8150

F: +49-631-3435-8159

E: info@valuecloud.io