mirror of
https://github.com/hoshikawa2/nemo_guardrails_configuration.git
synced 2026-07-09 17:04:20 +00:00
Funcional
This commit is contained in:
@@ -1,11 +1,11 @@
|
|||||||
|
colang_version: "1.0"
|
||||||
|
|
||||||
models:
|
models:
|
||||||
- type: main
|
- type: main
|
||||||
engine: openai
|
engine: openai
|
||||||
model: gpt-5
|
model: gpt-5
|
||||||
|
|
||||||
colang_version: "1.0"
|
|
||||||
|
|
||||||
rails:
|
rails:
|
||||||
dialog:
|
input:
|
||||||
flows:
|
flows:
|
||||||
- main
|
- main
|
||||||
@@ -3,5 +3,7 @@ define user express input
|
|||||||
|
|
||||||
define flow main
|
define flow main
|
||||||
user express input
|
user express input
|
||||||
|
|
||||||
execute executar_pipeline_validacoes
|
execute executar_pipeline_validacoes
|
||||||
|
|
||||||
bot say $nemo_response
|
bot say $nemo_response
|
||||||
@@ -42,6 +42,7 @@ def add_trace(trace, label, result):
|
|||||||
|
|
||||||
|
|
||||||
def executar_pipeline_validacoes(context: dict):
|
def executar_pipeline_validacoes(context: dict):
|
||||||
|
print("🔥🔥🔥 ACTION FOI EXECUTADA")
|
||||||
payload = extrair_payload(context)
|
payload = extrair_payload(context)
|
||||||
|
|
||||||
request_id = payload.get("request_id") or str(uuid.uuid4())
|
request_id = payload.get("request_id") or str(uuid.uuid4())
|
||||||
@@ -108,7 +109,7 @@ def executar_pipeline_validacoes(context: dict):
|
|||||||
# =========================
|
# =========================
|
||||||
|
|
||||||
if avaliar_qualidade_resposta is not None:
|
if avaliar_qualidade_resposta is not None:
|
||||||
r_cmp = avaliar_qualidade_resposta(final_response)
|
r_cmp = avaliar_qualidade_resposta(input_text, final_response)
|
||||||
add_trace(trace, "CMP", r_cmp)
|
add_trace(trace, "CMP", r_cmp)
|
||||||
if not r_cmp.allowed:
|
if not r_cmp.allowed:
|
||||||
failures.append(("CMP", r_cmp.reason))
|
failures.append(("CMP", r_cmp.reason))
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ rails = build_rails()
|
|||||||
|
|
||||||
|
|
||||||
def executar_atendimento(user_input: str, context: dict):
|
def executar_atendimento(user_input: str, context: dict):
|
||||||
|
|
||||||
request_id = str(uuid.uuid4())
|
request_id = str(uuid.uuid4())
|
||||||
|
|
||||||
payload = {
|
payload = {
|
||||||
@@ -30,35 +31,103 @@ def executar_atendimento(user_input: str, context: dict):
|
|||||||
"context": context or {},
|
"context": context or {},
|
||||||
}
|
}
|
||||||
|
|
||||||
response = rails.generate(
|
# 🔥 chama direto seu pipeline
|
||||||
messages=[
|
executar_pipeline_validacoes({
|
||||||
|
"messages": [
|
||||||
{
|
{
|
||||||
"role": "user",
|
"role": "user",
|
||||||
"content": json.dumps(payload, ensure_ascii=False),
|
"content": json.dumps(payload)
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
)
|
})
|
||||||
|
|
||||||
result = PIPELINE_RESULTS.pop(request_id, None)
|
result = PIPELINE_RESULTS.pop(request_id, None)
|
||||||
|
|
||||||
if result:
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
return {
|
|
||||||
"allowed": False,
|
|
||||||
"label": "PROBLEMA",
|
|
||||||
"reason": "Pipeline não retornou resultado estruturado",
|
|
||||||
"response": response,
|
|
||||||
"trace": [],
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
user_input = "quero cancelar VAS"
|
|
||||||
|
|
||||||
context = {
|
def rodar_teste(nome, user_input, context):
|
||||||
"ajuste_valor": 2000,
|
print("\n" + "="*60)
|
||||||
"resposta_llm": "Cancelamento realizado",
|
print(f"🧪 TESTE: {nome}")
|
||||||
|
print("-"*60)
|
||||||
|
print("INPUT:", user_input)
|
||||||
|
print("CONTEXT:", context)
|
||||||
|
|
||||||
|
result = executar_atendimento(user_input, context)
|
||||||
|
|
||||||
|
print("\n📌 RESULTADO FINAL:")
|
||||||
|
print(result)
|
||||||
|
|
||||||
|
print("\n🔍 TRACE:")
|
||||||
|
for step in result.get("trace", []):
|
||||||
|
print(step)
|
||||||
|
|
||||||
|
print("="*60)
|
||||||
|
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# ✅ TESTE 1 - OK (CONFORME)
|
||||||
|
# =========================
|
||||||
|
rodar_teste(
|
||||||
|
"OK - Cancelamento válido",
|
||||||
|
"quero cancelar VAS",
|
||||||
|
{
|
||||||
|
"ajuste_valor": 20,
|
||||||
|
"resposta_llm": "Cancelamento realizado com sucesso."
|
||||||
}
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# ❌ TESTE 2 - TOXICIDADE
|
||||||
|
# =========================
|
||||||
|
rodar_teste(
|
||||||
|
"TOX - Linguagem ofensiva",
|
||||||
|
"quero cancelar VAS seu lixo",
|
||||||
|
{
|
||||||
|
"ajuste_valor": 20,
|
||||||
|
"resposta_llm": "Cancelamento realizado."
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# ❌ TESTE 3 - ALÇADA
|
||||||
|
# =========================
|
||||||
|
rodar_teste(
|
||||||
|
"ADJ - Valor acima da alçada",
|
||||||
|
"quero cancelar VAS",
|
||||||
|
{
|
||||||
|
"ajuste_valor": 2000,
|
||||||
|
"resposta_llm": "Cancelamento realizado."
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# ❌ TESTE 4 - GROUNDEDNESS
|
||||||
|
# =========================
|
||||||
|
rodar_teste(
|
||||||
|
"GND - Resposta não confiável",
|
||||||
|
"quero cancelar VAS",
|
||||||
|
{
|
||||||
|
"ajuste_valor": 20,
|
||||||
|
"resposta_llm": "O cancelamento ativa cashback infinito e crédito ilimitado."
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# ⚠️ TESTE 5 - MÚLTIPLOS PROBLEMAS
|
||||||
|
# =========================
|
||||||
|
rodar_teste(
|
||||||
|
"MULTI - TOX + ADJ + GND",
|
||||||
|
"quero cancelar VAS seu inútil",
|
||||||
|
{
|
||||||
|
"ajuste_valor": 5000,
|
||||||
|
"resposta_llm": "Você ganha benefícios ilimitados com esse cancelamento."
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
print(executar_atendimento(user_input, context))
|
|
||||||
Reference in New Issue
Block a user