# ClientFlow v4928.1.5.4 — LLM-first Reply Assistant ## Objetivo Corrige a direção da versão anterior para evitar evolução excessivamente rule-based. As regras determinísticas passam a ser guardrails objetivos e o LLM/OpenRouter, quando ativo, passa a interpretar a intenção comercial/técnica e a gerar o rascunho com conhecimento BLIF. ## Principais alterações - Adicionado modo `CLIENTFLOW_REPLY_LLM_FIRST_ENABLED=true`. - Novo template neutro `LLM_BUSINESS_REPLY` para respostas geradas por LLM. - Novo `classify_reply_guardrail()` apenas para guardrails objetivos: - bounces/email devolvido; - respostas automáticas/out-of-office; - pedidos RGPD/unsubscribe; - atualização de contacto. - O `classify_reply_intent()` antigo continua disponível como fallback determinístico quando LLM está desligado. - Novo `MessageCleaner` reforçado para remover: - histórico citado; - headers de email; - assinaturas; - disclaimers; - rodapés que contaminavam suporte/IVA. - Prompt OpenRouter reformulado para interpretar primeiro a necessidade real do cliente. - Contexto LLM passa a incluir: - mensagem limpa; - cliente; - oportunidade; - documentos selecionados; - conhecimento BLIF relevante; - catálogo estruturado de produtos/acessórios; - tipos de resposta permitidos. - Normalização LLM inclui: - `intent`; - `reply_type`; - `requires_attachment`; - `confidence`; - `customer_need`; - `recommended_next_action`; - `knowledge_used`; - `warnings`. - Se o LLM falhar em modo LLM-first, a tarefa fica bloqueada para revisão manual, em vez de sugerir uma resposta genérica. - O script de auditoria passa a mostrar intenção/necessidade/confiança do LLM. ## Segurança mantida - O LLM não envia mensagens automaticamente. - O operador continua a rever/enviar. - O validador continua a bloquear promessas proibidas de instalação, anexos/documentos errados e preços suspeitos. - Sem OpenRouter ativo, o sistema regressa a fallback seguro/determinístico. ## Configuração ```env CLIENTFLOW_REPLY_LLM_ENABLED=false CLIENTFLOW_REPLY_LLM_FIRST_ENABLED=true CLIENTFLOW_REPLY_LLM_MODEL= OPENROUTER_API_KEY= ``` Para auditar com LLM: ```bash python scripts/audit_task_reply_suggestions.py --status pending --use-llm --format markdown --out /tmp/task_reply_audit_llm.md ``` ## Validação ```text 249 passed ```