Methoden in der Ausdruckssprache für Aktionen
Die Ausdruckssprache von watsonx Assistant kann verwendet werden, um Werte anzugeben, die unabhängig von Werten sind oder von Werten abgeleitet werden, die in Schritten erfasst oder in Sitzungsvariablen gespeichert werden. Sie können einen Ausdruck verwenden, um eine Schrittbedingung oder den Wert einer Sitzungsvariablen zu definieren.
watsonx Assistant basiert auf der Spring Expression Language SpEL ), weist jedoch einige wichtige Unterschiede in der Syntax auf. Detaillierte 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 auf eine Aktionsvariable innerhalb eines Ausdrucks 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 eine Sitzungsvariable in einem Ausdruck zu referenzieren, 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 verweisen 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.
Wenn Sie literale Zeichenfolgenwerte angeben, 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:
time
percentage
currency
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
lautet, lautet die zurückgegebene Zeichenfolge je nach Sommerzeit 2021-11-26 21:41:00 GMT+10.00
oder 2021-11-26 21:41:00 GMT+11.00
.
Die Änderung des Ausgabezeichenfolgeformats gilt auch für Berechnungsmethoden für Datum und Uhrzeit. Wenn die verwendete <date>
-Zeichenfolge beispielsweise das Format yyyy-MM-dd HH:mm:ss
hat, z. B. wenn Sie
die Methode today()
verwenden, hat die Ausgabe dasselbe Format (yyyy-MM-dd HH:mm:ss
). Wenn die <date>
-Zeichenfolge jedoch das Format yyyy-MM-dd HH:mm:ss 'GMT'XXX
hat, z. B. bei Verwendung
der Methode now()
, hat die Ausgabe das Format yyyy-MM-dd HH:mm:ss 'GMT'XXX
.
.reformatDateTime(String format)
Formatiert Datums- und Zeitzeichenfolgen für die Ausgabe. Der Parameter ist ein Formatierungszeichenfolge, die angibt, wie das Datum oder der Zeitwert formatiert wird. Der Formatierungsstring muss unter Verwendung SimpleDateFormat angegeben werden.
Diese Methode gibt eine Zeichenkette zurück, die gemäß dem angegebenen Format formatiert ist:
MM/dd/yyyy
für 12/31/2016h a
für 10pm
Zur Rückgabe des Wochentags:
EEEE
für DienstagE
für Tueu
für 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)
- Bestimmt, ob ein Datums-und Zeitwert vor dem angegebenen Datums-und Zeitargument liegt, wie im folgenden Beispiel gezeigt:
${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 Uhrzeit mit einem Datums- und Uhrzeitwert vergleichen. In diesem Fall wird das Datum ignoriert und nur die Uhrzeiten
werden verglichen. Alle anderen Vergleiche zwischen abweichenden Werten (z. B. das Vergleichen eines Datums mit einer Uhrzeit) geben false
zurück. In output.debug.log_messages
wird eine Ausnahme protokolliert (die
Sie in der Vorschau des 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 identisch ist.
.sameOrAfter(String date/time)
- Bestimmt, ob der Datums-und Uhrzeitwert nach dem Datums-und Uhrzeitargument liegt oder mit diesem identisch ist
- Ist analog zu
.after()
.
.sameOrBefore(String date/time)
- Bestimmt, ob der Datums-und Uhrzeitwert vor dem Datums-und Uhrzeitargument liegt oder mit diesem identisch ist.
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:ss
angegeben.
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 für die Sitzungsvariablen für Start- und Enddatum wird das Datum durch Verkettung des dynamischen Werts für das aktuelle Jahr mit fest codierten Werten für Monat und Tag 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 ) sind, werden als Long-Number-Typen 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 | Symbol |
---|---|
Addition | + |
Division | / |
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 Klassenmethoden 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())
Weitere Informationen zu anderen Methoden finden Sie in der Referenzdokumentation 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 (true
oderfalse
) 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
Weitere Informationen zu anderen Methoden finden Sie in der Referenzdokumentation java.util.Random
Sie können auch Standardmethoden der folgenden Klassen verwenden:
java.lang.Byte
java.lang.Integer
java.lang.Long
java.lang.Double
java.lang.Short
java.lang.Float
String-Methoden
Diese Methoden unterstützen Sie beim Arbeiten mit Text.
Weitere Informationen zur Syntax, die in Methoden mit regulären Ausdrücken verwendet werden soll, finden Sie unter 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 Sitzungsvariable eine Unterzeichenfolge 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 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. Inhärent ist eine dritte Gruppe, die sich aus den beiden Gruppen zusammensetzt. Dies ist die erste groupIndex ) Regex-Gruppe; sie entspricht einer Zeichenfolge, 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 Aktionsvariable enthält:
Hello 123 this is 456.
stellen sich die Ergebnisse wie folgt dar:
- Wenn
<n>
=0
ist, ist der Wert123 this
. - Wenn
<n>
=1
ist, ist der Wert123
. - Wenn
<n>
=2
ist, ist der Wertthis
.
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 gegen ein JSONArray- oder JSONObject-Element aufrufen und sie konvertiert das Array oder
Objekt in eine Zeichenkette, bevor sie den Vergleich durchführt.
Wenn die Aktionsvariable ${step_297}
beispielsweise die Zeichenfolge Hello 123456
erfasst, 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 456
zurü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 true
zurü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, sodass das erste Zeichen in der Zeichenkette auf Index 0 steht.
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 analysiert eine Zeichenfolge, die JSON-Daten enthält, und gibt wie im folgenden Beispiel ein JSON-Objekt oder -Array zurück:
${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 in Kleinbuchstaben umgewandelt wird, wie in diesem Beispiel:
${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 Zeichenkette zurück, die in Großbuchstaben umgewandelt wird, wie in diesem Beispiel:
${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 zur zu verwendenden 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
.
Dieses Beispiel ändert die Dezimalstelle für eine Zahl, die in einem 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 mindestens einen neuen Wert hinzu und gibt true
zurück, wenn die Operation erfolgreich war.
${Items}.add('four', 'five')
Wenn Items
auf ['one', 'two', 'three']
gesetzt ist, wird es in diesem Beispiel aktualisiert und in ['one', 'two', 'three', 'four', 'five']
geändert.
Array.addAll(Array array)
Diese Methode fügt ein Array zu einem anderen hinzu und gibt null
zurück.
${Items}.addAll(${New_items})
Wenn für Items
der Wert ['one', 'two', 'three']
und für New_items
der Wert ['four', 'five', 'six']
angegeben ist, wird in diesem Beispiel Items
in ['one', 'two', 'three', 'four', 'five', 'six']
geändert.
Array.append(value...)
Diese Methode hängt mindestens einen neuen Wert an das Array an und gibt das Ergebnis als neues Array zurück. Das ursprüngliche Array wird nicht geändert.
${Items}.append('four', 'five')
Wenn Items
['one', 'two', 'three']
ist, gibt dieses Beispiel das neue Array ['one', 'two', 'three', 'four', 'five']
zurück.
Array.clear()
Diese Methode entfernt alle Werte aus dem Array und gibt null zurück.
${Items}.clear()
Nach der Auswertung dieses Ausdrucks ist Items
ein leeres Array ([]
).
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 Zeichenfolge oder eine Zahl sein.
${Items}.contains(123)
Wenn Items
[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 dem Eingabewert entspricht. Zeichenfolgen werden unabhängig davon abgeglichen, ob der Wert in Groß-oder Kleinbuchstaben angegeben wird. Der angegebene Wert
kann eine Zeichenfolge oder eine Zahl sein.
${Items}.contains('two')
In diesem Beispiel wird true
zurückgegeben, wenn das Array Items
eine Großschreibung der Zeichenfolge two
enthält (z. B. würde auch TWO
oder Two
übereinstimmen).
Array.filter(temp_var, "temp_var.property operator comparison_value")
Filtert ein Array, indem jedes Array-Element mit einem von Ihnen angegebenen Wert verglichen wird, und gibt ein neues Array zurück, das nur die übereinstimmenden 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 bei der Auswertung aufzunehmen. Wenn das ursprüngliche Array beispielsweise Objekte enthält, die Städte beschreiben, können Siecity
als temporären Variablennamen verwenden. -
property
: Die Elementeigenschaft, nach der gefiltert werden soll Dies muss eine Eigenschaft der Elemente im Quellenarray sein. Geben Sie die Eigenschaft als Eigenschaft vontemp_var
mit der Syntaxtemp_var.property
an. Wenn beispielsweiselatitude
ein gültiger Eigenschaftsname für die Quellenelemente ist, können Sie die Eigenschaft alscity.latitude
angeben. -
operator
: Der Operator, der verwendet werden soll, um den Eigenschaftswert mit dem Vergleichswert zu vergleichen. Sie können einen der folgenden Operatoren verwenden:Unterstützte Filteroperatoren Operator Beschreibung ==
Entspricht >
Ist größer als <
Ist kleiner als >=
Größer-gleich <=
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.
Filterbeispiele
Angenommen, Sie haben ein Array von Objekten, die Städtenamen und deren Bevölkerungsnummern enthalten:
[
{
"name":"Tokyo",
"population":13988129
},
{
"name":"Rome",
"population":2860009
},
{
"name":"Beijing",
"population":21893095
},
{
"name":"Paris",
"population":2165423
}
]
Wenn das Quellenarray in einer Variablen namens ${cities}
gespeichert ist, gibt der folgende Ausdruck ein kleineres Array zurück, das nur Städte mit Populationen größer als 5 Millionen 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 codierten Vergleichswerts können Sie auch auf der Basis eines dynamischen Werts filtern, der in einer Variablen gespeichert ist. Dieses Beispiel filtert anhand eines Populationswerts, der durch eine Kundenantwort in einem vorherigen Schritt angegeben wurde:
${cities}.filter("city", "city.population > ${step_123}")
Wenn Sie Zahlenwerte vergleichen, stellen Sie sicher, dass die Kontextvariable, die in den Vergleich einbezogen wird, 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-indexiert, was bedeutet, dass sich das erste Element im Array an der Indexposition 0
befindet.
${Items}.get(1)
Wenn Items
['one', 'two', 'three']
ist, gibt dieses Beispiel two
zurück.
Die Methode get()
ist eine Alternative zur Verwendung von Klammern ([]
) zum Abrufen eines Elements aus einem Array. Das folgende Beispiel ist ebenfalls gültig und gibt dasselbe Ergebnis zurück:
${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 in einen nullindexierten Wert zu konvertieren. Sie können beispielsweise einen Ausdruck
wie ${Items}.get(${step_123} - 1)
verwenden, um den beabsichtigten 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 one
, two
oder three
auf Zufallsbasis 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 Zeichenfolge oder eine Zahl sein.
${Items}.indexOf(`two`)
Wenn Items
auf ['one', 'two', 'three']
gesetzt ist, gibt dieses Beispiel die Ganzzahl 1
zurück (die die zweite Position im nullindexierten 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önnen beispielsweise eine Variable namens pizza_toppings
verwenden, die das Array ["pepperoni", "ham", "mushrooms"]
enthält. Der folgende Ausdruck konvertiert dieses Array in die
Zeichenfolge pepperoni, ham, mushrooms
:
${toppings_array}.join(', ')
Wenn Sie mit diesem Ausdruck den Wert einer Variablen definieren, dann können Sie diese Variable in der Ausgabe des Assistenten referenzieren, um eine 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 gemäß der von Ihnen angegebenen Vorlage formatiert wird. Die Vorlage kann eine Zeichenfolge, ein JSON-Objekt oder ein Array sein. Die Methode gibt je nach Schablonentyp ein Array von Zeichenfolgen, ein Array von Objekten oder ein Array von Arrays zurück.
Diese Methode ist nützlich, um Informationen als Zeichenfolge zu formatieren, die Sie als Teil der Ausgabe eines Schritts zurückgeben können, oder um Daten in eine andere Struktur umzuwandeln, sodass Sie sie mit einer externen API verwenden können.
In der Vorlage können Sie mit der folgenden Syntax auf Werte aus dem Quellenarray verweisen:
%e.{property}%
Dabei steht {property}
für den Namen der Eigenschaft im Quellenarray.
Angenommen, Ihr Assistent speichert ein Array mit Flugdetails 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 Zeichenfolgen zu erstellen, die diese Flüge in einem benutzerlesbaren Format beschreiben, können Sie den folgenden Ausdruck verwenden:
${Flight_data}.joinToArray("Flight %e.flight% to %e.destination%", true)
Dieser Ausdruck würde das folgende Array von Zeichenfolgen 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 im zurückgegebenen Array beibehält. Wenn retainDataType
auf false
gesetzt oder weggelassen wird, werden Zeichenfolgen
im Eingabe-Array möglicherweise in Zahlen im zurückgegebenen Array konvertiert. Wenn die ausgewählten Werte aus dem Eingabearray beispielsweise "1"
, "2"
und "3"
sind, könnte
das zurückgegebene Array [ 1, 2, 3 ]
sein. Geben Sie für diesen Parameter true
an, um unerwartete Typkonvertierungen zu verhindern.
Komplexe Vorlagen
Eine komplexere Vorlage kann Formatierung enthalten, die die Informationen in einem lesbaren Layout anzeigt. Für eine komplexe Vorlage können Sie die Vorlage in einer Sitzungsvariablen speichern, die Sie dann anstelle einer Zeichenfolge
an die Methode joinToArray
übergeben können.
Diese komplexe Vorlage enthält beispielsweise eine Untergruppe der Array-Elemente und fügt Beschriftungen und Formatierung 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/>
Stellen Sie sicher, dass die Formatierung, die Sie in Ihrer Vorlage verwenden, von der Kanalintegration unterstützt wird, die die Ausgabe des Assistenten anzeigt.
Wenn Sie eine Sitzungsvariable mit dem Namen Template
erstellen und diese Vorlage als Wert zuordnen, können Sie diese Variable in Ihren Ausdrücken verwenden:
${Flight_data}.joinToArray(${Template})
Zur Laufzeit würde die Antwort so 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 Zeichenfolge können Sie eine Vorlage als JSON-Objekt definieren, das eine Möglichkeit bietet, die Formatierung von Informationen aus verschiedenen Systemen zu standardisieren oder Daten in das für einen externen Service erforderliche Format zu transformieren.
In diesem Beispiel wird eine Vorlage als JSON-Objekt definiert, das Flugdetails aus den Elementen extrahiert, die in dem in der Sitzungsvariablen Flight data
gespeicherten Array angegeben sind:
{
"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
['one', 'two', 'three']
ist, gibt dieses Beispiel ['one', 'three']
zurück. Das ursprüngliche Array Items
wird ebenfalls geändert.
Array.removeValue(value)
Diese Methode entfernt das erste Vorkommen des angegebenen Werts aus dem Array und gibt das aktualisierte Array zurück. Der angegebene Wert kann eine Zeichenfolge oder eine Zahl sein.
${Items}.removeValue('two')
Wenn Items
['one', 'two', 'three']
ist, gibt dieses Beispiel ['one', 'three']
zurück. Das ursprüngliche Array Items
wird ebenfalls geändert.
Array.set(Integer index, value)
Diese Methode ersetzt das Element in der angegebenen Indexposition durch den angegebenen Wert und gibt das aktualisierte Array zurück.
${Items}.set(2,'five')
Wenn Items
['one', 'two', 'three']
ist, gibt dieses Beispiel ['one', 'two', 'five']
zurück. Das ursprüngliche Array Items
wird ebenfalls geändert.
Array.size()
Diese Methode gibt die Anzahl der Elemente im Array als Ganzzahl zurück.
${Items}.size()
Wenn Items
['one', 'two', 'three']
ist, gibt dieses Beispiel 3
zurück.
Array.sort()
Diese Methode führt eine Inplace-Sortierung durch und gibt das sortierte Array zurück. Der Standardparameter ist ascending
. Sie können descending
angeben, um die Sortierreihenfolge zu ändern. Alle anderen Parametereinträge
werden ignoriert und ein Protokollfehler wird angezeigt.
${Items}.sort("ascending")
Die Methode vergleicht Zahlen und Zeichenfolgen. Eine Zahl ist immer kleiner als eine Zeichenfolge. Jeder andere Typ wird standardmäßig zum Vergleich in eine Zeichenfolge konvertiert.
Beispiel:
Ursprüngliches Array | Sortiertes Array |
---|---|
[2,1,3,5,4,3,2] | [1,2,2,3,3,4,5] |
["Banana", "Orange", "Apple", "Mango"] | ["Apple", "Banana", "Mango" und "Orange"] |
[3, 2, 4, "1", "10", "12", "Banana", "Orange", 0, "Apple", "Mango"] | [0, 2, 3, 4, "1", "10", "12", "Apple", "Banana", "Mango" und "Orange"] |
Array.transform()
Die Methode Array.transform()
wird nur mit der session_history
-Variablen verwendet. Sie können die Ausgabe der Variablen so
transformieren, 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:
Angaben | 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) |
Kundennachrichtenformat | {$rolePrefix: $userPrefix, "content": $content} |
{$rolePrefix: $userPrefix, "content": $content} |
<s>[INST] <<SYS>>{{ $systemPrompt }} <</SYS>>{{ $user_content }} [/INST] {{ $assistant_content }} </s><s>[INST] {{ $user_content }} [/INST] |
Nachrichtenformat des Assistenten | {$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
auf 'true' gesetzt ist:
Assistent verwendet | Beschreibung |
---|---|
Nur Aktionen | Die Transformation schließt alle Nachrichten aus, bei denen n auf 'true' gesetzt ist. Dies bedeutet, dass eine Kundenfrage eine neue Basisaktion ausgelöst hat. |
Nur Dialog | currentAction wird ignoriert und die Transformation enthält den gesamten Inhalt der Variablen session history . |
Dialog und Aktionen | Die Transformation schließt alle Elemente der Variablen session_history seit dem letzten Start einer Aktion ein, unabhängig davon, ob Dialogmodulknoten ausgelöst werden. |
Die Flags n : true
sind nicht in der Ausgabe der Transformation enthalten.