feat: validate_full_name v1.1 — sobrenome obrigatório + situation field
All checks were successful
NALU Deployment Pipeline / Run Tests (push) Successful in 1m8s
NALU Deployment Pipeline / PR Validation (push) Has been skipped
NALU Deployment Pipeline / Build and Push Image (push) Successful in 2m9s
NALU Deployment Pipeline / Deploy naluai.dev (push) Successful in 44s
NALU Deployment Pipeline / Cleanup Old Resources (push) Successful in 12s
All checks were successful
NALU Deployment Pipeline / Run Tests (push) Successful in 1m8s
NALU Deployment Pipeline / PR Validation (push) Has been skipped
NALU Deployment Pipeline / Build and Push Image (push) Successful in 2m9s
NALU Deployment Pipeline / Deploy naluai.dev (push) Successful in 44s
NALU Deployment Pipeline / Cleanup Old Resources (push) Successful in 12s
- Exige ao menos duas palavras (nome + sobrenome) - Adiciona campo situation: name_provided/question/escalation/refused/evasive - Reject patterns para pedidos de atendente e recusas explícitas - Novos exemplos: frustração, escalation, pergunta, nome só - Novas suggestions: when_null_question, when_null_refused, when_null_escalation, when_uncertain_single_name Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
72ad41c529
commit
12591d90f9
@ -1,15 +1,15 @@
|
||||
# validate_full_name
|
||||
|
||||
Extrai o nome completo do usuário (com sobrenome) a partir do diálogo.
|
||||
Extrai o nome completo do usuário (nome + sobrenome obrigatório) a partir do diálogo.
|
||||
|
||||
## config
|
||||
|
||||
- type: extraction
|
||||
- version: 1.0
|
||||
- version: 1.1
|
||||
- languages: pt-BR, es-ES, en-US
|
||||
- endpoint: /v1/extract/full-name
|
||||
- mcp_tool: nalu_extract_full_name
|
||||
- mcp_description: Extrai o nome completo do usuário (nome + sobrenome). Use quando o agente precisa do nome completo para cadastro, contrato ou triagem. Retorna o nome extraído, nível de certeza e sugestão de fala. Se certain=true, aceite o valor. Se certain=false e suggestion_to_agent não é null, use a sugestão como próxima mensagem. Se obtained=false, use a sugestão para re-pedir o dado.
|
||||
- mcp_description: Extrai o nome completo do usuário (nome + sobrenome). Use quando o agente precisa do nome completo para cadastro, contrato ou triagem. Retorna o nome extraído, nível de certeza, situação e sugestão de fala. Se certain=true, aceite o valor. Se certain=false e suggestion_to_agent não é null, use a sugestão como próxima mensagem. Se obtained=false, use a sugestão para re-pedir o dado.
|
||||
|
||||
## deterministic_rules
|
||||
|
||||
@ -19,6 +19,8 @@ bom dia, boa tarde, boa noite, olá, oi, tudo bem, e aí, fala, eae, opa
|
||||
### reject_patterns
|
||||
- ^(não|nao|sei la|sei lá|tanto faz|qualquer|nenhum|nada)$
|
||||
- ^\d+$
|
||||
- (?i)(quero falar|me passa|falar com|atendente|atendimento|humano|pessoa real|ser humano|supervisor|gerente|operador)
|
||||
- (?i)(não vou|nao vou|prefiro não|prefiro nao|não quero|nao quero|não interessa|nao interessa|não te interessa|nao te interessa)
|
||||
|
||||
### accept_patterns
|
||||
- (?i)^me chamo\s+(.+)$
|
||||
@ -35,16 +37,22 @@ bom dia, boa tarde, boa noite, olá, oi, tudo bem, e aí, fala, eae, opa
|
||||
|
||||
## prompt
|
||||
|
||||
Você é um extrator de nomes completos. Dado o diálogo abaixo entre um agente e um usuário, extraia o nome completo (com sobrenome) que o usuário informou.
|
||||
Você é um extrator de nomes completos. Dado o diálogo abaixo entre um agente e um usuário, extraia o nome completo que o usuário informou.
|
||||
|
||||
Regras:
|
||||
1. Se o usuário respondeu apenas com saudação (bom dia, oi, etc.) sem dizer o nome, retorne extracted_value: null.
|
||||
2. Nome completo requer ao menos um sobrenome (duas palavras ou mais). Se só informou primeiro nome, retorne com o nome mas certain: false.
|
||||
3. Extraia o nome completo e avalie:
|
||||
1. Se o usuário respondeu apenas com saudação (bom dia, oi, etc.) sem dizer o nome, retorne extracted_value: null, situation: "evasive".
|
||||
2. Nome completo SEMPRE requer ao menos duas palavras separadas por espaço (primeiro nome + sobrenome). Se o usuário informou apenas um nome, retorne o nome com certain: false e situation: "name_provided".
|
||||
3. Extraia o nome e avalie:
|
||||
- certain: true → nome + sobrenome claramente humanos em PT, EN ou ES (ex: "Maria Silva", "Carlos Eduardo Santos", "Michael Johnson", "Paulo da Silva").
|
||||
- certain: false → qualquer parte não é claramente humana: substantivo comum (Segredo Silva, Piano Souza), marca (Xerox Santos), instrumento/objeto (Xilofone Ninguém), palavra ofensiva/zueira, ou frase ambígua entre nome e recusa.
|
||||
- certain: false → qualquer parte não é claramente humana (substantivo comum, marca, instrumento, palavra ofensiva/zueira), ou apenas um nome sem sobrenome foi informado.
|
||||
4. Se o usuário confirmou o nome após o agente perguntar, retorne certain: true mesmo se incomum.
|
||||
5. Normalize: primeira letra maiúscula em cada palavra, exceto preposições (de/da/do/dos/das/e).
|
||||
6. Campo "situation" — obrigatório:
|
||||
- "name_provided" → o usuário informou um nome (extracted_value não é null)
|
||||
- "question" → o usuário fez uma pergunta em vez de responder (ex: "por que você quer saber?", "o que vai fazer com meu nome?")
|
||||
- "escalation" → o usuário quer falar com humano/atendente/supervisor (ex: "quero falar com uma pessoa", "me passa um atendente")
|
||||
- "refused" → recusa explícita (ex: "não quero dizer", "não te interessa", "prefiro não informar")
|
||||
- "evasive" → evasão sem pergunta nem recusa clara (ex: "sei lá", "tanto faz", saudação sem nome)
|
||||
|
||||
Diálogo:
|
||||
Agente: {{agent_input}}
|
||||
@ -56,6 +64,7 @@ Responda SOMENTE com JSON válido, sem markdown, sem explicação:
|
||||
{
|
||||
"extracted_value": "nome extraído ou null",
|
||||
"certain": true/false,
|
||||
"situation": "name_provided|question|escalation|refused|evasive",
|
||||
"reasoning": "explicação curta de 1 linha"
|
||||
}
|
||||
|
||||
@ -64,52 +73,102 @@ Responda SOMENTE com JSON válido, sem markdown, sem explicação:
|
||||
### example 1
|
||||
- agent_input: Bom dia! Qual seu nome completo?
|
||||
- user_input: Bom dia!
|
||||
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário respondeu com saudação, não informou o nome"}
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "evasive", "reasoning": "Usuário respondeu com saudação, não informou o nome"}
|
||||
|
||||
### example 2
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Carlos
|
||||
- output: {"extracted_value": "Carlos", "certain": false, "reasoning": "Apenas primeiro nome, falta o sobrenome"}
|
||||
- output: {"extracted_value": "Carlos", "certain": false, "situation": "name_provided", "reasoning": "Apenas primeiro nome, falta o sobrenome obrigatório"}
|
||||
|
||||
### example 3
|
||||
- agent_input: Para continuar, preciso do seu nome completo.
|
||||
- user_input: Maria Silva dos Santos
|
||||
- output: {"extracted_value": "Maria Silva dos Santos", "certain": true, "reasoning": "Nome completo humano reconhecido"}
|
||||
- output: {"extracted_value": "Maria Silva dos Santos", "certain": true, "situation": "name_provided", "reasoning": "Nome completo humano reconhecido"}
|
||||
|
||||
### example 4
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Ricardo Carneiro
|
||||
- output: {"extracted_value": "Ricardo Carneiro", "certain": true, "reasoning": "Nome completo humano reconhecido em PT"}
|
||||
- output: {"extracted_value": "Ricardo Carneiro", "certain": true, "situation": "name_provided", "reasoning": "Nome completo humano reconhecido em PT"}
|
||||
|
||||
### example 5
|
||||
- agent_input: Qual seu nome?
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: sei la
|
||||
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário foi evasivo, não informou nome"}
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "evasive", "reasoning": "Evasão sem pergunta nem recusa"}
|
||||
|
||||
### example 6
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Meu nome é segredo.
|
||||
- output: {"extracted_value": "Segredo", "certain": false, "reasoning": "Ambíguo: recusa ou nome? Segredo é substantivo comum"}
|
||||
- output: {"extracted_value": "Segredo", "certain": false, "situation": "name_provided", "reasoning": "Ambíguo: recusa ou nome? Segredo é substantivo comum e só tem uma palavra"}
|
||||
|
||||
### example 7
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Segredo da Silva
|
||||
- output: {"extracted_value": "Segredo da Silva", "certain": false, "reasoning": "Segredo é substantivo comum, não antropônimo"}
|
||||
- output: {"extracted_value": "Segredo da Silva", "certain": false, "situation": "name_provided", "reasoning": "Segredo é substantivo comum, não antropônimo"}
|
||||
|
||||
### example 8
|
||||
- agent_input: What's your full name?
|
||||
- user_input: Piano Smith
|
||||
- output: {"extracted_value": "Piano Smith", "certain": false, "reasoning": "Piano is an instrument, not a human first name"}
|
||||
- output: {"extracted_value": "Piano Smith", "certain": false, "situation": "name_provided", "reasoning": "Piano is an instrument, not a human first name"}
|
||||
|
||||
### example 9
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Carlos Eduardo Santos
|
||||
- output: {"extracted_value": "Carlos Eduardo Santos", "certain": true, "reasoning": "Nome completo humano reconhecido"}
|
||||
- output: {"extracted_value": "Carlos Eduardo Santos", "certain": true, "situation": "name_provided", "reasoning": "Nome completo humano reconhecido"}
|
||||
|
||||
### example 10
|
||||
- agent_input: Seu nome completo é Segredo da Silva?
|
||||
- user_input: Sim, pode registrar assim.
|
||||
- output: {"extracted_value": "Segredo da Silva", "certain": true, "reasoning": "Usuário confirmou o nome após questionamento"}
|
||||
- output: {"extracted_value": "Segredo da Silva", "certain": true, "situation": "name_provided", "reasoning": "Usuário confirmou o nome após questionamento"}
|
||||
|
||||
### example 11 — question
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Por que você precisa do meu nome?
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "question", "reasoning": "Usuário fez contrapergunta, não informou nome"}
|
||||
|
||||
### example 12 — question
|
||||
- agent_input: Preciso do seu nome completo.
|
||||
- user_input: O que você vai fazer com isso?
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "question", "reasoning": "Usuário questiona o uso da informação"}
|
||||
|
||||
### example 13 — escalation
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Quero falar com uma pessoa de verdade
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "escalation", "reasoning": "Usuário quer atendimento humano"}
|
||||
|
||||
### example 14 — escalation
|
||||
- agent_input: Preciso do seu nome completo.
|
||||
- user_input: Me passa um atendente
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "escalation", "reasoning": "Usuário solicita transferência para atendente"}
|
||||
|
||||
### example 15 — escalation (frustrado)
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Chega! Quero falar com um supervisor agora
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "escalation", "reasoning": "Usuário frustrado pedindo escalação"}
|
||||
|
||||
### example 16 — refused
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Não te interessa
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "refused", "reasoning": "Recusa direta e hostil"}
|
||||
|
||||
### example 17 — refused
|
||||
- agent_input: Preciso do seu nome completo.
|
||||
- user_input: Não quero informar meu nome
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "refused", "reasoning": "Recusa explícita por privacidade"}
|
||||
|
||||
### example 18 — nome composto com preposição
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Ana de Oliveira
|
||||
- output: {"extracted_value": "Ana de Oliveira", "certain": true, "situation": "name_provided", "reasoning": "Nome completo humano reconhecido com preposição"}
|
||||
|
||||
### example 19 — nome em inglês
|
||||
- agent_input: What's your full name?
|
||||
- user_input: My name is Michael Johnson
|
||||
- output: {"extracted_value": "Michael Johnson", "certain": true, "situation": "name_provided", "reasoning": "Full human name recognized in EN"}
|
||||
|
||||
### example 20 — evasive frustrado
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Para com isso!
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "evasive", "reasoning": "Irritação sem fornecer nome e sem pedir atendente"}
|
||||
|
||||
## post_processors
|
||||
- capitalize_proper_name
|
||||
@ -121,13 +180,25 @@ Responda SOMENTE com JSON válido, sem markdown, sem explicação:
|
||||
## suggestions
|
||||
|
||||
### when_null_greeting
|
||||
{{greeting_response}} Mas preciso do seu nome completo para continuar. Pode me dizer?
|
||||
{{greeting_response}} Mas preciso do seu nome completo (nome e sobrenome) para continuar. Pode me dizer?
|
||||
|
||||
### when_null_evasive
|
||||
Sem problemas, mas preciso do seu nome para prosseguir. Qual seu nome completo?
|
||||
Sem problemas, mas preciso do seu nome completo para prosseguir. Qual seu nome e sobrenome?
|
||||
|
||||
### when_null_question
|
||||
Entendo sua dúvida! Precisamos do nome completo para {{agent_context}}. Pode me informar seu nome e sobrenome?
|
||||
|
||||
### when_null_refused
|
||||
Compreendo. Caso mude de ideia, estou aqui para ajudar. Sem o nome completo, não consigo prosseguir com o cadastro.
|
||||
|
||||
### when_null_escalation
|
||||
(transferir para atendente humano)
|
||||
|
||||
### when_uncertain_single_name
|
||||
Só consegui capturar "{{extracted_value}}". Preciso do nome completo — nome e sobrenome. Pode me informar?
|
||||
|
||||
### when_uncertain
|
||||
Seu nome é {{extracted_value}}? Pode confirmar que posso registrá-lo assim?
|
||||
Seu nome completo é {{extracted_value}}? Pode confirmar que posso registrá-lo assim?
|
||||
|
||||
### when_certain
|
||||
(sem sugestão — agente segue o fluxo)
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
# validate_full_name
|
||||
|
||||
Extrai o nome completo do usuário (com sobrenome) a partir do diálogo.
|
||||
Extrai o nome completo do usuário (nome + sobrenome obrigatório) a partir do diálogo.
|
||||
|
||||
## config
|
||||
|
||||
- type: extraction
|
||||
- version: 1.0
|
||||
- version: 1.1
|
||||
- languages: pt-BR, es-ES, en-US
|
||||
- endpoint: /v1/extract/full-name
|
||||
- mcp_tool: nalu_extract_full_name
|
||||
- mcp_description: Extrai o nome completo do usuário (nome + sobrenome). Use quando o agente precisa do nome completo para cadastro, contrato ou triagem. Retorna o nome extraído, nível de certeza e sugestão de fala. Se certain=true, aceite o valor. Se certain=false e suggestion_to_agent não é null, use a sugestão como próxima mensagem. Se obtained=false, use a sugestão para re-pedir o dado.
|
||||
- mcp_description: Extrai o nome completo do usuário (nome + sobrenome). Use quando o agente precisa do nome completo para cadastro, contrato ou triagem. Retorna o nome extraído, nível de certeza, situação e sugestão de fala. Se certain=true, aceite o valor. Se certain=false e suggestion_to_agent não é null, use a sugestão como próxima mensagem. Se obtained=false, use a sugestão para re-pedir o dado.
|
||||
|
||||
## deterministic_rules
|
||||
|
||||
@ -19,8 +19,15 @@ bom dia, boa tarde, boa noite, olá, oi, tudo bem, e aí, fala, eae, opa
|
||||
### reject_patterns
|
||||
- ^(não|nao|sei la|sei lá|tanto faz|qualquer|nenhum|nada)$
|
||||
- ^\d+$
|
||||
- (?i)(quero falar|me passa|falar com|atendente|atendimento|humano|pessoa real|ser humano|supervisor|gerente|operador)
|
||||
- (?i)(não vou|nao vou|prefiro não|prefiro nao|não quero|nao quero|não interessa|nao interessa|não te interessa|nao te interessa)
|
||||
|
||||
### accept_patterns
|
||||
- (?i)^me chamo\s+(.+)$
|
||||
- (?i)^meu nome completo é\s+(.+)$
|
||||
- (?i)^my name is\s+(.+)$
|
||||
- (?i)^me llamo\s+(.+)$
|
||||
- ^([A-ZÁÉÍÓÚÀÂÊÔÃÕÇÜÑ][a-záéíóúàâêôãõçüñ'ã-]+(?:\s+(?:de|da|do|dos|das|e|[A-ZÁÉÍÓÚÀÂÊÔÃÕÇÜÑ][a-záéíóúàâêôãõçüñ'ã-]+)){1,})$
|
||||
|
||||
### constraints
|
||||
- min_length: 2
|
||||
@ -30,16 +37,22 @@ bom dia, boa tarde, boa noite, olá, oi, tudo bem, e aí, fala, eae, opa
|
||||
|
||||
## prompt
|
||||
|
||||
Você é um extrator de nomes completos. Dado o diálogo abaixo entre um agente e um usuário, extraia o nome completo (com sobrenome) que o usuário informou.
|
||||
Você é um extrator de nomes completos. Dado o diálogo abaixo entre um agente e um usuário, extraia o nome completo que o usuário informou.
|
||||
|
||||
Regras:
|
||||
1. Se o usuário respondeu apenas com saudação (bom dia, oi, etc.) sem dizer o nome, retorne extracted_value: null.
|
||||
2. Nome completo requer ao menos um sobrenome (duas palavras ou mais). Se só informou primeiro nome, retorne com o nome mas certain: false.
|
||||
3. Extraia o nome completo e avalie:
|
||||
1. Se o usuário respondeu apenas com saudação (bom dia, oi, etc.) sem dizer o nome, retorne extracted_value: null, situation: "evasive".
|
||||
2. Nome completo SEMPRE requer ao menos duas palavras separadas por espaço (primeiro nome + sobrenome). Se o usuário informou apenas um nome, retorne o nome com certain: false e situation: "name_provided".
|
||||
3. Extraia o nome e avalie:
|
||||
- certain: true → nome + sobrenome claramente humanos em PT, EN ou ES (ex: "Maria Silva", "Carlos Eduardo Santos", "Michael Johnson", "Paulo da Silva").
|
||||
- certain: false → qualquer parte não é claramente humana: substantivo comum (Segredo Silva, Piano Souza), marca (Xerox Santos), instrumento/objeto (Xilofone Ninguém), palavra ofensiva/zueira, composto de palavras comuns que parecem apelido (BraçoCurto, PéDuro, MãoFria), ou frase ambígua entre nome e recusa.
|
||||
- certain: false → qualquer parte não é claramente humana (substantivo comum, marca, instrumento, palavra ofensiva/zueira), ou apenas um nome sem sobrenome foi informado.
|
||||
4. Se o usuário confirmou o nome após o agente perguntar, retorne certain: true mesmo se incomum.
|
||||
5. Normalize: primeira letra maiúscula em cada palavra, exceto preposições (de/da/do/dos/das/e).
|
||||
6. Campo "situation" — obrigatório:
|
||||
- "name_provided" → o usuário informou um nome (extracted_value não é null)
|
||||
- "question" → o usuário fez uma pergunta em vez de responder (ex: "por que você quer saber?", "o que vai fazer com meu nome?")
|
||||
- "escalation" → o usuário quer falar com humano/atendente/supervisor (ex: "quero falar com uma pessoa", "me passa um atendente")
|
||||
- "refused" → recusa explícita (ex: "não quero dizer", "não te interessa", "prefiro não informar")
|
||||
- "evasive" → evasão sem pergunta nem recusa clara (ex: "sei lá", "tanto faz", saudação sem nome)
|
||||
|
||||
Diálogo:
|
||||
Agente: {{agent_input}}
|
||||
@ -51,6 +64,7 @@ Responda SOMENTE com JSON válido, sem markdown, sem explicação:
|
||||
{
|
||||
"extracted_value": "nome extraído ou null",
|
||||
"certain": true/false,
|
||||
"situation": "name_provided|question|escalation|refused|evasive",
|
||||
"reasoning": "explicação curta de 1 linha"
|
||||
}
|
||||
|
||||
@ -59,62 +73,102 @@ Responda SOMENTE com JSON válido, sem markdown, sem explicação:
|
||||
### example 1
|
||||
- agent_input: Bom dia! Qual seu nome completo?
|
||||
- user_input: Bom dia!
|
||||
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário respondeu com saudação, não informou o nome"}
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "evasive", "reasoning": "Usuário respondeu com saudação, não informou o nome"}
|
||||
|
||||
### example 2
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Carlos
|
||||
- output: {"extracted_value": "Carlos", "certain": false, "reasoning": "Apenas primeiro nome, falta o sobrenome"}
|
||||
- output: {"extracted_value": "Carlos", "certain": false, "situation": "name_provided", "reasoning": "Apenas primeiro nome, falta o sobrenome obrigatório"}
|
||||
|
||||
### example 3
|
||||
- agent_input: Para continuar, preciso do seu nome completo.
|
||||
- user_input: Maria Silva dos Santos
|
||||
- output: {"extracted_value": "Maria Silva dos Santos", "certain": true, "reasoning": "Nome completo humano reconhecido"}
|
||||
- output: {"extracted_value": "Maria Silva dos Santos", "certain": true, "situation": "name_provided", "reasoning": "Nome completo humano reconhecido"}
|
||||
|
||||
### example 4
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Ricardo Carneiro
|
||||
- output: {"extracted_value": "Ricardo Carneiro", "certain": true, "reasoning": "Nome completo humano reconhecido em PT"}
|
||||
- output: {"extracted_value": "Ricardo Carneiro", "certain": true, "situation": "name_provided", "reasoning": "Nome completo humano reconhecido em PT"}
|
||||
|
||||
### example 5
|
||||
- agent_input: Qual seu nome?
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: sei la
|
||||
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário foi evasivo, não informou nome"}
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "evasive", "reasoning": "Evasão sem pergunta nem recusa"}
|
||||
|
||||
### example 6
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Meu nome é segredo.
|
||||
- output: {"extracted_value": "Segredo", "certain": false, "reasoning": "Ambíguo: recusa ou nome? Segredo é substantivo comum"}
|
||||
- output: {"extracted_value": "Segredo", "certain": false, "situation": "name_provided", "reasoning": "Ambíguo: recusa ou nome? Segredo é substantivo comum e só tem uma palavra"}
|
||||
|
||||
### example 7
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Segredo da Silva
|
||||
- output: {"extracted_value": "Segredo da Silva", "certain": false, "reasoning": "Segredo é substantivo comum, não antropônimo"}
|
||||
- output: {"extracted_value": "Segredo da Silva", "certain": false, "situation": "name_provided", "reasoning": "Segredo é substantivo comum, não antropônimo"}
|
||||
|
||||
### example 8
|
||||
- agent_input: What's your full name?
|
||||
- user_input: Piano Smith
|
||||
- output: {"extracted_value": "Piano Smith", "certain": false, "reasoning": "Piano is an instrument, not a human first name"}
|
||||
- output: {"extracted_value": "Piano Smith", "certain": false, "situation": "name_provided", "reasoning": "Piano is an instrument, not a human first name"}
|
||||
|
||||
### example 9
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Carlos Eduardo Santos
|
||||
- output: {"extracted_value": "Carlos Eduardo Santos", "certain": true, "reasoning": "Nome completo humano reconhecido"}
|
||||
- output: {"extracted_value": "Carlos Eduardo Santos", "certain": true, "situation": "name_provided", "reasoning": "Nome completo humano reconhecido"}
|
||||
|
||||
### example 10
|
||||
- agent_input: Seu nome completo é Segredo da Silva?
|
||||
- user_input: Sim, pode registrar assim.
|
||||
- output: {"extracted_value": "Segredo da Silva", "certain": true, "reasoning": "Usuário confirmou o nome após questionamento"}
|
||||
- output: {"extracted_value": "Segredo da Silva", "certain": true, "situation": "name_provided", "reasoning": "Usuário confirmou o nome após questionamento"}
|
||||
|
||||
### example 11
|
||||
### example 11 — question
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Sou o Ricardo BraçoCurto
|
||||
- output: {"extracted_value": "Ricardo BraçoCurto", "certain": false, "reasoning": "BraçoCurto é um composto de palavras comuns (braço+curto), não um sobrenome reconhecido"}
|
||||
- user_input: Por que você precisa do meu nome?
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "question", "reasoning": "Usuário fez contrapergunta, não informou nome"}
|
||||
|
||||
### example 12
|
||||
### example 12 — question
|
||||
- agent_input: Preciso do seu nome completo.
|
||||
- user_input: O que você vai fazer com isso?
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "question", "reasoning": "Usuário questiona o uso da informação"}
|
||||
|
||||
### example 13 — escalation
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Me chamo Ana Banana
|
||||
- output: {"extracted_value": "Ana Banana", "certain": false, "reasoning": "Banana é substantivo comum, não sobrenome reconhecido"}
|
||||
- user_input: Quero falar com uma pessoa de verdade
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "escalation", "reasoning": "Usuário quer atendimento humano"}
|
||||
|
||||
### example 14 — escalation
|
||||
- agent_input: Preciso do seu nome completo.
|
||||
- user_input: Me passa um atendente
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "escalation", "reasoning": "Usuário solicita transferência para atendente"}
|
||||
|
||||
### example 15 — escalation (frustrado)
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Chega! Quero falar com um supervisor agora
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "escalation", "reasoning": "Usuário frustrado pedindo escalação"}
|
||||
|
||||
### example 16 — refused
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Não te interessa
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "refused", "reasoning": "Recusa direta e hostil"}
|
||||
|
||||
### example 17 — refused
|
||||
- agent_input: Preciso do seu nome completo.
|
||||
- user_input: Não quero informar meu nome
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "refused", "reasoning": "Recusa explícita por privacidade"}
|
||||
|
||||
### example 18 — nome composto com preposição
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Ana de Oliveira
|
||||
- output: {"extracted_value": "Ana de Oliveira", "certain": true, "situation": "name_provided", "reasoning": "Nome completo humano reconhecido com preposição"}
|
||||
|
||||
### example 19 — nome em inglês
|
||||
- agent_input: What's your full name?
|
||||
- user_input: My name is Michael Johnson
|
||||
- output: {"extracted_value": "Michael Johnson", "certain": true, "situation": "name_provided", "reasoning": "Full human name recognized in EN"}
|
||||
|
||||
### example 20 — evasive frustrado
|
||||
- agent_input: Qual seu nome completo?
|
||||
- user_input: Para com isso!
|
||||
- output: {"extracted_value": null, "certain": false, "situation": "evasive", "reasoning": "Irritação sem fornecer nome e sem pedir atendente"}
|
||||
|
||||
## post_processors
|
||||
- capitalize_proper_name
|
||||
@ -126,13 +180,25 @@ Responda SOMENTE com JSON válido, sem markdown, sem explicação:
|
||||
## suggestions
|
||||
|
||||
### when_null_greeting
|
||||
{{greeting_response}} Mas preciso do seu nome completo para continuar. Pode me dizer?
|
||||
{{greeting_response}} Mas preciso do seu nome completo (nome e sobrenome) para continuar. Pode me dizer?
|
||||
|
||||
### when_null_evasive
|
||||
Sem problemas, mas preciso do seu nome para prosseguir. Qual seu nome completo?
|
||||
Sem problemas, mas preciso do seu nome completo para prosseguir. Qual seu nome e sobrenome?
|
||||
|
||||
### when_null_question
|
||||
Entendo sua dúvida! Precisamos do nome completo para {{agent_context}}. Pode me informar seu nome e sobrenome?
|
||||
|
||||
### when_null_refused
|
||||
Compreendo. Caso mude de ideia, estou aqui para ajudar. Sem o nome completo, não consigo prosseguir com o cadastro.
|
||||
|
||||
### when_null_escalation
|
||||
(transferir para atendente humano)
|
||||
|
||||
### when_uncertain_single_name
|
||||
Só consegui capturar "{{extracted_value}}". Preciso do nome completo — nome e sobrenome. Pode me informar?
|
||||
|
||||
### when_uncertain
|
||||
Seu nome é {{extracted_value}}? Pode confirmar que posso registrá-lo assim?
|
||||
Seu nome completo é {{extracted_value}}? Pode confirmar que posso registrá-lo assim?
|
||||
|
||||
### when_certain
|
||||
(sem sugestão — agente segue o fluxo)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user