Funcional

This commit is contained in:
2026-04-28 11:18:10 -03:00
parent d3b59cb6d6
commit a3541caa07
4 changed files with 96 additions and 24 deletions

View File

@@ -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

View File

@@ -3,5 +3,7 @@ define user express input
define flow main
user express input
execute executar_pipeline_validacoes
bot say $nemo_response

View File

@@ -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))

View File

@@ -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": [],
}
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))