Estendere l'app in fase di previsione

Importante

LUIS verrà ritirato il 1 ottobre 2025 e a partire dal 1 aprile 2023 non è più possibile creare nuove risorse LUIS. Si consiglia di eseguire la migrazione delle applicazioni LUIS a comprensione del linguaggio di conversazione per sfruttare appieno un supporto costante per i prodotti e le funzionalità multilingue.

Lo schema dell'app (modelli e funzionalità) viene sottoposto a training e pubblicato nell'endpoint di stima. Questo modello pubblicato viene usato nel runtime di stima. È possibile passare nuove informazioni, insieme all'espressione dell'utente, al runtime di stima per aumentare la stima.

Due modifiche dello schema del runtime di previsione includono:

Entità esterne

Le entità esterne offrono all'app LUIS la possibilità di identificare ed etichettare le entità durante il runtime, che possono essere usate come funzionalità per le entità esistenti. In questo modo è possibile usare estrattori di entità separati e personalizzati prima di inviare query all'endpoint di stima. Poiché questa operazione viene eseguita nell'endpoint di stima della query, non è necessario ripetere il training e pubblicare il modello.

L'applicazione client fornisce il proprio estrattore di entità gestendo la corrispondenza delle entità e determinando la posizione all'interno dell'espressione dell'entità corrispondente e quindi inviando tali informazioni con la richiesta.

Le entità esterne sono il meccanismo per estendere qualsiasi tipo di entità, pur essendo ancora in uso come segnali ad altri modelli.

Ciò è utile per un'entità con dati disponibili solo in fase di esecuzione della stima delle query. Alcuni esempi di questo tipo di dati cambiano costantemente dati o specifici per utente. È possibile estendere un'entità contatto LUIS con informazioni esterne dall'elenco dei contatti di un utente.

Le entità esterne fanno parte dell'API di creazione V3.

L'entità esiste già nell'app

Il valore di entityName per l'entità esterna, passato nel corpo POST della richiesta dell'endpoint, deve esistere già nell'app sottoposta a training e pubblicata al momento dell'invio della richiesta. Il tipo di entità non è importante, tutti i tipi sono supportati.

Primo turno nella conversazione

Si consideri una prima espressione in una conversazione di chat bot in cui un utente immette le informazioni incomplete seguenti:

Send Hazem a new message

La richiesta dal chatbot a LUIS può passare le informazioni nel corpo post su Hazem in modo che corrisponda direttamente a uno dei contatti dell'utente.

    "externalEntities": [
        {
            "entityName":"contacts",
            "startIndex": 5,
            "entityLength": 5,
            "resolution": {
                "employeeID": "05013",
                "preferredContactType": "TeamsChat"
            }
        }
    ]

La risposta di stima include l'entità esterna, con tutte le altre entità stimate, perché è definita nella richiesta.

Secondo turno nella conversazione

L'espressione utente successiva nel chatbot usa un termine più vago:

Send him a calendar reminder for the party.

A questo turno della conversazione, l'espressione usa him come riferimento a Hazem. Il chatbot conversazionale, nel corpo POST, può eseguire il mapping di him al valore dell'entità estratto dalla prima espressione, Hazem.

    "externalEntities": [
        {
            "entityName":"contacts",
            "startIndex": 5,
            "entityLength": 3,
            "resolution": {
                "employeeID": "05013",
                "preferredContactType": "TeamsChat"
            }
        }
    ]

La risposta di stima include l'entità esterna, con tutte le altre entità stimate, perché è definita nella richiesta.

Eseguire l'override delle stime del modello esistenti

La proprietà delle opzioni preferExternalEntities specifica che se l'utente invia un'entità esterna che si sovrappone a un'entità stimata con lo stesso nome, LUIS sceglie l'entità passata o l'entità esistente nel modello.

Si consideri, ad esempio, la query today I'm free. LUIS rileva today come datetimeV2 con la risposta seguente:

"datetimeV2": [
    {
        "type": "date",
        "values": [
            {
                "timex": "2019-06-21",
                "value": "2019-06-21"
            }
        ]
    }
]

Se l'utente invia l'entità esterna:

{
    "entityName": "datetimeV2",
    "startIndex": 0,
    "entityLength": 5,
    "resolution": {
        "date": "2019-06-21"
    }
}

Se preferExternalEntities è impostato su false, LUIS restituisce una risposta come se l'entità esterna non fosse stata inviata.

"datetimeV2": [
    {
        "type": "date",
        "values": [
            {
                "timex": "2019-06-21",
                "value": "2019-06-21"
            }
        ]
    }
]

Se preferExternalEntities è impostato su true, LUIS restituisce una risposta, tra cui:

"datetimeV2": [
    {
        "date": "2019-06-21"
    }
]

Risoluzione

La proprietà facoltativa resolution ritorna nella risposta di stima, consentendo di passare ai metadati associati all'entità esterna, quindi di riceverla nuovamente nella risposta.

Lo scopo principale consiste nell'estendere le entità predefinite, ma non è limitato a tale tipo di entità.

La proprietà resolution può essere un numero, una stringa, un oggetto o una matrice:

  • "Dallas"
  • {"text": "value"}
  • 12345
  • ["a", "b", "c"]

Elenchi dinamici

Gli elenchi dinamici consentono di estendere un'entità elenco con training esistente e pubblicata, già nell'app LUIS.

Usare questa funzionalità quando i valori dell'entità elenco devono cambiare periodicamente. Questa funzionalità consente di estendere un'entità elenco già sottoposta a training e pubblicata:

  • Al momento della richiesta dell'endpoint di stima della query.
  • Per una singola richiesta.

L'entità elenco può essere vuota nell'app LUIS, ma deve esistere. L'entità elenco nell'app LUIS non viene modificata, ma la capacità di stima nell'endpoint viene estesa per includere fino a 2 elenchi con circa 1.000 elementi.

Corpo della richiesta JSON elenco dinamico

Inviare nel corpo JSON seguente per aggiungere un nuovo sottolista con sinonimi all'elenco e stimare l'entità elenco per il testo, LUIS, con la richiesta di stima delle query POST:

{
    "query": "Send Hazem a message to add an item to the meeting agenda about LUIS.",
    "options":{
        "timezoneOffset": "-8:00"
    },
    "dynamicLists": [
        {
            "listEntity*":"ProductList",
            "requestLists":[
                {
                    "name": "Azure AI services",
                    "canonicalForm": "Azure-Cognitive-Services",
                    "synonyms":[
                        "language understanding",
                        "luis",
                        "qna maker"
                    ]
                }
            ]
        }
    ]
}

La risposta di stima include l'entità elenco, con tutte le altre entità stimate, perché è definita nella richiesta.

Passaggi successivi