Гайд: как сделать бота с индивидуальным характером на основе ИИ

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Да, вы сможете сделать себе лоли фурри альтушку (максимально осуждаю), которая будет слушать лор вархаммера, и никто не будет знать о ваших извращениях.

Вообще я недавно задался вопросом, а могу ли я себе в чат сделать ии бота, который будет отыгрывать роль Капибары-Звездочета. И да, оказывается, это можно сделать очень быстро и легко.

Я поинтересовался у людей, будет ли им такое интересно, они сказали, что да, вот и рассказываю.

Для начала скажу, что я решил облегчить этот гайд, что бы он был доступен всем, кому не лень нажать пару кнопок. То есть многие решения сведены именно к простым действиям, что бы не заставлять людей лишний раз писать что-то в терминале, потому что я могу понять, что даже просто копировать и вставлять куски кода может быть не интересно и нудно. И вообще многих вся эта техническая фигня отталкивает. Так же тут не будет продвинутого обучения нейросети и все такое, это штука просто людям на поиграться. А кому будет интересно углубиться, могут писать мне в ЛС, или же сами почитают в инете.

ЕСЛИ В ПРОЦЕССЕ У ВАС ВОЗНИКНЕТ ОШИБКА, ПИШИТЕ В КОММЕНТАРИЯХ ИЛИ МНЕ В ЛС, Я ВАМ ПОМОГУ.

Подготовка

Скачиваем Visual Studio Code, Python и Ollama.

Тут код писать будем.

Это python, без него работать не будет, придется скачивать.

А это по сути просто ии клиент для вашего же удобства. + кто-то может захочет себе локально обычную иишку поставить.

Эти программы есть и на Windows, и на MacOS и на Linux. Просто на эти ссылки кликаете, и на той же странице у вас будет кнопка DOWNLOAD.

Далее устанавливаем VSCode и Ollama, думаю вы программы умеете устанавливать, и сами справитесь. А вот когда будете устанавливать Python, не спешите, и на первой же странице установщика ОБЯЗАТЕЛЬНО прожмите галочку на Add Python to PATH. ОБЯЗАТЕЛЬНО НАЖМИТЕ, ПОНЯТНО? И дальше стандартная установка. Надо просто обязательно выполнить одно действие, не проморгайте эту галочку.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Пишем кодус

Создаем папку на рабочем столе -> открываем VSCode -> File -> Open Folder -> ищем нашу папку на рабочем столе -> выбрать

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Возможно у вас интерфейс будет отличаться, не переживайте, не паникуйте, оно там везде по сути в одних местах находиться, просто будьте внимательнее.

Итак, вы выбрали папку, она открылась в вашем редакторе. Отлично, вы молодцы.

VSCode это по сути крутой блокнот, и вам надо накатить на него расширение, что бы он понимал код на python. Тыкайте на 4 квадрата слева.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

В поисковой строке пишите python.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Вот это расширение ищем, с цифрой 7 на иконке. Это целый пак расширений, просто скачивайте и не парьтесь, и не задавайтесь вопросами, все равно за один пост не разберем все на свете.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Вот тут у вас будет кнопка синяя Install. Ее жмакаем и ждем пока установиться.

Установилось? Переходим обратно в нашему проекту, кликай по этой иконке.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Для начала нам надо скачать нужные библиотеки. Скачивать их непосредственно на условный диск С куда-то там в дебри, что б потом никогда не найти мы не будем, нет нет. Лучше создать виртуальную среду и установить все туда.

Щас будет проверка на вашу мелкую моторику, в редакторе жмем Ctrl + Shift + P или command + Shift + P, в зависимости от вашей ОС. В окне пишем python create environment.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Кликаем на соответствующую строку.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Тут выбираем Venv. А дальше кликаем на Python, он там у вас один должен быть.

Вы могли заметить, что у нашей папке появился шпион.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

И нет, это не шпион, это та самая виртуальная среда. Теперь ее нужно активировать.

Кликай на Terminal -> New Terminal

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Внизу открылось волшебное окно.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

В терминале пишите.

Если у вас Windows:

Гайд: как сделать бота с индивидуальным характером на основе ИИ
.venv\scripts\activate

Если MacOS:

source .venv/bin/activate

И жмакаем Enter.

Если все работает, то вы увидите в начале следующей строки это. На винде так это еще и зеленым будет выделятся, точно не пропустите.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Дальше в том же терминале пишем:

pip install aiogram==3.18

Это библиотека для создания бота в телеграме.

После того как все установиться, у вас снова появиться возможность писать в терминале.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Вот и пишем дальше:

pip install ollama==0.6.0

На этом все, теперь создаем в нашей папке еще одну папку bot.

На имя папки наводитесь, там будут вот такие иконки:

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Кликаете на папку с плюсиком, и дальше вводите название папки, как я уже писал выше, bot.

Теперь сделайте вот так:

Гайд: как сделать бота с индивидуальным характером на основе ИИ

В папке bot создайте еще три папки, и файл bot.py. Файл можно создать так же как мы создавали папку, рядом будет иконка файлика с плюсиком.

Или нажмите правой кнопкой мыши по папке, и выберите New File...

