Methoden in der Ausdruckssprache für Aktionen
Die Ausdruckssprache des KI-Assistenten kann zur Angabe von Werten verwendet werden, die unabhängig von den in Schritten erfassten oder in Sitzungsvariablen gespeicherten Werten sind oder von diesen abgeleitet werden. Sie können einen Ausdruck verwenden, um eine Schrittbedingung oder den Wert einer Sitzungsvariablen zu definieren.
Die Ausdruckssprache des KI-Assistenten basiert auf der Spring Expression LanguageSpEL), jedoch mit einigen wichtigen Unterschieden in der Syntax. Ausführliche Hintergrundinformationen zu SpEL, finden Sie unter Spring Expression Language (SpEL).
Sie können SpEL-Ausdrücke auf zwei Arten verwenden:
- Definieren einer Schrittbedingung. Weitere Informationen finden Sie unter Ausdrücke schreiben.
- Zuordnen eines Werts zu einer Sitzungsvariablen. Weitere Informationen finden Sie unter Variablen zum Verwalten von Dialoginformationen verwenden.
Aktionsvariablen referenzieren
Eine Aktionsvariable wird implizit für jeden Schritt erstellt, für den eine Kundeneingabe erwartet wird. Die Variable wird dann an diesen Schritt gebunden. Um innerhalb eines Ausdrucks auf eine Aktionsvariable zu verweisen, müssen Sie die Schritt-ID im Format ' ${step_id} angeben (z. B. ' ${step_771}. Um die Schritt-ID für einen Schritt zu ermitteln, wählen Sie den Schritt aus und sehen Sie sich dann das Ende der URL in Ihrem Browser an.
Sitzungsvariablen referenzieren
Sitzungsvariablen werden explizit im Abschnitt Variablen des Schritts erstellt. Um innerhalb eines Ausdrucks auf eine Sitzungsvariable zu verweisen, müssen Sie die Variablen-ID im Format ' ${variable_id} angeben (z. B. ' ${current_time}. Sie finden die Variablen-ID in der Liste der Variablen. (Weitere Informationen finden Sie unter Variablen zum Verwalten von Dialoginformationen verwenden.)
Wenn Sie einen Ausdruck bearbeiten, können Sie " $ eingeben, um eine Liste der Variablen anzuzeigen, auf die Sie Bezug nehmen können. Wählen Sie eine Variable aus der Liste aus, um die Schritt-ID oder Variablen-ID automatisch einzufügen.
Unterstützte Datentypen
Ausdrücke können atomare JSON-Typen (wie ' integer, ' string, ' number und ' boolean) und zusammengesetzte Datentypen (wie JSON-Arrays ([]) und Objekte ({})) verwenden. Bei der Angabe von literalen String-Werten können Sie entweder einfache (') oder doppelte (") Anführungszeichen verwenden.
Werte, die durch Aktionsschritte von Kunden erfasst werden, verwenden Kundenantworttypen wie Datum (date), Uhrzeit (time), Währung (currency) oder Prozent (percent). Diese Werte werden als JSON-Objekte im folgenden Format gespeichert:
{
"system_type": "{system_type}",
"value": "{value}"
}
Dabei steht {system_type} für einen der folgenden Typen:
timepercentagecurrency
Methoden für Datum und Uhrzeit
Für Datums- und Zeitwerten sind mehrere Methoden verfügbar.
now(String timezone)
Die Methode now() gibt das aktuelle Datum und die aktuelle Uhrzeit für eine angegebene Zeitzone im Format yyyy-MM-dd HH:mm:ss 'GMT'XXX zurück:
now('Australia/Sydney').
Wenn in diesem Beispiel das aktuelle Datum und die aktuelle Uhrzeit " 2021-11-26 11:41:00 sind, lautet die zurückgegebene Zeichenfolge " 2021-11-26 21:41:00 GMT+10.00 oder " 2021-11-26 21:41:00 GMT+11.00, je nach Sommerzeit.
Die Änderung des Formats der Ausgabezeichenfolge gilt auch für die Methoden zur Berechnung von Datum und Uhrzeit. Wenn zum Beispiel die Zeichenkette " <date> im Format " yyyy-MM-dd HH:mm:ss verwendet wird, wie bei der Methode " today(), dann erfolgt die Ausgabe im gleichen Format (yyyy-MM-dd HH:mm:ss). Ist die Zeichenkette " <date> jedoch im Format " yyyy-MM-dd HH:mm:ss 'GMT'XXX, wie z. B. bei der Methode " now(), dann erfolgt die Ausgabe im Format " yyyy-MM-dd HH:mm:ss 'GMT'XXX.
.reformatDateTime(String format)
Formatiert Datums- und Zeitzeichenfolgen für die Ausgabe. Der Parameter ist eine Formatzeichenfolge, die angibt, wie der Datums- oder Zeitwert formatiert werden soll. Die Formatzeichenfolge muss mit der SimpleDateFormat angegeben werden.
Diese Methode gibt eine Zeichenkette zurück, die entsprechend dem angegebenen Format formatiert ist:
MM/dd/yyyyfür 12/31/2016h afür 10pm
Zur Rückgabe des Wochentags:
EEEEfür DienstagEfür Dienstagufür den Tagesindex (1 = Montag, ..., 7 = Sonntag)
Dieser Ausdruck gibt beispielsweise den Wert 17:30:00 als 5:30 PM zurück:
${system_current_date}.reformatDateTime('h:mm a')
Wenn die Eingabezeichenfolge nur eine Zeit enthält, wird das Standarddatum 1970-01-01 in der Ausgabe verwendet. Wenn die Eingabezeichenfolge nur ein Datum enthält, wird die Standardzeit 12 AM (00:00) verwendet.
.before(String date/time)
- Ermittelt, ob ein Datums- und Zeitwert vor dem angegebenen Datums- und Zeitargument liegt, wie in diesem Beispiel:
${system_current_date}.before('2021-11-19')
Sie können ein Datum mit einem anderen Datum oder eine Uhrzeit mit einer anderen Uhrzeit vergleichen. Sie können auch eine Zeit mit einem Datums- und Zeitwert vergleichen. In diesem Fall wird das Datum ignoriert und nur die Zeiten werden verglichen. Alle anderen Vergleiche von nicht übereinstimmenden Werten (z. B. der Vergleich eines Datums mit einer Uhrzeit) geben " false zurück, eine Ausnahme wird in " output.debug.log_messages protokolliert (was Sie in der Vorschau des KI-Assistenten oder in API-Antworten sehen können).
.after(String date/time)
- Bestimmt, ob der Datums- und Zeitwert nach dem Datums- und Zeitargument liegt.
.sameMoment(String date/time)
- Bestimmt, ob der Datums- und Zeitwert mit dem Datums- und Zeitargument übereinstimmt.
.sameOrAfter(String date/time)
- Legt fest, ob der Datums- und Zeitwert nach dem Datum- und Zeitargument liegt oder mit diesem übereinstimmt.
- Ist analog zu
.after().
.sameOrBefore(String date/time)
- Legt fest, ob der Datums- und Zeitwert vor dem Datum- und Zeitargument liegt oder mit diesem übereinstimmt.
Datum und Uhrzeit berechnen
Verwenden Sie die folgenden Methoden, um ein Datum zu berechnen.
| Methode | Beschreibung |
|---|---|
<date>.minusDays(_n_) |
Gibt das Datum des Tages n Tage vor dem angegebenen Datum zurück. |
<date>.minusMonths(_n_) |
Gibt das Datum des Tages n Monate vor dem angegebenen Datum zurück. |
<date>.minusYears(_n_) |
Gibt das Datum des Tages n Jahre vor dem angegebenen Datum zurück. |
<date>.plusDays(_n_) |
Gibt das Datum des Tages n Tage nach dem angegebenen Datum zurück. |
<date>.plusMonths(_n_) |
Gibt das Datum des Tages n Monate nach dem angegebenen Datum zurück. |
<date>.plusYears(n) |
Gibt das Datum des Tages n Jahre nach dem angegebenen Datum zurück. |
Dabei wird <date> im Format yyyy-MM-dd oder yyyy-MM-dd HH:mm:ssangegeben.
Geben Sie beispielsweise den folgenden Ausdruck an, um das morgige Datum abzurufen:
${system_current_date}.plusDays(1)
Verwenden Sie die folgenden Methoden zum Berechnen einer Uhrzeit:
| Methode | Beschreibung |
|---|---|
<time>.minusHours(_n_) |
Gibt die Uhrzeit n Stunden vor der angegebenen Uhrzeit zurück. |
<time>.minusMinutes(_n_) |
Gibt die Uhrzeit n Minuten vor der angegebenen Uhrzeit zurück. |
<time>.minusSeconds(_n_) |
Gibt die Uhrzeit n Sekunden vor der angegebenen Uhrzeit zurück. |
<time>.plusHours(_n_) |
Gibt die Uhrzeit n Stunden nach der angegebenen Uhrzeit zurück. |
<time>.plusMinutes(_n_) |
Gibt die Uhrzeit n Minuten nach der angegebenen Uhrzeit zurück. |
<time>.plusSeconds(_n_) |
Gibt die Zeit n Sekunden nach der angegebenen Zeit zurück. |
Dabei wird <time> im Format HH:mm:ss angegeben.
Geben Sie beispielsweise den folgenden Ausdruck an, um die Uhrzeit in einer Stunde ab dem jetztigen Zeitpunkt abzurufen:
now().plusHours(1)
Mit Zeitspannen arbeiten
Um eine Antwort darüber anzuzeigen, ob das heutige Datum in einen bestimmten Zeitraum fällt, können Sie eine Kombination von zeitbezogenen Methoden verwenden. Wenn Sie beispielsweise jedes Jahr während der Ferienzeit ein Sonderangebot erstellen, können Sie prüfen, ob das heutige Datum zwischen den 25. November und den 24. Dezember dieses Jahres fällt.
Definieren Sie zunächst die relevanten Datumsangaben als Sitzungsvariablen. In den folgenden Ausdrücken der Sitzungsvariablen für das Start- und Enddatum wird das Datum durch Verkettung des dynamischen Werts für das aktuelle Jahr mit fest kodierten Monats- und Tageswerten erstellt:
start_date = now().reformatDateTime('Y') + '-12-24'
end_date = now().reformatDateTime('Y') + '-11-25'
Anschließend können Sie in einer Schrittbedingung angeben, dass die Antwort nur angezeigt werden soll, wenn das aktuelle Datum zwischen dem Start- und Enddatum liegt, die Sie als Sitzungsvariablen definiert haben:
now().after(${start_date}) && now().before(${end_date})
Unterstützung von java.util.Date
Zusätzlich zu den integrierten Methoden können Sie Standardmethoden der Klasse java.util.Date verwenden.
Um beispielsweise das Datum des Tages abzurufen, das eine Woche nach dem heutigen Tag liegt, können Sie die folgende Syntax verwenden:
new Date(new Date().getTime() + (7 * (24*60*60*1000L)))
Dieser Ausdruck ruft zunächst das aktuelle Datum in Millisekunden (seit dem 1. Januar 1970 um 00:00:00 GMT) ab. Außerdem wird die Anzahl an Millisekunden in 7 Tagen berechnet ((24*60*60*1000L) steht für einen Tag in Millisekunden). Anschließend werden 7 Tage zu dem aktuellen Datum addiert. Das Ergebnis ist das vollständige Datum des Tages, das eine Woche nach dem heutigen Tag liegt (z. B. Fri Jan 26 16:30:37 UTC 2018).
Zahlenmethoden
Diese Methoden unterstützen das Abrufen und Umformatieren von Zahlenwerten.
Informationen zum Erkennen von Zahlen in Kundenantworten finden Sie unter Antworttyp auswählen.
Wenn Sie die Positionierung der Dezimalstelle für eine Zahl ändern möchten (z. B. um eine Zahl als Währungswert neu zu formatieren), lesen Sie die Informationen in String-Methode 'format()'.
toDouble()
Konvertiert das Objekt oder Feld in den Zahlentyp 'Double'. Sie können diese Methode für jedes beliebige Objekt oder Feld aufrufen. Wenn die Konvertierung fehlschlägt, wird null zurückgegeben.
toInt()
Konvertiert das Objekt oder Feld in den Zahlentyp 'Integer'. Sie können diese Methode für jedes beliebige Objekt oder Feld aufrufen. Wenn die Konvertierung fehlschlägt, wird null zurückgegeben.
toLong()
Konvertiert das Objekt oder Feld in den Zahlentyp 'Long'. Sie können diese Methode für jedes beliebige Objekt oder Feld aufrufen. Wenn die Konvertierung fehlschlägt, wird null zurückgegeben.
Um eine Zahl des Typs 'Long' in einem SpEL-Ausdruck anzugeben, müssen Sie ein L an die Zahl anhängen, um sie als solche zu kennzeichnen (z. B. 5000000000L). Diese Syntax ist für alle Zahlen erforderlich, die nicht in den 32-Bit-Ganzzahl-Typ passen. Zahlen, die größer als 2^31 (2.147.483.648) oder kleiner als -2 (-2.147.483.648) sind, werden als lange Zahlenarten betrachtet. Zahlen des Typs 'Long' liegen zwischen dem Minimalwert -2^63 und dem Maximalwert 2^63-1 (oder 9.223.372.036.854.775.807).
Standardrechenoperationen
Mit SpEL-Ausdrücken können Sie mathematische Standardgleichungen definieren, bei denen die Operatoren mit den folgenden Symbolen dargestellt werden:
| Rechenoperation | Zeichen |
|---|---|
| Hinzufügung | + |
| Aufteilung | / |
| Multiplikation | * |
| Subtraktion | - |
java.lang.Math()
Mit den Funktionen der Klasse 'java.lang.Math' können Sie einfache numerische Operationen ausführen.
Sie können die Methoden der Klasse verwenden, einschließlich:
max():T(Math).max(${step_297},${step_569})min():T(Math).min(${step_297},${step_569})pow():T(Math).pow(${step_297}.toDouble(),2.toDouble())
Informationen über andere Methoden finden Sie in der java.lang.Math.
java.util.Random()
Gibt eine Zufallszahl zurück. Sie können folgende Syntaxoptionen verwenden:
- Verwenden Sie
new Random().nextBoolean(), um einen booleschen Zufallswert (trueoderfalse) zurückzugeben. - Um eine zufällige doppelte Zahl zwischen 0 (eingeschlossen) und 1 (ausgeschlossen) auszugeben, verwenden Sie
new Random().nextDouble(). - Um eine Zufallszahl zwischen 0 (eingeschlossen) und einer von Ihnen angegebenen Zahl zurückzugeben, verwenden Sie
new Random().nextInt(_n_), wobei n 1 höher als der Anfang des gewünschten Nummernbereichs ist. Wenn Sie beispielsweise eine Zufallszahl zwischen 0 und 10 zurückgeben möchten, geben Sienew Random().nextInt(11)an. - Verwenden Sie
new Random().nextInt(), um eine Zufallszahl aus dem Wertebereich für ganze Zahlen (-2147483648 bis 2147483648) zurückzugeben.
Beispiel: Sie erstellen einen Schritt, der nur für eine zufällig ausgewählte Untergruppe von Kunden ausgeführt wird. Die folgende Schrittbedingung würde bedeuten, dass der Schritt mit einer Wahrscheinlichkeit von 50 % ausgeführt wird:
new Random().nextInt(2) == 1
Informationen über andere Methoden finden Sie in der Referenzdokumentation zujava.util.Random.
Sie können auch Standardmethoden der folgenden Klassen verwenden:
java.lang.Bytejava.lang.Integerjava.lang.Longjava.lang.Doublejava.lang.Shortjava.lang.Float
String-Methoden
Diese Methoden unterstützen Sie beim Arbeiten mit Text.
Einzelheiten zur Syntax von Methoden, die reguläre Ausdrücke verwenden, finden Sie in der RE2.
String.append(Object)
Diese Methode hängt ein Eingabeobjekt (als Zeichenfolge) an eine Zeichenfolge an und gibt eine geänderte Zeichenfolge zurück.
${step_297}.append('next text')
String.contains(String)
Diese Methode gibt " true zurück, wenn die Aktionsvariable oder die Sitzungsvariable eine Teilzeichenkette enthält, was in Bedingungen nützlich ist.
${step_297}.contains('Yes')
String.endsWith(String)
Diese Methode gibt true zurück, wenn die Zeichenfolge mit der Eingabeunterzeichenfolge endet.
${step_297}.endsWith('?')
String.equals(String)
Diese Methode gibt true zurück, wenn die angegebene Zeichenfolge der Aktionsvariablen oder Sitzungsvariablen entspricht.
${step_297}.equals('Yes')
String.equalsIgnoreCase(String)
Diese Methode gibt true zurück, wenn die angegebene Zeichenfolge der Aktionsvariablen oder Sitzungsvariablen unabhängig von der Groß-/Kleinschreibung entspricht.
${step_297}.equalsIgnoreCase('Yes')
String.extract(String regexp, Integer groupIndex)
Diese Methode gibt eine Zeichenfolge aus der Eingabe zurück, die dem angegebenen Gruppenmuster für reguläre Ausdrücke entspricht. Sie gibt eine leere Zeichenfolge zurück, falls keine Übereinstimmung gefunden wird.
Diese Methode dient zum Extrahieren von Übereinstimmungen für verschiedene Regex-Mustergruppen, aber nicht von Übereinstimmungen für ein einzelnes Regex-Muster. Um verschiedene Übereinstimmungen zu finden, siehe die Methode getMatch().
In diesem Beispiel speichert die Aktionsvariable eine Zeichenfolge, die der von Ihnen angegebenen Regex-Mustergruppe entspricht. In dem Ausdruck werden zwei Regex-Mustergruppen definiert, die jeweils in Klammern eingeschlossen sind. Es gibt eine dritte Gruppe, die sich aus diesen beiden Gruppen zusammensetzt. Dies ist die erstegroupIndex 0) Regex-Gruppe; sie stimmt mit einer Zeichenkette überein, die die vollständige Zahlengruppe und Textgruppe enthält. Die zweite Regex-Gruppe (groupIndex 1) stimmt mit dem ersten Vorkommen einer Zahlengruppe überein. Die dritte Gruppe (groupIndex 2) stimmt mit dem ersten Vorkommen einer Textgruppe nach einer Zahlengruppe überein.
${step_297}.extract('([\d]+)(\b [A-Za-z]+)', <n>)
Wenn die Aktionsvariable enthält:
Hello 123 this is 456.
stellen sich die Ergebnisse wie folgt dar:
- Wenn "
<n>=0ist, lautet der Wert "123 this. - Wenn "
<n>=1ist, lautet der Wert "123. - Wenn "
<n>=2ist, lautet der Wert "this.
String.find(String regexp)
Diese Methode gibt true zurück, wenn ein Segment der Zeichenfolge mit dem regulären Eingabeausdruck übereinstimmt. Sie können diese Methode für ein JSONArray- oder JSONObject-Element aufrufen, und sie konvertiert das Array oder Objekt in eine Zeichenkette, bevor sie den Vergleich durchführt.
Wenn beispielsweise die Aktionsvariable " ${step_297} die Zeichenkette " Hello 123456 sammelt, dann gibt der folgende Ausdruck " true zurück:
${step_297}.find('^[^\d]*[\d]{6}[^\d]*$')
Die Bedingung lautet true , da der numerische Teil des Eingabetexts mit dem regulären Ausdruck ^[^\d]*[\d]{6}[^\d]*$ übereinstimmt.
String.getMatch(String regexp, Integer matchIndex)
Diese Methode gibt eine Zeichenfolge zurück, die dem Vorkommen des angegebenen Musters für reguläre Ausdrücke entspricht. Diese Methode gibt eine leere Zeichenfolge zurück, wenn keine Übereinstimmung gefunden wird.
Wenn Übereinstimmungen gefunden werden, werden sie zu dem hinzugefügt, was als ein Array von Übereinstimmungen bezeichnet werden kann. Da die Anzahl der Array-Elemente bei 0 beginnt, würden Sie 2 als Wert für matchIndex angeben, wenn die dritte Übereinstimmung zurückgegeben werden soll. Wenn Sie zum Beispiel eine Textzeichenfolge mit drei Wörtern eingeben, die dem angegebenen Muster entsprechen, können Sie nur die erste, zweite oder dritte Übereinstimmung durch Angabe des zugehörigen Indexwerts zurückgeben.
Im folgenden Beispiel wird nach einer Gruppe von Zahlen in einer Aktionsvariablen gesucht.
${step_297}.getMatch('([\d]+)', 1)
Wenn die Aktionsvariable ${step_297} die Zeichenfolge hello 123 i said 456 and 8910 enthält, gibt der Ausdruck 456zurück.
String.isEmpty()
Diese Methode gibt true zurück, wenn die Zeichenfolge eine leere Zeichenfolge ist, jedoch nicht null. Beispiel:
${step_297}.isEmpty()
String.length()
Diese Methode gibt die Zeichenlänge der Zeichenfolge zurück. Beispiel:
${step_297}.length()
Wenn die Aktionsvariable ${step_297} die Zeichenfolge Hello enthält, gibt dieser Ausdruck 5 zurück.
String.matches(String regexp)
Diese Methode gibt true zurück, wenn die Zeichenfolge mit dem regulären Eingabeausdruck übereinstimmt. Beispiel:
${step_297}.matches('^Hello$')
Wenn die Aktionsvariable ${step_297} die Zeichenfolge Hello enthält, wird dieser Ausdruck als true ausgewertet.
String.startsWith(String)
Diese Methode gibt true zurück, wenn die Zeichenfolge mit der angegebenen Unterzeichenfolge beginnt. Beispiel:
${step_297}.startsWith('What')
Wenn die Aktionsvariable ${step_297} die Zeichenfolge What is your name? enthält, gibt der Ausdruck truezurück.
String.substring(Integer beginIndex, Integer endIndex)
Diese Methode gibt eine Unterzeichenfolge zurück, die mit dem Zeichen beginIndex beginnt und mit dem Zeichen vor endIndex endet. (Das Zeichen für endIndex selbst ist nicht in der Unterzeichenfolge enthalten.) Die Indexwerte sind nullbasiert, d. h. das erste Zeichen in der Zeichenkette steht bei Index 0.
Dieses Beispiel gibt eine Unterzeichenfolge zurück, die bei Index 5 (dem sechsten Zeichen) beginnt und sich bis zum Ende der Zeichenfolge erstreckt:
${step_297}.substring(5, ${step_297}.length())
Wenn die Aktionsvariable ${step_297} die Zeichenfolge This is a string. enthält, gibt dieser Ausdruck is a string. zurück.
String.toJson()
Diese Methode parst eine Zeichenkette, die JSON-Daten enthält, und gibt ein JSON-Objekt oder -Array zurück, wie in diesem Beispiel:
${json_var}.toJson()
Wenn die Sitzungsvariable " ${json_var} die folgende Zeichenfolge enthält:
"{ \"firstname\": \"John\", \"lastname\": \"Doe\" }"
die Methode " toJson() gibt das folgende Objekt zurück:
{
"firstname": "John",
"lastname": "Doe"
}
String.toLowerCase()
Diese Methode gibt die angegebene Zeichenfolge zurück, die wie in diesem Beispiel in Kleinbuchstaben umgewandelt wird:
${step_297}.toLowerCase()
Wenn die Aktionsvariable ${step_297} die Zeichenfolge This is A DOG! enthält, gibt der Ausdruck die Zeichenfolge this is a dog! zurück.
String.toUpperCase()
Diese Methode gibt die ursprüngliche Zeichenfolge zurück, die wie in diesem Beispiel in Großbuchstaben umgewandelt wird:
${step_297}.toUpperCase()
Wenn die Aktionsvariable ${step_297} die Zeichenfolge hi there enthält, gibt diese Methode die Zeichenfolge HI THERE zurück.
String.trim()
Diese Methode schneidet alle Leerzeichen am Anfang und am Ende einer Zeichenfolge ab und gibt die geänderte Zeichenfolge zurück. Beispiel:
${step_297}.trim()
Wenn die Aktionsvariable ${step_297} die Zeichenfolge something is here enthält, gibt diese Methode die Zeichenfolge something is here zurück.
Unterstützung von java.lang.String
Zusätzlich zu den integrierten Methoden können Sie Standardmethoden der Klasse java.lang.String verwenden.
java.lang.String.format()
Sie können die Standardmethode für Java-Zeichenfolgen format() auf Text anwenden. Informationen über die zu verwendende Syntax finden Sie unter Format String Syntax.
In diesem Beispiel werden drei dezimale Ganzzahlen (1, 1 und 2) zu einem Satz hinzugefügt:
T(java.lang.String).format('%d + %d equals %d', 1, 1, 2)
Die resultierende Zeichenfolge lautet 1 + 1 equals 2.
In diesem Beispiel wird die Dezimalstelle für eine Zahl geändert, die durch einen Schritt erfasst wird:
T(String).format('%.2f',${step_297})
Wenn die Variable ${step_297} , die in US-Dollar formatiert werden muss, 4,5 ist, lautet die resultierende Zeichenfolge 4.50.
Array-Methoden
Diese Methoden helfen Ihnen bei der Arbeit mit Arrays.
Array.add(value...)
Diese Methode fügt dem Array einen oder mehrere neue Werte hinzu und gibt ' true zurück, wenn der Vorgang erfolgreich war.
${Items}.add('four', 'five')
Wenn " Items " ['one', 'two', 'three'] ist, wird er in diesem Beispiel zu " ['one', 'two', 'three', 'four', 'five'].
Array.addAll(Array array)
Diese Methode fügt ein Array zu einem anderen hinzu und gibt ' null zurück.
${Items}.addAll(${New_items})
Wenn " Items gleich " ['one', 'two', 'three'] und " New_items gleich " ['four', 'five', 'six'] ist, wird in diesem Beispiel " Items zu " ['one', 'two', 'three', 'four', 'five', 'six']".
Array.append(value...)
Diese Methode fügt einen oder mehrere neue Werte an das Array an und gibt das Ergebnis als neues Array zurück. Das ursprüngliche Array wird nicht verändert.
${Items}.append('four', 'five')
Wenn ' Items gleich ' ['one', 'two', 'three'] ist, gibt dieses Beispiel das neue Array ' ['one', 'two', 'three', 'four', 'five'] zurück.
Array.clear()
Diese Methode löscht alle Werte aus dem Array und gibt null zurück.
${Items}.clear()
Nach der Auswertung dieses Ausdrucks ist " Items ein leeres Feld ([]).
Array.contains(value)
Diese Methode gibt ' true zurück, wenn das Array ein Element enthält, das genau dem Eingabewert entspricht. Der angegebene Wert kann eine Zeichenkette oder eine Zahl sein.
${Items}.contains(123)
Wenn " Items gleich " [123, 456, 789] ist, gibt dieses Beispiel " true zurück.
Array.containsIgnoreCase(value)
Diese Methode gibt ' true zurück, wenn das Array ein Element enthält, das mit dem Eingabewert übereinstimmt. Zeichenfolgen werden unabhängig davon abgeglichen, ob der Wert in Groß- oder Kleinbuchstaben angegeben ist. Der angegebene Wert kann eine Zeichenkette oder eine Zahl sein.
${Items}.contains('two')
Dieses Beispiel gibt ' true zurück, wenn das Array ' Items eine beliebige Großschreibung der Zeichenkette ' two enthält (z. B. würde auch ' TWO oder ' Two passen).
Array.filter(temp_var, "temp_var.property operator comparison_value")
Filtert ein Array, indem es jedes Arrayelement mit einem von Ihnen angegebenen Wert vergleicht und ein neues Array zurückgibt, das nur die passenden Elemente enthält.
Der Filterausdruck besteht aus den folgenden Werten:
temp_var: Ein beliebiger Name für eine temporäre Variable, die verwendet wird, um jedes Array-Element zu speichern, während es ausgewertet wird. Wenn das ursprüngliche Array zum Beispiel Objekte enthält, die Städte beschreiben, könnten Sie "cityals temporären Variablennamen verwenden.property: Die Element-Eigenschaft, nach der Sie filtern möchten. Dies muss eine Eigenschaft der Elemente im Quell-Array sein. Geben Sie die Eigenschaft als eine Eigenschaft von "temp_varan, indem Sie die Syntax "temp_var.propertyverwenden. Wenn zum Beispiel "latitudeein gültiger Eigenschaftsname für die Quellelemente ist, könnten Sie die Eigenschaft als "city.latitudeangeben.operator: Der Operator, der verwendet wird, um den Eigenschaftswert mit dem Vergleichswert zu vergleichen. Sie können jeden der folgenden Operatoren verwenden:Unterstützte Filteroperatoren Bediener Beschreibung ==Entspricht >Ist größer als <Ist kleiner als >=Ist größer-gleich <=Ist kleiner-gleich !=Ist nicht gleich comparison_value: Der Wert, mit dem Sie jeden Eigenschaftswert eines Array-Elements vergleichen möchten. Sie können einen Literalwert angeben oder auf eine Variable verweisen.
Beispiele für Filter
Sie könnten zum Beispiel ein Array von Objekten haben, das Städtenamen und deren Einwohnerzahlen enthält:
[
{
"name":"Tokyo",
"population":13988129
},
{
"name":"Rome",
"population":2860009
},
{
"name":"Beijing",
"population":21893095
},
{
"name":"Paris",
"population":2165423
}
]
Wenn die Ausgangsmatrix in einer Variablen mit dem Namen " ${cities} gespeichert ist, gibt der folgende Ausdruck eine kleinere Matrix zurück, die nur Städte mit mehr als 5 Millionen Einwohnern enthält:
${cities}.filter("city", "city.population > 5000000")
Der Ausdruck gibt das folgende gefilterte Array zurück:
[
{
"name":"Tokyo",
"population":13988129
},
{
"name":"Beijing",
"population":21893095
}
]
Anstelle eines fest kodierten Vergleichswerts können Sie auch auf der Grundlage eines dynamischen Werts filtern, der in einer Variablen gespeichert ist. In diesem Beispiel wird anhand eines Bevölkerungswerts gefiltert, der durch eine Kundenantwort in einem vorherigen Schritt festgelegt wurde:
${cities}.filter("city", "city.population > ${step_123}")
Wenn Sie Zahlenwerte vergleichen, stellen Sie sicher, dass die Kontextvariable, die an dem Vergleich beteiligt ist, auf einen gültigen Wert gesetzt wird, bevor die Filtermethode ausgelöst wird. Beachten Sie, dass null ein gültiger Wert sein kann, wenn es in dem Array-Element enthalten sein kann, das mit diesem Wert verglichen wird.
Array.get(Integer index)
Diese Methode gibt das Element aus dem Array zurück, das sich an der angegebenen Indexposition befindet. Arrays sind null-indiziert, d.h. das erste Element im Array befindet sich an der Indexposition ' 0.
${Items}.get(1)
Wenn " Items gleich " ['one', 'two', 'three'] ist, gibt dieses Beispiel " two zurück.
Die Methode " get() ist eine Alternative zur Verwendung von Klammern ([]), um ein Element aus einem Array abzurufen. Das folgende Beispiel ist ebenfalls gültig und liefert das gleiche Ergebnis:
${Items}[1]
Wenn Sie einen Wert verwenden, der von einem Kunden angegeben wird, um ein Element aus einem Array auszuwählen, müssen Sie möglicherweise 1 subtrahieren, um einen Wert mit Null-Index zu erhalten. Sie könnten zum Beispiel einen Ausdruck wie " ${Items}.get(${step_123} - 1) verwenden, um den gewünschten Wert abzurufen.
Array.getRandomItem()
Diese Methode gibt ein zufällig ausgewähltes Element aus dem Array zurück.
${Items}.getRandomItem()
Wenn " Items gleich " ['one', 'two', 'three'] ist, gibt dieses Beispiel nach dem Zufallsprinzip " one, " two oder " three zurück.
Array.indexOf(value)
Diese Methode gibt die Indexposition des ersten Vorkommens des Eingabewerts im Array zurück, oder ' -1, wenn das Array den Eingabewert nicht enthält. Der angegebene Wert kann eine Zeichenkette oder eine Zahl sein.
${Items}.indexOf(`two`)
Wenn " Items gleich " ['one', 'two', 'three'] ist, wird in diesem Beispiel die Ganzzahl " 1 zurückgegeben (die die zweite Position in dem mit Null indizierten Array angibt).
Array.join(String delimiter)
Diese Methode verknüpft alle Werte in diesem Array zu einer Zeichenfolge. Werte werden in Zeichenfolgen konvertiert und durch das eingegebene Begrenzungszeichen voneinander getrennt.
Sie könnten zum Beispiel eine Variable mit dem Namen " pizza_toppings verwenden, die das Array " ["pepperoni", "ham", "mushrooms"] enthält. Der folgende Ausdruck wandelt dieses Array in die Zeichenkette " pepperoni, ham, mushrooms um:
${toppings_array}.join(', ')
Wenn Sie diesen Ausdruck verwenden, um den Wert einer Variablen zu definieren, können Sie diese Variable in der Ausgabe Ihres KI-Assistenten referenzieren, um eine für Menschen lesbare Nachricht zu erstellen (z. B. " You have selected the following toppings: pepperoni, ham, mushrooms).
JSONArray.joinToArray(template, retainDataType)
Diese Methode extrahiert Informationen aus jedem Element im Array und erstellt ein neues Array, das entsprechend der von Ihnen angegebenen Vorlage formatiert ist. Die Vorlage kann eine Zeichenkette, ein JSON-Objekt oder ein Array sein. Die Methode gibt ein Array von Strings, ein Array von Objekten oder ein Array von Arrays zurück, je nach Typ der Vorlage.
Diese Methode ist nützlich für die Formatierung von Informationen als Zeichenkette, die Sie als Teil der Ausgabe eines Schritts zurückgeben können, oder für die Umwandlung von Daten in eine andere Struktur, damit Sie sie mit einer externen API verwenden können.
In der Vorlage können Sie mit der folgenden Syntax auf Werte aus dem Quell-Array verweisen:
%e.{property}%
wobei ' {property} den Namen der Eigenschaft im Quell-Array darstellt.
Angenommen, Ihr KI-Assistent speichert ein Array mit Flugdaten in einer Sitzungsvariablen. Die gespeicherten Daten könnten wie folgt aussehen:
"flights": [
{
"flight": "AZ1040",
"origin": "JFK",
"carrier": "Alitalia",
"duration": 485,
"destination": "FCO",
"arrival_date": "2019-02-03",
"arrival_time": "07:00",
"departure_date": "2019-02-02",
"departure_time": "16:45"
},
{
"flight": "DL1710",
"origin": "JFK",
"carrier": "Delta",
"duration": 379,
"destination": "LAX",
"arrival_date": "2019-02-02",
"arrival_time": "10:19",
"departure_date": "2019-02-02",
"departure_time": "07:00"
},
{
"flight": "VS4379",
"origin": "BOS",
"carrier": "Virgin Atlantic",
"duration": 385,
"destination": "LHR",
"arrival_date": "2019-02-03",
"arrival_time": "09:05",
"departure_date": "2019-02-02",
"departure_time": "21:40"
}
]
Um ein Array von Strings zu erstellen, die diese Flüge in einer für den Benutzer lesbaren Form beschreiben, könnten Sie den folgenden Ausdruck verwenden:
${Flight_data}.joinToArray("Flight %e.flight% to %e.destination%", true)
Dieser Ausdruck würde das folgende Array von Strings zurückgeben: ' ["Flight AZ1040 to FCO","Flight DL1710 to LAX","Flight VS4379 to LHR"].
Der optionale Parameter " retainDataType gibt an, ob die Methode den Datentyp aller Eingabewerte in dem zurückgegebenen Array beibehält. Wenn ' retainDataType auf ' false gesetzt oder weggelassen wird, können in manchen Situationen Strings im Eingabe-Array in Zahlen im zurückgegebenen Array umgewandelt werden. Wenn beispielsweise die ausgewählten Werte aus dem Eingabefeld " "1", " "2" und " "3" sind, könnte das zurückgegebene Feld " [ 1, 2, 3 ] lauten. Um unerwartete Typkonvertierungen zu vermeiden, geben Sie für diesen Parameter ' true an.
Komplexe Vorlagen
Eine komplexere Vorlage kann eine Formatierung enthalten, die die Informationen in einem lesbaren Layout anzeigt. Bei einer komplexen Vorlage kann es sinnvoll sein, die Vorlage in einer Sitzungsvariablen zu speichern, die Sie dann anstelle eines Strings an die Methode " joinToArray übergeben können.
Diese komplexe Vorlage enthält zum Beispiel eine Teilmenge der Array-Elemente und fügt Beschriftungen und Formatierungen hinzu:
<br/>Flight number: %e.flight% <br/> Airline: %e.carrier% <br/> Departure date: %e.departure_date% <br/> Departure time: %e.departure_time% <br/> Arrival time: %e.arrival_time% <br/>
Vergewissern Sie sich, dass jede Formatierung, die Sie in Ihrer Vorlage verwenden, von der Kanalintegration unterstützt wird, die die Ausgabe des KI-Assistenten anzeigt.
Wenn Sie eine Sitzungsvariable mit dem Namen " Template erstellen und ihr diese Vorlage als Wert zuweisen, können Sie diese Variable in Ihren Ausdrücken verwenden:
${Flight_data}.joinToArray(${Template})
Zur Laufzeit würde die Antwort wie folgt aussehen:
Flight number: AZ1040
Airline: Alitalia
Departure date: 2019-02-02
Departure time: 16:45
Arrival time: 07:00
Flight number: DL1710
Airline: Delta
Departure date: 2019-02-02
Departure time: 07:00
Arrival time: 10:19
Flight number: VS4379
Airline: Virgin Atlantic
Departure date: 2019-02-02
Departure time: 21:40
Arrival time: 09:05
JSON-Vorlagen
Anstelle einer Zeichenkette können Sie eine Vorlage als JSON-Objekt definieren, um die Formatierung von Informationen aus verschiedenen Systemen zu standardisieren oder um Daten in das für einen externen Dienst erforderliche Format umzuwandeln.
In diesem Beispiel wird eine Vorlage als JSON-Objekt definiert, das Flugdetails aus den Elementen extrahiert, die in dem Array angegeben sind, das in der Sitzungsvariablen " Flight data gespeichert ist:
{
"departure": "Flight %e.flight% departs on %e.departure_date% at %e.departure_time%.",
"arrival": "Flight %e.flight% arrives on %e.arrival_date% at %e.arrival_time%."
}
Mit dieser Vorlage gibt die Methode " joinToArray() ein neues Array von Objekten mit der angegebenen Struktur zurück.
Array.remove(Integer index)
Diese Methode entfernt das Element an der angegebenen Indexposition aus dem Array und gibt das aktualisierte Array zurück.
${Items}.remove(1)
Wenn " Items gleich " ['one', 'two', 'three'] ist, gibt dieses Beispiel " ['one', 'three'] zurück. Das ursprüngliche ' Items wird ebenfalls an dieser Stelle geändert.
Array.removeValue(value)
Diese Methode entfernt das erste Vorkommen des angegebenen Wertes aus dem Array und gibt das aktualisierte Array zurück. Der angegebene Wert kann eine Zeichenkette oder eine Zahl sein.
${Items}.removeValue('two')
Wenn " Items gleich " ['one', 'two', 'three'] ist, gibt dieses Beispiel " ['one', 'three'] zurück. Das ursprüngliche ' Items wird ebenfalls an dieser Stelle geändert.
Array.set(Integer index, value)
Diese Methode ersetzt das Element an der angegebenen Indexposition durch den angegebenen Wert und gibt das aktualisierte Array zurück.
${Items}.set(2,'five')
Wenn " Items gleich " ['one', 'two', 'three'] ist, gibt dieses Beispiel " ['one', 'two', 'five'] zurück. Das ursprüngliche ' Items wird ebenfalls an dieser Stelle geändert.
Array.size()
Diese Methode gibt die Anzahl der Elemente im Array als Ganzzahl zurück.
${Items}.size()
Wenn " Items gleich " ['one', 'two', 'three'] ist, gibt dieses Beispiel " 3 zurück.
Array.sort()
Diese Methode führt eine Sortierung an Ort und Stelle durch und gibt das sortierte Array zurück. Der Standardparameter ist " ascending. Sie können ' descending angeben, um die Sortierreihenfolge zu ändern. Jede andere Parametereingabe wird ignoriert und ein Protokollfehler erscheint.
${Items}.sort("ascending")
Die Methode vergleicht Zahlen und Zeichenketten. Eine Zahl ist immer kleiner als eine Zeichenkette. Jeder andere Typ wird zum Vergleich standardmäßig in String konvertiert.
Zum Beispiel:
| Ursprüngliche Anordnung | Sortiertes Array |
|---|---|
| [2,1,3,5,4,3,2] | [1,2,2,3,3,4,5] |
| ["Banane", "Orange", "Apfel", "Mango"] | ["Apfel", "Banane", "Mango", "Orange"] |
| [3, 2, 4, "1", "10", "12", "Banane", "Orange", 0, "Apfel", "Mango"] | [0, 2, 3, 4, "1", "10", "12", "Apfel", "Banane", "Mango", "Orange"] |
Array.transform()
Die Methode " Array.transform() wird nur mit " variable session_history verwendet. Sie können die Ausgabe der Variablen so umwandeln, dass sie einem bestimmten generativen KI-System entspricht.
Tabelle: Signaturen für Chatformate zeigt Signaturen, die Sie für die verschiedenen Chatformate verwenden können:
| Einzelheiten | OpenAI | Google PaLM2 | Llama2 |
|---|---|---|---|
| Signatur | transform(String rolePrefix, String userPrefix, String assistantPrefix, optional Boolean currentAction=false) |
transform(String rolePrefix, String userPrefix, String assistantPrefix, optional Boolean currentAction=false) |
transform(optional String systemPrompt, optional Boolean currentAction=false) |
| Format der Kundennachricht | {$rolePrefix: $userPrefix, "content": $content} |
{$rolePrefix: $userPrefix, "content": $content} |
<s>[INST] <<SYS>>{{ $systemPrompt }} <</SYS>>{{ $user_content }} [/INST] {{ $assistant_content }} </s><s>[INST] {{ $user_content }} [/INST] |
| Format der Assistentenmeldung | {$rolePrefix: $assistantPrefix, "content": $content} |
{$rolePrefix: $assistantPrefix, "content": $content} |
Nicht zutreffend |
| Beispiel | ${system_session_history}.transform("role", "user", "assistant") |
${system_session_history}.transform("author", "USER", "AI") |
${system_session_history}.transform("<your system prompt>") |
Wenn ' currentAction wahr ist:
| AI-Assistent verwendet | Beschreibung |
|---|---|
| Nur Aktionen | Die Umwandlung schließt alle Nachrichten aus, bei denen " nwahr ist, was bedeutet, dass eine Kundenfrage eine neue Basisaktion ausgelöst hat. |
| Nur Dialog | currentAction wird ignoriert, und die Transformation umfasst den gesamten Inhalt der Variablen ' session history. |
| Dialog und Aktionen | Die Transformation umfasst alles, was seit dem letzten Start einer Aktion in der Variablen ' session_history steht, unabhängig davon, ob Dialogknoten ausgelöst wurden oder nicht. |
Die ' n : true -Flags sind in der Ausgabe von transform nicht enthalten.