Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Note
Dieser Artikel beschreibt die Funktionen und das Verhalten von Themen mit einem Konversations-Trigger im Standard-Harness. Erfahren Sie, wie Sie auf Standardfunktionen in Zugriff auf Standard-Agenten und Agentenflüsse zugreifen.
Dieser Artikel konzentriert sich auf Design-Best Practices, um doppelte Nachrichten zu vermeiden. Doppelte Nachrichten entstehen aus Kontextlücken, daher beginnt das Design damit, zu verstehen, wie der Kontext fließt. Siehe das Diagramm in Context Distribution im Standard-Harness , um zu verstehen, wie die Orchestrierungsschicht den Kontext mit jeder Komponente teilt.
Im Standard-Harness ruft der Planer Topics auf dieselbe Weise auf wie Werkzeuge und Agenten. Es liest die Beschreibung jedes Themas, um zu entscheiden, wann es verwendet wird, generiert die Eingaben des Themas aus seinem aktiven Kontext und vom Benutzer und liest die Ausgaben des Themas, wenn das Thema abgeschlossen ist. Ein Thema mit klarer Beschreibung, klar definierten Eingaben und klar definierten Ausgaben verhält sich im Plan wie ein Mini-Agent: Die Orchestrierungsschicht sammelt, was das Thema benötigt, das Thema führt seine Logik aus, es gibt das Produzierte zurück, und die Orchestrierungsschicht formatiert und kommuniziert die Antwort an den Nutzer.
Für den Nutzer fühlt sich ein Mini-Agent gesprächig an. Der Nutzer kann natürlich sprechen, während das Thema die benötigten Eingaben sammelt, Folgefragen stellen und reichhaltige Antworten vom Agenten erhalten.
Tip
Im Standard-Harness die deterministische Logik im Topic belassen und die Benutzerkommunikation der Orchestrierungsschicht überlassen. Sammeln Sie die Werte, die das Thema vor der Ausführung als Eingabe benötigt, und geben Sie die Ausgaben zurück, die es nach der Ausführung erzeugt hat.
Benennen und beschreiben Sie das Thema, damit die Orchestrierungsschicht dorthin routen kann
Die Orchestrierungsschicht verwendet den Themennamen und die Beschreibung, um Anfragen an das Thema weiterzuleiten. Schreibe beide für die Orchestrierungsebene. Gib dem Thema einen klaren, spezifischen Namen, der beschreibt, was es bewirkt.
Schreiben Sie die Beschreibung in zwei Teilen. Erklären Sie zunächst, wann Sie das Thema verwenden sollten. Zweitens: Erklären Sie kurz, was auf Basis der Ausgaben des Themas zu tun ist, einschließlich der Frage, wie die Orchestrierungsschicht Anfragen leiten und Ergebnisse nach dem Ausführen des Themas behandeln soll. Beschreiben Sie nicht die internen Bildschirme oder Schritte des Themas.
Verwenden Sie zum Beispiel die folgende Beschreibung für ein Thema, das Kontosaldoanfragen beantwortet und mit einer Ausgabe answered zurückberichtet:
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.
Sammle Eingaben, bevor das Thema läuft
Gib dem Thema für jeden benötigten Wert einen Input. Die Orchestrierungsschicht kann diese Werte aus ihrem aktiven Kontext und vom Nutzer auf konversative Weise sammeln, bevor das Thema ausgeführt wird. Eine Eingabe wird in eine Variable geliefert, die dann von der Logik des Themas verwendet wird.
Verwenden Sie die Einstellungen für Eingabenamen, Beschreibung, Entität und Validierung, um der Orchestrierungsschicht zu helfen, eine Eingabe genau auszufüllen:
Der Eingabename sagt der Orchestrierungsschicht, was gesammelt wird, und wird verwendet, um die Frage zu formulieren, ob die Orchestrierungsschicht den Benutzer nach dem Wert fragen muss. Benennen Sie es nach dem Wert, nicht nach dem Mechanismus. Zum Beispiel sollte man eine Eingabe
The user's request about...stattOData filterbenennen, damit die Orchestrierungsschicht den Benutzer nicht auffordert, eine Abfrage zu schreiben.Die Eingabebeschreibung ist ein Hinweis auf die Orchestrierungsebene, kein Label für den Benutzer. Nutze es, um der Orchestrierungsschicht zu sagen, wie sie den Wert interpretieren, einschränken oder transformieren soll, bevor das Thema ihn erhält. Die Orchestrierungsschicht kann eine Eingabe aus der Konversation, aus einer früheren Ausgabe oder aus Benutzerprofildaten füllen. Es kann aus einer Menge von Werten wählen, einige Einschränkungen anwenden und Abfragen basierend auf Schemainformationen schreiben.
Eingabebeschreibungen können sogar die Orchestrierungsschicht anweisen, einen Wert in einem bestimmten Format zu erstellen. Zum Beispiel kann ein Thema, das eine Liste filtert, eine Eingabe erhalten, deren Beschreibung der Orchestrierungsschicht erklärt, wie der Filter aus der Anfrage des Benutzers zusammengestellt werden soll, einschließlich der verfügbaren Felder, der Abfragesyntax und einigen wenigen Beispielen.
Entitäten legen den erlaubten Typ und den Bereich für eine Eingabe fest, sodass nur gültige Werte die Logik des Themas erreichen.
Fortgeschrittene Validierung und bedingte Logik, einschließlich Power Fx, fungieren als deterministische Prüfungen. Sie können verhindern, dass ein Input erfüllt wird, oder das Thema am Handeln hindern, wenn eine Bedingung nicht erfüllt ist.
Deterministische Eingabeprüfungen sind ebenso zuverlässig wie Code, daher werden Geschäftsregeln und Compliance-Einschränkungen auch dann respektiert, wenn der Rest des Plans erstellt ist.
Halte die Logik und die Leitplanken im Thema
Behalte die deterministische Arbeit des Themas im Inneren des Themas: die Schritte, die es ausführt, die Berechnungen, die es vornimmt, und die Regeln, die es durchsetzt. Der Maker übt Kontrolle aus und wendet entscheidende Geschäftslogik an, die jedes Mal wie ein Werkzeug auf die gleiche Weise läuft.
Geben Ergebnisse als Ausgaben zurück, nicht als Nachrichten an den Benutzer
Wenn das Topic abgeschlossen ist, gib die von ihm erzeugten Ausgaben zurück, damit die Orchestrierungsschicht diese verwenden und entscheiden kann, wie sie reagieren soll. Bevorzugen Sie diesen Ansatz, anstatt dass das Topic dem Benutzer direkt eine Nachricht sendet. Ein Thema, das an den Benutzer schreibt, während die Orchestrierungsschicht ebenfalls antwortet, ist eine häufige Quelle für doppelte Nachrichten – die Orchestrierungsschicht weiß nicht, dass das Thema bereits geantwortet hat.
Important
Ein Thema, das keine Ausgaben zurückgibt, ist ein Warnsignal. Wenn ein Thema dem Nutzer antwortet, einen Wert sammelt oder eine Karte zeigt, aber nichts zurückgibt, kann die Orchestrierungsschicht nicht sehen, was passiert ist, und könnte dieselbe Anfrage erneut beantworten. Dieses Verhalten ist die häufigste Ursache für doppelte Nachrichten von Themen.
Die folgenden getesteten Ergebnisse werden als zuverlässige Muster für Kontext und Kommunikation dringend empfohlen. Sie gelten unabhängig davon, ob das Thema dem Benutzer direkt antwortet oder alle Informationen an die Orchestrierungsschicht zurückgibt, damit dort die Antwort erzeugt werden kann.
| Output | Description | So verwenden Sie |
|---|---|---|
answered |
Das stimmt, wenn der Nutzer bereits eine zufriedenstellende Antwort auf seine Anfrage innerhalb dieses Themas erhalten hat. | Legen Sie den Wert im Thema auf „true“ fest, sobald es antwortet oder das Ergebnis anzeigt. Siehe die folgende oberste Beispielanweisung, die sicherstellt, dass die Orchestrierungsschicht diesen Teil der Anfrage als beantwortet behandelt und nicht wiederholt. |
choiceReceived |
Das stimmt, wenn der Nutzer bereits seine Auswahl innerhalb dieses Themas getroffen hat. | Setze es auf wahr, sobald der Benutzer eine Auswahl trifft, zum Beispiel indem du eine Kartentaste auswählst. Die Orchestrierungsschicht stellt die Frage nicht erneut. |
balanceValue |
Der Wert, den das Thema abgerufen und dem Nutzer bereits bereitgestellt hat. | Lege sie auf die wichtigen Daten fest, die vom Thema abgerufen wurden, und benenne die Ausgabe dieser Daten. Die Orchestrierungsschicht verwendet sie aus dem Kontext wieder, anstatt sie erneut abzurufen. |
messageSummary |
Eine kurze Zusammenfassung dessen, was dem Nutzer bereits gezeigt wurde, um es im Kontext zu halten. | Stellen Sie sie ein, wenn eine Nachricht Informationen enthält, die der Plan später benötigt. Die Orchestrierungsschicht bleibt sich dessen bewusst, was dem Nutzer gesagt wurde, und wiederholt oder widerspricht dem nicht. |
Allein die Ausgänge sind für ältere Modelle ausreichend. Neuere Modelle benötigen außerdem eine Anweisung auf oberster Ebene, die die Orchestrierungsschicht anweist, die Ausgaben zu überprüfen, bevor sie antwortet.
Diese beispielhafte Top-Level-Instruktion ist ein bewährtes Arbeitsbeispiel. Bearbeite und passe es nach Bedarf an.
Wann immer ein Thema oder Agent angerufen wird, suche immer nach dem 'beantworteten' booleschen Output, bevor du entscheidest, was du antwortest. Themen und Agenten haben ihren eigenen Kommunikationskanal mit dem Nutzer. Wenn 'beantwortet' wahr ist, gehen Sie immer davon aus, dass die Anfrage angemessen mit mindestens einer der Ausgabevariablen beantwortet wurde, und prüfen Sie anhand der Ausgabebeschreibung, welche. Geben Sie keine unangenehme Anerkennung des beantworteten Inhalts. Gib nur die unbeantworteten Ausgaben an und führe das Gespräch beim nächsten Schritt natürlich fort.
Der Begriff Kanal bezieht sich nicht auf einen Integrationskanal. Es handelt sich um ein Prompting-Gerät, das der Orchestrierungsschicht mitteilt, dass der Nutzer die Antwort möglicherweise schon über eine andere Komponente gesehen hat. Je nach Modell des Agenten kann es effektiver sein, eine ähnliche Anweisung in die eigenen Anweisungen des Agenten einzubauen. Erfahren Sie mehr unter Design einer robusten obersten Anweisung, um wiederholte Nachrichten zu vermeiden.
Wenn das Thema etwas anzeigen muss, das die Orchestrierungsschicht nicht reproduzieren kann, z. B. eine Adaptive Card, sollte das Thema dies anzeigen und eine Ausgabe mit dem Status „beantwortet“ zurückgeben.
Tip
Erfahren Sie mehr über doppelte Nachrichten und Answered-State-Ausgaben in Design-Best Practices, um doppelte Nachrichten zu vermeiden. Erfahren Sie, wie Kontext zwischen der Orchestrierungsschicht und einem Thema in der Kontextverteilung im Standard-Harness wechselt.
Sammle Antworten, wenn ein Thema noch Nutzerinput benötigt
Manche Themen müssen eine Frage stellen oder eine Karte anzeigen, zum Beispiel, um eine Auswahl mit Schaltflächen abzufragen. Dieser Designansatz ist gültig. Beachte, dass eine offene Frage oder Karte gelöst werden muss, wenn der Nutzer den Kurs ändert, bevor er antwortet.
Bevor Sie einen Frageknoten hinzufügen, sollten Sie überlegen, ob der Wert stattdessen als Eingabe erfasst werden kann. Wenn du einen Frageknoten behältst, behandle den Fall, in dem der Nutzer nach etwas anderem fragt, während die Frage noch offen ist. Erfahren Sie mehr unter Eine offene Frage oder Kartenrückgabe, nachdem eine andere Anfrage bearbeitet wurde.
Beispiel: Verhindern, dass die Auswahl einer adaptiven Karte erneut abgefragt wird
Ein Thema bittet den Nutzer, eine Kategorie mit einer adaptiven Karte auszuwählen:
Welche Kategorie ist dein Problem?
[Abrechnung] [Technisch] [Konto]
Die Orchestrierungsebene empfängt den Fragetext über den Gesprächsverlauf, aber nicht die Tatsache, dass die Karte angezeigt wurde oder ein Button vom Nutzer ausgewählt wurde. Nachdem der Benutzer einen Button ausgewählt hat, könnte die Orchestrierungsebene dieselbe Frage im Klartext erneut stellen.
Gestalten Sie das Thema so, dass es seine Aktion meldet, um dieses Problem zu vermeiden:
| Output | Typ | Worauf es eingestellt werden sollte |
|---|---|---|
answered |
Wahr/falsch | Das stimmt, wenn das Thema dem Nutzer bereits die Antwort oder den Prompt gezeigt hat. |
choiceReceived |
Wahr/falsch | Das stimmt, wenn der Nutzer bereits eine Entscheidung getroffen hat. |
selectedCategory |
Text | Wann immer eine Wahl empfangen wird, enthält diese Ausgabe die vom Benutzer gewählte Kategorie. |
Füge der Beschreibung des Themas eine Anweisung hinzu, damit die Orchestrierungsschicht weiß, was ein erfolgreicher Durchlauf bedeutet. Stütze dich auf die Anweisung auf oberster Ebene in Gib Ergebnisse als Ausgaben zurück, nicht als Nachrichten an den Benutzer, damit ein neueres Modell diese Ausgaben überprüft, bevor es erneut nachfragt.
Bewährte Methoden für Themen im Standard-Harness
- Gib dem Thema einen klaren, spezifischen Namen und eine Beschreibung, in der steht, wann es verwendet werden soll (und optional, was nach der Ausführung zu tun ist).
- Füge für jeden Wert, den das Thema benötigt, eine Eingabe hinzu und schreibe die Eingabebeschreibung als Prompt in die Orchestrierungsschicht.
- Benennen Sie Eingabefelder nach dem Wert, den sie enthalten, da der Name die Frage formuliert, wenn die Orchestrierungsschicht den Benutzer fragen muss.
- Halte deterministische Logik und Leitplanken wie Entitäten, Validierung und Power Fx im Thema.
- Vermeiden Sie es, dem Nutzer direkt innerhalb des Themas zu schreiben. Verwenden Sie einen Nachrichtenknoten, einen Frageknoten oder eine adaptive Karte nur, wenn es nötig ist.
- Geben Sie Ergebnisse als Ausgaben zurück, einschließlich einer Ausgabe mit Beantwortet-Status.
Verwandte Informationen
- Kontextverteilung im Standard-Harness
- Entwickeln Sie Best Practices, um doppelte Nachrichten zu vermeiden
- Entwickle Subagenten, die doppelte Nachrichten vermeiden
- Fehlerbeseitigung von doppelten Nachrichten und verpassten Antworten
- Folgen Sie den besten Praktiken beim Verfassen von Themen
- Themeneingaben und -ausgaben verwalten
- Agent-Verhalten mit generativer KI orchestrieren
- Generative Orchestrierungsfähigkeiten anwenden