Outils de recherche en base paramétrés
Un outil de recherche à la demande permettra au LLM de trouver des devises par nom ou par code sans charger la liste complète. Utilisez une requête paramétrée (espace réservé ?) pour éviter l'injection dans l'invite, et appliquez une limite de lignes afin que les réponses restent bornées.
Cet exercice fait partie du cours
<cours>Introduction au Model Context Protocol (MCP)</cours>Instructions de l’exercice
- Définissez un outil nommé
lookup_currencies()qui trouve les lignes decurrenciesoùnameoucodecontientprefix(insensible à la casse). - Utilisez une requête SQL paramétrée pour insérer
prefixdans les espaces réservés?; utilisezLIMIT 50pour limiter le nombre de lignes renvoyées.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Add lookup_currencies(prefix): find rows where name or code contains prefix
@mcp.____()
def ____(____: str) -> str:
"""Find currencies whose code or name contains the given prefix."""
try:
# Use parameterized query and LIMIT 50
cursor = conn.execute(
"SELECT code, name FROM currencies WHERE name LIKE ? OR code LIKE ? LIMIT ____",
(f"%{____}%", f"%{____}%")
)
rows = cursor.fetchall()
return "\n".join(f"{row['code']} - {row['name']}" for row in rows)
except sqlite3.Error as e:
return f"Database error: {e}"
print(lookup_currencies("Euro"))