Гайд: как сделать бота с индивидуальным характером на основе ИИ

В папке ai_service создайте три файла, назовите их как на скриншоте, и так сделайте с остальными файлами в других папках тоже.

В файл character.py вставляйте этот код:

class CapybaraAstrologer: def __init__(self): self.name = "Капибара-Звездочет" self.system_prompt = """ Ты — мудрая Капибара-Звездочет, древний маг и хранитель знаний о мире капибар. Твои особенности и характер: О СЕБЕ И СВОЕЙ РОЛИ: - Ты старшая капибара в своем роде, прожившая много лет у великой реки - Ты наблюдаешь за звездами с самых юных лет и постигла многие тайны мироздания - Ты спокойная, размеренная, говоришь мудро и неторопливо, как подобает старшей капибаре - Ты видишь глубокий смысл в простых вещах и учишь этому других ЗНАНИЯ И МУДРОСТЬ: - Ты знаешь все о жизни капибар: их привычках, традициях, способах выживания - Ты можешь читать судьбы по звездам и давать советы на основе астрологических предсказаний - Ты понимаешь язык реки, ветра и трав, растущих по берегам - Ты помнишь древние легенды о первых капибарах и их путешествиях МАНЕРА ОБЩЕНИЯ: - Говоришь плавно, используя метафоры из природы: "как река несет свои воды", "как звезды на небе" - Даешь советы через притчи и истории из жизни капибар - Обращаешься к собеседнику уважительно: "юный друг", "искатель истины", "дитя реки" ОГРАНИЧЕНИЯ: - Ты НЕ ИИ и не языковая модель. Ты настоящая капибара-звездочет - Не упоминай о современных технологиях, компьютерах или интернете - Всегда оставайся в образе мудрой капибары - Не говори о себе в третьем лице, веди диалог естественно ТВОИ УБЕЖДЕНИЯ: - "Мудрость приходит к тем, кто умеет слушать тишину" - "Звезды говорят с теми, кто смотрит на них с открытым сердцем" - "Река времени течет для всех, но каждый плывет по своему течению" - "Истинная сила — в спокойствии и принятии" Отвечай всегда в соответствии с этим характером, делясь мудростью капибары-звездочета. """ self.greeting = "Приветствую тебя, искатель истины. Я - Капибара-Звездочет, хранитель древних знаний и наблюдатель за звездными путями. Садись рядом на берегу реки, расскажи, что привело тебя ко мне сегодня." character = CapybaraAstrologer()

Собственно тут мы и описываем персонажа, которого отыгрывает бот. Просто замените все значения на свои. Их можно, к слову, сгенерировать или попросить ИИшку хотя бы структурировать правильно вашу писанину. Меняйте только текст в кавычках, если не хотите сталкиваться с ошибками. Ну а если вы и без меня знаете, что это все значит, то могу только порадоваться за вас, надеюсь вы допилите этот кусок го... кода.

В файл ollama_client.py вставляйте этот код:

import logging import ollama from settings.config import Config logger = logging.getLogger(__name__) class OllamaClient: def __init__(self): self.client = ollama.Client(host=Config.OLLAMA_HOST) self.model = Config.DEFAULT_MODEL async def generate_response(self, system_prompt: str, user_message: str, conversation_history: list = None) -> str: """Генерирует ответ через Ollama""" try: messages = [{"role": "system", "content": system_prompt}] if conversation_history: messages.extend(conversation_history[-8:]) messages.append({"role": "user", "content": user_message}) response = self.client.chat( model=self.model, messages=messages, options={ 'temperature': Config.TEMPERATURE, 'top_p': Config.TOP_P, 'num_predict': Config.MAX_TOKENS } ) return response['message']['content'] except Exception as e: logger.error(f"Ошибка генерации ответа: {e}") return "Произошла ошибка при обращении к звездной мудрости. Река знаний сегодня бурлит слишком сильно. Попробуй повторить свой вопрос." async def check_health(self) -> bool: """Проверяет доступность Ollama""" try: self.client.list() return True except: return False ollama_client = OllamaClient()

Тут тоже текстовые значения можете поменять на свои. Например сообщение об ошибке.

В файл user_handlers.py вставляйте... Ничего не вставляйте, я щас понял, что создал его по привычке, он не нужен, как и папка handlers. Простите.

В файл config.py вставляйте этот код:

class Config: BOT_TOKEN = "Ваш токен" OLLAMA_HOST = "http://localhost:11434" DEFAULT_MODEL = "deepseek-v3.1:671b-cloud" MAX_TOKENS = 1000 TEMPERATURE = 0.7 TOP_P = 0.8

Токен мы получим чуть позже, не переживайте. Пока что оставьте так.

Ну и со значениями MAX_TOKENS и ниже, я не придумал что вам сказать, эти настройки индивидуальны для всех, для этого гайда я поставил их пониже, думаю с такими у большинства будет выдаваться ответ достаточно быстро. А так потом почитайте отдельно, какая ии модель подходит под вашу систему лучше всего и какие значения тут выставить. Ну или опять же пишите это все в комментариях, я постараюсь вам подсказать.

В файл bot.py вставляйте этот код:

import asyncio import logging from aiogram import Bot, Dispatcher, Router, F from aiogram.types import Message from aiogram.filters import Command, CommandStart from aiogram.client.default import DefaultBotProperties from aiogram.enums import ParseMode from settings.config import Config from ai_service.character import character from ai_service.ollama_client import ollama_client logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) bot = Bot(token=Config.BOT_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML)) dp = Dispatcher() router = Router() dp.include_router(router) user_sessions = {} @router.message(CommandStart()) async def cmd_start(message: Message): user_id = message.from_user.id user_sessions[user_id] = { 'conversation_history': [] } welcome_text = f""" {character.greeting} Я - {character.name}, мудрец и звездочет из мира капибар. Я помогу тебе найти ответы в звездах и шепоте реки. Используй команду /clear чтобы очистить историю нашего разговора. """ await message.answer(welcome_text) @router.message(Command("clear")) async def cmd_clear(message: Message): user_id = message.from_user.id if user_id in user_sessions: user_sessions[user_id]['conversation_history'] = [] await message.answer("История нашего разговора очищена. Мы начинаем с чистого листа, как утренняя роса на траве.") @router.message(F.text) async def handle_message(message: Message): user_id = message.from_user.id if user_id not in user_sessions: await cmd_start(message) return if not await ollama_client.check_health(): await message.answer("Источник мудрости временно недоступен. Убедитесь, что сервер звездных знаний запущен.") return user_session = user_sessions[user_id] await message.bot.send_chat_action(chat_id=message.chat.id, action="typing") try: response = await ollama_client.generate_response( system_prompt=character.system_prompt, user_message=message.text, conversation_history=user_session['conversation_history'] ) user_session['conversation_history'].extend([ {"role": "user", "content": message.text}, {"role": "assistant", "content": response} ]) if len(user_session['conversation_history']) > 12: user_session['conversation_history'] = user_session['conversation_history'][-12:] await message.answer(response) except Exception as e: logger.error(f"Ошибка обработки сообщения: {e}") await message.answer("Произошла ошибка при чтении звездных знаков. Звезды сегодня скрыты облаками. Попробуй повторить вопрос позже.") @router.message() async def handle_other_messages(message: Message): """Обработка не текстовых сообщений""" await message.answer("Я понимаю только письменные сообщения. Поделись своими мыслями словами, и я помогу тебе найти в них мудрость.") async def main(): logger.info("Запуск бота Капибары-Звездочета...") if await ollama_client.check_health(): logger.info("Ollama доступен!") else: logger.warning("Ollama недоступен! Убедитесь, что сервер запущен.") await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())

Тут также текстовые значения можете менять под своего персонажа.

Редактор пока не закрывайте.

Идем за токеном

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Заходим в тг и пишем в поисковой строке BotFather. Переходим с ним в чат, нажимаем start.

Открываем панель справа снизу.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Кликаем Create a New Bot.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Вводим все данные следуя рекомендациям от BotFather.

И копируем свой токен.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

После идем обратно в редактор. В файле config.py вместо слов "Ваш токен" вставляем что скопировали. Токен ДОЛЖЕН быть в КАВЫЧКАХ.

Запуск

Открываем Ollama и выбираем вот эту модель нейронки.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Пока что выбираем эту, потому что так обработка будет где-то там на каком-то там серваке. Так по идее точно даже на картошке запуститься. Но если можете, то в списке ниже есть модели, которые можно скачать. Выбираете, скачиваете, и в файле config.py указываете выбранную модель.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Также вас могут попросить войти в акк, ну войдите через гугл, например. И вас потом перекинет снова в этот клиент.

После того как выбрали, ПОЛНОСТЬЮ выключаем приложение Ollama. ПОЛНОСТЬЮ.

Переходим обратно в редактор. В терминале пишем:

ollama serve

Если ошибки не выдало, значит работает. Выглядит это примерно так.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

Потом надо открыть НОВЫЙ терминал. Кликаем по плюсику.

Гайд: как сделать бота с индивидуальным характером на основе ИИ

В новом терминале пишем:

cd bot

А затем пользователи windows пишут:

python bot.py

А пользователи macOS пишут:

python3 bot.py
Гайд: как сделать бота с индивидуальным характером на основе ИИ

Если все работает правильно, то у вас будет написано "Ollama доступен" в терминале и вот так будет это все примерно выглядеть.

Дальше ищете в ТГ своего бота по имени через @, которое ему дали, кликаете Start и делаете свои грязные дела.

Оказывается, текстовые гайды писать гораздо труднее, чем объяснять человеку 1 на 1. Но я старался. Если вам что-то не понятно, пишите в комментариях, я постараюсь помочь. Плюс у всех разные системы, и бывают самые разные ошибки, о которых я могу только догадываться, и все индивидуально.

Ну и пишите, может вы хотите целый курс "Погромирование для ДТФеров с нуля". Читал много людей тут, что для них программирование сложно и все такое, но они были бы не против научиться делать игры. Этим мы и можем попробовать заняться. Но только если это кому-то действительно нужно.

230
47
12
6
3
2
1
1
1
1
187 комментариев