Routage d’intention
Classe les requêtes entrantes et route chacune vers le gestionnaire optimal : logique déterministe, LLM spécialisé ou humain.
Toutes les requêtes utilisateur n’ont pas besoin du même type de gestionnaire. Certaines se règlent par une simple requête en base de données. D’autres ont besoin d’un LLM avec un contexte métier précis. D’autres encore ont besoin d’un humain. TypeSafe peut se placer devant toutes ces options comme un classifieur rapide et bon marché qui détermine quel gestionnaire invoquer.
Exemple : routage du service client
Imagine que tu construis un système de service client. Des messages arrivent et doivent être routés vers le bon gestionnaire. Plutôt que de faire passer chaque message par un LLM coûteux pour déterminer le type de requête, tu classes d’abord, puis tu routes en conséquence.
%%{init: {"fontFamily": "Inter, sans-serif", "flowchart": {"rankSpacing": 35, "wrappingWidth": 300, "subGraphTitleMargin": {"top": 12, "bottom": 36}}}}%%
flowchart LR
message["customer message"]
subgraph req["TypeSafe evaluates questions<br/>in parallel"]
direction TB
intent["<b>Choice:</b> intent"]
complexity["<b>Score:</b> complexity"]
%% Invisible links stack the questions; they are answered in parallel.
intent ~~~ complexity
end
message -- "one request<br/>message + 2 questions" --> req
req -- "one response<br/>2 answers with<br/>confidence" --> confidence{"<b>intent confidence<br/>≥ 0.5?</b><br/>your code"}
confidence -- "no" --> human["human agent"]
confidence -- "yes" --> route{"<b>which intent?</b><br/>"}
route -- "order_status" --> order["order lookup<br/>deterministic code"]
route -- "product_question" --> product["product specialist LLM"]
route -- "return_exchange" --> returns["returns specialist LLM"]
route -- "complaint" --> escalate{"<b>complexity > 1<br/>or its confidence < 0.5?</b><br/>"}
escalate -- "yes" --> human
escalate -- "no" --> complaint["complaint resolution LLM"]
Étape 1 : classer l’intention et la complexité
{
"intent": {
"type": "choice",
"instructions": "The primary intent of this customer message",
"criteria": {
"order_status": "Asking about an existing order",
"product_question": "Asking about a product before buying",
"return_exchange": "Wants to return or exchange something",
"complaint": "Unhappy with experience, wants resolution"
}
},
"complexity": {
"type": "score",
"instructions": "How complex is this request to resolve",
"criteria": [
"Simple lookup or standard procedure",
"Requires some judgment or multi-step process",
"Unusual situation, edge case, or escalation needed"
]
}
}Étape 2 : router vers le gestionnaire optimal
routing.py
def route_ticket(ticket_id, response):
intent = response.answers["intent"]
complexity = response.answers["complexity"]
if intent.confidence < 0.5:
# If we don't have enough confidence to classify, route to a human agent
return route_to_human_agent(ticket_id)
if intent.choice == "order_status":
handle_order_status(ticket_id)
elif intent.choice == "product_question":
handle_with_llm(ticket_id, PRODUCT_SPECIALIST)
elif intent.choice == "return_exchange":
handle_with_llm(ticket_id, RETURNS_SPECIALIST)
elif intent.choice == "complaint":
low_confidence = complexity.confidence < 0.5
# A higher complexity.score leans toward the "escalation needed" end of the scale.
if complexity.score > 1 or low_confidence:
# Too complex for safe automation, or we're not sure about the complexity; route to a human.
route_to_human_agent(ticket_id)
else:
handle_with_llm(ticket_id, COMPLAINT_RESOLUTION)
Une intention route vers du code déterministe, sans aucun LLM. Deux routent vers des LLM spécialisés différents, chacun chargé d’un contexte différent. Une autre utilise le score de complexité pour décider entre un LLM et un humain. TypeSafe gère toute la classification en un seul appel rapide ; les ressources coûteuses ne sont invoquées que pour les requêtes qui en ont réellement besoin.
Remarque la vérification supplémentaire de confiance sur le score de complexité. Comme expliqué dans Confiance, il est toujours important de tenir compte de la signification d’une faible confiance dans le contexte du système et de l’enjeu de la décision.