Контекст вы должны сохранять, а передавать в следующем запросе через роли.
Простое объяснение тут, пример оттуда:
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages = [
# system - системная базовая роль, грубо говоря это сама база "Я" gpt
{"role": "system", "content" : "You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.\nKnowledge cutoff: 2021-09-01\nCurrent date: 2023-03-02"},
# user - роль юзера кто задаёт вопросы
{"role": "user", "content" : "How are you?"},
# Асистент одна из ролей, можно задать ранее в запросе, типа Act as bla blah
# либо он поймёт что должен быть именно ассистентом смотрите оп ответу в API
{"role": "assistant", "content" : "I am doing well"},
# Снова юзер
{"role": "user", "content" : "How long does light take to travel from the sun to the eart?"}]
)
Ну и примерно так строишь цепочку. Ну и да, ресурсо(читай денежно) пожирающе, а что делать. Значит приносить $$ должно больше чем тратится.