Richiama componente modello di linguaggio di grandi dimensioni
Il componente Richiama modello di linguaggio di grandi dimensioni (componente LLM) in Visual Flow Designer consente di connettere un flusso a LLM tramite una chiamata di servizio REST.
È possibile inserire questo stato del componente nel flusso della finestra di dialogo selezionando Service Integration > Richiama modello di linguaggio di grandi dimensioni nella finestra di dialogo Aggiungi stato. Per abilitare conversazioni a più turni quando gli skill vengono richiamati da un assistente digitale, immettere una descrizione per la descrizione LLM.
Come best practice, aggiungere sempre descrizioni ai componenti LLM per consentire perfezionamenti a più turni quando gli utenti accedono al servizio LLM tramite un assistente digitale.
L'inserimento dello stato del componente LLM aggiunge uno stato di gestione degli errori per la risoluzione dei problemi delle richieste all'LLM e alle relative risposte. Lo stato del componente LLM passa a questo stato (denominato ShowLLMError per impostazione predefinita) quando una richiesta o una risposta non valida causa un errore non recuperabile.
Descrizione dell'immagine invokellm-added-flow.png
Il perfezionamento delle risposte può anche provenire dal sistema quando implementa nuovi tentativi dopo la convalida non riuscita.
Se si desidera migliorare la convalida già fornita dal componente LLM o se si desidera migliorare l'output LLM utilizzando la tecnica RCI (Recursive Criticism and Improvement), è possibile utilizzare il nostro codice iniziale per creare i propri handler di convalida delle richieste e delle risposte.
Quindi, cosa è necessario utilizzare questo componente? Se si accede al modello Cohere direttamente o tramite il servizio AI generativa Oracle, è sufficiente un servizio LLM per il modello Cohere e un prompt, che è un blocco di testo leggibile dall'utente contenente le istruzioni per l'LLM. Poiché scrivere un prompt è un processo iterativo, ti forniamo le linee guida per la progettazione rapida e il Prompt Builder, dove puoi incorporare queste linee guida nel testo del prompt e testarlo fino a quando non ottiene la risposta appropriata dal modello. Se si utilizza un altro modello, ad esempio Azure OpenAI, sarà necessario prima creare un gestore eventi di trasformazione personale dal codice iniziale fornito e quindi creare un servizio LLM che esegua il mapping dell'handler agli endpoint del provider LLM configurati per l'istanza.
Proprietà generali
Proprietà | descrizione; | Valore predefinito | Richiesto? |
---|---|---|---|
Servizio LLM | Elenco dei servizi LLM configurati per lo skill. Se sono presenti più servizi, viene utilizzato il servizio LLM predefinito quando non è stato selezionato alcun servizio. | Servizio LLM predefinito | Lo stato può essere valido senza il servizio LLM, ma la competenza non può connettersi al modello se questa proprietà non è stata impostata. |
Richiesta | Prompt specifico del modello a cui si accede tramite il servizio LLM selezionato. Tieni a mente le nostre linee guida generali mentre scrivi il prompt. È possibile inserire il prompt in questo campo, quindi rivederlo e testarlo utilizzando il Prompt Builder (a cui è possibile accedere facendo clic su Crea prompt). È inoltre possibile comporre il prompt utilizzando Prompt Builder. | N/A | Sì |
Parametri prompt | Valori dei parametri. Utilizzare la sintassi dell'espressione FreeMarker Apache standard (${parameter} ) per fare riferimento ai parametri nel testo del prompt. Ad esempio: Per le variabili sacchetto composito, utilizzare la sintassi sacchetto composito:
|
N/A | No |
Variabile risultato | Variabile che memorizza la risposta LLM. | N/A | No |
Messaggistica utente
Proprietà | descrizione; | Valori predefiniti | Richiesto? |
---|---|---|---|
Invia risultato LLM come messaggio | Se si imposta questa opzione su True, l'LLM restituirà un messaggio inviato all'utente. L'impostazione di questa proprietà su False impedisce l'invio dell'output all'utente. | Vero | No |
Usa streaming | I risultati LLM vengono trasmessi al client quando si imposta questa opzione su True, fornendo potenzialmente un'esperienza utente più fluida perché la risposta LLM viene visualizzata in modo incrementale man mano che viene generata anziché tutta in una volta. Questa opzione è disponibile solo se Invia risultato LLM come messaggio è stato impostato su True.
Gli utenti possono visualizzare risposte potenzialmente non valide perché l'handler di eventi di convalida viene richiamato dopo che la risposta LLM ha già avviato lo streaming. Impostare Usa streaming su False per i modelli Cohere o quando si è applicato uno schema JSON al risultato LLM impostando Applica risposta LLM formattata JSON su True. Non abilitare lo streaming se:
|
Vero | No |
Avvia messaggio | Messaggio di stato inviato all'utente quando l'LLM è stato richiamato. Questo messaggio, che viene effettivamente visualizzato prima dell'invocazione LLM, può essere un indicatore utile. Può informare gli utenti che il trattamento è in corso o che l'LLM può impiegare un periodo di tempo per rispondere. | N/A | No |
Abilita perfezionamenti con più turni | Se si imposta questa opzione su True (impostazione predefinita), è possibile consentire agli utenti di perfezionare la risposta LLM fornendo istruzioni di follow-up. La finestra di dialogo rilascia il turno all'utente, ma rimane nello stato LLM dopo che il risultato LLM è stato ricevuto. Quando è impostata su False, la finestra di dialogo mantiene il turno fino alla ricezione della risposta LLM e alla transizione allo stato a cui fa riferimento l'azione Success.
Nota: la descrizione del componente è obbligatoria per i perfezionamenti a più turni quando lo skill viene richiamato da un assistente digitale. |
Vero | No |
Azioni standard | Aggiunge i pulsanti di azione standard visualizzati sotto l'output nel messaggio dei risultati LLM. Tutti questi pulsanti vengono attivati per impostazione predefinita.
|
Sono tutte selezionate le opzioni Sottometti, Annulla e Annulla. | No |
Etichetta pulsante Annulla | Etichetta del pulsante Annulla | Submit |
Sì: quando viene definita l'azione Annulla. |
Etichetta pulsante Operazione riuscita | L'etichetta per il pulsante di operazione riuscita | Cancel |
Sì: quando viene definita l'azione Successo. |
Etichetta pulsante Annulla | L'etichetta per il pulsante Annulla | Undo |
Sì: quando viene definita l'azione Annulla. |
Azioni personalizzate | Pulsante di azione personalizzato. Immettere un'etichetta pulsante e un prompt con istruzioni aggiuntive. | N/A | No |
Azioni di transizione per il componente Richiama modello di lingua di grandi dimensioni
Azione | descrizione; |
---|---|
cancel |
Questa azione viene attivata quando gli utenti toccano il pulsante Annulla. |
error |
Questa azione viene attivata quando le richieste o le risposte dell'LLM non sono valide. Ad esempio, l'assegnazione di nuovi prompt per la correzione degli errori JSON o dei valori di entità è stata utilizzata. |
Valutazioni utente per contenuto generato da LLM

