How to prevent enemy from pushing the player once they collide with it

Sometimes the enemy doesn’t push all the way through. Sometimes they even stop nearby. But because of the inconsistent AI calculations, the enemy keeps pushing through when they are chasing the player at specific angles. If I detect it with rigidbody collisions, the enemy just bounces frantically around the player. Is there any good way to solve this problem reliably?

That depends on what you use for collision.
I would recommend that you tell the enemy to stop once it comes in range of the player.

void Update() {
    ai.isStopped = Vector3.Distance(ai.position, player.position) < someThreshold;