First commit

This commit is contained in:
2026-06-19 22:17:09 -03:00
commit 239203ee2a
533 changed files with 75195 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
# Template 2 — Retail/E-commerce: Pedidos + Suporte
Este template demonstra outro uso do mesmo framework, com dois agentes diferentes:
- `OrdersAgent`: status de pedido, entrega, troca, devolução e rastreamento.
- `SupportAgent`: problemas de acesso, cadastro, pagamento, cupom e atendimento geral.
A ideia é mostrar que o framework não é dependente de telecom. O desenvolvedor troca apenas:
- intents em `routing.yaml`;
- prompts dos agentes;
- tools de negócio;
- estados do workflow.
O core de LangGraph, guardrails, judges, supervisor, Langfuse, OCI Generative AI e sessão permanece igual.

View File

@@ -0,0 +1,19 @@
payload_pedido = {
"channel": "web",
"payload": {
"text": "Meu pedido atrasou e quero rastrear a entrega.",
"user_id": "user-002",
"channel_id": "browser-002",
"context": {"order_id": "ORDER-123"},
},
}
payload_suporte = {
"channel": "web",
"payload": {
"text": "Não consigo fazer login e meu cupom não aplica.",
"user_id": "user-002",
"channel_id": "browser-002",
"context": {"customer_id": "CUST-123"},
},
}

View File

@@ -0,0 +1,17 @@
class OrdersAgent:
name = "orders_agent"
def __init__(self, llm, telemetry=None):
self.llm = llm
self.telemetry = telemetry
async def run(self, state):
# EXEMPLO DO TEMPLATE 2: agente de pedidos/e-commerce.
# Substitua por tools reais: consultar_pedido, rastrear_entrega,
# solicitar_devolucao, consultar_nota_fiscal etc.
messages = [
{"role": "system", "content": "Você é especialista em pedidos, entrega e devolução."},
{"role": "user", "content": state.get("sanitized_input") or state["user_text"]},
]
answer = await self.llm.ainvoke(messages)
return {"answer": f"[OrdersAgent] {answer}", "next_state": "ORDER_ACTIVE"}

View File

@@ -0,0 +1,50 @@
router:
fallback_agent: support_agent
confidence_threshold: 0.65
allow_handoff: true
state_policies:
- state: WAITING_ORDER_CONFIRMATION
agent: orders_agent
description: Mantém confirmações curtas no fluxo de pedido.
- state: WAITING_SUPPORT_CONFIRMATION
agent: support_agent
description: Mantém confirmações curtas no fluxo de suporte.
intents:
- name: order_status_delivery
agent: orders_agent
description: Status de pedido, entrega, rastreio, troca, devolução e cancelamento de compra.
priority: 10
keywords:
- pedido
- entrega
- rastreio
- rastrear
- transportadora
- troca
- devolução
- cancelar compra
- nota fiscal
examples:
- Quero saber onde está meu pedido.
- Preciso devolver um produto.
- Minha entrega atrasou.
- name: account_payment_support
agent: support_agent
description: Problemas de login, cadastro, pagamento, cupom e suporte geral.
priority: 20
keywords:
- login
- senha
- cadastro
- pagamento
- cartão
- cupom
- erro no site
- suporte
examples:
- Não consigo entrar na minha conta.
- Meu cupom não funciona.
- O pagamento foi recusado.

View File

@@ -0,0 +1,17 @@
class SupportAgent:
name = "support_agent"
def __init__(self, llm, telemetry=None):
self.llm = llm
self.telemetry = telemetry
async def run(self, state):
# EXEMPLO DO TEMPLATE 2: agente de suporte geral.
# Substitua por tools reais: reset_senha, validar_pagamento,
# consultar_cupom, abrir_ticket etc.
messages = [
{"role": "system", "content": "Você é especialista em suporte de conta, pagamento e uso do site."},
{"role": "user", "content": state.get("sanitized_input") or state["user_text"]},
]
answer = await self.llm.ainvoke(messages)
return {"answer": f"[SupportAgent] {answer}", "next_state": "SUPPORT_ACTIVE"}

View File

@@ -0,0 +1,15 @@
# Template 1 — Telecom: Faturas + Produtos
Este template demonstra dois agentes especializados:
- `BillingAgent`: dúvidas de fatura, cobrança, vencimento e segunda via.
- `ProductAgent`: dúvidas de plano, pacote, VAS, roaming e benefícios.
O roteamento é definido por `config/routing.yaml` e usa:
1. política por estado;
2. keywords/intents;
3. LLM router opcional;
4. fallback.
Use este template quando o atendimento tiver domínios de negócio separados mas precisar manter uma única sessão conversacional.

View File

@@ -0,0 +1,21 @@
"""Exemplo de payload para testar o template Telecom."""
payload_fatura = {
"channel": "web",
"payload": {
"text": "Minha fatura veio muito alta este mês, pode explicar?",
"user_id": "user-001",
"channel_id": "browser-001",
"context": {"msisdn": "5511999999999", "invoice_id": "INV-123"},
},
}
payload_produto = {
"channel": "web",
"payload": {
"text": "Quais serviços VAS estão ativos no meu plano?",
"user_id": "user-001",
"channel_id": "browser-001",
"context": {"msisdn": "5511999999999", "asset_id": "ASSET-123"},
},
}

View File

@@ -0,0 +1,53 @@
# Roteamento enterprise configurável.
# Este arquivo permite adicionar intents/agentes sem alterar o core do framework.
router:
fallback_agent: billing_agent
confidence_threshold: 0.65
allow_handoff: true
state_policies:
- state: WAITING_BILLING_CONFIRMATION
agent: billing_agent
description: Mantém mensagens curtas como "sim" ou "não" no fluxo de fatura.
- state: WAITING_PRODUCT_CONFIRMATION
agent: product_agent
description: Mantém confirmações no fluxo de produtos/serviços.
intents:
- name: billing_invoice_explanation
agent: billing_agent
description: Dúvidas sobre fatura, cobrança, vencimento, segunda via, contestação e valores.
priority: 10
keywords:
- fatura
- conta
- cobrança
- boleto
- vencimento
- segunda via
- contestar
- valor alto
- invoice
examples:
- Minha fatura veio alta.
- Quero entender uma cobrança.
- Preciso da segunda via da conta.
- name: product_services_information
agent: product_agent
description: Dúvidas sobre plano, pacote, produto, serviço, VAS, internet, roaming e benefícios.
priority: 20
keywords:
- plano
- produto
- serviço
- pacote
- internet
- roaming
- vas
- benefício
- assinatura
examples:
- Quais serviços estão ativos no meu plano?
- Quero saber sobre meu pacote de internet.
- Tenho roaming internacional?