Для определения точного количества токенов ChatGPT, необходимых для обработки вопроса, вы можете использовать функцию `count_tokens`, которая будет подсчитывать количество токенов в тексте. В данном случае, функция делает запрос к OpenAI API с пустым `prompt` и параметром `max_tokens=0`, чтобы получить общее количество токенов без генерации текста.
Ваш код может выглядеть примерно так:
```python
import openai
import getpass
import os
sysprefs = 'Ты - старательный помошник. Старайся дать максимально точный ответ на заданный пользователем вопрос.'
def askGPT(question):
openai_key = getpass.getpass("OpenAI API Key:")
os.environ["OPENAI_API_KEY"] = openai_key
openai.api_key = openai_key
tokens = count_tokens(sysprefs + question)
if tokens > 4096:
print('Превышен лимит токенов. Пожалуйста, переформулируйте ваш вопрос.')
return
result = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": sysprefs},
{"role": "user", "content": question}
])
message = result['choices'][0]['message']['content']
print('ChatGPT: ', message)
question = input('Вы: ')
askGPT(question)
def count_tokens(text):
response = openai.Completion.create(
engine="text-davinci-003",
prompt=text,
max_tokens=0)
return response['usage']['total_tokens']
```
Вы можете вызывать функцию `count_tokens` перед отправкой вопроса на API и проверять, чтобы количество токенов не превышало лимит в 4096 токенов. Если количество токенов превышает лимит, можно выдать сообщение пользователю о необходимости переформулировать вопрос.