O Componente Chamar Modelo de Linguagem Grande
O componente Chamar Modelo de Linguagem Grande (componente LLM) no Visual Flow Designer permite que você conecte um fluxo ao LLM por meio de uma chamada de serviço REST.
Você pode inserir esse estado de componente em seu fluxo de caixas de diálogo selecionando Integração de Serviço > Chamar Modelo de Linguagem Grande na caixa de diálogo Adicionar Estado. Para ativar conversas de várias voltas quando as habilidades são chamadas de um assistente digital, digite uma descrição para a descrição do LLM.
Como prática recomendada, sempre adicione descrições a componentes LLM para permitir refinamentos de várias voltas quando os usuários acessarem o serviço LLM por meio de um assistente digital.
A inserção do estado do componente LLM adiciona um estado de tratamento de erros para solucionar problemas das solicitações ao LLM e suas respostas. O estado do componente LLM faz a transição para esse estado (chamado ShowLLMError por padrão) quando uma solicitação ou resposta inválida causa um erro não recuperável.
Descrição da ilustração invokellm-added-flow.png
O refinamento de resposta também pode vir do sistema quando ele implementa novas tentativas após uma falha na validação.
Se você quiser aprimorar a validação que o componente LLM já fornece ou quiser melhorar a saída LLM usando a técnica RCI (Recursive Criticism and Improvement), poderá usar nosso código inicial para criar seus próprios handlers de validação de solicitação e resposta.
Então, o que você precisa para usar este componente? Se você estiver acessando o modelo Cohere diretamente ou por meio do Oracle Generative AI Service, precisará apenas de um serviço LLM para o modelo Cohere e de um prompt, que é um bloco de texto legível por humanos contendo as instruções para o LLM. Como escrever um prompt é um processo iterativo, fornecemos diretrizes de engenharia de prompt e o Criador de prompts, onde você pode incorporar essas diretrizes em seu texto de prompt e testá-lo até que ele obtenha a resposta apropriada do modelo. Se você estiver usando outro modelo, como o OpenAI do Azure, primeiro precisará criar seu próprio Handler de Evento de Transformação com base no código inicial que fornecemos e, em seguida, criar um serviço LLM que mapeie esse handler para os pontos finais do provedor LLM que foram configurados para a instância.
Propriedades Gerais
Propriedade | Descrição | Valor Padrão | 0brigatório? |
---|---|---|---|
Serviço LLM | Uma lista dos serviços LLM que foram configurados para a habilidade. Se houver mais de um, o serviço LLM padrão será usado quando nenhum serviço for selecionado. | O serviço LLM padrão | O estado pode ser válido sem o Serviço LLM, mas a habilidade não poderá se conectar ao modelo se essa propriedade não tiver sido definida. |
Prompt | O prompt específico do modelo acessado por meio do serviço LLM selecionado. Tenha em mente nossas diretrizes gerais enquanto escreve seu prompt. Você pode informar o prompt nesse campo e, em seguida, revisá-lo e testá-lo usando o Construtor de Prompt (acessado clicando em Criar Prompt). Você também pode compor seu prompt usando o Criador de prompts. | N/A | Sim |
Parâmetros do Prompt | Os valores do parâmetro. Use a sintaxe de expressão FreeMarker padrão do Apache (${parameter} ) para fazer referência a parâmetros no texto do prompt. Por exemplo : Para variáveis de entidade composta, use a sintaxe de entidade composta:
|
N/A | No |
Variável de Resultado | Uma variável que armazena a resposta LLM. | N/A | No |
Mensagens do Usuário
Propriedade | Descrição | Valor(es) Default | 0brigatório? |
---|---|---|---|
Enviar Resultado LLM como Mensagem | A definição dessa opção como Verdadeiro gera o resultado LLM em uma mensagem enviada ao usuário. A definição dessa propriedade como Falso impede que a saída seja enviada ao usuário. | Verdadeiro | No |
Usar o Streaming | Os resultados do LLM são transmitidos para o cliente quando você define essa opção como Verdadeiro, potencialmente fornecendo uma experiência de usuário mais suave porque a resposta do LLM aparece de forma incremental à medida que é gerada, em vez de todas de uma só vez. Essa opção só estará disponível quando você tiver definido Enviar Resultado LLM como uma Mensagem como Verdadeiro.
Os usuários podem exibir respostas potencialmente inválidas porque o handler de eventos de validação é chamado após a resposta LLM já ter iniciado o streaming. Defina Usar Streaming como Falso para modelos Cohere ou quando você tiver aplicado um esquema JSON ao resultado LLM definindo Impor Resposta LLM Formatada em JSON como Verdadeiro. Não ativar streaming se:
|
Verdadeiro | No |
Mensagem de Início | Uma mensagem de status que é enviada ao usuário quando o LLM é chamado. Esta mensagem, que é realmente renderizada antes da chamada LLM, pode ser um indicador útil. Ele pode informar aos usuários que o processamento está ocorrendo ou que o LLM pode levar um período de tempo para responder. | N/A | Número |
Ativar Refinamentos de Vários Giros | Ao definir essa opção como Verdadeiro (o padrão), você permite que os usuários refinem a resposta LLM fornecendo instruções de acompanhamento. A caixa de diálogo libera o turno para o usuário, mas permanece no estado LLM depois que o resultado LLM é recebido. Quando definida como Falso, a caixa de diálogo mantém o giro até que a resposta LLM seja recebida e faça a transição para o estado referenciado pela ação Sucesso.
Observação: A descrição do componente é necessária para refinamentos de várias voltas quando a habilidade é chamada de um assistente digital. |
Verdadeiro | Número |
Ações padrão | Adiciona os botões de ação padrão que são exibidos abaixo da saída na mensagem de resultado LLM. Todos esses botões são ativados por padrão.
|
Enviar, Cancelar e Desfazer estão todos selecionados. | Número |
Rótulo do Botão Cancelar | O label do botão de cancelamento | Submit |
Sim - Quando a ação Cancelar é definida. |
Rótulo do Botão de Sucesso | O rótulo do botão de sucesso | Cancel |
Sim - quando a ação Êxito é definida. |
Rótulo do Botão Desfazer | O rótulo do botão desfazer | Undo |
Sim - Quando a ação Desfazer é definida. |
Ações personalizadas | Um botão de ação personalizado. Insira um rótulo de botão e um prompt com instruções adicionais. | N/A | No |
Ações de Transição para o Componente Chamar Modelo de Linguagem Grande
Ação | Descrição |
---|---|
cancel |
Essa ação é acionada por usuários que tocam no botão Cancelar. |
error |
Essa ação é acionada quando solicitações ou respostas do LLM não são válidas. Por exemplo, a alocação de solicitações de repetição para corrigir erros de valor de entidade ou JSON foi usada. |
Classificações do usuário para conteúdo gerado pelo LLM

