I was also playing a game where I encountered the same problem ( low level cities ), although they were capped under level three. I am playing against a mix of AI difficulties, ranging from ridiculous to hard.
My experience wasn't that bad, but I ran in to problems with the harder AI's having monumental piles of resources and essentially being unnegotiable. They would declare war within three turns of meeting them because the gap in military was percieved as so high. The only way to negate, I found, was to immediately marry in to their family and buy a peace treaty. This seemed to lock the relations level for a time. However, if I lacked the gildar to do this, I was doomed to have the faction declare on me.
Personally, I don't think this is too much of a problem. I chose to have a very difficult game, I shouldn't expect to use diplomacy to get out of it. However, I think the immediacy of the reaction is a bit extreme. Additionally, while I have no problem with a harder AI having access to more resources, I think having an opponent with 130,000 gildar and 10,000 materials and metal skews the AI's interpretation of value to the point where trading for materials is impossible.
Basically, I found that playing against the harder AI's forces the player into a 1v8 campaign; and renders large portions of the game irrelivent.
If the AI had taken advantage of the fact that the building cap had been lifted on cities, I shudder to think how many resources it could have amassed.
Ridiculous AI > Lots of resources > Perception of power > Diplomatic bullying > Constant warfare sans alliances.
I think how the AI uses those resources and views those resources should be segregated into two different values. The "Usable" value is what they have available to them when building units, buildings etc. The "Percieved" value is what tehy have available to them to negotiate, trade and conduct diplomatic portions of the game.
I found that the Ridiculous AI to be horrid at playing defense, and was easily intimidated and goaded into attacking where I wanted.
A) I was able to create an extremely mobile unit and proceeded to run him around inside the AI's territory destroying anything outside the city walls.
[ Sidenote - it should be impossible to recreate an upgrade on a node when that node is occupied by a unit from another faction. Additionally, there should be a cool-down time, or a clean-up period between destruction and recreation. ]
The AI only once attempted to counter this tactic, and did so with a unit with limited mobility. Poor choice of defense, poor choice of unit, poor use of available defenders to discourage me from my tactic.
B ) By using a mountain range I was able to create a large wall with my capital isolated beyond the mountains, with a guardian city outside the mountains. This guardian city was directly in front of the pass, and heavily defended. My capital city, in contrast, was left vacant. The AI would often send armies directly past my guardian city, attempting to make a run for the pass, to reach my capital. Strategically, my capital should have been placed "out of reach" by the AI due to its location. However, the AI was incapable of recognizing the relivence of the position of my guardian city.
As a result, I was able to slaughter several armies in the field without having to send a field army too far from my guardian city, thus risking point C from occuring when I did not wish it to happen.
C) I found that the AI would attempt to strike at my guardian city only when I would move my army stationed there outside the walls, which I would do occasionally to clean up the monsters in my rear. It was good for leveling the champions there, and they harrassed my caravans. However, once I recognized what the AI was doing, I was able to step my army outside the city along the road and simply wait for the attack to come. It would usually happen within two turns. Once the AI crossed the border I could use firebook spells to destroy it without further risk to my own army.
The AI, essentially, lacks the ability to use a scout type unit. The AI should be taught to use auxillary units to check positions before making a move to strike. I would not waste significant amounts of mana destroying one scout; I would attempt to counter it with my own mobile units. As a result, even though this smaller unit would be destroyed, the AI would be able to look past my vacated guardian city to see my army stationed immediately behind it.
In conjunction, the AI should be taught that an army standing within movement range of a city should be regarded as "apart" of that city's defense, unless their unit closer to that city, and could reach it first.
As a result of points B and C, I could count on the AI only attacking where I was ready to receive the attack: either in a mountain pass where I had plenty of time to counter the move, or walking directly up to a trap. Either way, it was rather silly. And that the AI refused to remember that I had ample spells to destroy armies piece meal didn't help either. An all out offensive might have drained me of mana, but by waiting multiple turns between strikes I was able to recoup mana easily, so I never felt threatened.
I think the changes made in 1.19 to eliminate the tile cap from cities is stupid. It ruins the value of an individual city, eliminates the need for city specialization and destroys the purpose of having some upgrades occupying four tiles vs. one. Those upgrades which take up space should be considered costly, and not something that can be built endlessly. I should not be able to put every L5 upgrade and world wonder on one city ... I should be forced to pick which one I want, or squander them by slapping them on a city that could not maximize their potential.