AM2 Dokumentacja użytkownika
Transkrypt
AM2 Dokumentacja użytkownika
AM2 Dokumentacja użytkownika Spis treści • 1 Zarządzanie bazą wiedzy • 1.1 Edycja w panelu • 1.2 Wgranie bazy w pliku • 1.3 Modyfikacje poprzez API • 1.4 Struktura bazy wiedzy • 1.5 Format kolumnowy • 1.5.1 klasy • 1.5.2 atrybuty • 1.5.3 Uwagi do importu • 1.6 Format Json • 1.6.1 Składowe • 1.6.2 Klasy i atrybuty • 1.6.3 Uwagi • 2 API • 2.1 Zarządzanie pakietami wiedzy Zarządzanie bazą wiedzy System posiada wewnętrzną reprezentację bazy wiedzy, niedostępną do bezpośredniej edycji przez użytkowników. Bazę wiedzy można modyfikować na trzy sposoby: • edycja w panelu • wgranie bazy z pliku • modyfikacje poprzez API Modyfikacje można przeprowadzać w trakcie prowadzonych rozmów przez użytkowników. Edycja w panelu Dostępne funkcje: • podgląd informacji o pakietach bazy wiedzy • dodawanie pakietów • usuwanie pakietów Wgranie bazy w pliku • dostępne formaty to CSV i Json (w wariancie kompatybilnym z CSV i dedykowanym) • przykładowe pliku do bezpośredniego uploadu można pobrać z http://static.onlinetools.pl/am2/ • wszystkie pliki powinny mieć kodowanie UTF-8 Modyfikacje poprzez API Opisane w sekcji poświęconej API Struktura bazy wiedzy • Wewnętrzna reprezentacja tworzy graf wiedzy, gdzie dany element może być połączony z wieloma innymi poprzez określone atrybuty. • Każdy element bazy wiedzy musi mieć swój identyfikator • Dla każdego elementu istnieje zbiór właściwości, które może on posiadać np. dla odpowiedzi może to być tekst odpowiedzi, określony plik video do odtworzenia itp. • Baza wiedzy zawiera określone klasy i ich atrybuty Format kolumnowy • umożliwia zapis bazy w formacie gdzie każdy wiersz opisuje konkretną jednostkę informacji, a jej atrybuty znajdują się w kolumnach • kolumny zawierają wszystkie możliwe atrybuty lub tylko część • elementy w zależności od typu wymagają innych atrybutów • zastosowania: import danych z arkuszy, plików csv/tsv, prostych transformacji z baz danych • aktualna implementacja przyjmuje na wejściu pliki csv oraz json imitujący strukturę csv • ze względu na ograniczone możliwości ekspresji formatu tabelarycznego, format kolumnowy stanowi dodatkową warstwę abstrakcji, poniżej której każdy wiersz jest rozbijany jeden lub wiele elementów grafu wiedzy • UWAGA: walidacja tego formatu jest na podstawowym poziomie • status prac: specyfikacja nie wdrożona w pełni, nazwy atrybutów, ich liczba i znaczenie mogą jeszcze ulec zmianie klasy Klasa określa charakterystykę danego elementu oraz jego atrybuty. • fakt - element agregujący warunki (np. dopasowanie do tekstu) oraz akcje (np. treść odpowiedzi) • możliwe atrybuty: • typowe atrybuty: text_action, • Uwagi: • dla uproszczenia zapisu fakt może być rozpatrywany również jako kontener warunków, dlatego można bezpośrednio na nim definiować warunki atrybuty • id - wymagany, identyfikator zasobu • text_condition - słowo lub zdanie które pojawiając się na wejściu od użytkownika powinno aktywować dany fakt • text_action - odpowiedź udzielana po wybraniu faktu, • property_condition - warunek operujący na zmiennych, wartością jest wyrażenie logiczne np. "zmienna1==3", "zmienna2==abc", "zmienna1>2 && zmienna2<= 7" • tag_condition - nazwa taga, który powinien być aktywny (fakt go aktywujący powinien być • • • • • • • • • • • • • • • wywołany wcześniej) follows_after_condition - identyfikator faktu, który powinien być faktem poprzedzającym żeby aktywować dany fakt np. fakt posiadający warunek tekstowy "tak", odnoszący się do określonego pytania powinien wskazywać na tym atrybutem na fakt z pytaniem regex_condition - wyrażenia regularne dla którego jest testowane zapytanie użytkownika like_condition - uproszczony regex_condition, sprawdza czy wprowadzony tekst pasuje do szablonu zgodnego z SQL Like tj. gdzie '%' to dowolny ciąg znaków a '_' to dowolny znak complex_condition - identyfikator warunku złożonego (mającego wiele warunków) condition_type - typ warunku, używany jeśli identyfikator definiuje warunek złożony, dopuszczalne wartości to 'and' (wszystkie warunki muszą być spełnione), 'or' (co najmniej jeden musi być spełniony), 'not' (negacja podwarunku, który także może być warunkiem złożonym) speech_text_action - mówiona treść odpowiedzi, może być inna niż pisana, domyślnie mówiona jest ta sama treść co pisana tag_action - przypisanie tagu, który zostaje aktywowany po wybraniu danego faktu label_action - etykieta faktu, używana do linkowania, video_action - nazwa pliku video który ma się odtworzyć wraz z wypowiedzią, open_url_action - adres strony jaka ma się otworzyć wraz z wypowiedzią, set_property_action - ustawienie zmiennej, unset_property_action - usunięcie zmiennej, property_name - nazwa zmiennej, property_value - wartość zmiennej, property_expression - wyrażenie służące do ustawienia zmiennej Uwagi do importu • proste (co nie znaczy małe) bazy można konstruować wyłącznie przy użyciu trzech, czterech atrybutów: [id, text_condition, text_action], oraz dla kilku pytań aktywujących jeden fakt, przez definiowanie 'condition_type':'or' • Nie deklaruje się klasy elementu, gdyż dany element może mieć wiele typów i wynikają one ze zbioru atrybutów jakie są przypisywane do elementu. • Import Json operuje na uproszczonym wariancie, gdzie dany element nie może w jednym miejscu deklarować kilku wartości danego atrybutu (np. 'text_condition'), musi to robić osobnych elementach (tak jak w pliku csv) • jeśli fakt ma skojarzonych kilka warunków (np. dwa 'text_condition') to domyślnie każdy z nich musi być spełniony (domyślny 'condition_type' faktu to 'and'). W przypadku kilku 'text_condition' zamiarem z reguły jest dopasowanie do jednego z nich, można to zrobić deklarując dla faktu 'condition_type':'or' • nieznane atrybuty są ignorowane • dozwolone jest dodanie wielu elementów (json) lub wierszy (csv) z tym samym identyfikatorem - ostatecznie dany element jest składany i pozwala to na dodanie np. kilku warunków do jednego faktu Format Json • zawiera dane tworzące drzewo lub graf • jest dużo bardziej bliski rzeczywistej reprezentacji wiedzy w systemie • każdy element definiuje kompletną jednostkę informacji, która sama w sobie może zawierać referencje do innych lub podjednostki • elementy muszą deklarować swoje typy, typów może być wiele, w przypadku braku deklaracji przyjmowany jest typ 'Fact', który jest agregatorem warunków i odpowiedzi • zastosowania: import danych ze złożonych systemów, dający pełną kontrolę nad strukturą wiedzy • UWAGA: walidacja tego formatu jest na podstawowym poziomie • status prac: specyfikacja nie wdrożona w pełni, nazwy atrybutów, ich liczba i znaczenie mogą jeszcze ulec zmianie Składowe • klasy - deklarowane dla elementów, są one wartościami atrybutu 'type', nazwa klasy zaczyna się z wielkiej litery i jest na ogół rzeczownikiem np. 'Answer' • atrybuty obiektowe - wartością jest referencja do zdefiniowanego wcześniej elementu lub pełna definicja elementu jako mapy atrybutów, nazwa atrybutu zaczyna się z małej litery i jeśli ma kilka członów to kolejne zaczynają się z wielkiej litery i są połączone tak że stanowią jeden wyraz np. 'hasAnswer' • atrybuty wartościowe - wartościami są atomowe cząstki informacji tj. wartości w formie tekstowej, nazwa jest pisana z małej litery, jest na ogół rzeczownikiem, jeśli jest wieloczłonowa to człony są połączone znakiem podkreślenia np. 'like_pattern' Klasy i atrybuty Dany element jest instancją klasy jeśli pojawi się ona na liście jego atrybutu 'type'. Każda instancja klasy może zawierać atrybuty: • id - identyfikator, jest niezbędny jeśli do danej instancji będą odwoływać się inne instancje • type - Brak jest równoważny "type" : "Fact", jeśli element ma deklarować kilka klas to wartość ma postać tablicy np. "type" : ["Answer", "TextMatches"]. Dla większej przejrzystości zaleca się nadawanie elementom jednego typu (klasy). • comment - ignorowany w bazie wiedzy, służy do komentowania informacji, w celu np. łatwiejszego zrozumienia zastosowanej konstrukcji Pozostałe wymagane i opcjonalne atrybuty klas. Wartości w nawiasie kwadratowym oznaczają dopuszczalną liczbę atrybutów: [1] - dokładnie 1, [0-1] - brak lub jeden, [0+] - zero lub wiele, [1+] jeden lub wiele. Dla atrybutów obiektowych w nawiasach wąsiastych występują nazwy klas, gdzie wskazana instancja musi mieć jedną z nich (instancja jest podana bezpośrednio jako mapa lub jako referencja do identyfikatora). • Fact • [1+] hasCondition {TextMatches, Like, Regex, FollowsAfter, BoolCondition, RequiresTag, And, Or, Not} • [0+] hasAction {SetProperty, UnSetProperty, Tag, UnTag, OpenUrl} • [1+] hasAnswer {Answer} - odpowiedź jest typową akcją, ale została wyróżniona gdyż jest stosowana na końcu, po akcjach np. ustawienia zmiennych • Answer • [1] text • [0-1] speech_text • [0+] hasVideo {Video} • TextMatches - warunek dopasowujący tekst do zadanego w atrybucie • [1] text_pattern • Like - warunek dopasowujący tekst gdzie znak '%' to dowolny (również pusty) ciąg znaków, a '_' to dowolny pojedynczy znak • [1] like_pattern • Regex • [1] regex • BoolCondition • [1] has_expression • FollowsAfter • [1] followsAfter • RequiresTag • [1] tag_value • Tag • [1] tag_value • UnTag • [1] tag_value • Video • [1] video_name • OpenUrl • [1] url • SetProperty • [1] property_name • [1] has_expression • UnSetProperty • [1] property_name Uwagi • tagi mają aktualnie bardzo podobne zastosowanie jak zmienne, w przyszłości może się to zmienić. Ich przeznaczeniem jest głównie partycjonowanie wiedzy. Aktualnie odradza się ich stosowanie do czasu ustalenia ostatecznej specyfikacji. • elementy Video mają aktualnie nieokreślone wartości, specyficzne dla danego awatara, więc to co działa dla jednego może nie działać dla innego • import działa addytywnie tj. jeśli jakiś id zostanie zadeklarowany kilka razy to informacje zostaną połączone do jednego elementu. Odradza się jednak stosowanie tej cechy z powodu utrudnionej identyfikacji ewentualnych problemów API • przy każdym requeście wymagane 3 parametry: • api_key - klucz publiczny • ts - timestamp, aktualny czas w formie liczby long • sig - hash MD5 obliczony z połączenia łańcuchów klucza prywatnego i timestampu • komunikaty powinny używać kodowania UTF-8 Przykład • klucz prywatny: 'klucz_prywatny1' • klucz publiczny: 'klucz_publiczny1' • timestamp: 1234 Prawidłowe wywołanie ma postać: http://avatarsmarket.com/rest/kb? api_key=klucz_publiczny1&ts=1234&sig=a3ce5185f11403658a298836d86c279f • komunikacja poprzez API możliwa jest w formacie json (preferowany) lub xml, w związku z tym należy ustawiać prawidłowy nagłówek Content Type p. application/json Zarządzanie pakietami wiedzy • przykładowy plik z treścią komunikatu json można pobrać z http://static.onlinetools.pl/am2/test1_rest.json Adres url do aktualizacji ma posać: http://avatarsmarket.com/rest/kb/update Dopuszczalne metody to POST i PUT a przekazywany obiekt Json powinien mieć: • pole packageId - wartością jest identyfikator pakietu który ma zostać podmieniony • pole format - opcjonalny, dopuszczalne wartości to: 'json_csv' (format kolumnowy w zapisie json) i 'json_map' (format json), w przypadku braku przyjmowany jest 'json_csv' • pole content - zawierające dane json w formie ciągu znaków tzn. cały ciąg powinien mieć wyescapowane znaki specjalne, w szczególności cudzysłowy, znaki nowej linii, tabulatory itp., tak że wartością pola jest ciąg znaków. Rezultatem jest tekst: • w przypadku pozytywnej aktualizacji - liczba zaimportowanych faktów • w przypadku wystąpienia błędu - komunikat z błędem Przykładowe wywołanie: http://avatarsmarket.com/rest/kb/update? api_key=klucz_publiczny1&ts=1234&sig=a3ce5185f11403658a298836d86c279f Dane w post Przykładowy content { "packageId" : "kb_1419005301087", "content" : "{ \"items\" : [ { xt_condition\" : \"rower\", \"id\" : \"test1a\", \"te \"text_action\" : \"lubię jeździć rowerem\" { \" : \"samochód\", } ] }" } }, \"id\" : \"test1b\", \"text_condition \"text_action\" : \"ma cztery koła\" Identyczny rezultat można osiągnąć wysyłając w panelu edycji plik json o następującej treści (wybór bazy wiedzy poprzedza aktualizację więc nie trzeba przekazywać identyfikatora): { "items" : [ { "id" : "test1a", "text_condition" : "rower", "text_action" : "lubię jeździć rowerem" }, { } } ] "id" : "test1b", "text_condition" : "samochód", "text_action" : "ma cztery koła"