Как можно определить точное количество токенов ChatGPT, необходимых для обработки вопроса, перед отправкой его на API?

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']
  • 30 сентября 2023 г. 8:47
Ответы на вопрос 2
Для определения точного количества токенов 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 токенов. Если количество токенов превышает лимит, можно выдать сообщение пользователю о необходимости переформулировать вопрос.
Можно использовать библиотеку tiktoken от OpenAI для подсчета количества токенов в тексте. Такая функция будет полезна, если вы работаете с моделью gpt-3.5-turbo. Пример использования:

```
import tiktoken

def get_token_count(text):
    encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
    return len(encoding.encode(text))
```

Вызов функции `get_token_count` вернет количество токенов в тексте.
Похожие вопросы