
Для начала работы нужно скачать и импортировать библиотеки aiogram и gigachat. Для скачивания библиотеки нажмите Alt + F12, тогда у Вас на экране откроется терминал. После ввода этой команды у Вас скачается библиотек с командами для использования ИИ:
pip install gigachat
pip install aiogramПосле этого нужно импортировать библиотеки. Для этого переходим в сам код и пишем строчку:
import asyncio
from gigachat import GigaChat
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import Command
from aiogram.types import ReplyKeyboardMarkup, KeyboardButtonДля регистрации бота нужно получить уникальный токен. Сделать это можно только через официального бота @BotFather. После получения токена, в коде нужно ввести несколько переменных:
bot = Bot(token='Ваш токен бота') # создание переменной бота
dp = Dispatcher()Dispatcher() - функция, которая отслеживает действия пользователя в боте, такие как нажатие кнопок, а ещё использование команд, таких как /start и т.д.
Теперь можно заняться добавлением кнопок.
def start_keyboard(): # функция с клавиатурой
keyboard = ReplyKeyboardMarkup( # переменная = функции
keyboard=[
[KeyboardButton(text='Да')], # задается 2 кнопки, текст в кавычках = текст на кнопке
[KeyboardButton(text='Нет')],
],
resize_keyboard=True # чтобы кнопки были под размер экрана пользователя
)
return keyboard Далее напишем условия, при которых функция, выводящая эти кнопки, вызывается:
@dp.message(Command('start'))
async def f(message: types.Message):
msg = "Здравствуйте, Вы уже писали статьи на Хабре?"
await bot.send_message(message.chat.id, msg, reply_markup=start_keyboard())Разберём этот код по строчкам:
проверяет, отправил ли пользователь команду /start
async значит, что функция асинхронна, то есть может работать даже тогда, когда несколько пользователей одновременно используют бота аргумент функции лишь проверяет, что сообщение отправлено именно в телеграмме (хотя по другому и быть не может)
Вопрос, который выдаст бот
бот отправит сообщение (команда send_message) пользователю с тем же id, как и у пользователя, который нажал команду /start (проще говоря, тому же пользователю) сообщение, записанное в строчке 3 и выведет пользователю клавиатуру с кнопками, прописанными в функции start_keyboard() (смотреть прошлый блок кода).
Теперь разберём, как выводить вопросы и кнопки с вариантами ответов без ввода пользователем команд. Для начала пропишем варианты ответов для следующего вопроса:
def type_keyboard():
keyboard = ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text='Социальные сети')],
[KeyboardButton(text='Реклама')],
[KeyboardButton(text='Сарафанное радио')],
],
resize_keyboard=True
)
return keyboardА теперь пропишем условия для вывода этих кнопок с помощью уже импортированной команды F:
@dp.message(F.text.in_(['Да', 'Нет']))
async def with_children(message: types.Message):
msg = "Откуда Вы узнали о Хабре?"
await bot.send_message(message.chat.id, msg,reply_markup=type_keyboard())В этом блоке разберём только первую и четвёртую строчки:
Функция F проверяет, какое сообщение пользователь отправил боту. Так как на прошлый вопрос из вариантов ответа были только да и нет, то функция точно запустится после ответа на прошлый вопрос.
В четвёртой строчке мы сохранили ответ пользователя в строковую переменную
Следующим шагом сформируем пропт для ИИ:
@dp.message(F.text.in_(['Социальные сети', 'Реклама', 'Сарафанное радио']))
async def banana(message: types.Message):
user_id = message.from_user.id
fonk = message.text
prompt = "Контекст: ты великий предсказатель и экстрасенс. Задача: угадать информацию о пользователе Хабра по уже данным тебе сведеньям о нём. от информация о пользователе:"
prompt += f"Пользователь пришёл в Хабр благодаря {fonk}"
bruh = ask_ai(prompt)
await bot.send_message(user_id, bruh)В этой функции мы записываем id пользователя в переменную user_id и ответ пользователя на прошлый вопрос в переменную fonk. далее мы составляем промт через f строку и вызываем функцию для ИИ, после чего отправляем ответ пользователю.
Теперь можно наконец приступить к программированию самой нейросети! Для удобства можно выделить отдельный Python-File под эту задачу.
def ask_ai(user_prompt):
giga = GigaChat(
credentials='Api code, полученный на сайте гигачата'
verify_ssl_certs=False #При запуске с ПК. Если бот размещён на сервере, то указать значение True
)
prompt1 = giga.chat(user_prompt)
return prompt1.choices[0].message.contentЭта функция возвращает ответ нейросети на промпт, указанный в аргументе функции. Важно отметить, что если Вы всё-таки решили писать этот блок кода в отдельном файле, то Вам понадобиться написать ещё одну строчку в файле с ботом:
from 'Название файла с ИИ' import ask_aiДля того, чтобы бот запустился нужно написать эту команду в конце кода:
async def main():
await dp.start_polling(bot)
asyncio.run(main())Теперь бот готов, и его полный код выглядит так:
import asyncio
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import Command
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
from GigaPred import ask_ai
bot = Bot(token='bot-token') # создание переменной бота
dp = Dispatcher()
def start_keyboard(): # функция с клавиатурой
keyboard = ReplyKeyboardMarkup( # переменная = функции
keyboard=[
[KeyboardButton(text='Да')], # задается 2 кнопки, текст в кавычках = текст на кнопке
[KeyboardButton(text='Нет')],
],
resize_keyboard=True # чтобы кнопки были под размер экрана пользователя
)
return keyboard
def type_keyboard():
keyboard = ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text='Социальные сети')],
[KeyboardButton(text='Реклама')],
[KeyboardButton(text='Сарафанное радио')],
],
resize_keyboard=True
)
return keyboard
@dp.message(Command('start'))
async def f(message: types.Message):
msg = "Здравствуйте, Вы уже писали статьи на Хабре?"
await bot.send_message(message.chat.id, msg, reply_markup=start_keyboard())
@dp.message(F.text.in_(['Да', 'Нет']))
async def with_children(message: types.Message):
msg = "Откуда Вы узнали о Хабре?"
await bot.send_message(message.chat.id, msg,reply_markup=type_keyboard())
@dp.message(F.text.in_(['Социальные сети', 'Реклама', 'Сарафанное радио']))
async def banana(message: types.Message):
user_id = message.from_user.id
fonk = message.text
prompt = ("Контекст: ты великий предсказатель и экстрасенс. Задача: угадать информацию о пользователе Хабра по уже данным тебе сведеньям о нём. от информация о пользователе:")
prompt += f"Пользователь пришёл в Хабр благодаря {fonk}. В ответе добавь смайлики и напиши ответ так, будто ты человек с экстрасенсорными способностями"
bruh = ask_ai(prompt)
await bot.send_message(user_id, bruh)
async def main():
await dp.start_polling(bot)
asyncio.run(main())А в файле с ИИ остался этот код:
from gigachat import GigaChat
def ask_ai(user_prompt):
giga = GigaChat(
credentials='MDE5YjNmOTktNzZmZi03Y2Q0LWIzZGUtODdkYTM5OWM0ZjRlOjc4Yjc4ZGQ0LThhNmUtNGE1Yy1iZGM3LTc1YWU3ZDU5NTU5OQ==',
verify_ssl_certs=False
)
prompt = giga.chat(user_prompt)
return prompt.choices[0].message.contentОсталось лишь запустить и протестировать бота:

На этом создание бота окончено. В следующей статье расскажу, как добавить базу данных, в которую бот сможет добавлять новую информацию!