Quando os usuários dão à resposta LLM uma classificação de polegar para baixo, a habilidade segue com um link que abre um formulário de feedback.
Você pode desativar esses botões desativando Habilitar feedback de Modelo de Linguagem Grande em Definições > Configuração.
Validação da Resposta
Propriedade | Descrição | Valor Padrão | 0brigatório? |
---|---|---|---|
Entidades de Validação | Selecione as entidades cujos valores devem ser correspondidos na mensagem de resposta LLM. Os nomes dessas entidades e seus valores correspondentes são passados como um mapa para o processador de eventos, que avalia esse objeto em busca de correspondências de entidades ausentes. Quando as correspondências de entidade ausentes fazem com que a validação falhe, o handler retorna uma mensagem de erro nomeando as entidades sem correspondência, que é então enviada ao modelo. Em seguida, o modelo tenta gerar novamente uma resposta que inclua os valores ausentes. Ele continua com suas tentativas até que o manipulador valide sua saída ou até que tenha usado seu número de novas tentativas.
Recomendamos o uso de entidades compostas para permitir que o handler de eventos gere mensagens de erro concisas porque os labels e as mensagens de erro aplicados a itens compósitos individuais fornecem ao LLM detalhes sobre os valores de entidade que ele não incluiu em sua resposta. |
N/A | No |
Impor Resposta LLM Formatada em JSON | Definindo isso como Verdadeiro, você pode aplicar a formatação JSON à resposta LLM copiando e colando um esquema JSON. O componente LLM valida a resposta LLM formatada em JSON em relação a este esquema.
Se você não quiser que os usuários exibam o resultado LLM como JSON bruto, poderá criar um handler de eventos com um método Defina Usar Streaming como Falso se você estiver aplicando a formatação JSON. O GPT-3.5 apresenta mais robustez do que o GPT-4 para validação de esquema JSON. GPT-4 às vezes sobrecorreta uma resposta. |
Falso | No |
Número de repetições | O número máximo de repetições permitidas quando o LLM é chamado com um prompt de repetição quando erros de validação de entidade ou JSON são encontrados. O prompt de nova tentativa especifica os erros e as solicitações que o LLM os corrige. Por padrão, o componente LLM faz uma única solicitação de nova tentativa. Quando a alocação de novas tentativas for atingida, o ciclo de validação do prompt de nova tentativa será encerrado. A caixa de diálogo então se move do componente LLM por meio de sua transição de erro. | 1 |
No |
Repetir mensagem | Uma mensagem de status que é enviada ao usuário quando o LLM é chamado usando um prompt de nova tentativa. Por exemplo, o seguinte enumera erros de entidade e JSON usando a propriedade de evento allValidationErrors :
|
Enhancing the response. One moment, please... |
No |
Handler de Personalização de Validação | Se o seu caso de uso exigir validação especializada, você poderá selecionar o handler de validação personalizado que foi implantado na sua habilidade. Por exemplo, você pode ter criado um handler de eventos para sua habilidade que não apenas valida e aplica processamento adicional à resposta LLM, mas também avalia as solicitações do usuário por conteúdo tóxico. Se seu caso de uso exigir que essa entidade ou validação JSON dependa de regras específicas, como correspondências de entidades interdependentes (por exemplo, a presença de um valor de entidade no resultado LLM exige ou exclui a presença de outro), você precisará criar o handler para essa habilidade antes de selecioná-lo aqui. | N/A | No |
Criar Handlers de Validação e Personalização de LLM
Além dos handlers de Transformação LLM, você também pode usar handlers de eventos para validar as solicitações feitas ao LLM e suas respostas (as conclusões geradas pelo provedor LLM). Normalmente, você manteria esse código, conhecido como um handler de Validação e Personalização LLM, separado do código do handler de Transformação LLM porque ele opera em diferentes níveis. A validação de solicitação e resposta é específica de um estado LLM e seu prompt. A validação da transformação LLM, por outro lado, se aplica a toda a habilidade porque sua lógica de transformação de solicitação e resposta geralmente é a mesma para todas as chamadas LLM na habilidade.
LlmComponentContext
no bots-node-sdk
ou incorporando esses métodos ao modelo que fornecemos.
Em sua forma não modificada, o código do modelo executa as mesmas funções de validação que já foram fornecidas pelo componente LLM.
Você pode criar seu próprio handler de eventos de validação que personaliza a apresentação da resposta LLM. Nesse caso, o texto de resposta LLM pode ser enviado de dentro do handler como parte de uma mensagem do usuário. Por exemplo, se você instruir o LLM a enviar uma resposta estruturada usando o formato JSON, poderá fazer parsing da resposta e gerar uma mensagem formatada como uma tabela ou cartão.
- Clique em Componentes na barra de navegação esquerda.
- Clique em +New Serviço.
- Preencha a caixa de diálogo Criar Serviço:
- Nome: Informe o nome do serviço.
- Tipo de Serviço: Contêiner Incorporado
- Tipo de Pacote de Serviço do Componente: Novo Componente
- Tipo de Componente: Validação e Personalização de LLM
- Nome do Componente: Informe um nome facilmente identificável para o handler de eventos. Você fará referência a esse nome ao criar o serviço LLM para a habilidade.
- Clique em Criar para gerar o handler de validação.
- Após a conclusão da implantação, expanda o serviço e selecione o handler de validação.
- Clique em Editar para abrir o editor Editar Código do Componente.
- Usando o modelo gerado, atualize os métodos de handler a seguir conforme necessário.
Método Descrição Quando a Validação for Bem-sucedida Quando a Validação Falha Retornar Tipo Localização no Editor Código do Marcador O que posso fazer quando a validação falha? validateRequestPayload
Valida o payload da solicitação. Retorna true
quando a solicitação é válida.Retorna
false
quando uma solicitação falha na validação.booleano Linhas 24-29
Para saber mais sobre esse código, consultevalidateRequestPayload: async (event, context) => { if (context.getCurrentTurn() === 1 && context.isJsonValidationEnabled()) { context.addJSONSchemaFormattingInstruction(); } return true; }
validateRequestPayload
properties.- Revise o prompt e reenvie-o para o LLM
- Defina um erro de validação.
validateResponsePayload
Valida o payload de resposta LLM. Quando o handler retornatrue
:- Se você definir a propriedade Enviar Resultado LLM como uma Mensagem como
true
, a resposta LLM, incluindo botões de ação padrão ou personalizados, será enviada ao usuário. - Se o streaming estiver ativado, a resposta LLM será transmitida em blocos. Os botões de ação serão adicionados no final do fluxo.
- Todas as mensagens do usuário adicionadas no handler são enviadas ao usuário, independentemente da definição da propriedade Enviar Resultado LLM como uma Mensagem.
- Se um novo prompt LLM for definido no handler, esse prompt será enviado ao LLM e o handler de validação será chamado novamente com a nova resposta LLM
- Se nenhum prompt de LLM novo for definido e a propriedade Ativar Refinamentos de Vários Turnos for definida como
true
, o turno será liberado e o fluxo de caixas de diálogo permanecerá no estado LLM. Se essa propriedade for definida comofalse
, no entanto, o turno será mantido e a caixa de diálogo fará a transição do estado usando a ação de transiçãosuccess
.
Quando o handler retornafalse
:- Se o streaming estiver ativado, os usuários poderão exibir respostas potencialmente inválidas porque o handler de eventos de validação será chamado depois que a resposta LLM já tiver iniciado o streaming.
- Todas as mensagens do usuário adicionadas pelo handler são enviadas ao usuário, independentemente da definição Enviar Resultado LLM como uma Resposta de Habilidade.
- Se um novo prompt LLM for definido no handler, esse prompt será enviado ao LLM e o handler de validação será chamado novamente com a nova resposta LLM.
- Se nenhum prompt LLM for definido, o fluxo de caixas de diálogo sairá do estado do componente LLM. A ação de transição definida no código do handler será usada para determinar o próximo estado. Se nenhuma ação de transição for definida, a ação de transição
error
será acionada.
booleano Linhas 50-56
Para saber mais sobre esse código, consulte/** * 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
Properties.- Chame o LLM novamente usando um prompt de repetição que especifica o problema com a resposta (ele não está em conformidade com um formato JSON específico, por exemplo) e solicita que o LLM o corrija.
- Defina um erro de validação.
changeBotMessages
Altera as mensagens da habilidade do candidato que serão enviadas ao usuário. N/A N/A Uma lista de mensagens do Modelo de Mensagem de Conversa Linhas 59-71
Para obter um exemplo de uso desse método, consulte Aprimorar a Mensagem do Usuário para Respostas Formatadas em JSON.changeBotMessages: async (event, context) => { return event.messages; },
N/A submit
Esse handler é chamado quando os usuários tocam no botão Submeter. Ele processa ainda mais a resposta LLM. N/A N/A N/A Linhas 79-80 submit: async (event, context) => { }
N/A event
e um objetocontext
. Por exemplo :
As propriedades definidas para o objetovalidateResponsePayload: async (event, context) => ...
event
dependem do tipo de evento. O segundo argumento,context
, faz referência à classeLlmComponentContext
, que acessa os métodos de conveniência para criar sua própria lógica do handler de eventos. Isso inclui métodos para definir o número máximo de prompts de repetição e enviar mensagens de status e erro aos usuários da habilidade. - Verifique a sincronização de suas atualizações clicando em Validar. Em seguida, clique em Salvar > Fechar.
validateRequestPayload
Propriedades do Evento
Nome | Descrição | Tipo | 0brigatório? |
---|---|---|---|
payload |
A solicitação LLM que requer validação | string | Sim |
validateResponsePayload
Propriedades do Evento
Nome | Descrição | Tipo | 0brigatório? |
---|---|---|---|
payload |
A resposta LLM que precisa ser validada. | string | Sim |
validationEntities |
Uma lista de nomes de entidades que é especificada pela propriedade Entidades de Validação do estado do componente LLM correspondente. | String[] |
Número |
entityMatches |
Um mapa com o nome da entidade correspondente como a chave e um array da entidade JSONObject corresponde ao valor. Essa propriedade só tem um valor quando a propriedade Entidades de Validação também é definida no estado do componente LLM. | Mapa<String, JSONArray> |
Número |
entityValidationErrors |
Pares de chave/valor com entityName ou um item de repositório composto como chave e uma mensagem de erro como valor. Essa propriedade só é definida quando a propriedade Entidades de Validação também é definida e há correspondências de entidade ausentes ou (quando a entidade é composta) correspondências de item de entidade composta ausentes.
|
Mapa<String, String> |
Número |
jsonValidationErrors |
Se a propriedade Impor Resposta LLM Formatada em JSON do componente LLM estiver definida como Verdadeira e a resposta não for um objeto JSON válido, essa propriedade conterá uma única entrada com a mensagem de erro informando que a resposta não é um objeto JSON válido.
No entanto, se o JSON for válido e a propriedade Impor Resposta LLM Formatada em JSON do componente também for definida como Verdadeira, essa propriedade conterá pares de chave/valor com o caminho do esquema como chaves e (quando a resposta não estiver em conformidade com o esquema) as mensagens de erro de validação do esquema como os valores. |
Mapa<String, String> |
Número |
allValidationErrors |
Uma lista de todos os erros de validação de entidade e erros de validação de JSON. | String[] |
Número |
Amostras de código do manipulador de validação
Validação de JSON Personalizada
validateResponsePayload
padrão para verificar se uma requisição de cargo formatada em JSON está definida como 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;
}
Aprimorar a Mensagem do Usuário para Respostas Formatadas em JSON
changeBotMessages
para transformar a resposta JSON bruta em uma mensagem de formulário amigável. /**
* 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;
}
}
Validação de Entidade Personalizada
validateResponsePayload
, verifica se o local da descrição do job está definido como Los Angeles usando correspondências de entidade. Este exemplo pressupõe que uma entidade LOCATION tenha sido adicionada à propriedade Entidades de Validação do estado 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;
}
Erros de Validação
validateRequestPayload
e validateResponsePayload
que são compostos de
- Uma mensagem de erro personalizada
- Um dos códigos de erro definidos para a propriedade
errorCode
do CLMI.
error
sempre que um dos métodos do handler de eventos não pode validar uma solicitação ou uma resposta. Em seguida, o fluxo de caixas de diálogo passa para o estado vinculado à transição error
. Quando você adiciona o componente LLM, ele é acompanhado por esse estado de erro. Esse estado Enviar Mensagem, cujo nome padrão é showLLMError, retransmite o erro fazendo referência à variável com escopo de fluxo que armazena os detalhes do erro chamados system.llm.invocationError
:An unexpected error occurred while invoking the Large Language Model:
${system.llm.invocationError}
Essa variável armazena erros definidos pela lógica personalizada nos processadores de evento ou pelo próprio componente LLM. Essa variável contém um mapa com as seguintes chaves: errorCode
: Um dos códigos de erro CLMIerrorMessage
: Uma mensagem (um valor de string) que descreve o erro.statusCode
: O código de status HTTP retornado pela chamada LLM.
Dica:
Emboraerror
seja a transição padrão para falhas de validação, você pode usar outra ação definindo uma transição de erro personalizada no código do handler.
Crítica e Melhoria Recursiva (RCI)
- Envie um prompt para o LLM que pede para criticar a resposta anterior.
- Envie um prompt para o LLM para melhorar a resposta com base na crítica.
validateResponsePayload
executa o ciclo RCI de solicitação de crítica e solicitação de melhoria.
RCI Automático
validateResponsePayload
se o RCI já tiver sido aplicado. Caso contrário, o RCI critica-melhora sequência começa. Depois que o prompt de crítica é enviado, o handler validateResponsePayload
é chamado e, com base no estado RCI armazenado em uma propriedade personalizada, o prompt de melhoria é enviado.
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 sob Demanda
changeBotMessages
. Este botão chama o processador de eventos personalizado que inicia o ciclo RCI. O método validateResponsePayload
trata o ciclo de crítica/melhoria do 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;
}
Opções avançadas
Propriedade | Descrição | Valor Padrão | 0brigatório? |
---|---|---|---|
Contexto do Usuário Inicial | Envia mensagens de usuário adicionais como parte do prompt LLM inicial por meio dos seguintes métodos:
|
N/A | Número |
Entrada do Usuário Personalizado | Uma expressão do Apache Freemarker que especifica o texto enviado sob a atribuição de usuário como parte do prompt LLM inicial. | N/A | Número |
Mensagem Fora do Escopo | A mensagem que é exibida quando o LLM avalia a consulta do usuário como fora do escopo (OOS) ou como fora do domínio (OOD). | N/A | Número |
Palavra-chave Fora do Escopo | Por padrão, o valor é InvalidInput . O LLM retorna essa palavra-chave quando avalia a consulta do usuário como fora do escopo (OOS) ou fora do domínio (OOD) de acordo com as instruções de limitação de escopo do prompt. Quando o modelo gera essa palavra-chave, o fluxo de caixas de diálogo pode fazer a transição para um novo estado ou um novo fluxo.
Não altere esse valor. Se você precisar alterar a palavra-chave para atender a um caso de uso específico, recomendamos que você use linguagem natural em vez de uma palavra-chave que possa ser mal interpretada. Por exemplo, |
invalidInput - Não altere esse valor. Alterar esse valor pode resultar em comportamento indesejável do modelo.
|
Número |
Temperatura | Incentiva, ou restringe, a aleatoriedade e a criatividade das conclusões do LLM ao prompt. Você pode avaliar a criatividade do modelo definindo a temperatura entre 0 (baixa) e 1 (alta). Uma temperatura baixa significa que as conclusões do modelo para o prompt serão diretas ou determinísticas: os usuários quase sempre obterão a mesma resposta a um determinado prompt. Uma alta temperatura significa que o modelo pode extrapolar ainda mais do prompt para suas respostas.
Por padrão, a temperatura é definida como 0 (baixa). |
0 |
No |
Número Máximo de Tokens | O número de tokens que você define para essa propriedade determina o tamanho das conclusões geradas para refinamentos de vários giros. O número de tokens para cada conclusão deve estar dentro do limite de contexto do modelo. A definição dessa propriedade para um número baixo impedirá que o gasto do token exceda o tamanho do contexto do modelo durante a chamada, mas também poderá resultar em respostas curtas. O oposto é verdadeiro quando você define o limite de token para um valor alto: o consumo de token atingirá o limite de contexto do modelo após apenas algumas curvas (ou conclusões). Além disso, a qualidade das conclusões também pode diminuir porque a limpeza das conclusões anteriores do componente LLM pode mudar o contexto da conversa. Se você definir um número alto de tokens e seu prompt também for muito longo, você atingirá rapidamente o limite do modelo após algumas curvas. | 1024 |
No |
O Criador de prompts
Você pode testar os parâmetros usando valores simulados, não valores armazenados. Você pode adicionar seus próprios valores simulados clicando em Editar

ou use aqueles fornecidos pelo modelo quando você clicar em Gerar Valores.
Para obter a experiência do usuário, você precisa executar o Testador de Habilidades, que permite testar aspectos de conversação, como valores de parâmetros armazenados (incluindo histórico de conversas e a variável de resultado do prompt), cabeçalhos e rodapés ou refinamentos de vários turnos (e seus botões relacionados) e avaliar o tamanho do histórico de conversas do componente.
Prompts: Melhores Práticas
O design rápido eficaz é vital para tirar o máximo proveito dos LLMs. Embora as estratégias de ajuste rápido variem com diferentes modelos e casos de uso, os fundamentos do que constitui um prompt "bom" permanecem consistentes. Os LLMs geralmente têm um bom desempenho na conclusão do texto, o que está prevendo o próximo conjunto de tokens para o texto de entrada fornecido. Por isso, os prompts de estilo de conclusão de texto são um bom ponto de partida para casos de uso simples. Cenários mais sofisticados podem justificar instruções refinadas e técnicas avançadas, como solicitação de poucos tiros ou solicitação de cadeia de pensamento.
- Comece definindo a função ou persona do LLM com uma descrição de alto nível da tarefa em questão.
- Adicione detalhes sobre o que incluir na resposta, formato de saída esperado etc.
- Se necessário, forneça alguns exemplos da tarefa em questão
- Opcionalmente, mencione como processar cenários que constituem uma consulta não suportada.
- Comece com um prompt simples e conciso - Comece com um prompt breve, simples e direto que descreva claramente o caso de uso e a saída esperada. Por exemplo :
- Uma instrução de uma linha como "Diga-me uma piada"
- Um prompt de estilo de conclusão de texto
- Uma instrução junto com a entrada
Um prompt simples é um bom ponto de partida em seus testes porque é um bom indicador de como o modelo se comportará. Ele também oferece espaço para adicionar mais elementos à medida que você refina o texto do 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."
- Modifique e teste seu prompt de forma iterativa - Não espere que o primeiro rascunho do seu prompt retorne os resultados esperados. Pode levar várias rodadas de testes para descobrir quais instruções precisam ser adicionadas, removidas ou reformuladas. Por exemplo, para evitar que o modelo alucine adicionando conteúdo extra, você adicionaria instruções adicionais:
"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."
- Usar uma persona específica para seu caso de uso - As personas geralmente resultam em melhores resultados porque ajudam o LLM a emular comportamento ou assumir uma função.
ObservaçãoPor exemplo, se você quiser que o LLM gere insights, peça que ele seja um analista de dados:
Os modelos de referência ponderam as instruções específicas da tarefa mais do que a definição de 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}
Observação
Cuidado com quaisquer vieses ou comportamentos implícitos que possam ser inerentes à persona. - Escrever prompts específicos do LLM - Os LLMs têm arquiteturas diferentes e são treinados usando métodos diferentes e conjuntos de dados diferentes. Você não pode escrever um único prompt que retornará os mesmos resultados de todos os LLMs, ou mesmo versões diferentes do mesmo LLM. Abordagens que funcionam bem com GPT-4 falham com GPT-3.5 e vice-versa, por exemplo. Em vez disso, você precisa adaptar seu prompt aos recursos do LLM escolhido para seu caso de uso. Usar exemplos curtos - Como os LLMs aprendem com exemplos, forneça exemplos curtos sempre que relevante. Inclua exemplos rotulados em seu prompt que demonstrem a estrutura da resposta gerada. Por exemplo :
Forneça alguns exemplos quando:Generate a sales summary based on the given data. Here is an example: Input: ... Summary: ... Now, summarize the following sales data: ....
- As restrições estruturais devem ser aplicadas.
- As respostas devem estar em conformidade com padrões específicos e devem conter detalhes específicos
- As respostas variam com diferentes condições de entrada
- Seu caso de uso é muito específico do domínio ou esotérico porque os LLMs, que têm conhecimento geral, funcionam melhor em casos de uso comuns.
Observação
Se você estiver incluindo vários exemplos pontuais no prompt de um modelo Cohere, certifique-se de representar igualmente todas as classes de exemplos. Um desequilíbrio nas categorias de poucos exemplos afeta negativamente as respostas, pois o modelo às vezes limita sua saída aos padrões predominantes encontrados na maioria dos exemplos. - Definir critérios claros de aceitação - Em vez de instruir o LLM sobre o que você não deseja que ele faça, incluindo "não faça isso" ou "evite isso" no prompt, você deve fornecer instruções claras que digam ao LLM o que ele deve fazer em termos do que você espera como saída aceitável. Qualifique as saídas apropriadas usando critérios concretos em vez de adjetivos vagos.
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.
- Seja breve e conciso - Mantenha o prompt o mais sucinto possível. Evite escrever parágrafos longos. O LLM é mais provável de seguir suas instruções se você fornecê-las como pontos breves e concisos. Sempre tente reduzir o nível de detalhamento do prompt. Embora seja crucial fornecer instruções detalhadas e todas as informações de contexto com as quais o LLM deve operar, tenha em mente que a precisão das respostas geradas pelo LLM tende a diminuir à medida que a duração do prompt aumenta.
Por exemplo:
Não faça isso:- 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
- Cuidado com vieses inerentes - Os LLMs são treinados em grandes volumes de dados e conhecimento do mundo real que geralmente podem conter informações historicamente imprecisas ou desatualizadas e transportar vieses inerentes. Isso, por sua vez, pode fazer com que os LLMs alucinem e produzam dados incorretos ou insights tendenciosos. LLMs muitas vezes têm um ponto de corte de treinamento que pode levá-los a apresentar informações historicamente imprecisas, embora com confiança.
Observação
Não:- Peça aos LLMs que pesquisem na Web ou recuperem informações atuais.
- Instrua LLMs a gerar conteúdo com base em sua própria interpretação do conhecimento mundial ou dados factuais.
- Pergunte aos LLMs sobre informações sensíveis ao tempo.
- Casos de borda do endereço - Defina os casos de borda que podem fazer com que o modelo alucine e gere um som plausível, mas uma resposta incorreta. Descrever casos de borda e adicionar exemplos pode formar um corrimão contra alucinações. Por exemplo, um caso de borda pode ser que uma chamada de API que preenche valores de variável no prompt não faça isso e retorne uma resposta vazia. Para permitir que o LLM trate essa situação, seu prompt incluiria uma descrição da resposta esperada.
Dica:
O teste pode revelar casos de borda imprevistos. - Não introduzir contradições - Examine o prompt com cuidado para garantir que você não tenha fornecido nenhuma instrução em conflito. Por exemplo, você não deseja o seguinte:
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
- Não suponha que nada esteja implícito - Há um limite na quantidade de conhecimento que um LLM tem. Na maioria dos casos, é melhor assumir que o LLM não sabe algo, ou pode ficar confuso sobre termos específicos. Por exemplo, um LLM geralmente pode saber o que significa um insight derivado de um dado, mas apenas dizer "derivar bons insights desses dados" não é suficiente. Você precisa especificar o que os insights significam para você neste caso:
- 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
- Certifique-se de que o prompt faça sentido depois que as variáveis forem preenchidas - Os prompts podem ter espaços reservados para valores que podem ser preenchidos, por exemplo, por meio do preenchimento de slot. Certifique-se de que o prompt faça sentido depois que for preenchido testando seus valores de amostra. Por exemplo, o seguinte parece fazer sentido antes que o valor da variável seja preenchido.
No entanto, uma vez que a variável é preenchida, a frase não parece certa:Job is in the ${team} at Oracle
Para corrigir isso, edite a frase. Nesse caso, modificando a variável comJob is in the Oracle Digital Assistant at Oracle
team
.
Como resultado, a saída é:Job is in the ${team} team at Oracle
Job is in the Oracle Digital Assistant team at Oracle
- Evite pedir ao LLM para fazer cálculos - Em alguns casos, é possível que os LLMs não consigam fazer nem mesmo cálculos matemáticos básicos corretamente. Apesar disso, eles alucinam e retornam uma resposta que soa tão confiante que poderia ser facilmente confundida como correta. Aqui está um exemplo de uma alucinação LLM o seguinte quando perguntado "qual é a média de 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
- Tenha cuidado ao definir a temperatura do modelo - Temperaturas mais altas, que incentivam uma saída mais criativa e aleatória, também podem produzir alucinações. Valores mais baixos como 0,01 indicam que a saída do LLM deve ser precisa e determinística.
- Evite instruções redundantes - Não inclua instruções que pareçam redundantes. Reduza a verbosidade do prompt o máximo possível sem omitir detalhes cruciais.
- Usar verbos explícitos - Em vez de usar instruções verbosas e descritivas, use verbos concretos específicos da tarefa, como "summarize", "classify", "generate", "draft", etc.
- Fornecer entradas de linguagem natural - Quando precisar transmitir contexto ou entradas adicionais ao modelo, certifique-se de que elas sejam facilmente interpretáveis e em linguagem natural. Nem todos os modelos podem compreender corretamente dados, abreviações ou códigos não estruturados. Quando os dados extraídos de backends ou bancos de dados não são estruturados, você precisa transpô-los para a linguagem natural.
Por exemplo, se você precisar passar o perfil do usuário como parte do contexto, faça o seguinte:
Não faça isso:Name: John Smith Age: 29 Gender: Male
Smith, John - 29M
Observação
Sempre evite qualquer vocabulário específico do domínio. Incorpore as informações usando a linguagem natural.
Tratando Consultas OOS e OOD
Você pode ativar o LLM para gerar uma resposta com a variável de entrada inválida, InvalidInput
quando ele reconhece consultas que estão fora do escopo (OOS) ou fora do domínio (OOD), incluindo elementos relacionados ao escopo em seu prompt.
Quando conversas de vários turnos foram ativadas, a detecção de OOS e OOD é essencial para os refinamentos de resposta e consultas de acompanhamento. Quando o LLM identifica consultas OOS e OOD, ele gera InvalidInput
para acionar transições para outros estados ou fluxos. Para permitir que o LLM trate consultas OOS e OOD, inclua instruções de limitação de escopo que limitem os LLMs que descrevem o que o LLM deve fazer depois de avaliar a consulta do usuário como não suportada (ou seja, OOS, OOD).
- Comece definindo a função do LLM com uma descrição de alto nível da tarefa em questão.
- Inclua instruções detalhadas e específicas da tarefa. Nesta seção, adicione detalhes sobre o que incluir na resposta, como o LLM deve formatar a resposta e outros detalhes.
- Mencione como processar cenários que constituem uma consulta não suportada.
- Forneça exemplos de consultas fora do escopo e respostas esperadas.
- Forneça exemplos para a tarefa em questão, se necessário.
{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}
Instruções de Limitação do Escopo
InvalidInput
, o conjunto de palavras-chave OOS/OOD para o componente LLM, depois que ele encontra uma consulta não suportada.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.
Veja algumas diretrizes:- Seja específico e exaustivo ao definir o que o LLM deve fazer. Certifique-se de que essas instruções sejam o mais detalhadas e inequívocas possível.
- Descreva a ação a ser executada depois que o LLM identifica com sucesso uma consulta que está fora do escopo da tarefa do LLM. Nesse caso, instrua o modelo a responder usando a palavra-chave OOS/OOD (
InvalidInput
).Observação
O GPT-3.5 às vezes não adere à respostaInvalidInput
para consultas não suportadas, apesar das instruções específicas de limitação de escopo no prompt sobre como lidar com exemplos fora do escopo. - Restringir o escopo pode ser complicado, portanto, quanto mais específico você for sobre o que constitui uma "consulta suportada", mais fácil será para o LLM identificar uma consulta não suportada que esteja fora do escopo ou fora do domínio.
Dica:
Como uma consulta suportada é definida de forma mais restrita do que uma consulta não suportada, é mais fácil listar os cenários das consultas suportadas do que o conjunto mais amplo de cenários para consultas não suportadas. No entanto, você pode mencionar amplas categorias de consultas sem suporte se o teste revelar que elas melhoram as respostas do modelo.
Poucos exemplos de captura para detecção de OOS e OOD
Dica:
Talvez seja necessário especificar mais exemplos de poucas capturas não suportados (principalmente mais próximos do limite) para que um prompt GPT-3.5 funcione bem. Para o GPT-4, apenas um ou dois exemplos podem ser suficientes para um desempenho de modelo razoavelmente bom.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?
Sempre tenha cuidado com o tamanho do prompt. À medida que o histórico de conversas e, posteriormente, o tamanho do contexto aumentam, a precisão do modelo começa a cair. Por exemplo, após mais de três voltas, o GPT3.5 começa a alucinar as respostas para consultas OOS.
Considerações Específicas do Modelo para Design de Prompt OOS/OOD
- O GPT-3.5 às vezes não adere ao formato de resposta correto (
InvalidInput
) para consultas sem suporte, apesar das instruções específicas de limitação de escopo no prompt sobre como lidar com exemplos fora do escopo. Essas instruções podem ajudar a mitigar as alucinações do modelo, mas ainda não podem restringir sua resposta aInvalidInput
. - Talvez seja necessário especificar mais exemplos de poucas capturas não suportados (principalmente mais próximos do limite) para que um prompt GPT-3.5 funcione bem. Para o GPT-4, apenas um ou dois exemplos podem ser suficientes para um desempenho de modelo razoavelmente bom.
- Em geral (não apenas para consultas OOS/OOD), pequenas alterações no prompt podem resultar em diferenças extremas na saída. Apesar do ajuste, os modelos de Cohere podem não se comportar como esperado.
- Um tamanho de contexto ampliado causa alucinações e falha no cumprimento das instruções. Para manter o contexto, o handler
transformRequestPayload
incorpora a conversa no prompt. - Ao contrário dos modelos GPT, adicionar uma persona ao prompt não parece afetar o comportamento dos modelos de Cohere. Eles pesam mais as instruções específicas da tarefa do que a persona.
- Se você estiver incluindo vários exemplos pontuais no prompt, certifique-se de representar igualmente todas as classes de exemplos. Um desequilíbrio nas categorias de poucos exemplos afeta negativamente as respostas, pois o modelo às vezes limita sua saída aos padrões predominantes encontrados na maioria dos exemplos.
Tokens e Tamanho da Resposta
Os LLMs constroem conclusões de texto usando tokens, que podem se correlacionar a uma palavra (ou partes de uma palavra). "Você está indo para o parque?" é o equivalente a sete tokens: um token para cada palavra mais um token para o ponto de interrogação. Uma palavra longa como hippopotomonstrosesquippedaliophobia (o medo de palavras longas) é segmentada em dez símbolos. Em média, 100 tokens equivalem a cerca de 75 palavras em inglês. Os LLMs usam tokens em suas respostas, mas também os usam para manter o contexto atual da conversa. Para fazer isso, os LLMs definem um limite chamado comprimento de contexto, uma combinação do número de tokens que o LLM segmenta do prompt e o número de tokens que ele gera para a conclusão. Cada modelo define seu próprio tamanho máximo de contexto.
Para garantir que o número de tokens gastos nas conclusões geradas para cada turno de uma interação de vários turnos não exceda o tamanho do contexto do modelo, você pode definir um limite usando a propriedade Número Máximo de Tokens. Ao definir esse número, considere considerações baseadas em modelo, como o modelo que você está usando, o tamanho do contexto e até mesmo o preço. Você também precisa considerar o tamanho esperado da resposta (ou seja, o número de tokens gastos para a conclusão) juntamente com o número de tokens no prompt. Se você definir o número máximo de tokens para um valor alto e seu prompt também for muito longo, o número de tokens gastos para as conclusões atingirá rapidamente o tamanho máximo do modelo após apenas algumas curvas. Neste ponto, alguns (embora não todos) LLMs retornam uma resposta de 400.
Como o componente LLM usa o histórico de conversas para manter o contexto atual, a precisão das conclusões pode diminuir quando exclui mensagens mais antigas para acomodar o tamanho do contexto do modelo.
Histórico de conversas incorporado nos prompts OOS/OOD
transformRequestPayload
adiciona uma seção CONVERSATION
ao texto do prompt que é transmitido com o payload e passa na conversa gira como pares de dicas 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
};
},
A primeira consulta do usuário é incluída nesta seção e é considerada parte do histórico de conversas. A seção termina com uma dica "assistant:"
para solicitar que o modelo continue a conversa.{SYSTEM_PROMPT}
CONVERSATION
---
user: <first_query>
assistant: <first_response>
user: ...
assistant: ...
user: <latest_query>
assistant:
Cada turno aumenta tanto o tamanho do prompt quanto a probabilidade de que o tamanho do contexto do modelo seja excedido. Quando esse limite de tamanho de contexto é atingido, o componente LLM gerencia a situação capturando o histórico da conversa e truncando as alternâncias da conversa para que a capacidade do modelo de seguir as instruções permaneça intacta.
Interações de LLM no Testador de Habilidades

Por padrão, o estado final do LLM é renderizado na view Chamadas do LLM. Para revisar os resultados dos estados LLM anteriores, clique nas respostas LLM anteriores na janela Testador de Bot.