My head is smoking, the basics please again.

So AAIController is an Actor, yes, but perhaps more importantly it’s an AController. In the docs these are described as “Non-physical controllers” which attached to an APawn (not just any AActor) by “possessing” them. So a particular character (pawn) could be controlled by an AIController or a PlayerController - they’re interchangeable, and can even change at runtime.

For your particular case, in the AController docs you’ll find the GetPawn() function, which should return the pawn (actor) which is actually being controlled.