wiki.ziemers.de

ziemer's informatik Wiki

Benutzer-Werkzeuge

Webseiten-Werkzeuge


wiki:software:beuthbot:database-microservice

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
wiki:software:beuthbot:database-microservice [22.07.2020 18:00]
Tobias Belkner
wiki:software:beuthbot:database-microservice [23.07.2020 12:40] (aktuell)
Tobias Belkner
Zeile 4: Zeile 4:
  
    - [[[[wiki:software:beuthbot:database-microservice#Motivation|Motivation]]    - [[[[wiki:software:beuthbot:database-microservice#Motivation|Motivation]]
 +   - [[[[wiki:software:beuthbot:database-microservice#Technologien|Technologien]]
 +   - [[[[wiki:software:beuthbot:database-microservice#Funktionsweise |Funktionsweise ]]
 +   - [[[[wiki:software:beuthbot:database-microservice#API|API]]
  
  
Zeile 10: Zeile 13:
 ===== Motivation ===== ===== Motivation =====
  
 +Um die Datenbank unabhängig von den anderen Microservices zu machen, mussten die Datenbank Operationen ausgelagert werden. Das führte dazu, dass die Intents von Rasa aufgelöst werden mussten, damit die richtigen Datenbank Operationen ausgeführt werden können.
 ===== Technologien ===== ===== Technologien =====
  
 +Aufgebaut wurde dieser Microservice als REST-Server mit JavaScript. Die verwendeten Technologien dafür sind:
 +  * [[https://nodejs.org/en/|NodeJS]]
 +  * [[http://expressjs.com/|ExpressJS]]
 +  * [[https://github.com/axios/axios|Axios]]
 +===== Funktionsweise =====
  
 +<uml>
 +@startuml
 +participant Registy as R
 +participant DatabaseMicroservice as DBM
 +participant DatabaseController as DBC
 +participant MongoDB as MDB
  
 +R -> DBM: Send Intent
 +activate DBM
  
 +DBM -> DBC: DatabaseOperation
 +activate DBC
  
 +DBC -> MDB: DatabaseOperation
 +activate MDB
 +
 +
 +return Response
 +return Response
 +return Response
 +@enduml
 +</uml>
 +
 +Da dieser Microservice nur eine Route besitzt, über welche der Intent gesendet wird, muss der Microservice dazu in der Lage sein, diesen Intent aufzulösen, sodass die richtige Datenbank-Operation ausgeführt wird. Der Intent kommt ursprünglich von Rasa. Dieser sieht wie folgt aus:
 +
 +<code name="json">
 +{
 +   "user": {
 +      "id": 12345,
 +      "telegram-id": 12345,
 +      "nickname": "Al",
 +      "details": {
 +         "home": "Bonn",
 +         "birthday": "23.06.1912",
 +         ...
 +      }
 +   },
 +   "intent":{
 +      "name":"database-set",
 +      "confidence":0.9998944998
 +   },
 +   "entities":[
 +      ...,
 +      {
 +         "start":26,
 +         "end":36,
 +         "value":"krebstiere",
 +         "entity":"allergen",
 +         "confidence":0.9999893608,
 +         "extractor":"CRFEntityExtractor"
 +      },
 +      {
 +         "start":37,
 +         "end":51,
 +         "value":"alergisch bin.",
 +         "entity":"detail-allergic",
 +         "confidence":0,
 +         "extractor":"CRFEntityExtractor"
 +      },
 +      ...
 +   ],
 +   "text":"Merke dir, dass ich gegen Krebstiere alergisch bin.",
 +   ...
 +}
 +</code>
 +
 +Durch den Intent, erfährt man, welche Operation ausgeführt werden soll und in den Entities steht drin, was hinzugefügt/gelöscht/ausgelesen werden soll, sowie von welchem User diese Operation ausgeführt werden soll. Die Entity mit dem höchsten Confidence-Score ist die gewollte Anfrage an die Datenbank.
 +
 +==== API ====
 +
 +=== Request ===
 +<code>
 +POST https://localhost:<PORT>/resolve
 +</code>
 +oder
 +<code>
 +POST https://localhost:<PORT>/database
 +</code>
 +
 +=== Response ===
 +
 +<code>
 +{
 +  answer: {
 +    content: 'Deine Daten:\n' +
 +      '\n' +
 +      'Nickname: **DennySchumann**\n' +
 +      'Vorname: **Denny**\n' +
 +      'Nachname: **Schumann**\n' +
 +      '\n' +
 +      'home: **köln**\n',
 +    history: [ 'intent-resolve' ]
 +  }
 +}
 +</code>
  
wiki/software/beuthbot/database-microservice.1595433608.txt.gz · Zuletzt geändert: 22.07.2020 18:00 von Tobias Belkner