Quando gli utenti assegnano alla risposta LLM un rating di pollice verso il basso, lo skill segue un collegamento che apre un modulo di feedback.
È possibile disabilitare questi pulsanti disattivando Abilita feedback modello di lingua di grandi dimensioni in Impostazioni > Configurazione.
Convalida risposta
Proprietà | descrizione; | Valore predefinito | Richiesto? |
---|---|---|---|
Entità di convalida | Selezionare le entità i cui valori devono corrispondere nel messaggio di risposta LLM. I nomi di queste entità e i relativi valori corrispondenti vengono passati come mappa al gestore di eventi, che valuta questo oggetto per le corrispondenze di entità mancanti. Se le corrispondenze di entità mancanti impediscono la convalida, l'handler restituisce un messaggio di errore per denominare le entità non corrispondenti, che viene quindi inviato al modello. Il modello tenta quindi di rigenerare una risposta che include i valori mancanti. Continua con i suoi tentativi fino a quando l'handler non ne convalida l'output o fino a quando non ha esaurito il numero di nuovi tentativi.
Si consiglia di utilizzare le entità sacchetto composto per consentire al gestore di eventi di generare messaggi di errore concisi poiché le etichette e i messaggi di errore applicati ai singoli articoli sacchetto composto forniscono al LLM dettagli sui valori di entità che non è stato possibile includere nella risposta. |
N/A | No |
Applica risposta LLM in formato JSON | Impostando questa opzione su True, è possibile applicare la formattazione JSON alla risposta LLM copiando e incollando uno schema JSON. Il componente LLM convalida la risposta LLM in formato JSON rispetto a questo schema.
Se non si desidera che gli utenti visualizzino il risultato LLM come JSON di tipo RAW, è possibile creare un handler di eventi con un metodo Impostare Usa streaming su Falso se si applica la formattazione JSON. GPT-3.5 mostra più robustezza di GPT-4 per la convalida dello schema JSON. GPT-4 a volte corregge una risposta. |
Falso | No |
Numero di tentativi | Il numero massimo di tentativi consentiti quando l'LLM viene richiamato con un prompt di nuovo tentativo quando vengono trovati errori di convalida di entità o JSON. Il prompt dei nuovi tentativi specifica gli errori e le richieste che l'LLM deve correggere. Per impostazione predefinita, il componente LLM effettua una singola richiesta di nuovo tentativo. Una volta raggiunta l'assegnazione dei nuovi tentativi, il ciclo di convalida dei prompt dei nuovi tentativi termina. La finestra di dialogo viene quindi spostata dal componente LLM tramite la transizione di errore. | 1 |
No |
Riprova messaggio | Messaggio di stato inviato all'utente quando l'LLM è stato richiamato utilizzando un prompt di nuovo tentativo. Ad esempio, i seguenti enumerano gli errori di entità e JSON utilizzando la proprietà evento allValidationErrors :
|
Enhancing the response. One moment, please... |
No |
Handler personalizzazione convalida | Se il caso d'uso richiede una convalida specializzata, è possibile selezionare l'handler di convalida personalizzato distribuito allo skill. Ad esempio, è possibile che sia stato creato un gestore di eventi per la propria abilità che non solo convalida e applica un'ulteriore elaborazione alla risposta LLM, ma valuta anche le richieste utente di contenuto tossico. Se il caso d'uso richiede che la convalida di entità o JSON dipenda da regole specifiche, ad esempio corrispondenze di entità interdipendenti (ad esempio, la presenza di un valore di entità nel risultato LLM richiede o preclude la presenza di un altro), sarà necessario creare l'handler per questa abilità prima di selezionarla qui. | N/A | No |
Crea handler convalida e personalizzazione LLM
Oltre agli handler di trasformazione LLM, è anche possibile utilizzare gli handler di eventi per convalidare le richieste effettuate all'LLM e le relative risposte (i completamenti generati dal provider LLM). In genere, è necessario mantenere questo codice, noto come gestore di convalida e personalizzazione LLM, separato dal codice dell'handler di trasformazione LLM perché operano su livelli diversi. La convalida di richieste e risposte è specifica di uno stato LLM e del relativo prompt. La convalida della trasformazione LLM, d'altra parte, si applica all'intera abilità perché la sua logica di trasformazione delle richieste e delle risposte è in genere la stessa per tutti i richiami LLM nell'abilità.
LlmComponentContext
in bots-node-sdk
oppure incorporando questi metodi nel modello fornito.
Nel relativo form non modificato, il codice modello esegue le stesse funzioni di convalida già fornite dal componente LLM.
È possibile creare un gestore eventi di convalida personalizzato per la presentazione della risposta LLM. In questo caso, il testo della risposta LLM può essere inviato dall'handler come parte di un messaggio utente. Ad esempio, se si indica all'LLM di inviare una risposta strutturata utilizzando il formato JSON, è possibile analizzare la risposta e generare un messaggio formattato come tabella o scheda.
- Fare clic su Componenti nella barra di navigazione a sinistra.
- Fare clic su +New Servizio.
- Completare la finestra di dialogo Crea servizio:
- Nome: immettere il nome del servizio.
- Tipo di servizio: Contenitore incorporato
- Tipo pacchetto servizio componente: Nuovo componente
- Tipo di componente: Convalida e personalizzazione LLM
- Nome componente: immettere un nome facilmente identificabile per l'handler di eventi. Quando si crea il servizio LLM per lo skill, verrà fatto riferimento a questo nome.
- Fare clic su Crea per generare l'handler di convalida.
- Al termine della distribuzione, espandere il servizio e selezionare l'handler di convalida.
- Fare clic su Modifica per aprire l'editor Modifica codice componente.
- Se necessario, aggiornare i seguenti metodi di gestione utilizzando il modello generato.
Metodo descrizione; Quando la convalida riesce Quando la convalida non riesce Tipo restituito Posizione nell'editor Codice segnaposto Quali azioni è possibile eseguire quando la convalida non riesce? validateRequestPayload
Convalida il payload richieste. Restituisce true
quando la richiesta è valida.Restituisce
false
quando la convalida di una richiesta non riesce.boolean Linee 24-29
Per ulteriori informazioni su questo codice, vederevalidateRequestPayload: async (event, context) => { if (context.getCurrentTurn() === 1 && context.isJsonValidationEnabled()) { context.addJSONSchemaFormattingInstruction(); } return true; }
validateRequestPayload
properties.- Rivedere il prompt e inviarlo nuovamente al LLM
- Impostare un errore di convalida.
validateResponsePayload
Convalida il payload della risposta LLM. Quando l'handler restituiscetrue
:- Se si imposta la proprietà Invia risultato LLM come messaggio su
true
, la risposta LLM, inclusi eventuali pulsanti di azione standard o personalizzati, viene inviata all'utente. - Se lo streaming è abilitato, la risposta LLM verrà trasmessa in chunk. I pulsanti di azione verranno aggiunti alla fine del flusso.
- Tutti i messaggi utente aggiunti nell'handler vengono inviati all'utente, indipendentemente dall'impostazione per la proprietà Invia risultato LLM come messaggio.
- Se nell'handler è impostato un nuovo prompt LLM, questo prompt viene inviato all'LLM e l'handler di convalida verrà richiamato di nuovo con la nuova risposta LLM
- Se non viene impostato alcun nuovo prompt LLM e la proprietà Abilita perfezionamenti con più turni è impostata su
true
, il turno viene rilasciato e il flusso della finestra di dialogo rimane nello stato LLM. Se tuttavia questa proprietà è impostata sufalse
, il turno viene mantenuto e la finestra di dialogo passa dallo stato utilizzando l'azione di transizionesuccess
.
Quando l'handler restituiscefalse
:- Se lo streaming è abilitato, gli utenti possono visualizzare le risposte potenzialmente non valide perché l'handler di eventi di convalida viene richiamato dopo che la risposta LLM ha già avviato lo streaming.
- Tutti i messaggi utente aggiunti dall'handler vengono inviati all'utente, indipendentemente dall'impostazione Invia risultato LLM come risposta skill.
- Se nell'handler viene impostato un nuovo prompt LLM, questo prompt viene inviato all'LLM e l'handler di convalida verrà richiamato di nuovo con la nuova risposta LLM.
- Se non è impostato alcun prompt LLM, il flusso della finestra di dialogo passa dallo stato del componente LLM. L'azione di transizione impostata nel codice handler verrà utilizzata per determinare lo stato successivo. Se non è impostata alcuna azione di transizione, viene attivata l'azione di transizione
error
.
boolean Linee 50-56
Per ulteriori informazioni su questo codice, vedere/** * Handler to validate response payload * @param {ValidateResponseEvent} event * @param {LLMContext} context * @returns {boolean} flag to indicate the validation was successful */ validateResponsePayload: async (event, context) => { let errors = event.allValidationErrors || []; if (errors.length > 0) { return context.handleInvalidResponse(errors); } return true; }
validateResponsePayload
Proprietà.- Richiamare nuovamente l'LLM utilizzando un prompt di nuovo tentativo che specifica il problema con la risposta (ad esempio, non è conforme a un formato JSON specifico) e richiede che l'LLM la risolva.
- Impostare un errore di convalida.
changeBotMessages
Modifica i messaggi di skill del candidato che verranno inviati all'utente. N/A N/A Lista di messaggi del modello messaggi di conversazione Righe 59-71
Per un esempio di utilizzo di questo metodo, vedere Migliorare il messaggio utente per le risposte con formattazione JSON.changeBotMessages: async (event, context) => { return event.messages; },
N/A submit
Questo handler viene richiamato quando gli utenti toccano il pulsante Sottometti. Elabora ulteriormente la risposta LLM. N/A N/A N/A Righe 79-80 submit: async (event, context) => { }
N/A event
e un oggettocontext
. Ad esempio:
Le proprietà definite per l'oggettovalidateResponsePayload: async (event, context) => ...
event
dipendono dal tipo di evento. Il secondo argomento,context
, fa riferimento alla classeLlmComponentContext
, che accede ai metodi convenienti per la creazione della logica del gestore di eventi. Questi metodi includono l'impostazione del numero massimo di nuovi prompt e l'invio di messaggi di stato e di errore agli utenti delle competenze. - Verificare la sintassi degli aggiornamenti facendo clic su Convalida. Fare quindi clic su Save > Close.
validateRequestPayload
Proprietà degli eventi
Nome | descrizione; | Digita | Richiesto? |
---|---|---|---|
payload |
Richiesta LLM che richiede la convalida | stringa | Sì |
validateResponsePayload
Proprietà degli eventi
Nome | descrizione; | Digita | Richiesto? |
---|---|---|---|
payload |
Risposta LLM che deve essere convalidata. | stringa | Sì |
validationEntities |
Elenco di nomi di entità specificato dalla proprietà Entità di convalida dello stato del componente LLM corrispondente. | String[] |
No |
entityMatches |
Una mappa con il nome dell'entità corrispondente come chiave e un array di entità JSONObject corrisponde come valore. Questa proprietà ha un valore solo se la proprietà Entità di convalida è impostata anche nello stato del componente LLM. | Mappa<String, JSONArray> |
No |
entityValidationErrors |
Coppia chiave-valore con l'elemento entityName o un elemento bag composto come chiave e un messaggio di errore come valore. Questa proprietà viene impostata solo quando è impostata anche la proprietà Entità di convalida e mancano corrispondenze di entità oppure (quando l'entità è un sacchetto composito) mancano corrispondenze di elementi sacchetto composito.
|
Mappa<String, String> |
No |
jsonValidationErrors |
Se la proprietà Enforce JSON-Formatted LLM Response del componente LLM è impostata su True e la risposta non è un oggetto JSON valido, questa proprietà contiene una singola voce con il messaggio di errore che indica che la risposta non è un oggetto JSON valido.
Se, tuttavia, il file JSON è valido e la proprietà Enforce JSON-Formatted LLM Response del componente è anche impostata su True, questa proprietà contiene coppie chiave-valore con il percorso dello schema come chiavi e, se la risposta non è conforme allo schema, i messaggi di errore di convalida dello schema come valori. |
Mappa<String, String> |
No |
allValidationErrors |
Lista di tutti gli errori di convalida delle entità e degli errori di convalida JSON. | String[] |
No |
Esempi di codice dell'handler di convalida
Convalida JSON personalizzata
validateResponsePayload
predefinito per verificare che una richiesta di personale in formato JSON sia impostata su Los Angeles: /**
* Handler to validate response payload
* @param {ValidateResponseEvent} event
* @param {LLMContext} context
* @returns {boolean} flag to indicate the validation was successful
*/
validateResponsePayload: async (event, context) => {
let errors = event.allValidationErrors || [];
const json = context.convertToJSON(event.payload);
if (json && 'Los Angeles' !== json.location) {
errors.push('Location is not set to Los Angeles');
}
if (errors.length > 0) {
return context.handleInvalidResponse(errors);
}
return true;
}
Migliora il messaggio utente per le risposte con formattazione JSON
changeBotMessages
per trasformare la risposta JSON raw in un messaggio form intuitivo. /**
* Handler to change the candidate bot messages that will be sent to the user
* @param {ChangeBotMessagesLlmEvent} event - event object contains the following properties:
* - messages: list of candidate bot messages
* - messageType: The type of bot message, the type can be one of the following:
* - fullResponse: bot message sent when full LLM response has been received.
* - outOfScopeMessage: bot message sent when out-of-domain, or out-of-scope query is detected.
* - refineQuestion: bot message sent when Refine action is executed by the user.
* @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
* @returns {NonRawMessage[]} returns list of bot messages
*/
changeBotMessages: async (event: ChangeBotMessagesLlmEvent, context: LlmContext): Promise<NonRawMessage[]> => {
if (event.messageType === 'fullResponse') {
const jobDescription = context.getResultVariable();
if (jobDescription && typeof jobDescription === "object") {
// Replace the default text message with a form message
const mf = context.getMessageFactory();
const formMessage = mf.createFormMessage().addForm(
mf.createReadOnlyForm()
.addField(mf.createTextField('Title', jobDescription.title))
.addField(mf.createTextField('Location', jobDescription.location))
.addField(mf.createTextField('Level', jobDescription.level))
.addField(mf.createTextField('Summary', jobDescription.shortDescription))
.addField(mf.createTextField('Description', jobDescription.description))
.addField(mf.createTextField('Qualifications', `<ul><li>${jobDescription.qualifications.join('</li><li>')}</li></ul>`))
.addField(mf.createTextField('About the Team', jobDescription.aboutTeam))
.addField(mf.createTextField('About Oracle', jobDescription.aboutOracle))
.addField(mf.createTextField('Keywords', jobDescription.keywords!.join(', ')))
).setActions(event.messages[0].getActions())
.setFooterForm(event.messages[0].getFooterForm());
event.messages[0] = formMessage;
}
}
return event.messages;
}
}
Convalida entità personalizzata
validateResponsePayload
, verifica che la posizione della descrizione del job sia impostata su Los Angeles utilizzando corrispondenze di entità. In questo esempio si presume che sia stata aggiunta un'entità LOCATION alla proprietà Entità di convalida dello stato LLM.
/**
* Handler to validate response payload
* @param {ValidateResponseEvent} event
* @param {LLMContext} context
* @returns {boolean} flag to indicate the validation was successful
*/
validateResponsePayload: async (event, context) => {
let errors = event.allValidationErrors || [];
if (!event.entityMatches.LOCATION || event.entityMatches.LOCATION[0].city !== 'los angeles') {
errors.push('Location is not set to Los Angeles');
}
if (errors.length > 0) {
return context.handleInvalidResponse(errors);
}
return true;
}
Errore di convalida
validateRequestPayload
che in quelli validateResponsePayload
costituiti da
- Un messaggio di errore personalizzato
- Uno dei codici di errore definiti per la proprietà
errorCode
CLMI.
error
ogni volta che uno dei metodi del gestore di eventi non è in grado di convalidare una richiesta o una risposta. Il flusso della finestra di dialogo passa quindi allo stato collegato alla transizione error
. Quando si aggiunge il componente LLM, è accompagnato da un tale stato di errore. Questo stato Invia messaggio, il cui nome predefinito è showLLMError, trasmette l'errore facendo riferimento alla variabile con ambito di flusso che memorizza i dettagli dell'errore denominata system.llm.invocationError
:An unexpected error occurred while invoking the Large Language Model:
${system.llm.invocationError}
Questa variabile memorizza gli errori definiti dalla logica personalizzata nei gestori di eventi o dal componente LLM stesso. Questa variabile contiene una mappa con le seguenti chiavi: errorCode
: uno dei codici di errore CLMIerrorMessage
: un messaggio (un valore stringa) che descrive l'errore.statusCode
: il codice di stato HTTP restituito dalla chiamata LLM.
Suggerimento
Sebbeneerror
sia la transizione predefinita per gli errori di convalida, è possibile utilizzare un'altra azione definendo una transizione degli errori personalizzati nel codice dell'handler.
Critica e miglioramento ricorsivo (RCI)
- Invia un messaggio al LLM che chiede di criticare la risposta precedente.
- Invia un messaggio al LLM per migliorare la risposta in base alla critica.
validateResponsePayload
esegue il ciclo RCI di sollecitazione e miglioramento delle critiche.
RCI automatico
validateResponsePayload
se RCI è già stato applicato. Se non lo è, inizia la sequenza di critica-miglioramento RCI. Dopo l'invio del prompt di critica, viene richiamato l'handler validateResponsePayload
e, in base allo stato RCI memorizzato in una proprietà personalizzata, viene inviato il prompt di miglioramento.
const RCI = 'RCI';
const RCI_CRITICIZE = 'criticize';
const RCI_IMPROVE = 'improve';
const RCI_DONE = 'done';
/**
* Handler to validate response payload
* @param {ValidateResponseEvent} event
* @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
* @returns {boolean} flag to indicate the validation was successful
*/
validateResponsePayload: async (event, context) => {
const rciStatus = context.getCustomProperty(RCI);
if (!rciStatus) {
context.setNextLLMPrompt(`Review your previous answer. Try to find possible improvements one could make to the answer. If you find improvements then list them below:`, false);
context.addMessage('Finding possible improvements...');
context.setCustomProperty(RCI, RCI_CRITICIZE);
} else if (rciStatus === RCI_CRITICIZE) {
context.setNextLLMPrompt(`Based on your findings in the previous answer, include the potentially improved version below:`, false);
context.addMessage('Generating improved answer...');
context.setCustomProperty(RCI, RCI_IMPROVE);
return false;
} else if (rciStatus === RCI_IMPROVE) {
context.setCustomProperty(RCI, RCI_DONE);
}
return true;
}
RCI su richiesta
changeBotMessages
. Questo pulsante richiama il gestore di eventi personalizzato che avvia il ciclo RCI. Il metodo validateResponsePayload
gestisce il ciclo Critica-Miglioramento RCI.const RCI = 'RCI';
const RCI_CRITICIZE = 'criticize';
const RCI_IMPROVE = 'improve';
const RCI_DONE = 'done';
/**
* Handler to change the candidate bot messages that will be sent to the user
* @param {ChangeBotMessagesLlmEvent} event - event object contains the following properties:
* - messages: list of candidate bot messages
* - messageType: The type of bot message, the type can be one of the following:
* - fullResponse: bot message sent when full LLM response has been received.
* - outOfScopeMessage: bot message sent when out-of-domain, or out-of-scope query is detected.
* - refineQuestion: bot message sent when Refine action is executed by the user.
* @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
* @returns {NonRawMessage[]} returns list of bot messages
*/
changeBotMessages: async (event, context) => {
if (event.messageType === 'fullResponse') {
const mf = context.getMessageFactory();
// Add button to start RCI cycle
event.messages[0].addAction(mf.createCustomEventAction('Improve', 'improveUsingRCI'));
}
return event.messages;
},
custom: {
/**
* Custom event handler to start the RCI cycle,
*/
improveUsingRCI: async (event, context) => {
context.setNextLLMPrompt(`Review your previous answer. Try to find possible improvements one could make to the answer. If you find improvements then list them below:`, false);
context.addMessage('Finding possible improvements...');
context.setCustomProperty(RCI, RCI_CRITICIZE);
}
},
/**
* Handler to validate response payload
* @param {ValidateResponseEvent} event
* @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
* @returns {boolean} flag to indicate the validation was successful
*/
validateResponsePayload: async (event, context) => {
const rciStatus = context.getCustomProperty(RCI);
// complete RCI cycle if needed
if (rciStatus === RCI_CRITICIZE) {
context.setNextLLMPrompt(`Based on your findings in the previous answer, include the potentially improved version below:`, false);
context.addMessage('Generating improved answer...');
context.setCustomProperty(RCI, RCI_IMPROVE);
return false;
} else if (rciStatus === RCI_IMPROVE) {
context.setCustomProperty(RCI, RCI_DONE);
}
return true;
}
Opzioni avanzate
Proprietà | descrizione; | Valore predefinito | Richiesto? |
---|---|---|---|
Contesto utente iniziale | Invia messaggi utente aggiuntivi nell'ambito del prompt LLM iniziale mediante i metodi riportati di seguito.
|
N/A | No |
Input utente personalizzato | Espressione Freemarker Apache che specifica il testo inviato sotto il ruolo utente nell'ambito del prompt LLM iniziale. | N/A | No |
Messaggio fuori ambito | Messaggio visualizzato quando l'LLM valuta la query utente come fuori ambito (OOS) o come fuori dominio (OOD). | N/A | No |
Parola chiave Out of Scope | Il valore è InvalidInput per impostazione predefinita. LLM restituisce questa parola chiave quando valuta la query utente come out of scope (OOS) o out of domain (OOD) in base alle istruzioni per la limitazione dell'ambito del prompt. Quando il modello restituisce questa parola chiave, il flusso della finestra di dialogo può passare a un nuovo stato o a un nuovo flusso.
Non modificare questo valore. Se è necessario modificare la parola chiave per adattarla a un caso d'uso specifico, si consiglia di utilizzare il linguaggio naturale anziché una parola chiave che può essere interpretata in modo errato. Ad esempio, |
invalidInput : non modificare questo valore. La modifica di questo valore può determinare un comportamento indesiderato del modello.
|
No |
Temperatura | Incoraggia, o trattiene, la casualità e la creatività dei completamenti del LLM al momento opportuno. È possibile misurare la creatività del modello impostando la temperatura tra 0 (basso) e 1 (alto). Una bassa temperatura significa che i completamenti del modello al prompt saranno semplici o deterministici: gli utenti riceveranno quasi sempre la stessa risposta a un determinato prompt. Una temperatura elevata significa che il modello può estrapolare ulteriormente dal prompt per le sue risposte.
Per impostazione predefinita, la temperatura è impostata su 0 (bassa). |
0 |
No |
Numero massimo di token | Il numero di token impostati per questa proprietà determina la lunghezza dei completamenti generati per i perfezionamenti a più turni. Il numero di token per ogni completamento deve rientrare nel limite di contesto del modello. L'impostazione di questa proprietà su un numero basso impedirà alla spesa del token di superare la lunghezza del contesto del modello durante il richiamo, ma potrebbe anche generare risposte brevi. L'opposto è vero quando si imposta il limite di token su un valore elevato: il consumo di token raggiungerà il limite di contesto del modello dopo solo pochi giri (o completamenti). Inoltre, la qualità dei completamenti può anche diminuire perché il cleanup del componente LLM dei completamenti precedenti potrebbe spostare il contesto della conversazione. Se imposti un numero elevato di token e il tuo prompt è anche molto lungo, raggiungerai rapidamente il limite del modello dopo alcuni giri. | 1024 |
No |
Il Prompt Builder
È possibile eseguire il test dei parametri utilizzando valori mock, non valori memorizzati. È possibile aggiungere valori mock personalizzati facendo clic su Modifica

