review: auto-review do Captain em 2026-04-23
This commit is contained in:
parent
c0b54c6783
commit
6e7bcc9b44
268
docs/captain/reviews/2026-04-23.md
Normal file
268
docs/captain/reviews/2026-04-23.md
Normal file
@ -0,0 +1,268 @@
|
||||
# Captain Review — 2026-04-23
|
||||
|
||||
**Período:** últimas 72h (20/04 a 23/04/2026)
|
||||
**Analisado:** 4 assistants (Qnn01, PrimeAL, PrimeVL, Express)
|
||||
**Conversas problemáticas:** 4 bugs / 11 legítimas
|
||||
|
||||
---
|
||||
|
||||
## 📊 Conversas analisadas
|
||||
|
||||
| Conv | Hotel | Contato | Problema | Legítima? |
|
||||
|---|---|---|---|---|
|
||||
| 4094 | Qnn01 | rf | [FERRAMENTAS] block vazado + categorias erradas em send_suite_images | ❌ Bug |
|
||||
| 4070 | Express | Lauriana | [Identidade] block vazado quando cliente enviou dados de reserva | ❌ Bug |
|
||||
| 4075 | Express | Estefani | [Informações outras unidades] vazado + promoção expirada anunciada | ❌ Bug |
|
||||
| 4114 | Qnn01 | Guilherme | Pix não gerado, IA expôs erro interno; preço corrigido pelo humano (R$130 → R$160) | ❌ Bug |
|
||||
| 4229 | PrimeAL | Davi Lima | IA disparou transfer enquanto humano já estava atendendo | ❌ Bug |
|
||||
| 4268 | PrimeAL | ldoriane28 | Pedido de vaga de camareira | ✅ Legítima |
|
||||
| 4267 | PrimeAL | Tony | Nota fiscal perdida após check-out | ✅ Legítima |
|
||||
| 4228 | PrimeAL | Lucas Bouwman | Emissão de nota fiscal (CNPJ) | ✅ Legítima |
|
||||
| 4238 | PrimeAL | Belzinha | Cardápio in-hotel (hóspede já no quarto) | ✅ Legítima |
|
||||
| 4258 | PrimeAL | Jr | Room service / café da manhã in-hotel | ✅ Legítima |
|
||||
| 4259 | Express | Estefani | Pedido de porções (hóspede in-hotel) | ✅ Legítima |
|
||||
| 4236, 4253, 4256, 4242, 4243, 4248 | PrimeAL/VL/Express | vários | Transfers noturnos (pós ~23h) — provavelmente business hours | ✅ Possivelmente legítima |
|
||||
| 4280 | PrimeAL | Érica | Imagens enviadas, VALERIA assumiu — não houve bug da IA | ✅ Legítima |
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Padrões identificados
|
||||
|
||||
### Padrão 1: Blocos internos do sistema sendo enviados como mensagem ao cliente
|
||||
**Ocorrências:** 3 conversas — 4094 (Qnn01), 4070 (Express), 4075 (Express)
|
||||
**Qual regra violou:** #12 — Preservar dados não expostos
|
||||
**Comportamento errado:**
|
||||
- **4094**: IA enviou o bloco `[FERRAMENTAS]` inteiro (com os gatilhos de `daniela_reservas`, `jamile_disponibilidade_imediata`, etc.) como mensagem ao cliente enquanto tentava responder "pernoite sem café".
|
||||
- **4070**: IA enviou o bloco `[Identidade]` completo (nome, função, hotel, missão, restrições) logo após o cliente enviar dados de reserva (CPF, datas). O bloco saiu antes de qualquer resposta processada.
|
||||
- **4075**: IA enviou o bloco `[Informações outras unidades]` duas vezes consecutivas quando cliente perguntou sobre a promoção do Instagram.
|
||||
|
||||
**Deveria ser:** Nunca enviar conteúdo de blocos internos. Se a IA não sabe a resposta, deve pedir mais contexto ou transferir — mas nunca exibir o prompt cru.
|
||||
|
||||
**Escopo do fix:** (a) geral — afeta Qnn01 e Express, mas a causa raiz provavelmente atinge todas as unidades.
|
||||
|
||||
**💡 Fix sugerido** — em todos os arquivos de scenario (`jasmine_*__daniela_reservas.md` e base), logo após a seção de ferramentas/instruções:
|
||||
|
||||
```
|
||||
IMPORTANTE: Você NUNCA deve enviar para o cliente o conteúdo de blocos internos do sistema como
|
||||
[Identidade], [FERRAMENTAS], [Informações outras unidades] ou qualquer marcador entre colchetes.
|
||||
Esses blocos são configuração interna e devem ser tratados como invisíveis ao cliente.
|
||||
Se sentir necessidade de citar uma regra interna, reformule naturalmente sem revelar o bloco.
|
||||
```
|
||||
|
||||
- [ ] Aprovar
|
||||
- [ ] Rejeitar (motivo: _______)
|
||||
|
||||
---
|
||||
|
||||
### Padrão 2: IA anunciou promoção expirada (Express)
|
||||
**Ocorrências:** 1 conversa — 4075 (Express, Estefani, 21/04/2026)
|
||||
**Qual regra violou:** Preço errado / informação desatualizada (implícito em #1 e #3)
|
||||
**Comportamento errado:** IA disse: "Estamos com uma promoção especial de pernoite para casal por R$79,90 (sem café da manhã incluso), **válida até 31 de março de 2026**". A conversa foi em 21 de abril — promoção havia expirado 21 dias antes.
|
||||
|
||||
**Deveria ser:** IA deve informar a tabela vigente. Promoções com data de validade vencida não devem aparecer.
|
||||
|
||||
**Escopo do fix:** (c) só Express — atualizar/remover a promoção de R$79,90 expirada do prompt do Express.
|
||||
|
||||
**💡 Fix sugerido** — remover do prompt do `jasmine_express` o bloco ou linha que menciona a promoção de R$79,90 (validade 31/03/2026). Se houver nova promoção, inserir com nova data de validade. Se não houver promoção ativa, remover completamente.
|
||||
|
||||
- [ ] Aprovar
|
||||
- [ ] Rejeitar (motivo: _______)
|
||||
|
||||
---
|
||||
|
||||
### Padrão 3: send_suite_images usa categorias do Prime no Qnn01
|
||||
**Ocorrências:** 1 conversa — 4094 (Qnn01, rf)
|
||||
**Qual regra violou:** #10 — Tool `send_suite_images` EXIGE parâmetro correto
|
||||
**Comportamento errado:**
|
||||
Cliente pediu: "Manda foto da suite master" → IA respondeu: *"preciso que você me confirme a categoria dela, como por exemplo **Alexa, Stilo ou Spa-Hidromassagem**"*. Mas Alexa/Stilo são categorias do Prime, não do Qnn01. O Qnn01 tem: **Standard, Master, Pole Dance, Hidromassagem**. O cliente já havia dito "Master" — a IA deveria ter chamado `send_suite_images({suite_category: "Master"})` diretamente.
|
||||
|
||||
Quando cliente insistiu em "Alexa e Stilo" (categorias que ele conhecia do Prime), a IA disse *"não temos fotos disponíveis das suítes Alexa e Stilo"* — correto nesse caso, mas o problema raiz é que a IA desconhece as categorias locais.
|
||||
|
||||
**Deveria ser:** Reconhecer "Standard", "Master", "Pole Dance" e "Hidromassagem" como categorias válidas para `send_suite_images` no Qnn01 e chamar a tool diretamente quando o cliente nomear uma delas.
|
||||
|
||||
**Escopo do fix:** (c) só Qnn01.
|
||||
|
||||
**💡 Fix sugerido** — adicionar em `jasmine_qnn01__daniela_reservas.md` (ou na seção da tool `send_suite_images`):
|
||||
|
||||
```
|
||||
Categorias válidas para send_suite_images nesta unidade: Standard, Master, Pole Dance, Hidromassagem.
|
||||
Se o cliente pedir fotos de "suite master", chame send_suite_images({suite_category: "Master"}).
|
||||
Nunca peça confirmação de categoria se o cliente já nomeou uma das categorias acima.
|
||||
```
|
||||
|
||||
- [ ] Aprovar
|
||||
- [ ] Rejeitar (motivo: _______)
|
||||
|
||||
---
|
||||
|
||||
### Padrão 4: Falha na geração de Pix expõe mensagem técnica
|
||||
**Ocorrências:** 1 conversa — 4114 (Qnn01, Guilherme)
|
||||
**Qual regra violou:** #3 (IA deve calcular e gerar Pix diretamente) + parcialmente #12
|
||||
**Comportamento errado:**
|
||||
IA coletou nome + CPF do cliente corretamente, tentou gerar Pix, falhou e exibiu:
|
||||
*"Houve um problema ao gerar o código Pix automaticamente, pois nossa unidade ainda não está configurada para receber Pix de forma automática no sistema."*
|
||||
|
||||
Essa mensagem:
|
||||
1. Expõe que há uma "configuração interna do sistema" — viola #12 no espírito
|
||||
2. Deixa cliente sem caminho claro de pagamento
|
||||
|
||||
A IA então sugeriu pagar o sinal na recepção — o que pode ser aceitável como fallback, mas requer confirmação do Rodrigo.
|
||||
|
||||
**Deveria ser:** Se Pix falhar, a IA deve ter um fallback sem expor detalhes técnicos. Ex: *"No momento estou com uma instabilidade para gerar o Pix automaticamente. Para confirmar sua reserva, você pode pagar o sinal de R$65 ao chegar, ou me diga se prefere tentar novamente."*
|
||||
|
||||
**Escopo do fix:** (c) Qnn01 (mas verificar se outras unidades têm mesmo problema).
|
||||
|
||||
**💡 Fix sugerido** — adicionar tratamento de erro no scenario do Qnn01:
|
||||
|
||||
```
|
||||
Se a geração de Pix falhar, NÃO mencione "configuração interna" ou "sistema". Use:
|
||||
"Tive uma instabilidade no sistema de pagamento agora. Sua reserva está garantida —
|
||||
você pode pagar o sinal de [valor] diretamente na recepção ao chegar. Posso ajudar com mais alguma coisa?"
|
||||
```
|
||||
|
||||
- [ ] Aprovar
|
||||
- [ ] Rejeitar (motivo: _______)
|
||||
|
||||
---
|
||||
|
||||
### Padrão 5: IA disparou transfer enquanto humano já estava atendendo
|
||||
**Ocorrências:** 1 conversa — 4229 (PrimeAL, Davi Lima, 22/04 21:47)
|
||||
**Qual regra violou:** Nenhuma diretamente do gabarito — mas é comportamento anômalo e confuso
|
||||
**Comportamento errado:**
|
||||
Um agente humano já havia greeted o cliente ("Ola boa noite") e estava conduzindo a reserva (perguntou "Seria qual suite."). Enquanto o cliente respondia, a IA disparou "Transferindo para que outro agente dê assistência." — interrompendo o fluxo e gerando uma 2ª abertura de conversa desnecessária.
|
||||
|
||||
**Deveria ser:** IA não deve acionar transfer se conversa já está sendo atendida por humano (assignee_id preenchido por humano antes da mensagem da IA).
|
||||
|
||||
**Escopo do fix:** (a) geral — parece problema de orquestração/Chatwoot (pode não ser fix de prompt, mas de regra de automação).
|
||||
|
||||
**💡 Fix sugerido:** Verificar se há uma regra de automação do Chatwoot que re-aciona a IA mesmo com humano ativo. Se sim, ajustar a regra para não disparar o Captain quando `assignee_id != null` (humano já assignado).
|
||||
|
||||
- [ ] Aprovar (fix de automação Chatwoot)
|
||||
- [ ] Rejeitar (motivo: _______)
|
||||
|
||||
---
|
||||
|
||||
## ❓ Perguntas pra o Rodrigo responder (SEMPRE com sugestão)
|
||||
|
||||
### Pergunta 1: Pernoite sem café existe como opção no Qnn01?
|
||||
**Conversa:** 4094
|
||||
**Contexto:** Cliente perguntou especificamente "Pernoite sem café" e a IA continuou dando preços com café incluso, ignorando o qualificador.
|
||||
**O que preciso saber:** O Qnn01 oferece pernoite sem café, e qual seria o preço?
|
||||
|
||||
**💡 Minha sugestão:**
|
||||
Se não existe pernoite sem café, adicionar instrução no prompt:
|
||||
```
|
||||
Se cliente pedir "pernoite sem café": informe que o pernoite inclui café da manhã como padrão
|
||||
e que não é possível retirar. Ofereça a opção de "horas avulsas" se não quiser café.
|
||||
```
|
||||
Se existe, informar o preço para incluir na tabela.
|
||||
|
||||
**Sua escolha:**
|
||||
- [ ] Usar a sugestão acima (pernoite sempre inclui café)
|
||||
- [ ] Existe pernoite sem café — preço: R$______
|
||||
- [ ] Usar outra (escreva abaixo)
|
||||
|
||||
**Sua resposta alternativa:** _[preencha só se rejeitou]_
|
||||
|
||||
---
|
||||
|
||||
### Pergunta 2: Preço correto da Suite Master pernoite no Qnn01 (segunda a quarta)?
|
||||
**Conversa:** 4114
|
||||
**Contexto:** IA informou R$130 para Suite Master pernoite (segunda a quarta). O humano que assumiu disse R$160.
|
||||
**O que preciso saber:** Qual é o preço correto? Se for R$160, o prompt do Qnn01 está com tabela desatualizada.
|
||||
|
||||
**💡 Minha sugestão:**
|
||||
Atualizar a tabela de preços no prompt do Qnn01 com o valor correto. Sugiro verificar também as outras categorias.
|
||||
|
||||
**Sua escolha:**
|
||||
- [ ] IA está correta — R$130 (seg-qua) / R$160 (qui-dom)
|
||||
- [ ] Humano está correto — corrigir para R$160 em todos os dias
|
||||
- [ ] Outro: ___________
|
||||
|
||||
---
|
||||
|
||||
### Pergunta 3: Business hours — IA deve responder fora do horário comercial?
|
||||
**Conversas:** 4236, 4248, 4253, 4256, 4242, 4243 (entre 23h e 4h)
|
||||
**Contexto:** Nas unidades PrimeAL, PrimeVL e Express, qualquer mensagem recebida após ~22h-23h aciona transfer imediato. Em Qnn01, a IA continua respondendo normalmente a qualquer hora (veja 4114 às 22:12).
|
||||
**O que preciso saber:** Essa diferença de comportamento é intencional? A IA deveria continuar respondendo perguntas de preço/disponibilidade à noite mesmo sem humano disponível?
|
||||
|
||||
**💡 Minha sugestão:**
|
||||
Manter a IA respondendo perguntas de informação (preço, disponibilidade) 24/7. Transferir para humano apenas quando for reserva que exige ação operacional (ex: check-in imediato, problema in-hotel). Isso garante que leads noturnos não se percam.
|
||||
|
||||
**Sua escolha:**
|
||||
- [ ] Usar a sugestão (IA responde 24/7 no nível de info/preço)
|
||||
- [ ] Manter business hours — IA só responde das __h às __h
|
||||
- [ ] Usar outra (escreva abaixo)
|
||||
|
||||
---
|
||||
|
||||
## 📝 Diffs completos (antes/depois)
|
||||
|
||||
### Fix 1 — Todos os scenarios: instrução anti-leak de blocos internos
|
||||
|
||||
**ANTES:** (sem instrução explícita sobre vazamento de blocos)
|
||||
|
||||
**DEPOIS:** adicionar ao início ou final de cada `jasmine_*__daniela_reservas.md`:
|
||||
```
|
||||
REGRA CRÍTICA — BLOCOS INTERNOS:
|
||||
Jamais envie ao cliente o conteúdo de blocos delimitados por colchetes como [Identidade],
|
||||
[FERRAMENTAS], [Informações outras unidades] ou similares. Esses blocos são configuração
|
||||
interna e devem ser tratados como invisíveis. Se precisar informar algo desses blocos,
|
||||
reformule naturalmente sem reproduzir o marcador ou o JSON/lista interno.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Fix 2 — jasmine_express: remover promoção expirada
|
||||
|
||||
**ANTES:** (linha ou bloco com) `promoção especial de pernoite para casal por R$79,90 [...] válida até 31 de março de 2026`
|
||||
|
||||
**DEPOIS:** remover essa linha/bloco completamente. Substituir por tabela de preços vigente sem menção a promoções expiradas.
|
||||
|
||||
---
|
||||
|
||||
### Fix 3 — jasmine_qnn01: categorias válidas para send_suite_images
|
||||
|
||||
**ANTES:** (provavelmente usando nomes genéricos ou herdando do Prime)
|
||||
|
||||
**DEPOIS:**
|
||||
```
|
||||
Categorias de suítes válidas para send_suite_images no Qnn01:
|
||||
- "Standard" (suíte standard)
|
||||
- "Master" (suíte master)
|
||||
- "Pole Dance" (suíte pole dance)
|
||||
- "Hidromassagem" (suíte hidromassagem)
|
||||
|
||||
Quando cliente pedir foto e já nomear uma dessas categorias, chame
|
||||
send_suite_images({suite_category: "<categoria>"}) diretamente sem pedir confirmação.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Fix 4 — jasmine_qnn01: fallback de Pix sem expor erro técnico
|
||||
|
||||
**ANTES:** (sem tratamento de fallback — IA exibe mensagem de erro técnico)
|
||||
|
||||
**DEPOIS:**
|
||||
```
|
||||
Se a geração automática de Pix falhar (tool retornar erro), responda ao cliente:
|
||||
"Tive uma pequena instabilidade no sistema de pagamento agora. Não se preocupe —
|
||||
sua reserva está confirmada. Você pode pagar o sinal de [valor] diretamente na recepção
|
||||
ao chegar. Posso ajudar com alguma outra dúvida?"
|
||||
Nunca mencione "configuração interna", "sistema ainda não configurado" ou detalhes técnicos.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist de aprovação
|
||||
|
||||
Após revisar, marque e rode `claude /captain-apply-review 2026-04-23` no Mac:
|
||||
|
||||
- [ ] Padrão 1 — Blocos internos vazados — Aprovado
|
||||
- [ ] Padrão 2 — Promoção expirada Express — Aprovado
|
||||
- [ ] Padrão 3 — Categorias Qnn01 send_suite_images — Aprovado
|
||||
- [ ] Padrão 4 — Fallback Pix sem expor erro — Aprovado
|
||||
- [ ] Padrão 5 — IA interrompeu humano ativo — Aprovado (fix Chatwoot)
|
||||
- [ ] Pergunta 1 — Pernoite sem café Qnn01 — Respondida
|
||||
- [ ] Pergunta 2 — Preço Suite Master Qnn01 — Respondida
|
||||
- [ ] Pergunta 3 — Business hours PrimeAL/VL/Express — Respondida
|
||||
Loading…
Reference in New Issue
Block a user