O que é Introduzir Roteador?
Introduzir Roteador (Introduce Router) é uma refatoração de IA para sistemas com LLM, do grupo Movendo controle. Classificar a entrada primeiro e mandar para um prompt ou agente especializado.
Introduce Router
Introduzir Roteador (Introduce Router) é uma refatoração de IA para sistemas com LLM, do grupo Movendo controle. Classificar a entrada primeiro e mandar para um prompt ou agente especializado.
Um único prompt ou agente atende vários assuntos, com regras e ferramentas de todos ao mesmo tempo. São os smells System Prompt Roteador, Ferramentas Demais e Mega-Agente.
Pense na assistente virtual de uma operadora de telefonia. Ela começou com vendas. Depois ganhou suporte técnico, depois cobrança. Cada assunto trouxe um bloco de regras para o system prompt e algumas ferramentas novas. Hoje, quando alguém pergunta “por que minha fatura veio mais alta?”, o modelo lê também as regras de portabilidade e as instruções de reiniciar o modem.
Os sintomas aparecem aos poucos. Um cliente de cobrança recebe uma oferta de plano no meio da explicação. Uma correção na regra de suporte piora as respostas de vendas. E ninguém consegue dizer, olhando o trace, qual parte do prompt o modelo seguiu.
Classifique a entrada primeiro, com um passo curto e saída estruturada, e mande cada tipo para um prompt ou agente especializado, com só as regras e as ferramentas daquele assunto. A decisão da rota fica no código.
-SYSTEM = """Você é a assistente da Operadora.
-SE for vendas: [800 tokens]
-SE for suporte técnico: [1.200 tokens]
-SE for cobrança: [900 tokens]"""
-reply = agent(SYSTEM, tools=ALL_TOOLS, message=msg)
+class Route(BaseModel):
+ topic: Literal["sales", "tech", "billing", "other"]
+ confidence: float
+
+ROUTES = {
+ "sales": Agent(SALES_PROMPT, tools=[plans, offers]),
+ "tech": Agent(TECH_PROMPT, tools=[device_status, open_ticket]),
+ "billing": Agent(BILLING_PROMPT, tools=[get_invoice, explain_charge]),
+}
+
+route = llm_parse(ROUTER_PROMPT, msg, schema=Route, model="small")
+if route.topic == "other" or route.confidence < 0.7:
+ return handoff_to_human(msg)
+reply = ROUTES[route.topic].run(msg)
Antes: um prompt e todas as ferramentas para tudo.
flowchart LR
IN(["1. Mensagem"]):::io --> A(["2. Prompt único com três assuntos"]):::llm
A --> T["Todas as ferramentas"]:::tool
A --> OUT(["3. Resposta"]):::io
Depois: classificação, decisão em código e especialistas.
flowchart LR
IN(["1. Mensagem"]):::io --> R(["2. Classificar assunto"]):::llm
R --> D{"3. Rota"}
D -->|vendas| S(["4a. Vendas"]):::llm
D -->|suporte| T(["4b. Suporte técnico"]):::llm
D -->|cobrança| B(["4c. Cobrança"]):::llm
D -->|outro| H((("4d. Atendente"))):::human
Siga uma mensagem real pelos dois desenhos: “Minha fatura de setembro veio R$ 40 a mais, o que é isso?”.
No antes, o modelo recebe cerca de 3.000 tokens de instruções (os três blocos mais o cabeçalho) e seis ferramentas. Ele precisa descobrir sozinho que só o bloco de cobrança importa.
No depois, o classificador recebe um prompt curto, com a lista de assuntos e alguns exemplos, e devolve isto:
{ "topic": "billing", "confidence": 0.93 }
O código lê topic, vê que a confiança passa do limiar e chama o agente de cobrança. Esse agente recebe só os 900 tokens de cobrança e duas ferramentas: get_invoice e explain_charge. Ele não tem como oferecer um plano, porque nem conhece a ferramenta de ofertas.
No trace, a conversa ganha um campo novo: route=billing. Quando a resposta sair errada, você sabe se o erro foi da classificação ou do especialista.
Um prompt com três assuntos obriga o modelo a decidir, a cada mensagem, quais instruções valem. Às vezes ele mistura. Separar a decisão (classificar) da execução (responder) transforma uma escolha implícita e invisível numa escolha explícita, registrada e testável.
Classificar é uma tarefa mais fácil que responder. A saída é uma de quatro palavras, e um modelo pequeno costuma dar conta. Por isso o passo extra é barato e rápido.
Cada especialista fica pequeno: só as regras e as ferramentas do seu assunto. Isso melhora a qualidade, reduz o custo por chamada e permite que times diferentes cuidem de rotas diferentes sem se atrapalhar. Uma mudança no prompt de vendas não tem mais como quebrar a cobrança.
O padrão de destino é o Roteamento. Quando o que muda por rota é só o conjunto de ferramentas, e o prompt pode ser o mesmo, o destino é o Roteador de Ferramentas. O post “Building effective agents” da Anthropic (dezembro de 2024) descreve o roteamento como um dos workflows básicos e cita justamente o atendimento ao cliente, com perguntas gerais, pedidos de reembolso e suporte técnico indo para caminhos diferentes.
O eval do passo 2 é simples de montar. Separe algumas centenas de mensagens reais, rotule cada uma com a rota correta e compare com a saída do classificador. O resultado mais útil é uma matriz de confusão: quantas mensagens de cobrança foram para suporte, quantas de suporte foram para vendas, e assim por diante.
A matriz mostra onde as rotas se confundem. Se cobrança e suporte se misturam muito, talvez a fronteira entre elas esteja mal definida, e o conserto é na lista de rotas, não no prompt.
A confidence que o modelo escreve no JSON é um palpite dele sobre si mesmo, não uma probabilidade calibrada. Um modelo pode escrever 0,9 para quase tudo. Não escolha o limiar de 0,7 por intuição.
Use o eval para escolher. Veja em qual faixa de confiança os erros se concentram e coloque o corte ali. Se o número não separa acertos de erros, ele não serve como limiar, e a rota “outro” com bons exemplos no prompt faz mais efeito.
Um agente interno de TI responde dúvidas, reseta senhas e cria acessos a sistemas. Como você dividiria as rotas, e qual delas precisa de cuidado extra?
Três rotas: dúvidas (RAG na base de TI, sem ferramentas de efeito), reset de senha (fluxo fixo em código, com verificação de identidade) e pedido de acesso (agente com ferramenta de criar acesso, sempre com aprovação do gestor). A rota de acesso precisa de cuidado extra: tem efeito sobre permissões, então passa por Humano no Circuito e por ferramentas com escopo mínimo. Mensagens com baixa confiança vão para o atendente.
Repare que a rota de reset de senha nem precisa de modelo depois da classificação. Um fluxo fixo é mais seguro e mais previsível que um agente para uma tarefa com sempre os mesmos passos.
Introduzir Roteador (Introduce Router) é uma refatoração de IA para sistemas com LLM, do grupo Movendo controle. Classificar a entrada primeiro e mandar para um prompt ou agente especializado.
Trata Ferramentas Demais, System Prompt Roteador e Mega-Agente.
Ao padrão de projeto Roteamento e Roteador de Ferramentas.