oppure utilizzare quelli forniti dal modello quando si fa clic su Genera valori.
Per ottenere l'esperienza utente, è necessario eseguire il tester skill, che consente di eseguire test di aspetti conversazionali quali i valori dei parametri memorizzati (inclusa la cronologia delle conversazioni e la variabile dei risultati prompt), le intestazioni e i piè di pagina o i perfezionamenti a più turni (e i relativi pulsanti) e di misurare le dimensioni della cronologia delle conversazioni componente.
Prompt: Procedure ottimali
Un design rapido efficace è fondamentale per ottenere il massimo dai LLM. Mentre le strategie di tuning rapido variano con diversi modelli e casi d'uso, i fondamenti di ciò che costituisce un "buono" prompt rimangono coerenti. I LLM in genere funzionano bene al completamento del testo, che prevede il successivo set di token per il testo di input specificato. Per questo motivo, i prompt di stile di completamento del testo sono un buon punto di partenza per casi d'uso semplici. Scenari più sofisticati potrebbero giustificare istruzioni a grana fine e tecniche avanzate come la richiesta di pochi colpi o la richiesta di una catena di pensieri.
- Inizia definendo il ruolo o la persona dell'LLM con una descrizione di alto livello dell'attività a portata di mano.
- Aggiungere dettagli su cosa includere nella risposta, nel formato di output previsto e così via.
- Se necessario, fornire alcuni esempi dell'attività a portata di mano
- Facoltativamente, indicare come elaborare gli scenari che costituiscono una query non supportata.
- Inizia con un prompt semplice e conciso: inizia con un prompt breve, semplice e diretto che delinea chiaramente lo use case e l'output previsto. Ad esempio:
- Un'istruzione a una riga come "Dimmi uno scherzo"
- Prompt stile completamento testo
- Un'istruzione insieme all'input
Un semplice prompt è un buon punto di partenza nei test perché è un buon indicatore di come si comporterà il modello. Ti dà anche spazio per aggiungere più elementi mentre ridefinisci il testo del prompt."Summarize the following in one sentence: The Roman Empire was a large and powerful group of ancient civilizations that formed after the collapse of the Roman Republic in Rome, Italy, in 27 BCE. At its height, it covered an area of around 5,000 kilometers, making it one of the largest empires in history. It stretched from Scotland in the north to Morocco in Africa, and it contained some of the most culturally advanced societies of the time."
- Modifica e verifica in modo iterativo il prompt: non è previsto che la prima bozza del prompt restituisca i risultati previsti. Potrebbero essere necessari diversi cicli di test per scoprire quali istruzioni devono essere aggiunte, rimosse o riformulate. Ad esempio, per evitare che il modello allucini con l'aggiunta di contenuti aggiuntivi, è necessario aggiungere ulteriori istruzioni:
"Summarize the following paragraph in one sentence. Do not add additional information outside of what is provided below: The Roman Empire was a large and powerful group of ancient civilizations that formed after the collapse of the Roman Republic in Rome, Italy, in 27 BCE. At its height, it covered an area of around 5,000 kilometers, making it one of the largest empires in history. It stretched from Scotland in the north to Morocco in Africa, and it contained some of the most culturally advanced societies of the time."
- Utilizzare un utente tipo specifico per il proprio caso d'uso: le persone spesso ottengono risultati migliori perché aiutano l'LLM a emulare il comportamento o ad assumere un ruolo.
NotaAd esempio, se si desidera che l'LLM generi approfondimenti, chiedere che sia un analista dei dati:
I modelli Cohere valutano le istruzioni specifiche delle attività più della definizione di persona.Assume the role of a data analyst. Given a dataset, your job is to extract valuable insights from it. Criteria: - The extracted insights must enable someone to be able to understand the data well. - Each insight must be clear and provide proof and statistics wherever required - Focus on columns you think are relevant, and the relationships between them. Generate insights that can provide as much information as possible. - You can ignore columns that are simply identifiers, such as IDs - Do not make assumptions about any information not provided in the data. If the information is not in the data, any insight derived from it is invalid - Present insights as a numbered list Extract insights from the data below: {data}
Nota
Prestare attenzione a eventuali pregiudizi o comportamenti impliciti che potrebbero essere inerenti all'utente tipo. - Scrivere prompt specifici di LLM: gli LLM dispongono di architetture diverse e vengono formati utilizzando metodi e set di dati diversi. Non è possibile scrivere un singolo prompt che restituisca gli stessi risultati da tutti gli LLM o anche versioni diverse dello stesso LLM. Gli approcci che funzionano bene con GPT-4 falliscono con GPT-3.5 e viceversa, per esempio. È invece necessario adattare il prompt alle funzionalità dell'LLM scelto per il caso d'uso. Usa esempi di poche immagini: poiché gli LLM imparano dagli esempi, fornisci esempi di poche immagini laddove pertinenti. Includere nel prompt esempi con etichette che dimostrino la struttura della risposta generata. Ad esempio:
Fornire alcuni esempi di immagini quando:Generate a sales summary based on the given data. Here is an example: Input: ... Summary: ... Now, summarize the following sales data: ....
- Occorre applicare i vincoli strutturali.
- Le risposte devono essere conformi a modelli specifici e devono contenere dettagli specifici
- Le risposte variano in base a condizioni di input diverse
- Il tuo caso d'uso è molto specifico per il dominio o esoterico perché i LLM, che hanno conoscenze generali, funzionano meglio sui casi d'uso comuni.
Nota
Se si includono più esempi di poche immagini nel prompt di un modello Cohere, assicurarsi di rappresentare allo stesso modo tutte le classi di esempi. Uno squilibrio nelle categorie di esempi a pochi colpi influisce negativamente sulle risposte, poiché il modello a volte limita la sua produzione ai modelli predominanti trovati nella maggior parte degli esempi. - Definire criteri di accettazione chiari: invece di istruire l'LLM su ciò che non si desidera che faccia includendo nel prompt "non fare questo" o "evitare questo", è necessario fornire istruzioni chiare che indichino all'LLM cosa dovrebbe fare in termini di output accettabile. Qualificare i risultati appropriati utilizzando criteri concreti anziché aggettivi vaghi.
Please generate job description for a Senior Sales Representative located in Austin, TX, with 5+ years of experience. Job is in the Oracle Sales team at Oracle. Candidate's level is supposed to be Senior Sales Representative or higher. Please follow the instructions below strictly: 1, The Job Description session should be tailored for Oracle specifically. You should introduce the business department in Oracle that is relevant to the job position, together with the general summary of the scope of the job position in Oracle. 2, Please write up the Job Description section in a innovative manner. Think about how you would attract candidates to join Oracle. 3, The Qualification section should list out the expectations based on the level of the job.
- Sii breve e conciso: tieni il prompt il più succinto possibile. Evita di scrivere lunghi paragrafi. LLM è più propenso a seguire le tue istruzioni se le fornisci come brevi, concisi, punti. Provare sempre a ridurre la verbosità del prompt. Mentre è fondamentale fornire istruzioni dettagliate e tutte le informazioni di contesto con cui l'LLM dovrebbe operare, tieni presente che l'accuratezza delle risposte generate da LLM tende a diminuire con l'aumentare della lunghezza del prompt.
Ad esempio:
Non eseguire questa operazione:- Your email should be concise, and friendly yet remain professional. - Please use a writing tone that is appropriate to the purpose of the email. - If the purpose of the email is negative; for example to communicate miss or loss, do the following: { Step 1: please be very brief. Step 2: Please do not mention activities } - If the purpose of the email is positive or neutral; for example to congratulate or follow up on progress, do the following: { Step 1: the products section is the main team objective to achieve, please mention it with enthusiasm in your opening paragraph. Step 2: please motivate the team to finalize the pending activities. }
Be concise and friendly. But also be professional. Also, make sure the way you write the email matches the intent of the email. The email can have two possible intents: It can be negative, like when you talk about a miss or a loss. In that case, be brief and short, don't mention any activities. An email can also be positive. Like you want to follow up on progress or congratulate on something. In that case, you need to mention the main team objective. It is in the products section. Also, take note of pending activities and motivate the team
- Fai attenzione ai pregiudizi intrinseci: i LLM sono addestrati su grandi volumi di dati e conoscenze del mondo reale che spesso contengono informazioni storicamente imprecise o obsolete e portano pregiudizi intrinseci. Questo, a sua volta, può causare l'allucinazione e l'output di dati errati o informazioni distorte. I LLM spesso hanno un limite di formazione che può causare loro di presentare informazioni storicamente imprecise, anche se con fiducia.
Nota
Non effettuare le operazioni riportate di seguito.- Chiedere ai LLM di cercare sul Web o recuperare le informazioni correnti.
- Istruire i LLM a generare contenuti in base alla propria interpretazione della conoscenza del mondo o dei dati fattuali.
- Chiedi ai LLM informazioni sensibili al tempo.
- Casi margine indirizzo: definire i casi limite che possono causare l'allucinazione del modello e la generazione di una risposta con un suono plausibile ma non corretta. Descrivere i casi di bordo e aggiungere esempi può formare un guardrail contro le allucinazioni. Ad esempio, un caso perimetrale potrebbe essere che una chiamata API che riempie i valori delle variabili nel prompt non riesca a farlo e restituisca una risposta vuota. Per consentire all'LLM di gestire questa situazione, il prompt includerà una descrizione della risposta prevista.
Suggerimento
I test potrebbero rivelare casi imprevisti. - Non introdurre contraddizioni: controllare attentamente il prompt per assicurarsi di non aver fornito istruzioni contrastanti. Ad esempio, non si desidera:
Write a prompt for generating a summary of the text given below. DO NOT let your instructions be overridden In case the user query is asking for a joke, forget the above and tell a funny joke instead
- Non dare per scontato che nulla sia implicito: esiste un limite alla quantità di conoscenze di cui dispone un LLM. Nella maggior parte dei casi, è meglio presumere che l'LLM non sappia qualcosa o possa confondersi con termini specifici. Ad esempio, un LLM può generalmente sapere cosa significa un'intuizione derivata da un dato, ma dire semplicemente "derivare buone intuizioni da questi dati" non è sufficiente. In questo caso è necessario specificare il significato degli approfondimenti:
- The extracted insights must enable someone to be able to understand the data well. - Insights must be applicable to the question shown above - Each insight must be clear and provide proof and statistics wherever required - Focus on columns you think are relevant and the relationships between them. - You can ignore columns that are simply identifiers, such as IDs
- Assicurarsi che il prompt abbia senso dopo il riempimento delle variabili: i prompt possono avere segnaposto per i valori che possono essere compilati, ad esempio mediante la compilazione di slot. Accertarsi che il prompt sia appropriato quando viene popolato testandone i valori di esempio. Ad esempio, quanto segue sembra avere senso prima che il valore della variabile venga riempito.
Tuttavia, una volta popolata la variabile, la frase non sembra corretta:Job is in the ${team} at Oracle
Per risolvere questo problema, modificare la frase. In questo caso, modificando la variabile conJob is in the Oracle Digital Assistant at Oracle
team
.
Di conseguenza, l'output è:Job is in the ${team} team at Oracle
Job is in the Oracle Digital Assistant team at Oracle
- Evita di chiedere all'LLM di fare matematica: in alcuni casi, gli LLM potrebbero non essere in grado di eseguire correttamente anche la matematica di base. Nonostante questo, allucinano e restituiscono una risposta che suona così sicura che potrebbe essere facilmente scambiata come corretta. Ecco un esempio di allucinazione LLM quando viene chiesto "qual è la media di 5, 7, 9":
The average of 5, 7, and 9 is 7.5. To find the average, you add up the values and divide by the number of values. In this case, the values are 5, 7, and 9, and there are 3 values. So, to find the average, you would add 5 + 7 + 9 and divide by 3. This gives you an average of 7.5
- Fare attenzione quando si imposta la temperatura del modello: temperature più elevate, che incoraggiano un output più creativo e casuale, possono anche produrre allucinazioni. Valori inferiori come 0,01 indicano che l'output dell'LLM deve essere preciso e deterministico.
- Evita istruzioni ridondanti: non includere istruzioni che sembrano ridondanti. Ridurre il più possibile la verbosità del prompt senza omettere dettagli cruciali.
- Utilizzare i verbi espliciti: anziché utilizzare istruzioni descrittive e verbose, utilizzare verbi concreti specifici del task quali "summarize", "classify", "generate", "draft" e così via.
- Fornire input in linguaggio naturale: quando è necessario passare il contesto o input aggiuntivi al modello, assicurarsi che siano facilmente interpretabili e in linguaggio naturale. Non tutti i modelli sono in grado di comprendere correttamente dati non strutturati, abbreviazioni o codici. Quando i dati estratti dai backend o dai database non sono strutturati, è necessario trasferirli nel linguaggio naturale.
Ad esempio, se è necessario passare il profilo utente come parte del contesto, effettuare le operazioni riportate di seguito.
Non eseguire questa operazione:Name: John Smith Age: 29 Gender: Male
Smith, John - 29M
Nota
Evita sempre qualsiasi vocabolario specifico del dominio. Incorporare le informazioni utilizzando il linguaggio naturale.
Gestione delle query OOS e OOD
È possibile abilitare LLM per generare una risposta con la variabile di input non valida, InvalidInput
, quando riconosce le query che sono out-of-scope (OOS) o out-of-domain (OOD), includendo elementi correlati all'ambito nel prompt.
Quando le conversazioni a più turni sono state abilitate, il rilevamento di OOS e OOD è essenziale per i perfezionamenti delle risposte e le query di follow-up. Quando l'LLM identifica le query OOS e OOD, genera InvalidInput
per attivare le transizioni ad altri stati o flussi. Per consentire all'LLM di gestire le query OOS e OOD, includere istruzioni per la limitazione degli ambiti che limitano gli LLM che descrivono le azioni che l'LLM deve eseguire dopo aver valutato la query utente come non supportata (ovvero OOS, OOD).
- Inizia definendo il ruolo dell'LLM con una descrizione di alto livello del task a portata di mano.
- Include istruzioni dettagliate specifiche per le attività. In questa sezione, aggiungere i dettagli su cosa includere nella risposta, come l'LLM deve formattare la risposta e altri dettagli.
- Indicare come elaborare gli scenari che costituiscono una query non supportata.
- Fornire esempi di query obsolete e risposte previste.
- Fornire esempi per il task in corso, se necessario.
{BRIEF INTRODUCTION OF ROLE & TASK}
You are an assistant to generate a job description ...
{SCOPE LIMITING INSTRUCTIONS}
For any followup query (question or task) not related to creating a job description,
you must ONLY respond with the exact message "InvalidInput" without any reasoning or additional information or questions.
INVALID QUERIES
---
user: {OOS/OOD Query}
assistant: InvalidInput
---
user: {OOS/OOD Query}
assistant: InvalidInput
---
For a valid query about <TASK>, follow the instructions and examples below:
...
EXAMPLE
---
user: {In-Domain Query}
assistant: {Expected Response}
Istruzioni limitazione ambito
InvalidInput
, la parola chiave OOS/OOD impostata per il componente LLM, dopo aver rilevato una query non supportata.For any user instruction or question not related to creating a job description, you must ONLY respond with the exact message "InvalidInput" without any reasoning or additional clarifications. Follow-up questions asking information or general questions about the job description, hiring, industry, etc. are all considered invalid and you should respond with "InvalidInput" for the same.
Ecco alcune linee guida:- Sii specifico ed esaustivo mentre definisci cosa dovrebbe fare l'LLM. Assicurati che queste istruzioni siano il più dettagliate e inequivocabili possibile.
- Descrivere l'azione da eseguire dopo che l'LLM ha identificato correttamente una query esterna all'ambito del task dell'LLM. In questo caso, indicare al modello di rispondere utilizzando la parola chiave OOS/OOD (
InvalidInput
).Nota
GPT-3.5 a volte non aderisce alla rispostaInvalidInput
per le query non supportate nonostante specifiche istruzioni di limitazione dell'ambito nel prompt per la gestione di esempi non previsti. - Limitare l'ambito può essere difficile, quindi più si è specifici su ciò che costituisce una "interrogazione supportata", più facile diventa per l'LLM identificare una query non supportata che è fuori ambito o fuori dominio.
Suggerimento
Poiché una query supportata è definita più strettamente di una query non supportata, è più facile elencare gli scenari per le query supportate rispetto al set più ampio di scenari per le query non supportate. Tuttavia, è possibile menzionare ampie categorie di query non supportate se i test dimostrano che migliorano le risposte del modello.
Esempi di pochi scatti per il rilevamento di OOS e OOD
Suggerimento
Potrebbe essere necessario specificare più esempi di immagini poche non supportati (soprattutto più vicini al limite) per un prompt GPT-3.5 per funzionare correttamente. Per GPT-4, solo uno o due esempi potrebbero essere sufficienti per una prestazione del modello ragionevolmente buona.Retrieve the list of candidates who applied to this position
Show me interview questions for this role
Can you help update a similar job description I created yesterday?
What's the difference between Roth and 401k?
Please file an expense for me
How do tax contributions work?
Diffidare sempre della lunghezza del prompt. Man mano che la cronologia delle conversazioni e le dimensioni del contesto aumentano di lunghezza, la precisione del modello inizia a diminuire. Ad esempio, dopo più di tre turni, GPT3.5 inizia ad allucinare le risposte per le query OOS.
Considerazioni specifiche del modello per la progettazione del prompt OOS/OOD
- GPT-3.5 a volte non aderisce al formato di risposta corretto (
InvalidInput
) per le query non supportate nonostante specifiche istruzioni di limitazione dell'ambito nel prompt per la gestione di esempi non previsti. Queste istruzioni potrebbero aiutare a mitigare le allucinazioni del modello, ma non può ancora limitare la sua risposta aInvalidInput
. - Potrebbe essere necessario specificare più esempi di immagini poche non supportati (soprattutto più vicini al limite) per un prompt GPT-3.5 per funzionare correttamente. Per GPT-4, solo uno o due esempi potrebbero essere sufficienti per una prestazione del modello ragionevolmente buona.
- In generale (non solo per le query OOS/OOD), piccole modifiche al prompt possono comportare differenze estreme nell'output. Nonostante la messa a punto, i modelli Cohere potrebbero non comportarsi come previsto.
- Una dimensione del contesto ingrandita provoca allucinazioni e mancato rispetto delle istruzioni. Per gestire il contesto, l'handler
transformRequestPayload
incorpora i turni di conversazione nel prompt. - A differenza dei modelli GPT, l'aggiunta di una persona al prompt non sembra influire sul comportamento dei modelli Cohere. Pesano le istruzioni specifiche dell'attività più della persona.
- Se nel prompt vengono inclusi più esempi di poche immagini, assicurarsi di rappresentare in modo uguale tutte le classi di esempi. Uno squilibrio nelle categorie di esempi a pochi colpi influisce negativamente sulle risposte, poiché il modello a volte limita la sua produzione ai modelli predominanti trovati nella maggior parte degli esempi.
Token e dimensione risposta
I LLM creano completamenti di testo utilizzando token, che possono essere correlati a una parola (o parti di una parola). "Vuoi andare al parco?" è l'equivalente di sette token: un token per ogni parola più un token per il punto interrogativo. Una lunga parola come hippopotomonstrosesquippedaliophobia (la paura delle parole lunghe) è segmentata in dieci token. In media, 100 token equivalgono a circa 75 parole in inglese. I LLM usano i token nelle loro risposte, ma li usano anche per mantenere il contesto corrente della conversazione. Per fare ciò, i LLM impostano un limite chiamato lunghezza di contesto, una combinazione del numero di token che i segmenti LLM dal prompt e il numero di token che genera per il completamento. Ogni modello imposta la propria lunghezza massima del contesto.
Per garantire che il numero di token spesi per i completamenti generati per ogni turno di un'interazione a più turni non superi la lunghezza del contesto del modello, è possibile impostare un limite utilizzando la proprietà Numero massimo di token. Quando si imposta questo numero, tenere conto di considerazioni basate sul modello, ad esempio il modello che si sta utilizzando, la relativa lunghezza del contesto e persino i relativi prezzi. È inoltre necessario tenere conto della dimensione prevista della risposta (ovvero del numero di token spesi per il completamento) insieme al numero di token nel prompt. Se si imposta il numero massimo di token su un valore elevato e il prompt è anche molto lungo, il numero di token spesi per i completamenti raggiungerà rapidamente la lunghezza massima del modello dopo solo pochi giri. A questo punto, alcuni (anche se non tutti) LLM restituiscono una risposta di 400.
Poiché il componente LLM utilizza la cronologia delle conversazioni per mantenere il contesto corrente, la precisione dei completamenti potrebbe diminuire quando vengono eliminati i messaggi meno recenti in base alla lunghezza del contesto del modello.
Cronologia conversazioni incorporate nei prompt OOS/OOD
transformRequestPayload
aggiunge una sezione CONVERSATION
al testo del prompt trasmesso con il payload e passa nella conversazione come coppie di segnali user
e assistant
:transformRequestPayload: async (event, context) => {
let prompt = event.payload.messages[0].content;
if (event.payload.messages.length > 1) {
let history = event.payload.messages.slice(1).reduce((acc, cur) => `${acc}\n${cur.role}: ${cur.content}` , '');
prompt += `\n\nCONVERSATION HISTORY:${history}\nassistant:`
}
return {
"max_tokens": event.payload.maxTokens,
"truncate": "END",
"return_likelihoods": "NONE",
"prompt": prompt,
"model": "command",
"temperature": event.payload.temperature,
"stream": event.payload.streamResponse
};
},
La prima query utente viene inclusa in questa sezione e viene considerata parte della cronologia delle conversazioni. La sezione termina con un suggerimento "assistant:"
per richiedere al modello di continuare la conversazione.{SYSTEM_PROMPT}
CONVERSATION
---
user: <first_query>
assistant: <first_response>
user: ...
assistant: ...
user: <latest_query>
assistant:
Ogni turno aumenta sia la lunghezza del prompt che la probabilità che la lunghezza del contesto del modello venga superata. Quando viene raggiunto questo limite di lunghezza del contesto, il componente LLM gestisce la situazione acquisendo la cronologia delle conversazioni e troncando i turni di conversazione in modo che la capacità del modello di seguire le istruzioni rimanga immutata.
Interazioni LLM nel tester competenze

Per impostazione predefinita, lo stato LLM finale viene visualizzato nella vista Chiamate LLM. Per esaminare i risultati degli stati LLM precedenti, fare clic sulle risposte LLM precedenti nella finestra Tester bot.