Outils
Les outils permettent à un agent d'agir en cours d'appel. Deux sont intégrés (raccrocher, transférer), et vous pouvez enregistrer les vôtres qui appellent vos propres points d'accès HTTPS.
Comment fonctionnent les outils
En cours d'appel, l'agent décide quand invoquer un outil en fonction de ce que l'appelant a dit et de ce que la description de votre outil indique qu'il fait. Pour un outil personnalisé, Aethex effectue un appel HTTPS serveur-à-serveur vers votre point d'accès et renvoie la réponse dans la conversation :
Toute la boucle s'exécute à l'intérieur de l'appel, avec l'appelant en attente. Gardez votre point d'accès rapide : une réponse en moins d'une seconde est idéale. L'agent obtient toujours une réponse en moins de 9 secondes, et ce délai couvre la résolution DNS, la connexion et la réponse entière.
Outils intégrés
Chaque agent obtient ces deux automatiquement. Ils sont activés par la configuration sur l'agent (end_call_enabled, transfer_phone_number), sans rien enregistrer.
end_callIntégréRaccrocher l'appel proprement.
L'agent dit une ligne de conclusion, attend une courte fenêtre de grâce pour que le TTS d'au revoir se termine, puis se déconnecte. Annulable par barge-in de l'utilisateur pendant la fenêtre de grâce.
Quand déclencher : Après que l'appelant confirme avoir ce dont il a besoin, après un au revoir clair des deux côtés, ou selon vos garde-fous (par ex. appelant abusif).
transfer_to_numberIntégréTransférer l'appel à un agent humain.
Appelle le numéro configuré sur l'agent (`transfer_phone_number`, ou la liste de secours `transfer_phone_numbers` dans l'ordre) pendant que l'appelant entend l'attente, briefe en privé la personne qui décroche avec le résumé de l'agent, puis la met en relation avec l'appelant. Avec `transfer_mode: conference` sur un appel SIP, l'agent reste en ligne, silencieux, et enregistre et transcrit les deux interlocuteurs.
Quand déclencher : Pour les demandes spécifiques au compte que l'agent ne peut pas traiter (remboursements, réclamations de fraude, escalades), ou lorsque l'appelant demande explicitement un humain.
Outils personnalisés
Enregistrez votre propre outil avec un seul POST. Le pipeline l'intègre lors du prochain appel vers cet agent.
Champs
namestringrequisIdentifiant que le LLM utilise lors de l'invocation de l'outil. Minuscules, alphanumériques + underscores. Ne doit pas entrer en collision avec un outil intégré (
end_call,transfer_to_number,voicemail_detected) ; les collisions sont ignorées lors de la construction du pipeline.descriptionstringoptionnelDescription en langage naturel de ce que fait l'outil et quand l'utiliser. Le LLM la lit pour décider s'il doit invoquer l'outil. Soyez précis ; les descriptions vagues font ignorer l'outil par le modèle.
parameters_schemaobject (JSON Schema)optionnelSchéma JSON pour les arguments que le LLM doit produire. Forme standard properties / required. Aethex les transmet au LLM comme une définition de fonction de style OpenAI.
endpoint_urlstring (HTTPS)requisPoint d'accès HTTPS qu'Aethex appelle quand le LLM invoque l'outil. Pour POST (par défaut) : reçoit un corps JSON. Pour GET : reçoit les arguments LLM sous forme de paramètres de requête URL. Doit être accessible depuis notre plage d'IP sortantes. HTTP (sans TLS) est rejeté à la création.
http_methodstringoptionnelMéthode HTTP utilisée pour appeler votre endpoint.
POST(par défaut) envoie les arguments LLM et les identifiants contextuels dans un corps JSON.GETenvoie les arguments LLM comme paramètres de requête URL et les identifiants contextuels comme en-têtesX-Aethex-Agent-Id/X-Aethex-Conversation-Id/X-Aethex-Call-Id— aucun corps n'est envoyé. Les valeurs scalaires sont converties en chaîne ; les valeurs non scalaires (objets, tableaux) sont encodées en JSON par paramètre. Les arguments de requête dépassant 8 Ko au total sont refusés. Tout paramètre déjà présent dans l'endpoint_urla la priorité sur un argument LLM du même nom.headersobjectoptionnelEn-têtes attachés à chaque requête sortante. Utilisez ceci pour l'authentification bearer ou les en-têtes de routage. Stockés côté Aethex ; expurgés des journaux.
tool_typestringoptionnelToujours
"function"pour l'instant. Réservé pour les futurs types d'outils (sources de données, MCP, etc.).
Enregistrer un outil
import os, requests
API_KEY = os.environ["AETHEX_API_KEY"]
BASE_URL = "https://api.aethexai.com/api/v1"
AGENT_ID = "ag_..."
resp = requests.post(
f"{BASE_URL}/agents/{AGENT_ID}/tools",
headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
json={
"name": "lookup_order",
"description": (
"Look up the status of a customer order by order ID. "
"Use when the caller asks about an order or shipment they have placed."
),
"parameters_schema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "The order ID, alphanumeric. Example: A1B2C3.",
},
},
"required": ["order_id"],
},
"endpoint_url": "https://orders.example.com/aethex/lookup",
"headers": {"Authorization": "Bearer your-shared-secret"},
},
)
resp.raise_for_status()
print(resp.json())Contrat du point d'accès
Quand le LLM invoque un outil personnalisé, Aethex appelle votre endpoint_url avec la méthode http_method configurée (POST par défaut). Vous avez 9 secondes pour répondre, résolution DNS, connexion et réponse entière comprises.
Requête POST (par défaut)
{
"arguments": {
"order_id": "A1B2C3"
},
"agent_id": "ag_...",
"conversation_id": "co_...",
"call_id": "ca_..."
}Requête GET
Pour http_method: GET, les arguments LLM sont ajoutés à l'URL comme paramètres de requête et les identifiants contextuels sont transmis comme en-têtes. Aucun corps n'est envoyé. Note : les arguments apparaissent dans les journaux d'accès de votre serveur web.
GET /aethex/lookup?order_id=A1B2C3&in_stock=true&tags=%5B%22prime%22%5D
Host: orders.example.com
X-Aethex-Agent-Id: ag_...
X-Aethex-Conversation-Id: co_...
X-Aethex-Call-Id: ca_...
(no body)Réponse
Retournez un corps JSON avec tout ce que l'agent doit savoir. Aethex injecte la réponse entière dans le LLM comme résultat de l'outil, donc structurez-la pour que le LLM puisse la lire (paires clé/valeur, champs en langage naturel).
{
"status": "shipped",
"tracking_number": "1Z999AA10123456784",
"estimated_delivery": "Tomorrow, 3 PM"
}Erreurs
Toute erreur 4xx, 5xx, expiration du délai ou défaillance réseau est capturée en tant qu'erreur d'outil et transmise au LLM sous la forme d'un objet JSON tel que {"error": "<reason>"}. L'agent la gère alors de manière appropriée (reconnaît l'échec, propose un transfert). L'appel n'est jamais interrompu en raison de l'indisponibilité de votre endpoint. Si un outil échoue, il répond quand même à l'agent : l'appel ne reste jamais bloqué en l'attendant.
Limites et sécurité
Par invocation d'outil, résolution DNS, connexion et réponse entière comprises. Non configurable. À ce moment-là, Aethex cesse d'attendre et ferme la requête. Un GET est signalé à l'agent comme resté sans réponse. Un POST a peut-être déjà atteint votre point d'accès : l'agent est donc informé que son résultat est inconnu et qu'il ne doit pas le répéter. Faites en sorte que vos gestionnaires de POST aillent à leur terme ou annulent leurs effets d'eux-mêmes si la connexion se ferme. Une interruption de l'agent par l'appelant n'annule plus un POST.
Une réponse plus grande est renvoyée à l'agent comme une erreur, sans être tronquée. Les requêtes demandent une réponse non compressée (Accept-Encoding: identity) : une réponse gzip ou deflate est quand même lue, et les encodages empilés ou tout autre encodage sont refusés.
Dispatch unique par invocation : une requête n'est jamais renvoyée une fois que votre point d'accès a pu la recevoir, et les redirections ne sont pas suivies. Le LLM peut réessayer un GET en échec au tour suivant ; un POST dont le résultat est inconnu ne doit pas être répété.
Suivant
Une fois que votre agent a des outils, donnez-lui des connaissances fondées : consultez Base de connaissances pour télécharger des documents de référence que l'agent peut utiliser au moment de l'appel.
