Melhores práticas de design para evitar mensagens duplicadas

Note

Este artigo descreve as características e o comportamento do arnês padrão. Aprenda a aceder a funcionalidades padrão nos agentes e fluxos de agentes padrão do Access.

Na estrutura padrão, vários componentes podem lidar com a solicitação do utilizador e cada um atua segundo a sua própria perspetiva. Um tópico pode mostrar uma mensagem ou um Cartão Adaptativo, uma ferramenta pode devolver dados, e um filho ou agente ligado pode responder a partir do seu próprio contexto. A camada de orquestração continua o plano a partir de um contexto que pode não corresponder à resposta que o utilizador recebe. Quando esses pontos de vista se afastam, o utilizador pode ver uma mensagem repetida ou uma resposta falhada. Os fabricantes encontram este comportamento com mais frequência em modelos mais recentes do que em modelos mais antigos.

Compreenda por que ocorrem duplicados antes de desenhar uma solução. Saiba mais sobre a distribuição de contexto no harness padrão.

Note

Mensagens repetidas e mensagens duplicadas são geralmente questões de design relacionadas com a gestão do contexto, não bugs. Ocorrem quando o utilizador vê uma resposta, mas o componente que continua o plano tem informações diferentes sobre o que já foi respondido.

Para compreender estes casos de uso, considere duas superfícies separadamente: a saída visível pelo utilizador (o que o utilizador vê no chat) e o contexto ativo (a informação que um componente tem disponível quando decide o que fazer a seguir). Os criadores não veem diretamente o contexto ativo. Por isso, é importante compreender a perspetiva de cada componente e usar entradas e saídas para manter essas perspetivas alinhadas.

Para depurar um sintoma num agente ativo, comece por Resolver mensagens duplicadas e respostas falhadas e depois volte a este artigo para orientações sobre redesenho.

Design tendo em conta o contexto

Se um pedido for tratado por um único passo seguido de um Fim de todos os tópicos, a gestão de contexto não entra em ação. Mas quando um pedido precisa de encadear vários componentes, ou quando o utilizador faz mais do que um pedido na mesma sessão, a gestão do contexto é importante. A maioria dos casos de uso reais abrange vários componentes por sessão, por isso desenhe em conformidade.

  • Um componente, em seguida Encerrar todos os tópicos. Um único tópico, ferramenta, agente subordinado ou agente conectado processa o pedido e a sessão termina. Se esse componente escrever a resposta completa e reportar essa conclusão, a camada de orquestração não tem razão para escrever outra resposta.
  • Vários componentes na sessão. Uma sessão pode executar vários componentes antes de dar ao utilizador uma resposta completa. Uma sessão pode também abranger múltiplos pedidos. Um componente pode responder a parte do pedido, enquanto outro tem de responder ao resto. Cada componente que funciona tem de reportar o que fez. Caso contrário, um componente posterior pode agir com base num contexto que parece sem resposta e responder novamente.
Quando o contexto importa Example Sonoplastia
Sem contexto Um tópico mostra a resposta completa numa mensagem ou Cartão Adaptativo. O nó Encerrar todos os tópicos impede que a camada de orquestração volte a responder.
A camada de orquestração utiliza contexto Um tópico mostra uma tabela para a parte A, depois a camada de orquestração responde à parte B usando conhecimento ou outro agente. Cada componente reporta o que respondeu e devolve quaisquer valores que os passos seguintes precisem, por isso a camada de orquestração não responde duas vezes.
O componente utiliza contexto Um tópico responde à parte A ao utilizador, depois outro agente trata da parte B. Se o agente receber contexto parental onde A parece sem resposta, responde novamente a A. Exclua o contexto parental no agente ligado sempre que possível, e os componentes retornam saídas que confirmam o que foi respondido e o que permanece.

Componentes de design para reportar o que aconteceu

Um componente envia uma mensagem repetida ou mensagens duplicadas quando a camada de orquestração não consegue detetar trabalho que um componente anterior completou. Use sempre a mesma abordagem de design para evitar mensagens duplicadas — instrua cada componente a reportar as suas ações à camada de orquestração. Para cada parte do pedido, atribui exatamente um componente para escrever a resposta que o utilizador recebe. Todos os outros componentes fazem o seu trabalho e devolvem contexto sem escrever para o utilizador.

