The instruction tuning between 3 and 3.5 was a big deal. If you prompted raw GPT 3 "Tell me a story about a mouse", it was as likely to continue "2) Tell me a story about a cow. 3) Tell me a story about a rabbit" as it was to tell you a story. I tried to use GPT 3 for work and found its only utility was to get over blank page fear by writing something so bad I would fix it in anger.
It was impressive, but not that much. If you had a basic prompt prefix like:
“The following is a conversation between a human and a helpful AI assistant.
Human: [prompt]\n
AI:”
You would get consistent conversational chat, with the main limit being the model’s limited context window, and obviously frontier intelligence at the time.
I played around quite a bit with davinci-003 and conversational systems before ChatGPT. I kept using this format and API for a while, but at least during the ‘free research preview’ era, found it generally smarter than chatgpt. 3.5-turbo was probably the watershed moment where I moved away from completions on base models; to chat completions.
If you’d like to emulate this experience, spin up a base (not instruction tuned) checkpoint of Llama 1; or a more recent base model. You might underestimate how much ‘intelligence’ you can get :)
Back then the API exposed a lot of controls from sampling to logits, so you could specify a custom stop token (some rarely used Unicode); then switch to near-greedy sampling for more reliable “function calls”, etc; and then switch back to sampling for chat.
In the early days, before releasing something with the API, you had to get your use case approved by OpenAI, like the App Store review process.
I remember those days and I'm glad to see another one who's been in the industry since the very beginning :) I was quite sad when davinci-003 was taken away; still remember the green-yellow-orange-red highlights the OpenAI console would make for log probabilities of tokens and all the cool things we could do with a pretrained model.
In my courses, I teach students about that era by using gemma 4 (pretrained) and showing how you can emulate a conversation even on something that wasn't post-trained for chat.
I think the main benefit of instruction finetuning was that the model is less likely to get prompt injections and more likely to follow the specified format?
Pure davinci was easily confused by what was system prompt, user prompt and its own answers.
To be fair, there are still many jailbreaks for instruction tuned models. Surely less than before, but it could be because models got smarter (Claude often "reasons" that something is fishy even if it appears in the prompt or appears like a system prompt).