Never played Celeste so i dont know exactly how it works and looks, but anyways...
All of this will go in the script of the collectible, which will be a
KinematicBody2D lets start with some vars:
var player = [method this node will use to find the player, for example get_node("/root/World/Player"), but you may choose other ways]
var playerpos = player.global_position
note: you could use a
Position2D node in the player node and reference that point instead. This will allow you to make the collectible follow it further above or below, or even add some movement to that point like going up and down too add more "life" to the collectible.
Now, the code will be very simple:
if global_position.distance_to(playerpos) < [minimum distance]:
move_and_slide(playerpos - global_position).normalized() * [multiplier]
"[minimum distance]" will be a number, which as you may have guessed marks how close the collectible with be when it stops following.
"[multiplier]" will also be a number which changes the speed of the moving, so play around until you find one that works for you
Let me know how it goes!