Parametrizované nástroje pro vyhledávání v databázi
Nástroj pro vyhledávání na vyžádání umožní LLM prohledávat měny podle názvu nebo kódu, aniž by musel načítat celý seznam. Použij parametrizovaný dotaz (zástupný znak ?) jako ochranu před prompt injection a nastav limit řádků, aby odpovědi zůstaly přiměřeně velké.
Toto cvičení je součástí kurzu
Introduction to Model Context Protocol (MCP)
Pokyny k cvičení
- Definuj nástroj
lookup_currencies(), který v tabulcecurrenciesvyhledá řádky, kdenamenebocodeobsahuje hodnotuprefix(bez ohledu na velikost písmen). - Pomocí parametrizovaného SQL dotazu vlož
prefixna místo zástupných znaků?; použijLIMIT 50pro omezení počtu vrácených řádků.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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"))