Projektowanie tematów jako miniagentów, którzy unikają duplikowania wiadomości

Note

Ten artykuł opisuje funkcje i działanie tematów z wyzwalaczem konwersacji w środowisku standardowym środowisku uruchomieniowym. Dowiedz się, jak uzyskać dostęp do standardowych funkcji, korzystając z artykułu Dostęp do standardowych agentów i przepływów agentów.

Ten artykuł koncentruje się na najlepszych praktykach projektowania, aby uniknąć duplikatów wiadomości. Duplikaty wiadomości pochodzą z luk kontekstowych, więc projektowanie zaczyna się od zrozumienia, jak kontekst płynie. Zapoznaj się z diagramem przedstawionym w Dystrybucja kontekstu w standardowej uprzęży, aby zrozumieć, jak warstwa orkiestracji udostępnia kontekst każdemu komponentowi.

W standardowym środowisku uruchomieniowym planista wywołuje tematy w taki sam sposób, w jaki wywołuje narzędzia i agentów. Odczytuje opis każdego tematu, aby zdecydować, kiedy go wykorzystać, generuje dane wejściowe z jego aktywnego kontekstu i od użytkownika, a po zakończeniu tematu odczytuje wyniki z tematu. Temat z jasnym opisem, dobrze zdefiniowanymi wejściami i dobrze zdefiniowanymi wyjściami działa jak miniagent w planie: warstwa orkiestracji zbiera to, czego temat potrzebuje, temat wykonuje swoją logikę, zwraca to, co wygenerował, a warstwa orkiestracji formatuje odpowiedź i przekazuje ją użytkownikowi.

Dla użytkownika mini-agent wydaje się rozmowny. Użytkownik może mówić naturalnie, gdy temat zbiera potrzebne informacje, zadawać pytania uzupełniające i otrzymywać bogate odpowiedzi od agenta.

Porada

W standardowym środowisku uruchomieniowym zachowaj deterministyczną logikę na poziomie tematu i pozostaw komunikację użytkownika w warstwie orkiestracji. Zbierz wartości, których temat potrzebuje jako wejścia przed uruchomieniem, a po uruchomieniu zwróć wygenerowane wyniki jako wyjścia.

Nazwij i opisz temat, aby warstwa orkiestracji mogła kierować do niego

Warstwa orkiestrująca wykorzystuje nazwę i opis tematu do kierowania żądań do odpowiedniego tematu. Wpisz jedno i drugie dla warstwy orkiestracji. Nadaj temu tematowi jasną, konkretną nazwę, która opisuje, czym się zajmuje.

Napisz opis w dwóch częściach. Po pierwsze, wyjaśnij, kiedy używać tematu. Po drugie, krótko wyjaśnij, co robić na podstawie wyników tematu, w tym jak warstwa orkiestracji powinna routować żądania i obsługiwać wyniki po uruchomieniu tematu. Nie opisuj wewnętrznych ekranów ani kroków danego tematu.

Na przykład użyj następującego opisu dla tematu, który obsługuje żądania dotyczące salda konta i zwraca dane wyjściowe wraz z wartością answered:

This topic handles account balance requests. 
If its answered output is true, the user has already received their response and it should not be answered again.

Zbieraj dane wejściowe przed rozpoczęciem tematu

Nadaj tematowi dane wejściowe dla każdej potrzebnej wartości. Warstwa orkiestracji może zebrać te wartości ze swojego aktywnego kontekstu oraz od użytkownika w toku rozmowy, zanim temat zostanie uruchomiony. Dane wejściowe są dostarczane do zmiennej, którą następnie wykorzystuje logika tematu.

Użyj nazwy, opisu, encji i ustawień walidacji, aby pomóc warstwie orkiestracji poprawnie wypełnić dane wejściowe:

  • Nazwa wejściowa informuje warstwę orkiestracji, co jest zbierane, i służy do formułowania pytania, czy warstwa orkiestracji musi prosić użytkownika o tę wartość. Nazwij to ze względu na wartość, a nie mechanizm. Na przykład, nazwij wejście The user's request about... zamiast OData filter, aby warstwa orkiestracji nie prosiła użytkownika o napisanie zapytania.

  • Opis danych wejściowych to polecenie dla warstwy orkiestracji, a nie etykieta dla użytkownika. Użyj go, aby powiedzieć warstwie orkiestracji, jak interpretować, ograniczać lub przekształcać wartość zanim temat ją otrzyma. Warstwa orkiestracji może uzupełnić pole wejściowe danymi z rozmowy, z wcześniejszego wyniku lub z danych profilu użytkownika. Może wybierać spośród zestawu wartości, stosować pewne ograniczenia i pisać zapytania na podstawie informacji ze schematu.

    Opisy danych wejściowych mogą nawet nakazywać warstwie orkiestracji utworzenie wartości w określonym formacie. Na przykład temat filtrujący listę może przyjąć wejście, którego opis informuje warstwę orkiestracji, jak skonstruować filtr na podstawie żądania użytkownika, w tym dostępne pola, składnię zapytania oraz kilka przykładów.

  • Podmioty ustalają dozwolony typ i zakres dla wejścia, więc do logiki tematu docierają tylko poprawne wartości.

  • Zaawansowane walidacje i logika warunkowa, w tym Power Fx, działają jako deterministyczne kontrole. Mogą uniemożliwić wypełnienie wpisu lub uniemożliwić działanie tematu, gdy warunek nie jest spełniony.

