Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Хотел добавить новую фичу в телеграм чат-бота, но т.к код не мой и я в общем-то не шарю в python у меня не получилось.

Используется chatgpt 3.5 turbo, для которой можно задать роль и бот будет с самого начала отвечать так как ему сказано. Но я хотел сделать так чтобы роль можно было задать при запуске бота, к примеру введя команду /role "отвечай от лица Путина".
import csv
import openai
import telebot
import requests

openai.api_key= "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"
bot = telebot.TeleBot("6084229713:AAFJnwxl-efyOnMYNgQ6Y2QXTXFiiuHHYHo")

# Using /shutdown command
@bot.message_handler(commands=['shutdown'])
def shutdown(message):
  OWNER_ID =922649944
  if message.from_user.id == OWNER_ID: # only allow owner to use this command
    exit()


models = {
    'gpt3.5': 'gpt-3.5-turbo',
    'dav3': 'text-davinci-003'
}

current_model = 'gpt3.5'

@bot.message_handler(commands=['model','Model'])
def change_model(message):
  try:
    global current_model
    new_model = message.text.split()[1]
    if new_model in models:
        current_model = new_model
        bot.send_message(message.chat.id, f"Model switched to {current_model}")
    else:
        bot.send_message(message.chat.id, "Invalid model name. Please enter a valid model name.")
  except:
    bot.send_message(message.chat.id, "Something went wrong. Please make sure you enter a valid command and a number dav3 or gpt3.5")

temp = 0.7
@bot.message_handler(commands=['temp'])
def change_temp(message):
  try:
    new_temp = message.text.split()[1]
    if 0 <= float(new_temp) <= 1:
      global temp
      temp = float(new_temp)
      bot.send_message(message.chat.id, f"Temperature changed to {temp}")
    else:
      bot.send_message(message.chat.id, "Invalid temperature value. Please enter a number between 0 and 1.")
  except:
    bot.send_message(message.chat.id, "Something went wrong. Please make sure you enter a valid command and a number between 0 and 1.")
def generate_image(text):
    response = requests.post(
        "https://api.openai.com/v1/images/generations",
        headers={
            "Content-Type": "application/json",
            "Authorization": f"Bearer {openai.api_key}"
        },
        json={
            "model": "image-alpha-001",
            "prompt": text,
            "num_images": 1,
            "size": "512x512",
            "response_format": "url"
        }
    )
    data = response.json()["data"][0]
    url = data["url"]
    return url

@bot.message_handler(commands=['image'])
def generate_image_command(message):
    try:
        input_text = message.text.split(' ', 1)[1]
        image_url = generate_image(input_text)
        bot.send_photo(message.chat.id, image_url)
    except Exception as e:
        bot.reply_to(message, f"Ошибка: {e}")

@bot.message_handler(commands=['help'])
def help(message):
  bot.send_message(message.chat.id, f"""
  У данного бота есть две модели. На данный момент используется {current_model} модель.

  dav3 более слабая языковая модель. Также она не запоминает диалог. gpt3.5 же является моделью, используемой на данный момент в ChatGPT. Также данная модель запоминает диалог, что делает ее незаменимым помошником.

  Чтобы поменять модель, введите /model и после нее gpt3.5 или dav3

  Для dev3 имеется настройка температуры (/temp) от 0 до 1. Чем больше температура, тем менее формальный текст выдает модель. При высоком значении могут быть фактические ошибки!""")





messages = [{"role": "system", "content":   "сюда пишется роль"},]#Пиши в стиле поцана с района, используя слова-парразиты и ненормативную лексику (можно задать тон разговора для бота)
@bot.message_handler(func=lambda _:True)
def handle_message(message):
  if current_model == 'gpt3.5':
    message_dict = {"role": "user", "content": message.text }
    messages.append(message_dict)
    response = openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      messages=messages
    )
    reply = response.choices[0].message.content #response['choices'][0]['text']
    bot.send_message(chat_id=message.from_user.id,text=reply)
    messages.append({"role": "assistant", "content": reply})
  elif current_model == 'dav3':
    response = openai.Completion.create(
    model="text-davinci-003",
    prompt=message.text,
    temperature=temp,       #степень случайности текста
    max_tokens=1000,        #максимум токенов
    top_p=1,                #вероятность выбора следующего слова (0 - только самое вероятное слово)
    frequency_penalty=0.0,  #штраф за повторяющиеся слова
    presence_penalty=0.6,   #штраф за повторяющиеся слова по всему тексту
    stop=[" Human:", " AI:"]#список слов для конца генерации
  )
    reply = response['choices'][0]['text']
    bot.send_message(chat_id=message.from_user.id,text=reply)


  # Код для записи диалогов в файл. Может выдать ошибку при попытке записать спецсимволы или имодзи, поэтому отключил
  # with open("private/messages.csv", "a") as file:
  #   Response = re.sub(r"\n+", "", reply)
  #   writer = csv.writer(file)
  #   writer.writerow([message.text, Response])
  #   print(message.from_user.first_name + ': ' + message.text + '\n')
  #   print('TeleBotAI: '+Response+'\n')
  #   file.close()



if __name__ == "__main__":
    bot.polling()
PythonБоты в telegram+3
ФОТИС 1111
  ·   · 1,7 K
Программист. ML, DataSience, Python  · 4 апр 2023
Вам нужно сделать аналогичный хендлер, который будет обрабатывать комманды '/role'.
Для этого, например, создайте функцию с декоратором:
@bot.message_handler(commands=['role'])
И очень вас прошу, уберите из вопроса личную информацию. А именно ключ от openai и телеграм бота. Уведут жеж!
Я так уже делал, но когда я использовал переменную, значение которой менялось бы командой role, у меня ничего не... Читать дальше