There isn't a way to hide internal comments on a ticket. All agent roles will be able to see internal comments if they have access to the ticket. The only way to ensure that a user would only see public comments is to set their role to end-user.
As a workaround, use the Linked Ticket app that allows you to create child tickets from a parent ticket. You can assign the ticket to a group that the agent doesn't have access to (see the article: How can I prevent agents in one group from seeing another group's tickets?).