Deterministyczne kontrole wejściowe są tak wiarygodne jak kod, więc zasady biznesowe i ograniczenia zgodności są respektowane nawet wtedy, gdy reszta planu jest generowana.

Zachowaj logikę i zabezpieczenia w temacie

Zachowaj deterministyczną pracę tematu w obrębie tematu: kroki, które wykonuje, obliczenia, które wykonuje, oraz zasady, które egzekwuje. Twórca sprawuje kontrolę i stosuje kluczową logikę biznesową, która działa za każdym razem tak samo, jak narzędzie.

Zwraca wyniki jako wyjścia, a nie wiadomości do użytkownika

Gdy wątek zostanie zakończony, zwróć wygenerowane dane wyjściowe, aby warstwa orkiestracji mogła je wykorzystać i zdecydować, jak odpowiedzieć. Preferuj to podejście zamiast tego, aby temat wysyłał użytkownikowi wiadomości bezpośrednio. Wątek, który wysyła wiadomości do użytkownika, podczas gdy warstwa orkiestracji również odpowiada, jest częstym źródłem zduplikowanych komunikatów — warstwa orkiestracji nie wie, że wątek już odpowiedział.

Ważna

Temat, który nie zwraca żadnych wyników, to czerwona flaga. Jeśli temat odpowiedział użytkownikowi, zebrał wartość lub pokazał kartę, ale nic nie zwraca, warstwa orkiestracji nie widzi, co się stało i może odpowiedzieć na to samo żądanie ponownie. To zachowanie jest najczęstszą przyczyną zduplikowanych komunikatów pochodzących z tematów.

Następujące testowane wyniki są zdecydowanie zalecane jako wiarygodne wzorce kontekstu i komunikacji. Mają one zastosowanie niezależnie od tego, czy temat odpowiada użytkownikowi bezpośrednio, czy zwraca wszystkie informacje do warstwy orkiestracji do odpowiedzi.

Output Description Sposób użycia
answered Prawda, jeśli użytkownik otrzymał już satysfakcjonującą odpowiedź na swoje pytanie w tym temacie. Ustaw tę wartość na true w temacie, gdy zostanie udzielona odpowiedź lub wyświetlony wynik. Sprawdź przykładową instrukcję najwyższego poziomu, która zapewnia, że warstwa orkiestracji traktuje tę część żądania jako odpowiedzianą i nie powtarza jej.
choiceReceived To prawda, jeśli użytkownik już dokonał wyboru w tym temacie. Ustaw ją na prawdę po dokonaniu wyboru przez użytkownika, na przykład wybierając przycisk karty. Warstwa orkiestracji nie zadaje pytania ponownie.
balanceValue Wartość pobrana przez temat i już przekazana użytkownikowi. Ustaw je na ważne dane pobrane przez temat i nadaj nazwę tym danym wyjściowym. Warstwa orkiestracji ponownie je wykorzystuje, korzystając z kontekstu, zamiast pobierać je ponownie.
messageSummary Krótkie podsumowanie tego, co już zostało pokazane użytkownikowi, aby zachować kontekst. Ustaw go, gdy wiadomość zawiera informacje, których plan potrzebuje później. Warstwa orkiestracji jest świadoma tego, co użytkownik otrzymał i nie powtarza ani nie zaprzecza temu.

Same dane wyjściowe są wystarczające dla starszych modeli. Nowsze modele wymagają również instrukcji nadrzędnej, która nakazuje warstwie orkiestracji sprawdzenie danych wyjściowych przed udzieleniem odpowiedzi.

Ta przykładowa instrukcja na najwyższym poziomie jest sprawdzonym przykładem roboczym. Edytuj i dostosowuj go w razie potrzeby.

Za każdym razem, gdy wywoływany jest temat lub agent, przed podjęciem decyzji o odpowiedzi zawsze sprawdzaj wartość logiczną „Opowiedziano”. Tematy i agenci mają własny kanał komunikacji z użytkownikiem. Jeśli „answered” ma wartość „true”, zawsze zakładaj, że na żądanie udzielono odpowiedniej odpowiedzi przy użyciu co najmniej jednej ze zmiennych wyjściowych, i sprawdź na podstawie opisu danych wyjściowych, które z nich zostały użyte. Nie formułuj niezręcznego odniesienia do treści, na którą już udzielono odpowiedzi. Podawaj tylko dane wyjściowe, na które nie odpowiedziano i naturalnie przejdź w konwersacji do następnego kroku.

