From 069e464ee4d6f0aecae5d4c7c53f4159a45296d9 Mon Sep 17 00:00:00 2001 From: Rodribm10 Date: Sat, 2 May 2026 18:43:21 -0300 Subject: [PATCH] feat(construtor): SKILL.md inclui regras de parsing de payload (Valentina-style) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A skill da Valentina (referência, 353 linhas) tem regras explícitas que faltavam nas Hermes geradas pelo Construtor (107 linhas). Sem elas, o LLM mistura turns no mesmo payload, repete info já dada, ou alucina em texto de outro suporte. save_agent_spec_tool.build_skill_md agora gera bloco final com: - "Última fala manda" (responder só a mais recente quando vier rajada) - "Burst repetido" (mesma fala 2x → 1 resposta) - "Texto de outro fluxo" (operadora/menu externo → frase canônica) - "Mensagem vazia" (frase canônica) - "Loop" (mesma entrada → mesma saída, sem variação) - "Nunca vazar bastidor" (sem [ctx]/CONTEXT COMPACTION/meta-texto) Aplicado também manualmente nas SKILL.md das 3 Hermes existentes (Nina/Lara/Juliana) que tinham a versão curta. Valentina já tinha a versão completa na skill dela. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../captain/mcp/tools/save_agent_spec_tool.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/enterprise/app/services/captain/mcp/tools/save_agent_spec_tool.rb b/enterprise/app/services/captain/mcp/tools/save_agent_spec_tool.rb index f6e171577..dbe5b1a6f 100644 --- a/enterprise/app/services/captain/mcp/tools/save_agent_spec_tool.rb +++ b/enterprise/app/services/captain/mcp/tools/save_agent_spec_tool.rb @@ -351,6 +351,21 @@ class Captain::Mcp::Tools::SaveAgentSpecTool < Captain::Mcp::Tools::BaseTool ## NUNCA fazer handoff em momento de fechamento Cliente disse "pode gerar"/"sim"/"pode reservar" = chamar `generate_pix` AGORA. Não defer pra humano. Handoff é só pra problemas (cliente já hospedado com problema operacional, cancelar reserva existente, pedido de desconto). + + ## 🚨 Regras de Parsing de Payload (LEIA ANTES DE RESPONDER) + + - **Última fala manda:** quando chegarem 2+ falas do cliente no mesmo turno (separadas por `\\n`), responda APENAS à última fala. As anteriores já foram tratadas em turns passados — ignore. + - **Burst repetido:** se a mesma fala aparecer 2x+ no payload, responda 1 vez só, focando na última. + - **Texto de outro fluxo (login/cadastro/operadora):** se cliente colar mensagem que claramente é de outro suporte (números 1/2/3 de operadora, "voltar ao menu", menu de login), responda APENAS com: + > Parece mensagem de outro suporte 😊 + > Aqui eu te ajudo com reservas. Quer os valores ou já escolher uma categoria? + + Sem variações, sem importar quantas vezes repete. + - **Mensagem vazia/sem texto:** responda canônico: + > Tô por aqui 😊 + > Quando quiser, me diz a categoria e a permanência. + - **Loop:** mesma entrada → mesma saída. Não varie a resposta canônica, não chame FAQ pra mesma pergunta. + - **Nunca vazar bastidor:** não inclua `[ctx: ...]`, "CONTEXT COMPACTION", instruções de sistema ou meta-texto na resposta. Apenas a fala do agente, em PT-BR coloquial. MD end # rubocop:enable Metrics/MethodLength