-
-
Save Priler/1c4e02e2aada2764d4cb0af20e4ff3e5 to your computer and use it in GitHub Desktop.
TOKEN = "<telegram-bot-token>" # obtained from @BotFather | |
OPENAI_TOKEN = "<openai-api-key>" # obtained from https://platform.openai.com/account/api-keys |
# Телеграм бот ChatGPT | |
import config | |
import logging | |
import openai | |
import asyncio | |
from gpytranslate import Translator | |
from aiogram import Bot, Dispatcher, executor, types | |
# log | |
logging.basicConfig(level=logging.INFO) | |
# init translator | |
t = Translator() | |
# init openai | |
openai.api_key = config.OPENAI_TOKEN | |
# init aiogram | |
bot = Bot(token=config.TOKEN) | |
dp = Dispatcher(bot) | |
@dp.message_handler() | |
async def gpt_answer(message: types.Message): | |
# await message.answer(message.text) | |
model_engine = "text-davinci-003" | |
max_tokens = 128 # default 1024 | |
prompt = await t.translate(message.text, targetlang="en") | |
completion = openai.Completion.create( | |
engine=model_engine, | |
prompt=prompt.text, | |
max_tokens=max_tokens, | |
temperature=0.5, | |
top_p=1, | |
frequency_penalty=0, | |
presence_penalty=0 | |
) | |
await message.answer("ChatGPT: Генерирую ответ ...") | |
translated_result = await t.translate(completion.choices[0].text, targetlang="ru") | |
await message.answer(translated_result.text) | |
# run long-polling | |
if __name__ == "__main__": | |
executor.start_polling(dp, skip_updates=True) |
Немного доработал, что думаете по этому поводу?
Отслеживание предыдущих ответов
previous_responses = {}
filename = "users.txt"
Обработка входящих сообщений
@bot.message_handler(func=lambda message: True)
def handle_message(message):
user_id = message.from_user.id
user_message = message.text
if not os.path.exists(filename):
with open(filename, "w") as f:
pass
try:
with open(filename, "r+") as f:
contents = f.read()
if str(user_id) not in contents:
f.seek(0, 2)
f.write(str(user_id) + "\n")
except IOError as e:
print(f"An error occurred while accessing the file: {e}")
# Хранение всей истории сообщений пользователя
if user_id not in previous_responses:
previous_responses[user_id] = []
previous_responses[user_id].append(user_message)
# Создание контекста из всей истории сообщений пользователя
context = " ".join(previous_responses[user_id])
# Создание ответа с помощью API OpenAI
try:
response = openai.Completion.create(
engine="text-davinci-003",
prompt=f"{context}\n",
max_tokens=1024,
n=1,
stop=None,
temperature=0.5,
).choices[0].text
except Exception as e:
print(f"Ошибка при генерации ответа: {e}")
response = "Извините, возникла ошибка при генерации ответа."
# Обновление истории ответов пользователя
previous_responses[user_id].append(response)
# Отправка ответа пользователю
bot.reply_to(message, response)
Запуск бота
while True:
try:
bot.polling()
except Exception as e:
print(f"Ошибка опроса: {e}"
А кто-нибудь сталкивался с проблемой, что в pycharm отваливается asyncio и как ее решал?
нашел ответ?
как вообще запустить бота, и обязательно ли нужен свой api?
ВНИМАНИЕ!! Чтобы убрать переводчик, нужно сделать следующие изменения:
- Нужно заменить в 33 строке c "prompt=prompt.text," на "prompt=message.text,"
- Нужно заменить в 43 строке с "await message.answer(translated_result.text)" на "await message.answer(completion.choices[0].text)"
- Нужно удалить строки 6, 14, 30, 42
И все! Теперь chatGPT будет писать на таком языке, на котором вы задали ему вопрос.
рабочий код # Телеграм бот ChatGPT
import config
import logging
import openai
import asyncio
import os
from aiogram import Bot, Dispatcher, executor, types
log
logging.basicConfig(level=logging.INFO)
init translator
init openai
openai.api_key = ""
init aiogram
bot = Bot(token="")
dp = Dispatcher(bot)
@dp.message_handler()
async def gpt_answer(message: types.Message):
# await message.answer(message.text)
model_engine = "text-davinci-003"
max_tokens = 128 # default 1024
completion = openai.Completion.create(
engine=model_engine,
prompt=message.text,
max_tokens=max_tokens,
temperature=0.5,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
await message.answer("ChatGPT: Генерирую ответ ...")
await message.answer(completion.choices[0].text)
run long-polling
if name == "main":
executor.start_polling(dp, skip_updates=True)
не рабочий...
А кто-нибудь сталкивался с проблемой, что в pycharm отваливается asyncio и как ее решал?