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:
|
||||
- type: main
|
||||
engine: openai
|
||||
model: gpt-5
|
||||
|
||||
colang_version: "1.0"
|
||||
|
||||
rails:
|
||||
dialog:
|
||||
input:
|
||||
flows:
|
||||
- main
|
||||
@@ -3,5 +3,7 @@ define user express input
|
||||
|
||||
define flow main
|
||||
user express input
|
||||
|
||||
execute executar_pipeline_validacoes
|
||||
|
||||
bot say $nemo_response
|
||||
@@ -42,6 +42,7 @@ def add_trace(trace, label, result):
|
||||
|
||||
|
||||
def executar_pipeline_validacoes(context: dict):
|
||||
print("🔥🔥🔥 ACTION FOI EXECUTADA")
|
||||
payload = extrair_payload(context)
|
||||
|
||||
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:
|
||||
r_cmp = avaliar_qualidade_resposta(final_response)
|
||||
r_cmp = avaliar_qualidade_resposta(input_text, final_response)
|
||||
add_trace(trace, "CMP", r_cmp)
|
||||
if not r_cmp.allowed:
|
||||
failures.append(("CMP", r_cmp.reason))
|
||||
|
||||
@@ -22,6 +22,7 @@ rails = build_rails()
|
||||
|
||||
|
||||
def executar_atendimento(user_input: str, context: dict):
|
||||
|
||||
request_id = str(uuid.uuid4())
|
||||
|
||||
payload = {
|
||||
@@ -30,35 +31,103 @@ def executar_atendimento(user_input: str, context: dict):
|
||||
"context": context or {},
|
||||
}
|
||||
|
||||
response = rails.generate(
|
||||
messages=[
|
||||
# 🔥 chama direto seu pipeline
|
||||
executar_pipeline_validacoes({
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": json.dumps(payload, ensure_ascii=False),
|
||||
"content": json.dumps(payload)
|
||||
}
|
||||
]
|
||||
)
|
||||
})
|
||||
|
||||
result = PIPELINE_RESULTS.pop(request_id, None)
|
||||
|
||||
if result:
|
||||
return result
|
||||
|
||||
return {
|
||||
"allowed": False,
|
||||
"label": "PROBLEMA",
|
||||
"reason": "Pipeline não retornou resultado estruturado",
|
||||
"response": response,
|
||||
"trace": [],
|
||||
}
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
user_input = "quero cancelar VAS"
|
||||
|
||||
context = {
|
||||
"ajuste_valor": 2000,
|
||||
"resposta_llm": "Cancelamento realizado",
|
||||
}
|
||||
def rodar_teste(nome, user_input, context):
|
||||
print("\n" + "="*60)
|
||||
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