Utilize estas práticas em conjunto como uma única abordagem de design:

  1. Devolve os resultados que registam o que aconteceu. Só as saídas são geralmente suficientes para modelos mais antigos.
  2. Adicione uma instrução à descrição do tópico ou subagente que defina o que significa uma execução bem-sucedida. Esta abordagem torna o design robusto.
  3. Adiciona uma instrução de topo para que a camada de orquestração verifique essas saídas antes de responder. Modelos mais recentes beneficiam muito desta abordagem.

Apenas os componentes que suportam saídas personalizadas podem devolver as saídas e incluir instruções de descrição. Para componentes que não suportam saídas personalizadas, evite mensagens duplicadas limitando o contexto que recebem e adicionando uma instrução de topo.

Componente Relatórios de regresso com Correção
Tema answered (Verdadeiro/Falso), choiceReceived (Verdadeiro/Falso), e uma saída de valor apresentado ou de resumo (Texto) Devolva os resultados e adicione uma instrução à descrição do tópico. Desenhar tópicos como mini-agentes que evitam mensagens duplicadas fornece exemplos de descrições de tópicos.
Subagente (filho ou agente ligado) answered (Verdadeiro/Falso), interactionSummary (Texto), openQuestions (Texto) Devolve os resultados, adiciona um parâmetro de âmbito e adiciona uma instrução à descrição do subagente. Subagentes de design que evitam mensagens duplicadas fornecem exemplos de descrições de subagentes.
Conhecimento (um apelo ao conhecimento) Não é possível personalizar o contexto, posso repetir uma resposta. Mantenha um contexto de nível superior limpo e influencie as solicitações que são enviadas.
Nó de respostas generativas Não se pode personalizar o contexto, pode repetir uma resposta, a resposta pode ser repetida mais tarde. Mantém um contexto de topo limpo, influencia o pedido escrito na entrada do nó e faz com que o tópico anfitrião devolva a saída ou uma saída em estado respondido.

Desenhe uma instrução robusta de topo para evitar mensagens repetidas

As saídas mantêm a camada de orquestração informada. Adicione uma instrução de topo que diga aos modelos mais recentes para verificarem as saídas antes de responder.

A seguinte instrução de agente de topo é um exemplo concebido para funcionar entre casos de uso, quer um componente comunique diretamente com o utilizador ou não. Edite e personalize conforme necessário.

Sempre que qualquer tópico ou agente for chamado, procure sempre a saída booleana 'respondida' antes de decidir o que responder. Os tópicos e agentes têm o seu próprio canal de comunicação com o utilizador. Se 'respondido' for verdadeiro, assuma sempre que o pedido foi respondido corretamente usando pelo menos uma das variáveis de saída e verifique quais com base na descrição de saída. Não faças um comentário de confirmação estranho sobre o conteúdo já respondido. Fornece apenas as respostas não respondidas e continua a conversa naturalmente com o passo seguinte.

O termo canal não se refere a um canal de integração como o Teams ou um website. É um mecanismo de solicitação que indica à camada de orquestração que o utilizador possa já ter visto a resposta ou efetuado uma seleção através de outro componente, como um tópico, um cartão ou um subagente. Esta redação incentiva de forma eficaz o modelo a verificar a sua resposta antes de responder.

Lidar com os temas

Um tema comunica frequentemente diretamente com o utilizador mostrando uma mensagem, fazendo uma pergunta ou apresentando um Cartão Adaptativo. O contexto de orquestração recebe o texto do tema como texto simples, mas não regista se o utilizador o viu. O contexto também não recebe ações ou seleções da Carta Adaptativa. Se o tópico responder ao utilizador mas não reportar essa ação à camada de orquestração, a camada de orquestração trata o pedido como não resolvido e responde novamente.

Desenha um tema como um mini-agente. Devolva uma saída com o estado «respondido» para que a camada de orquestração saiba que a solicitação foi tratada, e devolva qualquer valor que o tópico apresente ou seleção que tenha recolhido e de que uma etapa posterior necessite. Os resultados tornam as ações e resultados disponíveis para o resto do plano. Adicione uma instrução à descrição do tópico que defina o que significa uma corrida bem-sucedida.

Saiba mais em Conceber tópicos como miniagentes para evitar mensagens duplicadas.

Gerir agentes subordinados e conectados

Conceber agentes subordinados e conectados tal como qualquer outro componente. A troca de mensagens com o utilizador é invisível para o pai, que só aprende o que aconteceu através das saídas, e só depois de o agente terminar.

Os agentes filhos e ligados podem também receber pedidos previamente não respondidos que permanecem no contexto do agente principal.

