Documentación

Enrutamiento con gating por confianza

Usa la confianza como un segundo eje. La respuesta te dice qué; la confianza te dice si actuar.

Una de las características más potentes de TypeSafe es la confianza. Si aplicas el gating de decisiones sobre la confianza de forma intencionada, puedes construir sistemas que sean a la vez fiables y seguros.

Ejemplo: comandos bancarios por voz

Imagina que estás construyendo una interfaz bancaria por voz para permitir que el usuario interactúe con su cuenta verbalmente. Aunque siempre quieres tener una confianza razonable al interpretar la intención del usuario, algunas acciones son más arriesgadas que otras y, por lo tanto, exigen un umbral de confianza más alto.

%%{init: {"fontFamily": "Inter, sans-serif", "flowchart": {"rankSpacing": 35, "wrappingWidth": 300, "subGraphTitleMargin": {"top": 12, "bottom": 36}}}}%%
flowchart LR
    command["voice banking command"]

    subgraph req["TypeSafe evaluates<br/>the question"]
        intent["<b>Choice:</b> intent"]
    end

    command -- "one request<br/>command + intent<br/>question" --> req
    req -- "one response<br/>intent answer +<br/>confidence" --> gate{"<b>confidence high enough?</b><br/>your code"}
    gate -- "below 0.6<br/>or other intent" --> human["send to a support agent"]
    gate -- "check_balance<br/>at least 0.6" --> balance["show the balance"]
    gate -- "approve_transfer<br/>0.6 to 0.85" --> confirm["ask the user to confirm"]
    gate -- "approve_transfer<br/>above 0.85" --> approve["approve the transfer"]

Paso 1: determina la intención del usuario

questions
{
  "intent": {
    "type": "choice",
    "instructions": "What action is the user requesting?",
    "criteria": {
      "check_balance": "Check the balance of an account",
      "approve_transfer": "Approve the pending transfer request",
      "other": "Something else"
    }
  }
}

Paso 2: enrutamiento con gating por confianza

action = response.answers["intent"]

# Below 0.6 confidence on any action, route to a human
if action.confidence < 0.6:
    route_to_support_agent(account_id)

elif action.choice == "check_balance":
    # Low stakes. 0.6 confidence is sufficient.
    show_balance(account_id)

elif action.choice == "approve_transfer":
    if action.confidence > 0.85:
        # High stakes, but high confidence. Safe to act automatically.
        approve_transfer(account_id)
    else:
        # High stakes, moderate confidence. Verify intent first.
        ask_user_to_confirm("Just to confirm: you would like to approve this transfer, is that correct?")

else:
    route_to_support_agent(account_id)

El umbral mínimo de 0.6 atrapa todo aquello sobre lo que el modelo está genuinamente inseguro. Por encima de ese mínimo, cada tipo de acción tiene su propio umbral según las consecuencias de actuar sobre una clasificación errónea. Consultar un saldo con 0.6 está bien porque el peor caso es que el usuario tenga que escuchar la lectura del saldo. Pero aprobar una transferencia requiere una confianza muy alta (>0.85); de lo contrario, el sistema debería pedir al usuario que confirme.

Consulta Confidence para más detalles sobre cómo pensar en la confianza en tus sistemas.