adding ABANDON in multi-intent/intent-shift
This commit is contained in:
@@ -184,7 +184,7 @@ stateDiagram-v2
|
||||
[*] --> COLLECTING_PARAMETERS: faltam dados
|
||||
COLLECTING_PARAMETERS --> COLLECTING_PARAMETERS: dado parcial ou correção
|
||||
COLLECTING_PARAMETERS --> AWAITING_CONFIRMATION: contrato completo + pre-validation OK
|
||||
COLLECTING_PARAMETERS --> CANCELLED: abandono explícito / intent shift autorizado
|
||||
COLLECTING_PARAMETERS --> CANCELLED: ABANDON explícito ou interrupção autorizada da ação ativa
|
||||
|
||||
AWAITING_CONFIRMATION --> EXECUTING: confirmação SIM
|
||||
AWAITING_CONFIRMATION --> CANCELLED: confirmação NÃO
|
||||
@@ -288,41 +288,73 @@ Mas stickiness **não pode aprisionar a conversa**. Uma nova solicitação expl
|
||||
|
||||
---
|
||||
|
||||
## P.7. Intent shift
|
||||
## P.7. Intent shift e ABANDON
|
||||
|
||||
Intent shift é o mecanismo usado quando o cliente abandona ou interrompe explicitamente o assunto corrente e inicia outro.
|
||||
Durante uma transação ativa, o `EnterpriseRouter` passa a distinguir três decisões semânticas:
|
||||
|
||||
Exemplo:
|
||||
| Decisão | Significado | Efeito operacional |
|
||||
| --- | --- | --- |
|
||||
| `CONTINUE` | a fala ainda pertence à transação atual | mantém coleta/confirmação atual |
|
||||
| `SHIFT` | o cliente iniciou outro objetivo, sem desistir explicitamente da ação atual | muda o foco de roteamento; `pending_topics` de outros objetivos permanecem disponíveis |
|
||||
| `ABANDON` | o cliente desistiu explicitamente da ação/transação atual | encerra a transação ativa como `CANCELLED`; não apaga `pending_topics` não relacionados |
|
||||
|
||||
`ABANDON` é uma **decisão do router**, não um novo valor persistente de `transaction_status`. O estado terminal operacional continua sendo `CANCELLED`. Para abandono puro, sem novo objetivo, o router usa o intent técnico `state:TRANSACTION_ABANDONED` com `mcp_tools=[]`, evitando que a mesma tool seja selecionada novamente no próprio turno.
|
||||
|
||||
Exemplo de `ABANDON` com novo objetivo:
|
||||
|
||||
```text
|
||||
Agente: Qual cobrança deseja contestar?
|
||||
Cliente: Esquece isso. Quero ver minha fatura.
|
||||
```
|
||||
|
||||
O comportamento esperado é:
|
||||
Comportamento esperado:
|
||||
|
||||
```text
|
||||
transação anterior
|
||||
COLLECTING_PARAMETERS
|
||||
↓
|
||||
detecção de abandono / mudança explícita
|
||||
ABANDON
|
||||
↓
|
||||
CANCELLED
|
||||
transaction_interruption = explicit_abandonment
|
||||
↓
|
||||
limpeza de next_state / parâmetros / latches
|
||||
transação ativa = CANCELLED
|
||||
↓
|
||||
limpeza de next_state / parâmetros / latches da ação abandonada
|
||||
↓
|
||||
novo routing
|
||||
↓
|
||||
contas_invoice_query
|
||||
billing_invoice_explanation
|
||||
```
|
||||
|
||||
O router registra metadados como:
|
||||
Exemplo de abandono puro:
|
||||
|
||||
```text
|
||||
transaction_interruption = intent_shift
|
||||
Agente: Informe o número do pedido que deseja cancelar.
|
||||
Cliente: Não quero mais cancelar.
|
||||
```
|
||||
|
||||
e o runtime encerra corretamente o contrato anterior.
|
||||
Resultado esperado:
|
||||
|
||||
```text
|
||||
decision = ABANDON
|
||||
intent = state:TRANSACTION_ABANDONED
|
||||
mcp_tools = []
|
||||
transaction_interruption = explicit_abandonment
|
||||
transaction_status = CANCELLED
|
||||
```
|
||||
|
||||
O runtime registra `tool_policy_result.action = cancelled_by_explicit_abandonment`.
|
||||
|
||||
Um `SHIFT` continua separado de `ABANDON`. Exemplo:
|
||||
|
||||
```text
|
||||
Agente: Informe o número do pedido que deseja devolver.
|
||||
Cliente: Antes disso, quero consultar os serviços que contratei.
|
||||
```
|
||||
|
||||
Nesse caso, a nova solicitação pode ser executada sem apagar automaticamente as ações presentes em `pending_topics`. A fila multi-intent permanece uma estrutura de trabalho autorizado; mudar o foco não equivale a desistir de todas as ações anteriores.
|
||||
|
||||
> Importante: nem `SHIFT` nem `ABANDON` limpam globalmente `pending_topics`. `ABANDON` encerra a ação/transação **ativa**. Outras operações pendentes continuam correlacionadas ao plano e podem ser retomadas conforme a política de multi-intent.
|
||||
|
||||
### Intent shift não é qualquer frase diferente
|
||||
|
||||
|
||||
Reference in New Issue
Block a user