Unfortunately, game engine is not so generous on giving ancillaries, so I advice 2 things :
1-Put different generals who has no experience (no or a few ancillary) to the cities that triggers them or send lots of them to that city to increase the chance to get the ancillary.
2-use this code:
give_ancillary "character name" "catamite" gives a spy or assassin this ancillary= +1 subterfuge
give_ancillary "character name" "courtesan(ancillary)" gives a spy or assassin this ancillary= +1 subterfuge
You should check names as you know ethnic system is very complex in EB.