Termin kanał nie odnosi się do kanału integracyjnego. To mechanizm podpowiedzi, który informuje warstwę orkiestracji, że użytkownik mógł już zobaczyć odpowiedź za pośrednictwem innego komponentu. W zależności od modelu agenta, skuteczniejsze może być umieszczenie podobnej instrukcji w jego własnych instrukcjach. Dowiedz się więcej w Projektowanie solidnej instrukcji najwyższego poziomu, aby uniknąć powtarzających się komunikatów.

Jeśli wątek musi wyświetlić coś, czego warstwa orkiestracji nie może tego odtworzyć, na przykład karty adaptacyjnej, projektuj tak, aby wątek to wyświetlił, i zwróć dane wyjściowe ze stanem „odpowiedziane”.

Porada

Dowiedz się więcej o zduplikowanych wiadomościach i danych wyjściowych stanu „Odpowiedziano” w artykule Najlepsze praktyki projektowania pozwalające uniknąć zduplikowanych wiadomości. Dowiedz się, jak kontekst jest przekazywany między warstwą orkiestracji a tematem, w sekcji Dystrybucja kontekstu w standardowym środowisku uruchomieniowym.

Zbieraj odpowiedzi, gdy temat nadal wymaga wkładu użytkownika

Niektóre wątki muszą zadawać pytanie lub wyświetlać kartę, na przykład aby umożliwić wybór za pomocą przycisków. To podejście do projektowania jest uzasadnione. Pamiętaj, że otwarte pytanie lub kartę trzeba rozwiązać, gdy użytkownik zmieni kierunek, zanim odpowie.

Przed dodaniem węzła pytania rozważ, czy wartość ta może być zebrana jako wejście zamiast tego. Zachowując węzeł pytania, zajmij się przypadkiem, gdy użytkownik prosi o coś innego, gdy pytanie jest jeszcze otwarte. Dowiedz się więcej w Otwarte pytanie lub zwroty karty po rozpatrzeniu innego wniosku.

Przykład: Zapobieganie ponownemu zadawaniu wyboru karty adaptacyjnej

Temat prosi użytkownika o wybranie kategorii za pomocą Adaptacyjnej Karty:

Do której kategorii należy Twój problem?

[Rozliczenia] [Techniczne] [Konto]

Warstwa orkiestracji otrzymuje tekst pytania w historii rozmowy, ale nie otrzymuje informacji, że karta została wyświetlona lub że użytkownik wybrał przycisk. Po wybraniu przycisku warstwa orkiestracji może zadać to samo pytanie ponownie w formacie tekstowym.

Zaprojektuj temat tak, aby opisał jego działania i uniknąć tego problemu:

Output Typ Na co ustawić
answered True/False To jest prawdą, gdy temat już pokazał użytkownikowi odpowiedź lub polecenie.
choiceReceived True/False Prawda, jeśli użytkownik dokonał już wyboru.
selectedCategory Tekst Za każdym razem, gdy zostanie odebrany wybór, ten wynik zawiera kategorię wybraną przez użytkownika.

Dodaj instrukcję do opisu tematu, aby warstwa orkiestracji wiedziała, co wskazuje na udany przebieg. Polegaj na nadrzędnej instrukcji w Zwracaj wyniki jako dane wyjściowe, a nie wiadomości do użytkownika, aby nowszy model sprawdził te dane wyjściowe, zanim ponownie zada pytanie.

Najlepsze rozwiązania dotyczące tematów w standardowym środowisku uruchomieniowym

  • Nadaj tematowi jasną, konkretną nazwę i opis, który mówi, kiedy go używać (a opcjonalnie, co robić po uruchomieniu).
  • Dodaj pole wejściowe dla każdej wartości wymaganej przez temat i wprowadź opis pola wejściowego jako polecenie dla warstwy orkiestracji.
  • Nazwij dane wejściowe według wartości, którą posiadają, ponieważ nazwa stanowi pytanie na wypadek, gdyby warstwa orkiestracji musiała zapytać użytkownika.
  • Trzymaj w temacie deterministyczną logikę i bariery zabezpieczające, takie jak entity, walidacja i Power Fx.
  • Unikaj zwracania się bezpośrednio do użytkownika w temacie. Używaj węzła wiadomości, węzła pytania lub karty adaptacyjnej tylko wtedy, gdy jest to konieczne.
  • Zwracaj wyniki jako dane wyjściowe, w tym dane wyjściowe o stanie „odpowiedziane”.