NPC following player

You could try recording the position of the player every unit of time, and then tell the NPC to move to that position. Also, to prevent the npc from trying to push the player around while the player is standing still, I also suggest implementing a magnitude check to see whether the NPC is far enough from the player before it starts moving.

Something like this:

local playerPos = torsoPart.Position
while true do
    wait(timeUnit)
    if (npc.Torso.Position - playerPos.Position).magnitude > distance then
        npc.Humanoid:MoveTo(playerPos)
        playerPos = torsoPart.Position
    end
end