158 подписчиков
Код бота:
import openai
import logging
from telegram import Update, ReplyKeyboardMarkup
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters
# Токены
TELEGRAM_TOKEN = 'ваш_токен_от_BotFather' # Замените на ваш токен
OPENAI_API_KEY = 'ваш_API_ключ_от_OpenAI' # Замените на ваш API-ключ
openai.api_key = OPENAI_API_KEY
# Выбор модели OpenAI (можно менять модель)
OPENAI_MODEL = "gpt-4" # Можно использовать gpt-3.5-turbo или другую модель
# Словарь для хранения контекста диалогов
user_contexts = {}
# Клавиатура с кнопкой "Начать новый диалог"
keyboard = ReplyKeyboardMarkup([['Начать новый диалог']], resize_keyboard=True)
# Функция для общения с OpenAI
async def chat_with_gpt(user_id, message):
context = user_contexts.get(user_id, [])
context.append({"role": "user", "content": message})
response = openai.ChatCompletion.create(
model=OPENAI_MODEL,
messages=context
)
answer = response['choices'][0]['message']['content'].strip()
context.append({"role": "assistant", "content": answer})
user_contexts[user_id] = context
return answer
# Обработка команды /start
async def start(update: Update, context) -> None:
await update.message.reply_text(
'Привет! Я бот, использующий GPT. Задай мне любой вопрос!',
reply_markup=keyboard
)
# Обработка нажатия кнопки "Начать новый диалог"
async def new_dialog(update: Update, context) -> None:
user_id = update.message.from_user.id
user_contexts[user_id] = [] # Очищаем контекст
await update.message.reply_text(
'Начинаем новый диалог. Задай мне новый вопрос!',
reply_markup=keyboard
)
# Обработка текстовых сообщений
async def handle_message(update: Update, context) -> None:
user_id = update.message.from_user.id
user_message = update.message.text
if user_message == 'Начать новый диалог':
await new_dialog(update, context)
return
response = await chat_with_gpt(user_id, user_message)
await update.message.reply_text(response, reply_markup=keyboard)
# Основная функция запуска бота
def main() -> None:
application = ApplicationBuilder().token(TELEGRAM_TOKEN).build()
application.add_handler(CommandHandler("start", start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
application.run_polling()
if __name__ == '__main__':
main()
1 минута
14 октября 2024