Agente de Triagem¶
Papel e código¶
Triagem inicia a sessão, identifica a frente de atendimento e distingue pedido de serviço, dúvida e demanda que exige humano. Seu builder é build_triagem_system_prompt() em src/core/agents/triagem/system_prompt.py; o consumidor é AgentInvokerImpl._build_system_prompt(). O caso de uso seleciona AgentName.TRIAGEM quando a sessão está em TRIAGE.
O agente não consulta status de análises, não grava contatos e não escolhe livremente um pipeline comercial. Ele retorna informação ao dispatch_triagem() de src/core/application/action_mapping.py.
Input e contexto¶
| Input | Origem e uso |
|---|---|
agent_name |
Identidade configurada |
instance |
gogenetic ou goyou; calibra texto e frente |
business_hours |
Calculado com horário efetivo; permite continuar fora de expediente sem prometer retorno |
cliente_conhecido, cliente_nome |
recognized_name ou nome cadastrado na sessão |
strategic_companies |
Override operacional; fallback empacotado no prompt |
available_packages |
Catálogo compacto da KB dinâmica |
injected_packages |
Tuplas ID/conteúdo recuperadas pela sessão |
| Histórico | Somente mensagens INBOUND/OUTBOUND da sessão, sem outbound superseded |
Na abertura para cliente novo o prompt pede nome e empresa, aceitando pessoa física. Se o usuário já informou um dado, deve perguntar somente o que falta. A introdução deve identificar atendimento automatizado e possibilidade de humano. Esses dados de abertura não são automaticamente transferidos por qualquer código: s=1 da Triagem não faz merge cadastral; o histórico permite recuperá-los depois.
Classificação e ações¶
Segmentos aceitos são AGRO, HUMANO, PESQUISA, ANIMAL; intents são servico, duvida, reclamacao, cancelamento, status, humano. O código s=2 exige strings válidas para ambos.
| Código | Saída do dispatcher |
|---|---|
1 |
Responde e fica em TRIAGE |
2 com servico |
Guarda segmento/intenção, passa para QUALIFYING e chama Qualificação no mesmo turno; texto da Triagem não é enviado |
2 com outro intent |
Guarda segmento/intenção e permanece TRIAGE |
3 |
HANDOFF_PENDING; default pedido_cliente, preserva contexto opcional válido |
4 |
OUT_OF_SCOPE; exige out_of_scope_service e registra demanda |
5 |
Dúvida respondida, permanece TRIAGE |
97 / 98 / 99 |
Confirma assunto / troca confirmada / busca contexto |
O prompt determina que reclamação, cancelamento, status e pedido de humano usem s=3; o dispatcher não força handoff se o modelo devolver esses intents junto com s=2. Esta diferença entre instrução e validação deve ser considerada em regressões.
Critérios de handoff e conhecimento¶
O prompt instrui handoff para empresa estratégica, reclamação, cancelamento, pós-venda, recusa de texto, pedido explícito ou incerteza. empresa_detectada é preservada em qualification_data; segmento e intenção válidos alimentam resumo/roteamento. Motivo desconhecido usa o default do agente, sem lançar erro.
Todos os packages ativos podem ser solicitados, sem ACL por agente. Os mais associados à recepção são COMPANY_INFO, PORTFOLIO_OVERVIEW, PORTFOLIO_EXCLUSIONS e GOGENETIC_YOU; isso é orientação de uso, não restrição de código. Antes de afirmar exclusão, preço ou fato técnico, o prompt pede buscar contexto ou encaminhar em caso de incerteza.
Exemplos sintéticos¶
Entrada do usuário: “Estou em um laboratório de pesquisa e preciso avaliar uma amostra.” Uma resposta intermediária possível:
{"s":2,"segment":"PESQUISA","intent":"servico"}Vou entender os detalhes da análise.
O Orchestrator guarda classificação e chama Qualificação; apenas a resposta final do encadeamento chega ao cliente.
{"s":3,"intent":"humano","handoff_reason":"pedido_cliente"}Vou encaminhar sua solicitação à equipe.
Este segundo exemplo encaminha sem exigir cadastro completo. O motivo aparece no resumo e a sessão permanece aguardando operador.
Exemplo inválido:
{"s":2,"segment":"COMERCIAL","intent":"servico"}Certo.
O JSON passa pelo parser, mas COMERCIAL não é Segment; o dispatcher lança erro de aplicação, mapeado pelo caso de uso para handoff de contrato. Não se cria um novo segmento a partir de texto livre.
Testes e como alterar¶
Fontes: tests/unit/agents/test_system_prompts.py, tests/unit/agents/test_invoker.py, tests/unit/application/test_action_mapping.py e test_process_message_use_case.py (test_triagem_s2_servico_chains_to_qualificacao, test_early_handoff_persists_routing_context, test_triagem_s4_registers_demand_and_terminates). As fixtures TC-07-out-of-portfolio.json, TC-08-empresa-grande-handoff.json e TC-14-reclamacao.json documentam cenários; não reutilize dados pessoais delas em novos exemplos.
Para mudar critérios de roteamento, revise prompt e validação juntos. Para ajustar empresas estratégicas, confira configuração operacional antes de modificar o fallback estático. Para um novo segmento, atualize enum, campos, UI, roteamento humano, CRM e testes. Veja ações, packages e handoff.