mirror of
https://github.com/hoshikawa2/agent_platform_oci.git
synced 2026-07-09 22:04:21 +00:00
First commit
This commit is contained in:
15
templates/shared/template_retail_orders_support/README.md
Normal file
15
templates/shared/template_retail_orders_support/README.md
Normal 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.
|
||||
@@ -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"},
|
||||
},
|
||||
}
|
||||
@@ -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"}
|
||||
50
templates/shared/template_retail_orders_support/routing.yaml
Normal file
50
templates/shared/template_retail_orders_support/routing.yaml
Normal 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.
|
||||
@@ -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"}
|
||||
15
templates/shared/template_telecom_billing_product/README.md
Normal file
15
templates/shared/template_telecom_billing_product/README.md
Normal 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.
|
||||
@@ -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"},
|
||||
},
|
||||
}
|
||||
@@ -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?
|
||||
Reference in New Issue
Block a user