Para cada agente, defina a sua tarefa com uma entrada, especifique se responde ao utilizador ou se permanece em silêncio e devolva resultados que indiquem ao agente principal o que aconteceu.

Saiba mais em Subagentes de Design que evitam mensagens duplicadas.

Lidar com o conhecimento

O conhecimento é uma construção de nível superior a que o agente recorre. Recebe um pedido baseado no design do agente e recebe o contexto do agente. A maioria dos problemas de mensagens repetidas ocorre quando o contexto do agente carece de informação proveniente de outros componentes. Conhecimento de design para influenciar a forma como o agente formula o pedido. Certifique-se de que outros componentes usam as suas saídas corretamente.

Gerir nós de respostas generativas

Um nó de respostas generativas vive dentro de um tema e responde a partir do conhecimento. Recebe o contexto do elemento pai, além de tudo o que lhe é passado na entrada, pelo que se comporta como conhecimento de topo e complementa a resposta com base no contexto atual. Pode escrever a sua resposta diretamente no painel de chat ou armazená-la numa variável de tópico, mas não consegue devolver nada ao contexto principal por si só. Como em qualquer conteúdo de tema, a resposta mantém-se no tema, a menos que o tema devolva uma saída.

Um nó de respostas generativas não requer qualquer tratamento especial além da regra que se aplica a todos os tópicos: transmitir o resultado como saída do tópico. Se o nó responder ao utilizador nesse tópico, adicione uma saída de estado "respondido" e uma saída de valor apresentado. Estas saídas dão à camada de orquestração um registo de que o pedido foi respondido e impedem que uma etapa posterior volte a responder ao pedido.

Assegure que as descrições e instruções correspondem ao ponto de vista

Descrições e instruções também fazem parte do contrato de contexto.

Esta instrução remete para o tópico:

When the user asks about their account balance, call the Account balance topic.

Esta instrução encaminha e atribui a propriedade das respostas à camada de orquestração:

When the user asks about their account balance, call the Account balance topic and give the balance.

Se o tema já mostrar o equilíbrio, a segunda instrução cria um segundo caminho de resposta. Se o tópico não regressar balanceValue, a camada de orquestração pode chamar o tópico novamente ou responder que não conhece o valor.

Use descrições e instruções que correspondam ao ponto de vista:

  • Uma descrição do tópico ajuda a camada de orquestração a decidir quando e como usar o tema. Também segue instruções sobre o que fazer ou devolver como resultado a seguir.
  • Uma descrição de agente conexo vem do ponto de vista do pai.
  • Uma instrução de agente conexo é lida do ponto de vista do agente conectado.
  • Uma descrição de saída de tópico ou agente conectado indica à camada de orquestração como interpretar o valor devolvido.

Para um tópico que mostra uma resposta ao utilizador e define answered=true, descreva tanto quando encaminhar para o tema como o que significa uma execução bem-sucedida:

This topic handles account balance requests.
If its answered output is true, the user has already received their response and it should not be answered again.

Para um tópico que apenas gera resultados, descreva tanto quando se deve encaminhar para o tópico como a forma de responder:

This topic handles account balance requests and responds with the balance value in italics.

Restaurar o contexto em conversas longas

Um valor que um componente tinha pode sair do contexto ativo de duas formas. Numa sessão longa, um valor que estava disponível há uns turnos pode já não estar no contexto ativo. Ou um componente obtém um resultado completo, usa a parte relevante para produzir uma resposta e devolve apenas essa resposta para que o resto do resultado nunca chegue à camada de orquestração. De qualquer forma, o agente pode buscar novamente os dados ou pedir ao utilizador informações que já possui, o que o utilizador percebe como uma resposta falhada. A camada de orquestração age como se nunca tivesse recebido esse valor.

Conceba para este cenário recuperando e guardando o contexto importante e disponibilizando-o quando necessário:

  • Devolva um resultado completo, não apenas a parte usada para responder. Um resultado buscado frequentemente tem mais do que um campo, muitas linhas e texto longo. Devolva todos os dados de que uma interação posterior possa precisar como saídas, para que a camada de orquestração os tenha sem ter de os voltar a obter.

  • Guarde e disponibilize valores ao longo das interações. Nos pontos adequados, antes ou depois de uma chamada de ferramenta, direcione para um tópico que possa armazenar ou disponibilizar o valor por meio das respetivas entradas e saídas e de uma variável global, para que o plano não recupere o valor nem o volte a pedir.

Sugestão

O comportamento agente contínuo baseia-se num design de agente que tem em conta o contexto em cada passo e de todos os pontos de vista.