Outils et Function Calling en Vocal
Donner des capacites a votre agent vocal
Un assistant vocal qui ne peut que discuter a un interet limite. La puissance du Voice Agent reside dans sa capacite a executer des actions pendant la conversation : consulter une base de donnees, effectuer une recherche web, appeler une API externe, ou interagir avec des serveurs MCP.
Les types d’outils disponibles
Le Voice Agent supporte cinq categories d’outils :
Recherche web
{ "type": "web_search" }
L’agent peut interroger le web en temps reel pour obtenir des informations actualisees. Utile pour les questions factuelles, les actualites ou les donnees changeantes.
Recherche sur X
{
"type": "x_search",
"allowed_x_handles": ["@corsen_ai"]
}
Permet de chercher des publications sur la plateforme X. Le parametre allowed_x_handles restreint optionnellement la recherche a certains comptes.
Recherche de fichiers (Collections)
{
"type": "file_search",
"vector_store_ids": ["vs_abc123"],
"max_num_results": 10
}
Interroge des collections de documents vectorises pour trouver des informations dans votre base documentaire.
Fonctions personnalisees
{
"type": "function",
"name": "verifier_commande",
"description": "Verifie le statut d'une commande client",
"parameters": {
"type": "object",
"properties": {
"numero_commande": {
"type": "string",
"description": "Le numero de commande au format CMD-XXXX"
}
},
"required": ["numero_commande"]
}
}
Les fonctions personnalisees vous permettent de connecter l’agent a n’importe quel systeme : CRM, ERP, calendrier, base de donnees interne.
Serveurs MCP
{
"type": "mcp",
"server_url": "https://mcp.example.com/sse",
"server_label": "Mon serveur MCP"
}
Le protocole MCP (Model Context Protocol) permet de connecter l’agent a des serveurs d’outils standardises.
Le cycle d’execution d’une fonction
Quand l’agent decide d’utiliser une fonction, le flux est le suivant :
- Le serveur envoie
response.function_call_arguments.deltaavec les arguments en streaming - Une fois complet,
response.function_call_arguments.donearrive avec lecall_idet les arguments finaux - Votre application execute la fonction avec ces arguments
- Vous renvoyez le resultat via
conversation.item.create:
{
"type": "conversation.item.create",
"item": {
"type": "function_call_output",
"call_id": "call_abc123",
"output": "{\"statut\": \"expediee\", \"date_livraison\": \"2026-04-05\"}"
}
}
- Vous envoyez
response.createpour que l’agent integre le resultat dans sa reponse vocale
Appels de fonctions paralleles
Le modele peut decider d’appeler plusieurs fonctions en meme temps. Dans ce cas :
- Vous recevez plusieurs
function_call_arguments.doneavec descall_iddifferents - Executez toutes les fonctions (en parallele si possible)
- Soumettez tous les resultats avec autant de
conversation.item.create - Envoyez un seul
response.createa la fin
// Recevoir et executer toutes les fonctions
const results = await Promise.all(
pendingCalls.map(call => executeFunction(call))
);
// Soumettre tous les resultats
for (const result of results) {
ws.send(JSON.stringify({
type: "conversation.item.create",
item: {
type: "function_call_output",
call_id: result.callId,
output: JSON.stringify(result.data)
}
}));
}
// Declencher la reponse
ws.send(JSON.stringify({ type: "response.create" }));
Bonnes pratiques pour les outils vocaux
- Timeout court : les utilisateurs n’attendent pas plus de 3 a 5 secondes en conversation vocale. Si votre fonction est lente, envoyez un message intermediaire
- Resultats concis : renvoyez des donnees structurees mais pas trop volumineuses. L’agent doit les synthetiser vocalement
- Descriptions claires : la description de chaque fonction aide le modele a decider quand l’utiliser. Soyez precis
- Gestion des erreurs : renvoyez un message d’erreur clair dans
outputplutot que de ne rien renvoyer
Points cles a retenir
- Le Voice Agent supporte cinq types d’outils : web search, X search, file search, fonctions et MCP
- Le cycle d’un appel de fonction passe par la reception des arguments, l’execution, le renvoi du resultat et le declenchement de la reponse
- Les appels paralleles sont possibles : executez tout, soumettez tout, puis un seul
response.create - En vocal, le temps de reponse des fonctions est critique : visez moins de 3 secondes