I've had better results separating these concerns rather than trying to stuff it all into one prompt. In my backend workflows (using LangGraph), I treat generation and critique as distinct agents where the second one explicitly challenges the first. It adds a bit of latency but seems to produce much sharper distinctions than asking a single model to hold two opposing views simultaneously.