始める無料で始める

パラメータ化されたデータベース検索ツール

オンデマンドの検索ツールを使うと、LLM がリスト全体を読み込まずに、名前やコードで通貨を検索できるようになります。プロンプトインジェクションを防ぐためにパラメータ化クエリ(プレースホルダー ?)を使用し、レスポンスが肥大化しないよう行数に上限を設けましょう。

この演習はコースの一部です

Model Context Protocol(MCP)入門

コースを見る

演習の手順

  • currencies テーブルの中から、name または codeprefix が含まれる行(大文字・小文字を区別しない)を検索する lookup_currencies() というツールを定義してください。
  • パラメータ化 SQL クエリを使って prefix? プレースホルダーに挿入し、返す行数を LIMIT 50 で制限してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# 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"))
コードを編集して実行