I don’t think it really matters all that much, apart from assistant messages
the LLM will be more reluctant to disagree with assistant messages, and sometimes ignore the last message entirely if it’s an assistant message (in some models and circumstances).
But you didn’t ask that.
I don’t think there’s much difference between user and system messages, you can use user messages as system messages and vice versa if you frame them right.
I use system messages to tell the model how to interpret user messages (context, nuance, etc), and user messages to tell the model what to do, but that’s probably just personal preference at this point.
I don’t think this is related to your format at all. There’s two things to keep in mind:
-
telling a model to NOT do something will more likely than not encourage to do it anyways. Better not even give it any ideas in the first place
-
some models have a certain style of doing certain things. Some models are absolutely adamant on including preachy disclaimers or ensuring that every story has a happy ending. Prompting around that is possible, but it can be tough and eats into your reliability.
dealing with nr 1 is fairly straight forward: you need to critically examine your prompt and think if there is any verbiage that allows you to express yourself without negation. Is there a name for a cold pitch without a CTA? I don’t know, but if it’s a well known tactic that has a name, use that.
Prompt engineering for GPT-3/4 is an additive manufacturing process, not a subtractive one.
If you can’t overcome your issues with nr1 and are certain that you have a nr2 issue, there’s ways around that too but it might involve using a schema and parsing your output. We have a thread about it here: How to stop models returning "preachy" conclusions. But I’d suggest working on nr1 before resorting to this stuff.
Let us know how it works out!