Вы должны войти, чтобы создавать сообщения и темы.
Сохранение контента при переписке с ChatGPT
Валерий@amarok
240 Сообщений
Pro
#1 · 10.09.2023, 09:04
Цитата: Валерий от 10.09.2023, 09:04Доброго всем времени суток!
Пишу Telegram бота (для личных целей) для общения с ChatGPT, но никак не могу разобраться как сохранять контекст беседы. Подскажите, пожалуйста, что я делаю не так? кусок кода прилагаю:
[spoiler title="код"]''' ########################################## ''' ''' Создать статью по пунктам / Create Writing ''' class CreateWriting(StatesGroup): writing = State() @dp.message_handler(filters.Text(equals="Создать статью по пунктам", ignore_case = True)) async def CreateWriting_begin(message: types.Message): if debug: print("Создать статью по пунктам") await message.answer("Выбрано <b><i>Создание статьи по пунктам</i></b>. Отправьте запрос", parse_mode = types.ParseMode.HTML, reply_markup = kb_RushGPT_bot_Writing) await CreateWriting.writing.set() @dp.message_handler(filters.Text(equals="Закончить написание статьи", ignore_case = True), state = "*") async def CreateWriting_finish(message: types.Message, state: FSMContext): if debug: print("Закончить написание статьи") await message.answer("Создание статьи окончено.", reply_markup = kb_RushGPT_bot) fileName = "users/h" + str(message.from_user.id) + ".txt" with open (fileName, "w", encoding='utf-8') as file1: file1.write("") await state.finish() @dp.message_handler(state = CreateWriting.writing) async def CreateWriting_continue(message: types.Message, state: FSMContext): if debug: print("Продолжить написание статьи") await message.reply(random.choice(msgAnswer)) if not os.path.exists("users/h" + str(message.from_user.id) + ".txt"): fileName = "users/h" + str(message.from_user.id) + ".txt" with open (fileName, "w", encoding='utf-8') as file1: file1.write("") msg = message.text response = await openai.ChatCompletion.acreate( temperature = 0.7, model = engine, messages = [ {"role": "assistant", "content": str(open("users/h" + str(message.from_user.id) + ".txt", "r")) + msg} ] ) fileName = "users/h" + str(message.from_user.id) + ".txt" with open (fileName, "a+", encoding='utf-8') as file1: file1.write(msg.strip() + "\n") response_tokens = response["usage"]["completion_tokens"] msg = response.choices[0].message.content if response_tokens > 4096: await message.answer(f"Текст получился очень большой ({response_tokens} символа(ов)), но я прикладываю его в виде файла...", reply_markup = kb_RushGPT_bot) fileName = "users/a" + str(message.from_user.id) + "_" + str(datetime.datetime.today().strftime("%Y-%m-%d-%H-%M-%S")) + ".txt" with open (fileName, "w", encoding='utf-8') as file1: file1.write(msg) await bot.send_document(message.chat.id, document = open(fileName, 'rb')) else: await message.answer(msg, reply_markup = kb_RushGPT_bot) await message.answer("Нужно что-то добавить?", reply_markup = kb_RushGPT_bot_Writing) await CreateWriting.writing.set()
[/spoiler]
Доброго всем времени суток!
Пишу Telegram бота (для личных целей) для общения с ChatGPT, но никак не могу разобраться как сохранять контекст беседы. Подскажите, пожалуйста, что я делаю не так? кусок кода прилагаю:
код
''' ########################################## '''
''' Создать статью по пунктам / Create Writing '''
class CreateWriting(StatesGroup):
writing = State()
@dp.message_handler(filters.Text(equals="Создать статью по пунктам", ignore_case = True))
async def CreateWriting_begin(message: types.Message):
if debug: print("Создать статью по пунктам")
await message.answer("Выбрано <b><i>Создание статьи по пунктам</i></b>. Отправьте запрос", parse_mode = types.ParseMode.HTML, reply_markup = kb_RushGPT_bot_Writing)
await CreateWriting.writing.set()
@dp.message_handler(filters.Text(equals="Закончить написание статьи", ignore_case = True), state = "*")
async def CreateWriting_finish(message: types.Message, state: FSMContext):
if debug: print("Закончить написание статьи")
await message.answer("Создание статьи окончено.", reply_markup = kb_RushGPT_bot)
fileName = "users/h" + str(message.from_user.id) + ".txt"
with open (fileName, "w", encoding='utf-8') as file1:
file1.write("")
await state.finish()
@dp.message_handler(state = CreateWriting.writing)
async def CreateWriting_continue(message: types.Message, state: FSMContext):
if debug: print("Продолжить написание статьи")
await message.reply(random.choice(msgAnswer))
if not os.path.exists("users/h" + str(message.from_user.id) + ".txt"):
fileName = "users/h" + str(message.from_user.id) + ".txt"
with open (fileName, "w", encoding='utf-8') as file1:
file1.write("")
msg = message.text
response = await openai.ChatCompletion.acreate(
temperature = 0.7,
model = engine,
messages = [
{"role": "assistant", "content": str(open("users/h" + str(message.from_user.id) + ".txt", "r")) + msg}
]
)
fileName = "users/h" + str(message.from_user.id) + ".txt"
with open (fileName, "a+", encoding='utf-8') as file1:
file1.write(msg.strip() + "\n")
response_tokens = response["usage"]["completion_tokens"]
msg = response.choices[0].message.content
if response_tokens > 4096:
await message.answer(f"Текст получился очень большой ({response_tokens} символа(ов)), но я прикладываю его в виде файла...", reply_markup = kb_RushGPT_bot)
fileName = "users/a" + str(message.from_user.id) + "_" + str(datetime.datetime.today().strftime("%Y-%m-%d-%H-%M-%S")) + ".txt"
with open (fileName, "w", encoding='utf-8') as file1:
file1.write(msg)
await bot.send_document(message.chat.id, document = open(fileName, 'rb'))
else:
await message.answer(msg, reply_markup = kb_RushGPT_bot)
await message.answer("Нужно что-то добавить?", reply_markup = kb_RushGPT_bot_Writing)
await CreateWriting.writing.set()
Голосуйте - палец вниз.0Голосуйте - палец вверх.0