Metodi del linguaggio delle espressioni per le azioni
Il linguaggio dell'espressione watsonx Assistant può essere utilizzato per specificare valori indipendenti o derivati da valori raccolti in passi o archiviati in variabili di sessione. È possibile utilizzare un'espressione per definire una condizione di fase o per definire il valore di una variabile di sessione.
Il linguaggio dell'espressione watsonx Assistant si basa su Spring Expression Language (SpEL), ma con importanti differenze di sintassi. Per informazioni dettagliate su SpEL, vedere Spring Expression Language(SpEL).
È possibile utilizzare le espressioni SpEL in due modi:
- Definizione di una condizione di fase. Per ulteriori informazioni, consultare Scrittura di espressioni.
- Assegnazione di un valore a una variabile di sessione. Per ulteriori informazioni, vedi Utilizzo delle variabili per gestire le informazioni sulla conversazione.
Riferimento alle variabili di azione
Una variabile di azione viene creata implicitamente per qualsiasi passo che prevede l'input del cliente e la variabile è collegata al passo. Per fare riferimento a una variabile azione all'interno di un'espressione, è necessario specificare
l'ID passo utilizzando il formato ${step_id}
(ad esempio, ${step_771}
. Per trovare l'ID passo per un passo, selezionare il passo e guardare la parte finale dell'URL ( URL ) nel browser.
Riferimento alle variabili di sessione
Le variabili di sessione vengono create esplicitamente nella sezione Variabili del passo. Per fare riferimento a una variabile di sessione all'interno di un'espressione, è necessario specificare l'ID variabile utilizzando il
formato ${variable_id}
(ad esempio, ${current_time}
. È possibile trovare l'ID variabile nell'elenco di variabili. (Per ulteriori informazioni, consultare Utilizzo delle variabili per gestire le informazioni di conversazione.)
Quando si modifica un'espressione, è possibile immettere $
per visualizzare un elenco di variabili a cui è possibile fare riferimento. Selezionare una variabile dall'elenco per inserire automaticamente l'ID passo o l'ID variabile.
Tipi di dati supportati
Le espressioni possono utilizzare tipi JSON atomici (come integer
, string
, number
e boolean
) e tipi di dati composti (come array JSON ([]
) e oggetti ({}
). Quando si
specificano valori stringa letterali, è possibile utilizzare virgolette singole ('
) o doppie ("
).
I valori raccolti dai passi di azione dai clienti utilizzano i tipi di risposta del cliente, ad esempio data, ora, valuta o percentuale. Questi valori vengono memorizzati come oggetti JSON nel formato seguente:
{
"system_type": "{system_type}",
"value": "{value}"
}
dove {system_type}
è uno dei seguenti tipi:
time
percentage
currency
Metodi di data e ora
Sono disponibili diversi metodi per lavorare con i valori di data e ora.
now(String timezone)
Il metodo now()
restituisce la data e l'ora correnti per un fuso orario specificato, nel formato yyyy-MM-dd HH:mm:ss 'GMT'XXX
:
now('Australia/Sydney').
In questo esempio, se la data e l'ora correnti è 2021-11-26 11:41:00
, la stringa restituita è 2021-11-26 21:41:00 GMT+10.00
o 2021-11-26 21:41:00 GMT+11.00
in base all'ora legale.
La modifica del formato della stringa di output è applicabile anche ai metodi di calcolo di data e ora. Ad esempio, se la stringa <date>
utilizzata è nel formato yyyy-MM-dd HH:mm:ss
, ad esempio quando si utilizza
il metodo today()
, l'output è nello stesso formato (yyyy-MM-dd HH:mm:ss
). Tuttavia, se la stringa <date>
è nel formato yyyy-MM-dd HH:mm:ss 'GMT'XXX
, come quando si utilizza il metodo
now()
, l'output è nel formato yyyy-MM-dd HH:mm:ss 'GMT'XXX
.
.reformatDateTime(String format)
Formatta le stringhe di data e ora per l'output. Il parametro è una stringa di formato che specifica come viene formattato il valore di data o ora. La stringa di formato deve essere specificata utilizzando la sintassi Java SimpleDateFormat.
Questo metodo restituisce una stringa che è formattata in base al formato specificato:
MM/dd/yyyy
per 12/31/2016h a
per 10pm
Per restituire il giorno della settimana:
EEEE
per martedìE
per tonalitàu
per l'indice del giorno (1 = lunedì, ..., 7 = domenica)
Ad esempio, questa espressione restituisce il valore 17:30 come 5:30 PM
:
${system_current_date}.reformatDateTime('h:mm a')
Se la stringa di input include solo un'ora, nell'output viene utilizzata la data predefinita 1970-01-01
. Se la stringa di input include solo una data, viene utilizzata l'ora predefinita 12 AM (00:00)
.
.before(String date/time)
- Determina se un valore di data e ora è precedente all'argomento di data e ora specificato, come in questo esempio:
${system_current_date}.before('2021-11-19')
È possibile confrontare una data con un'altra data o un'ora con un'altra ora. È inoltre possibile confrontare un'ora con un valore data e ora, nel qual caso la data viene ignorata e vengono confrontate solo le ore. Qualsiasi altro confronto
di valori non corrispondenti (ad esempio, il confronto di una data con un'ora) restituisce false
, viene registrata un'eccezione in output.debug.log_messages
(che puoi vedere nell'anteprima dell'assistente o nelle
risposte API).
.after(String date/time)
- Determina se il valore data e ora è successivo all'argomento data e ora.
.sameMoment(String date/time)
- Determina se il valore data e ora è uguale all'argomento data e ora.
.sameOrAfter(String date/time)
- Determina se il valore data e ora è successivo o uguale all'argomento data e ora.
- Simile a
.after()
.
.sameOrBefore(String date/time)
- Determina se il valore di data e ora è precedente o uguale all'argomento di data e ora.
Calcoli di data e ora
Utilizza i seguenti metodi per calcolare una data.
Metodo | Descrizione |
---|---|
<date>.minusDays(_n_) |
Restituisce la data del giorno n giorni prima della data specificata. |
<date>.minusMonths(_n_) |
Restituisce la data del giorno n mesi prima della data specificata. |
<date>.minusYears(_n_) |
Restituisce la data del giorno n anni prima della data specificata. |
<date>.plusDays(_n_) |
Restituisce la data del giorno n giorni dopo la data specificata. |
<date>.plusMonths(_n_) |
Restituisce la data del giorno n mesi dopo la data specificata. |
<date>.plusYears(n) |
Restituisce la data del giorno n anni dopo la data specificata. |
dove <date>
è specificato nel formato yyyy-MM-dd
o yyyy-MM-dd HH:mm:ss
.
Ad esempio, per ottenere la data di domani, specificare la seguente espressione:
${system_current_date}.plusDays(1)
Utilizzare i seguenti metodi per calcolare un tempo.
Metodo | Descrizione |
---|---|
<time>.minusHours(_n_) |
Restituisce l'ora n ore prima dell'ora specificata. |
<time>.minusMinutes(_n_) |
Restituisce l'ora n minuti prima dell'ora specificata. |
<time>.minusSeconds(_n_) |
Restituisce l'ora n secondi prima dell'ora specificata. |
<time>.plusHours(_n_) |
Restituisce l'ora n ore dopo l'ora specificata. |
<time>.plusMinutes(_n_) |
Restituisce l'ora n minuti dopo l'ora specificata. |
<time>.plusSeconds(_n_) |
Restituisce l'ora n secondi dopo l'ora specificata. |
dove <time>
è specificato nel formato HH:mm:ss
.
Ad esempio, per ottenere l'ora a partire da un'ora, specificare la seguente espressione:
now().plusHours(1)
Utilizzo degli intervalli di tempo
Per mostrare una risposta in base al fatto che la data odierna rientri in un certo intervallo di tempo, è possibile utilizzare una combinazione di metodi legati al tempo. Ad esempio, se ogni anno fate un'offerta speciale durante le festività natalizie, potreste controllare se la data odierna cade tra il 25 novembre e il 24 dicembre di quest'anno.
Innanzitutto, definire le date di interesse come variabili di sessione. Nelle seguenti espressioni della variabile di sessione data iniziale e data finale, la data viene costruita concatenando il valore dinamico dell'anno corrente con i valori hardcoded del mese e del giorno:
start_date = now().reformatDateTime('Y') + '-12-24'
end_date = now().reformatDateTime('Y') + '-11-25'
Poi, in una condizione di passo, si può indicare che si vuole mostrare la risposta solo se la data corrente cade tra le date di inizio e fine definite come variabili di sessione:
now().after(${start_date}) && now().before(${end_date})
java.util.Date
supporto
Oltre ai metodi integrati, puoi utilizzare i metodi standard della classe java.util.Date
.
Ad esempio, per ottenere la data del giorno che cade a una settimana da oggi, si può usare la seguente sintassi:
new Date(new Date().getTime() + (7 * (24*60*60*1000L)))
Questa espressione richiama innanzitutto la data corrente in millisecondi (da January 1, 1970, 00:00:00 GMT). Inoltre, calcola il numero di millisecondi in 7 giorni ((24*60*60*1000L)
rappresenta un giorno in millisecondi). Quindi
aggiunge 7 giorni alla data corrente. Il risultato è la data completa del giorno che cade una settimana da oggi (ad esempio, Fri Jan 26 16:30:37 UTC 2018
).
Metodi numerici
Questi metodi ti consentono di acquisire e riformattare i valori numerici.
Per informazioni sul riconoscimento dei numeri nelle risposte dei clienti, vedi Scelta di un tipo di risposta.
Per modificare la posizione decimale di un numero (ad esempio, per riformattare un numero come valore di valuta), vedere il metodo String format().
toDouble()
Converte l'oggetto o il campo nel tipo di numero Doppio. Puoi chiamare questo metodo su qualsiasi oggetto o campo. Se la conversione fallisce, viene restituito null
.
toInt()
Converte l'oggetto o il campo nel tipo di numero Intero. Puoi chiamare questo metodo su qualsiasi oggetto o campo. Se la conversione fallisce, viene restituito null
.
toLong()
Converte l'oggetto o il campo nel tipo di numero Lungo. Puoi chiamare questo metodo su qualsiasi oggetto o campo. Se la conversione fallisce, viene restituito null
.
Per specificare un tipo di numero Long in una espressione SpEL, devi accodare un L
al numero per identificarlo come tale (ad esempio, 5000000000L
). Questa sintassi è richiesta per tutti i numeri che non rientrano
nel tipo di numero intero a 32 bit. I numeri maggiori di 2^31 (2.147.483.648) o minori di -2 (-2.147.483.648) sono considerati numeri lunghi. I tipi di numero Lungo hanno un valore minimo di -2^63 e un valore massimo di 2^63-1 (o 9.223.372.036.854.775.807).
Matematica standard
Utilizza le espressioni SpEL per definire le equazioni matematiche standard dove gli operatori sono rappresentati utilizzando questi simboli:
Operazione aritmetica | Simbolo |
---|---|
addizione | + |
divisione | / |
moltiplicazione | * |
sottrazione | - |
java.lang.Math()
È possibile utilizzare le funzioni della classe java.lang.Math per eseguire operazioni numeriche di base.
È possibile utilizzare i metodi della Classe, tra cui:
-
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())
Per informazioni sugli altri metodi, consultare la documentazione di riferimento di java.lang.Math.
java.util.Random()
Restituisce un numero casuale. È possibile utilizzare una delle seguenti opzioni di sintassi:
- Per restituire un valore booleano casuale (
true
ofalse
), utilizzarenew Random().nextBoolean()
. - Per restituire un numero doppio casuale compreso tra 0 (incluso) e 1 (escluso), si usa
new Random().nextDouble()
- Per restituire un numero intero casuale compreso tra 0 (incluso) e un numero specificato dall'utente, utilizzare
new Random().nextInt(_n_)
, dove n è maggiore di 1 rispetto all'intervallo di numeri desiderato. Ad esempio, se si vuole restituire un numero casuale compreso tra 0 e 10, specificarenew Random().nextInt(11)
. - Per restituire un intero casuale dall'intero intervallo di valori interi (da -2147483648 a 2147483648), utilizzare
new Random().nextInt()
.
Ad esempio, è possibile creare un passo che viene eseguito solo per un sottoinsieme di clienti selezionato casualmente. La seguente condizione del passo indica che il passo ha il 50% di possibilità di esecuzione:
new Random().nextInt(2) == 1
Per informazioni sugli altri metodi, consultare la documentazione di riferimento di java.util.Random.
È inoltre possibile utilizzare i metodi standard delle seguenti classi:
java.lang.Byte
java.lang.Integer
java.lang.Long
java.lang.Double
java.lang.Short
java.lang.Float
Metodi stringa
Questi metodi aiutano a lavorare con il testo.
Per i dettagli relativi alla sintassi da utilizzare nei metodi che implicano espressioni regolari, consultare RE2 Riferimento alla sintassi.
String.append(Object)
Questo metodo aggiunge un oggetto di input (come stringa) a una stringa e restituisce una stringa modificata.
${step_297}.append('next text')
String.contains(String)
Questo metodo restituisce true
se la variabile azione o la variabile sessione contiene una sottostringa, utile nelle condizioni.
${step_297}.contains('Yes')
String.endsWith(String)
Questo metodo restituisce true
se la stringa termina con la sottostringa in ingresso.
${step_297}.endsWith('?')
String.equals(String)
Questo metodo restituisce true
se la stringa specificata è uguale alla variabile di azione o alla variabile di sessione.
${step_297}.equals('Yes')
String.equalsIgnoreCase(String)
Questo metodo restituisce true
se la stringa specificata è uguale alla variabile azione o alla variabile di sessione indipendentemente dal caso.
${step_297}.equalsIgnoreCase('Yes')
String.extract(String regexp, Integer groupIndex)
Questo metodo restituisce una stringa dall'input che corrisponde al modello di gruppo di espressioni regolari specificato. Restituisce una stringa vuota se non vengono trovate corrispondenze.
Questo metodo è progettato per estrarre le corrispondenze per i diversi gruppi di modelli regex, non le diverse corrispondenze per un singolo modello regex. Per trovare diverse corrispondenze, vedere il metodo getMatch().
In questo esempio, la variabile azione salva una stringa che corrisponde al gruppo di pattern regex specificato dall'utente. Nell'espressione, sono definiti due gruppi di modelli regex, ciascuno racchiuso tra parentesi. Inerente è un terzo gruppo che è composto dai due gruppi. Questo è il primo gruppo regex groupIndex 0); corrisponde a una stringa che contiene l'intero gruppo di numeri e il gruppo di testo. Il secondo gruppo regex (groupIndex 1) corrisponde alla prima ricorrenza di un gruppo di numeri. Il terzo gruppo (groupIndex 2) corrisponde alla prima ricorrenza di un gruppo di testo dopo un gruppo di numeri.
${step_297}.extract('([\d]+)(\b [A-Za-z]+)', <n>)
Se la variabile di azione contiene:
Hello 123 this is 456.
i risultati sono i seguenti:
- Quando
<n>
=0
, il valore è123 this
. - Quando
<n>
=1
, il valore è123
. - Quando
<n>
=2
, il valore èthis
.
String.find(String regexp)
Questo metodo restituisce true
se un qualsiasi segmento della stringa corrisponde all'espressione regolare inserita. È possibile richiamare questo metodo per un elemento JSONArray o JSONObject e il metodo converte l'array o l'oggetto
in una stringa prima di effettuare il confronto.
Ad esempio, se la variabile azione ${step_297}
raccoglie la stringa Hello 123456
, la seguente espressione restituisce true
:
${step_297}.find('^[^\d]*[\d]{6}[^\d]*$')
La condizione è true
perché la parte numerica del testo in ingresso corrisponde all'espressione regolare ^[^\d]*[\d]{6}[^\d]*$
.
String.getMatch(String regexp, Integer matchIndex)
Questo metodo restituisce una stringa che corrisponde alla ricorrenza del pattern di espressione regolare specificato. Questo metodo restituisce una stringa vuota se non vengono trovate corrispondenze.
Man mano che vengono trovate, le corrispondenze vengono aggiunte a quello che si può considerare un array di corrispondenze. Poiché il conteggio degli elementi dell'array inizia da 0, se si desidera restituire la terza corrispondenza, specificare
2 come valore matchIndex
. Ad esempio, se immetti una stringa di testo con tre parole che corrispondono al modello specificato, puoi restituire solo la prima, la seconda o la terza corrispondenza specificando il suo valore di
indice.
Ad esempio, il seguente esempio è la ricerca di un gruppo di numeri in una variabile azione.
${step_297}.getMatch('([\d]+)', 1)
Se la variabile azione ${step_297}
contiene la stringa hello 123 i said 456 and 8910
, questa espressione restituisce 456
.
String.isEmpty()
Questo metodo restituisce true
se la stringa è vuota, ma non null
, come in questo esempio:
${step_297}.isEmpty()
String.length()
Questo metodo restituisce la lunghezza del carattere della stringa, come in questo esempio:
${step_297}.length()
Se la variabile di azione ${step_297}
contiene la stringa Hello
, questa espressione restituisce 5.
String.matches(String regexp)
Questo metodo restituisce true
se la stringa corrisponde all'espressione regolare inserita, come nell'esempio:
${step_297}.matches('^Hello$')
Se la variabile di azione ${step_297}
contiene la stringa Hello
, questa espressione assume il valore true
.
String.startsWith(String)
Questo metodo restituisce true
se la stringa inizia con la sottostringa specificata, come in questo esempio:
${step_297}.startsWith('What')
Se la variabile azione ${step_297}
contiene la stringa What is your name?
, questa espressione restituisce true
.
String.substring(Integer beginIndex, Integer endIndex)
Questo metodo restituisce una sottostringa che inizia con il carattere in beginIndex
e termina con il carattere prima di endIndex
. Il carattere endIndex
non è incluso nella sottostringa. I valori di indice
sono basati su zero, quindi il primo carattere nella stringa è all'indice 0.
Questo esempio restituisce una sottostringa che inizia all'indice 5 (che è il sesto carattere) e continua fino alla fine della stringa:
${step_297}.substring(5, ${step_297}.length())
Se la variabile azione ${step_297}
contiene la stringa This is a string.
, questa espressione restituisce is a string.
String.toJson()
Questo metodo analizza una stringa che contiene dati JSON e restituisce un oggetto o un array JSON, come in questo esempio:
${json_var}.toJson()
Se la variabile di sessione ${json_var}
contiene la seguente stringa:
"{ \"firstname\": \"John\", \"lastname\": \"Doe\" }"
il metodo toJson()
restituisce il seguente oggetto:
{
"firstname": "John",
"lastname": "Doe"
}
String.toLowerCase()
Questo metodo restituisce la stringa specificata convertita in lettere minuscole, come in questo esempio:
${step_297}.toLowerCase()
Se la variabile di azione ${step_297}
contiene la stringa This is A DOG!
, questa espressione restituisce la stringa this is a dog!
.
String.toUpperCase()
Questo metodo restituisce la stringa originale convertita in lettere maiuscole, come in questo esempio:
${step_297}.toUpperCase()
Se la variabile azione ${step_297}
contiene la stringa hi there
, questo metodo restituisce la stringa HI THERE
.
String.trim()
Questo metodo elimina gli spazi all'inizio e alla fine di una stringa e restituisce la stringa modificata, come in questo esempio:
${step_297}.trim()
Se la variabile azione ${step_297}
contiene la stringa something is here
, questo metodo restituisce la stringa something is here
.
java.lang.String
supporto
Oltre ai metodi integrati, puoi utilizzare i metodi standard della classe java.lang.String
.
java.lang.String.format()
Puoi applicare il metodo Java String format()
standard al testo. Per informazioni sulla sintassi da utilizzare, consultare Format String Syntax.
Questo esempio prende tre numeri interi decimali (1, 1 e 2) e li aggiunge a una frase:
T(java.lang.String).format('%d + %d equals %d', 1, 1, 2)
La stringa risultante è 1 + 1 equals 2
.
Questo esempio modifica la posizione decimale per un numero raccolto da un passo:
T(String).format('%.2f',${step_297})
Se la variabile ${step_297}
che deve essere formattata in dollari USA è 4.5, la stringa risultante è 4.50
.
Metodi array
Questi metodi consentono di gestire gli array.
Array.add(value...)
Questo metodo aggiunge uno o più nuovi valori all'array e restituisce true
se l'operazione ha esito positivo.
${Items}.add('four', 'five')
Se Items
è ['one', 'two', 'three']
, questo esempio lo aggiorna in modo che diventi ['one', 'two', 'three', 'four', 'five']
.
Array.addAll(Array array)
Questo metodo aggiunge un array all'altro e restituisce null
.
${Items}.addAll(${New_items})
Se Items
è ['one', 'two', 'three']
e New_items
è ['four', 'five', 'six']
, questo esempio aggiorna Items
in modo che diventi ['one', 'two', 'three', 'four', 'five', 'six']
.
Array.append(value...)
Questo metodo accoda uno o più nuovi valori all'array e restituisce il risultato come un nuovo array. L'array originale non viene modificato.
${Items}.append('four', 'five')
Se Items
è ['one', 'two', 'three']
, questo esempio restituisce il nuovo array ['one', 'two', 'three', 'four', 'five']
.
Array.clear()
Questo metodo rimuove tutti i valori dall'array e restituisce null.
${Items}.clear()
Una volta valutata questa espressione, Items
è un array vuoto ([]
).
Array.contains(value)
Questo metodo restituisce true
se l'array contiene un elemento esattamente uguale al valore di input. Il valore specificato può essere una stringa o un numero.
${Items}.contains(123)
Se Items
è [123, 456, 789]
, questo esempio restituisce true
.
Array.containsIgnoreCase(value)
Questo metodo restituisce true
se l'array contiene un elemento uguale al valore di input. Le stringhe vengono messe in corrispondenza indipendentemente dal fatto che il valore sia specificato in lettere maiuscole o minuscole.
Il valore specificato può essere una stringa o un numero.
${Items}.contains('two')
Questo esempio restituisce true
se l'array Items
contiene qualsiasi carattere maiuscolo della stringa two
(ad esempio, anche TWO
o Two
corrisponderebbe).
Array.filter(temp_var, "temp_var.property operator comparison_value")
Filtra un array confrontando ogni elemento array con un valore specificato, restituendo un nuovo array che contiene solo gli elementi corrispondenti.
L'espressione di filtro è composta dai seguenti valori:
-
temp_var
: un nome arbitrario per una variabile temporanea che viene utilizzata per contenere ciascun elemento array quando viene valutato. Ad esempio, se l'array originale contiene oggetti che descrivono le città, è possibile utilizzarecity
come nome della variabile temporanea. -
property
: la proprietà dell'elemento che si desidera filtrare. Deve essere una proprietà degli elementi nell'array di origine. Specificare la proprietà come proprietà ditemp_var
, utilizzando la sintassitemp_var.property
. Ad esempio, selatitude
è un nome proprietà valido per gli elementi di origine, è possibile specificare la proprietà comecity.latitude
. -
operator
: L'operatore da utilizzare per confrontare il valore della proprietà con il valore di confronto. È possibile utilizzare uno dei seguenti operatori:Operatori di filtraggio supportati Operatore Descrizione ==
È uguale a >
È maggiore di <
È minore di >=
È maggiore di o uguale a <=
È minore di o uguale a !=
Non è uguale a -
comparison_value
: Il valore con cui si vuole confrontare il valore della proprietà di ciascun elemento della matrice. È possibile specificare un valore letterale o fare riferimento a una variabile.
Esempi di filtro
Ad esempio, è possibile disporre di un array di oggetti che contengono i nomi delle città e i relativi numeri di popolazione:
[
{
"name":"Tokyo",
"population":13988129
},
{
"name":"Rome",
"population":2860009
},
{
"name":"Beijing",
"population":21893095
},
{
"name":"Paris",
"population":2165423
}
]
Se l'array di origine è archiviato in una variabile denominata ${cities}
, la seguente espressione restituisce un array più piccolo che contiene solo città con popolazioni maggiori di 5 milioni:
${cities}.filter("city", "city.population > 5000000")
L'espressione restituisce il seguente array filtrato:
[
{
"name":"Tokyo",
"population":13988129
},
{
"name":"Beijing",
"population":21893095
}
]
Invece di un valore di confronto codificato, è anche possibile filtrare in base a un valore dinamico memorizzato in una variabile. Questo esempio filtra utilizzando un valore di popolazione specificato da una risposta del cliente in un passo precedente:
${cities}.filter("city", "city.population > ${step_123}")
Quando si confrontano i valori numerici, assicurarsi di impostare la variabile di contesto coinvolta nel confronto su un valore valido prima di attivare il metodo di filtro. Tieni presente che null
può essere un valore valido
se l'elemento dell'array con cui lo stai confrontando potrebbe contenerlo.
Array.get(Integer index)
Questo metodo restituisce l'elemento dalla matrice che si trova nella posizione di indice specificata. Le schiere sono indicizzate a zero, il che significa che la prima voce nell'array è nella posizione dell'indice 0
.
${Items}.get(1)
Se Items
è ['one', 'two', 'three']
, questo esempio restituisce two
.
Il metodo get()
rappresenta un'alternativa all'utilizzo delle parentesi ([]
) per richiamare un elemento da un array. Il seguente esempio è valido e restituisce lo stesso risultato:
${Items}[1]
Se si sta utilizzando un valore specificato da un cliente per scegliere un articolo da un array, potrebbe essere necessario sottrarre 1 per convertire in un valore con indice zero. Ad esempio, è possibile utilizzare un'espressione come ${Items}.get(${step_123} - 1)
per richiamare il valore desiderato.
Array.getRandomItem()
Questo metodo restituisce un elemento scelto casualmente dall'array.
${Items}.getRandomItem()
Se Items
è ['one', 'two', 'three']
, questo esempio restituisce one
, two
o three
, su base casuale.
Array.indexOf(value)
Questo metodo restituisce la posizione dell'indice della prima ricorrenza del valore di input nell'array o -1
se l'array non contiene il valore di input. Il valore specificato può essere una stringa o un numero.
${Items}.indexOf(`two`)
Se Items
è ['one', 'two', 'three']
, questo esempio restituisce il numero intero 1
(che indica la seconda posizione nell'array con indice zero).
Array.join(String delimiter)
Questo metodo unisce tutti i valori di questo array a una stringa. I valori vengono convertiti in stringa e delimitati dal delimitatore di input.
Ad esempio, è possibile utilizzare una variabile denominata pizza_toppings
che contenga l'array ["pepperoni", "ham", "mushrooms"]
. La seguente espressione converte questo array nella
stringa pepperoni, ham, mushrooms
:
${toppings_array}.join(', ')
Se utilizzi tale espressione per definire il valore di una variabile, puoi fare riferimento a tale variabile nel tuo output dell'assistente per creare un messaggio leggibile (ad esempio, You have selected the following toppings: pepperoni, ham, mushrooms
).
JSONArray.joinToArray(template, retainDataType)
Questo metodo estrae le informazioni da ogni elemento nell'array e crea un nuovo array formattato in base al modello specificato. Il template può essere una stringa, un oggetto JSON o un array. Il metodo restituisce un array di stringhe, un array di oggetti o un array di array, a seconda del tipo di template.
Questo metodo è utile per formattare le informazioni come una stringa che può essere restituita come parte dell'output di un passo o per trasformare i dati in una struttura diversa in modo da poterla utilizzare con un'API esterna.
Nel modello, è possibile fare riferimento ai valori dall'array di origine utilizzando la seguente sintassi:
%e.{property}%
dove {property}
rappresenta il nome della proprietà nell'array di origine.
Ad esempio, supponiamo che il tuo assistente memorizzi un array che contiene i dettagli del volo in una variabile di sessione. I dati memorizzati potrebbero essere simili a quelli riportati di seguito:
"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"
}
]
Per creare un array di stringhe che descrivono questi voli in un formato leggibile dall'utente, è possibile utilizzare la seguente espressione:
${Flight_data}.joinToArray("Flight %e.flight% to %e.destination%", true)
Questa espressione restituisce il seguente array di stringhe: ["Flight AZ1040 to FCO","Flight DL1710 to LAX","Flight VS4379 to LHR"]
.
Il parametro facoltativo retainDataType
specifica se il metodo conserva il tipo di dati di tutti i valori di input nell'array restituito. Se retainDataType
è impostato su false
o omesso, in alcune situazioni,
le stringhe nell'array di input potrebbero essere convertite in numeri nell'array restituito. Ad esempio, se i valori selezionati dall'array di input sono "1"
, "2"
e "3"
,
l'array restituito potrebbe essere [ 1, 2, 3 ]
. Per evitare conversioni di tipo non previste, specificare true
per questo parametro.
Modelli complessi
Un modello più complesso potrebbe contenere una formattazione che visualizza le informazioni in un layout leggibile. Per un modello complesso, è possibile memorizzare il modello in una variabile di sessione, che è possibile passare al metodo
joinToArray
invece che a una stringa.
Ad esempio, questo template complesso contiene un sottoinsieme di elementi array, aggiungendo etichette e formattazione:
<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/>
Assicurati che la formattazione che utilizzi nel tuo modello sia supportata dall'integrazione del canale che visualizza l'output dell'assistente.
Se si crea una variabile di sessione denominata Template
e si assegna questo modello come valore, è possibile utilizzare tale variabile nelle espressioni:
${Flight_data}.joinToArray(${Template})
Al runtime, la risposta è simile alla seguente:
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
Template JSON
Invece di una stringa, è possibile definire un modello come un oggetto JSON, che fornisce un modo per standardizzare la formattazione delle informazioni da sistemi differenti o per trasformare i dati nel formato richiesto per un servizio esterno.
In questo esempio, un template è definito come un oggetto JSON che estrae i dettagli del volo dagli elementi che sono specificati nell'array memorizzato nella variabile di sessione Flight data
:
{
"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%."
}
Utilizzando questo modello, il metodo joinToArray()
restituisce un nuovo array di oggetti con la struttura specificata.
Array.remove(Integer index)
Questo metodo rimuove dall'array l'elemento nella posizione di indice specificata e restituisce l'array aggiornato.
${Items}.remove(1)
Se Items
è ['one', 'two', 'three']
, questo esempio restituisce ['one', 'three']
. Anche l'array Items
originale viene modificato.
Array.removeValue(value)
Questo metodo rimuove la prima occorrenza del valore specificato dall'array e restituisce l'array aggiornato. Il valore specificato può essere una stringa o un numero.
${Items}.removeValue('two')
Se Items
è ['one', 'two', 'three']
, questo esempio restituisce ['one', 'three']
. Anche l'array Items
originale viene modificato.
Array.set(Integer index, value)
Questo metodo sostituisce l'elemento nella posizione di indice specificata con un valore specificato e restituisce l'array aggiornato.
${Items}.set(2,'five')
Se Items
è ['one', 'two', 'three']
, questo esempio restituisce ['one', 'two', 'five']
. Anche l'array Items
originale viene modificato.
Array.size()
Questo metodo restituisce il numero di elementi nell'array come numero intero.
${Items}.size()
Se Items
è ['one', 'two', 'three']
, questo esempio restituisce 3
.
Array.sort()
Questo metodo esegue un ordinamento in loco e restituisce l'array ordinato. Il parametro predefinito è ascending
. È possibile specificare descending
per cambiare il criterio di ordinamento. Qualsiasi altra voce di
parametro viene ignorata e viene visualizzato un errore di registrazione.
${Items}.sort("ascending")
Il metodo confronta numeri e stringhe. Un numero è sempre più piccolo di una stringa. Qualsiasi altro tipo viene convertito in stringa per impostazione predefinita da confrontare.
Ad esempio:
Array originale | Array ordinato |
---|---|
[2,1,3,5,4,3,2] | [1,2,2,3,3,4,5] |
["Banana", "Orange", "Apple", "Mango"] | ["Apple", "Banana", "Mango", "Orange"] |
[3, 2, 4, "1", "10", "12", "Banana", "Orange", 0, "Apple", "Mango"] | [0, 2, 3, 4, "1", "10", "12", "Apple", "Banana", "Mango", "Orange"] |
Array.transform()
Il metodo Array.transform()
viene utilizzato solo con Variabile session_history
. È possibile trasformare l'output della variabile
in modo che corrisponda a uno specifico sistema AI generativo.
Tabella: le firme per i formati di conversazione mostrano le firme che è possibile utilizzare per i diversi formati di conversazione:
Particolari | OpenAI | Google PaLM2 | Llama2 |
---|---|---|---|
Firma | 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) |
Formato messaggio cliente | {$rolePrefix: $userPrefix, "content": $content} |
{$rolePrefix: $userPrefix, "content": $content} |
<s>[INST] <<SYS>>{{ $systemPrompt }} <</SYS>>{{ $user_content }} [/INST] {{ $assistant_content }} </s><s>[INST] {{ $user_content }} [/INST] |
Formato del messaggio dell'assistente | {$rolePrefix: $assistantPrefix, "content": $content} |
{$rolePrefix: $assistantPrefix, "content": $content} |
NA |
Esempio | ${system_session_history}.transform("role", "user", "assistant") |
${system_session_history}.transform("author", "USER", "AI") |
${system_session_history}.transform("<your system prompt>") |
Se currentAction
è true:
Utilizzi di Assistant | Descrizione |
---|---|
Solo azioni | La trasformazione esclude tutti i messaggi in cui n è true, il che indica che una domanda del cliente ha attivato una nuova azione di base. |
Solo finestra di dialogo | currentAction viene ignorato e la trasformazione include l'intero contenuto della variabile session history . |
Finestra di dialogo e azioni | La trasformazione include tutto nella variabile session_history a partire dall'avvio più recente di un'azione, indipendentemente dal fatto che i nodi di dialogo siano attivati o meno. |
Gli indicatori n : true
non sono inclusi nell'output della trasformazione.