Как собрать собственного AI-бота для Telegram за один вечер

Как собрать собственного AI-бота для Telegram за один вечер

Если вам кажется, что создание AI-ботов крайне сложная штука, а денег на разработчиков у вас нет, то вы как раз по адресу!

Причем сделаем мы настоящего бота, который сможет уже сегодня, при вашем должном терпении, скажет вам первое "Hasta la vista, baby".

Важно уточнить, что выполнение команд может отличаться в зависимости от вашей операционной системы и типа терминала, но я советую вам установить Anaconda Prompt для первого ознакомления!

Идея у нас следующая: создать Telegram-бота, который отвечает через DeepSeek, имеет собственный характер и чуть-чуть помнит контекст.

Без серверов. Без Docker. Без FastAPI. Выкинем пока все эти сложные слова из нашей головы и просто приготовимся стучать по клавиатуре и мыши.

Итак, что именно мы сделаем:

Минимальный, но умный AI-бот, который:

  • отвечает через DeepSeek API;
  • имеет system prompt, то есть свой "характер";
  • чуть-чуть запоминает контекст диалога для каждого пользователя;
  • поднимается за 1 файл запуска, хоть на Windows-ноуте.
  • Использует ProxyAPI, чтобы не заморачиваться с пополнением баланса за бугор.

Давайте приступим, непосредственно, к созданию вашего первого AI-бота.

«Я не хочу ничего доказывать. Я хочу показать.»

- Федерико Феллини

1. Мини-архитектура: как упорядочить хаос

Название бота я использую своё, но вы можете назвать как вам угодно. Хоть "Киборг-Убийца". Сделаем максимально простую архитектуру, состоящую из трёх файлов:

ainova_bot/ │── .env # ключи API │── bot.py # Telegram-логика └── llm_client.py # взаимодействие с DeepSeek

По сути — это минимальный “мозг”, который соединяет:

Telegram ⇄ aiogram ⇄ наш код ⇄ ProxyAPI (OpenAI-совместимый) ⇄ DeepSeek модель

2. Создаём проект и окружение

Этот шаг, скорее, ритуальный. Так начинается большинство прототипов начального уровня.

Шаг 1 — выбрать папку

cd "C:\Users\Artem\Documents"

(у всех она своя, просто меня зовут Артем...)

Шаг 2 — создать папку проекта

mkdir ainova_bot cd ainova_bot

Шаг 3 — создать окружение

Через Anaconda:

conda create -n ainova_bot python=3.10 -y conda activate ainova_bot

Или через venv:

python -m venv venv source venv/bin/activate

Шаг 4 — установить библиотеки

pip install aiogram openai python-dotenv

Подробнее:

  • aiogram — быстрый и асинхронный Telegram-фреймворк.
  • openai — универсальный клиент, который можно направить на DeepSeek.
  • python-dotenv — лучший способ не хардкодить ключи.

3. Готовим .env: чтобы не светить ключи на полконтинета

Создаём файл .env.

PowerShell:

New-Item -Path . -Name ".env" -ItemType "file"

Bash:

touch .env

Anaconda

echo.>.env

Открываем:

notepad .env

Вставляем туда:

TELEGRAM_BOT_TOKEN= ... PROXYAPI_API_KEY= ...

И тут вы спросите, а что туда вставить-то?.. А всё очень просто!

В телеграме находим нашего отца всех ботов:

Как собрать собственного AI-бота для Telegram за один вечер

Запускаете через /start и нажимаете /newbot:

Как собрать собственного AI-бота для Telegram за один вечер

Затем вводим название вашего бота, чтобы было _bot (потом поменяете) и берёте оттуда токен:

Как собрать собственного AI-бота для Telegram за один вечер

Его и вставляете в .env!

Что касается ProxyApi. Тоже все элементарно. Заходите на сайт, регистриуретесь:

Как собрать собственного AI-бота для Telegram за один вечер

Пополняете баланс, можно начать с небольших сумм:

Как собрать собственного AI-бота для Telegram за один вечер

Затем переходим во вкладку ключей:

Как собрать собственного AI-бота для Telegram за один вечер

Тут создаете новый ключ:

Как собрать собственного AI-бота для Telegram за один вечер
Как собрать собственного AI-бота для Telegram за один вечер

Его также вставляете в файл .env

Итого:

TELEGRAM_BOT_TOKEN= ВАШ ТОКЕН, ВЗЯТЫЙ У BOTFATHER PROXYAPI_API_KEY= ВЗЯТЫЙ КЛЮЧ С ПРОКСИАПИ

Наш клиент для DeepSeek (llm_client.py)

Минималистичный, быстрый, простой — let's go!

# llm_client.py import os from dotenv import load_dotenv from openai import AsyncOpenAI # Загружаем переменные из .env (делаем это ОДИН раз в проекте — здесь) load_dotenv() # Читаем ключ для ProxyAPI PROXYAPI_API_KEY = os.getenv("PROXYAPI_API_KEY") if not PROXYAPI_API_KEY: raise RuntimeError("PROXYAPI_API_KEY не найден в .env") # Клиент OpenAI, но работает через ProxyAPI client = AsyncOpenAI( api_key=PROXYAPI_API_KEY, base_url="https://openai.api.proxyapi.ru/v1/", # URL прокси зашит прямо в код ) # Модель DeepSeek через ProxyAPI MODEL_NAME = "openrouter/deepseek/deepseek-chat-v3.1" # System prompt — характер бота DEFAULT_SYSTEM_PROMPT = ( "Ты умный, доброжелательный AI-ассистент студии AINOVA. " "Отвечай по делу, просто и понятно." ) async def ask_llm(messages: list[dict], temperature: float = 0.7) -> str: """ Функция, которая отправляет сообщения в LLM через ProxyAPI и возвращает текст ответа. """ response = await client.chat.completions.create( model=MODEL_NAME, messages=messages, temperature=temperature, stream=False, ) return response.choices[0].message.content

Это сердце любого AI-бота.

5. Telegram-бот (bot.py):

# bot.py import os import asyncio from typing import Dict, List from aiogram import Bot, Dispatcher from aiogram.types import Message from aiogram.filters import CommandStart from llm_client import ask_llm, DEFAULT_SYSTEM_PROMPT TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") if not TELEGRAM_BOT_TOKEN: raise RuntimeError("TELEGRAM_BOT_TOKEN не найден в .env") bot = Bot(token=TELEGRAM_BOT_TOKEN) dp = Dispatcher() # Наш маленький in-memory контекст user_histories: Dict[int, List[dict]] = {} MAX_HISTORY_MESSAGES = 10 def build_messages_for_user(user_id: int, user_text: str) -> List[dict]: history = user_histories.get(user_id, []) if len(history) > MAX_HISTORY_MESSAGES: history = history[-MAX_HISTORY_MESSAGES:] messages = [{"role": "system", "content": DEFAULT_SYSTEM_PROMPT}] messages.extend(history) messages.append({"role": "user", "content": user_text}) return messages def update_history(user_id: int, user_text: str, assistant_text: str): history = user_histories.get(user_id, []) history.append({"role": "user", "content": user_text}) history.append({"role": "assistant", "content": assistant_text}) user_histories[user_id] = history @dp.message(CommandStart()) async def cmd_start(message: Message): await message.answer( "Привет! Мы — AI-ассистент студии AINOVA 🤖\n\n" "Пиши что угодно — чуть-чуть помним контекст и стараемся отвечать по делу." ) @dp.message() async def handle_message(message: Message): user_id = message.from_user.id user_text = message.text messages = build_messages_for_user(user_id, user_text) waiting = await message.answer("Думаем... 🧠") try: answer = await ask_llm(messages) except Exception: await waiting.edit_text("Ошибка! Попробуйте позже 🙏") return update_history(user_id, user_text, answer) await waiting.edit_text(answer) async def main(): print("Бот запущен. Ctrl+C для остановки.") await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())

6. Запуск

python bot.py

Мы открываем Telegram, пишем боту и он отвечает. Отвечает в стиле своего system prompt. И немного помнит разговор.

Простой, честный, а главное паботающий AI-продукт.

Возможные ошибки

Ошибка №1: Error code: 402 – Insufficient Balance (или похожее из ProxyAPI)

Теперь баланс считается не в DeepSeek, а на ProxyAPI.

Если видишь в консоли что-то вроде:

Error code: 402 - Insufficient Balance

— это значит, что на ProxyAPI закончились средства или превышен лимит.

Как мы это чиним:

  1. Заходим в личный кабинет ProxyAPI.
  2. Открываем раздел Billing / Тарифы / Лимиты.
  3. Пополняем баланс или поднимаем лимиты.

После этого бот снова начинает отвечать.

Ошибка №2: RuntimeError: PROXYAPI_API_KEY не найден в .env

Это уже классика.

RuntimeError: PROXYAPI_API_KEY не найден в .env

Значит load_dotenv не нашёл нужную переменную.

99% случаев — это одно из трёх:

1. Файл называется не .env, а .env.txt

Windows скрывает расширения → визуально .env, а реально — .env.txt.

В Проводнике включаем: Вид → Расширения имён файлов.

2. .env лежит не в той папке

Ты запускаешь:

python bot.py

…из D:\projects\ainova_bot, а .env лежит, например, уровнем выше.

Правильно: .env должен лежать там же, где llm_client.py (или там, откуда ты его грузишь через Path(__file__).parent / ".env").

3. Опечатка в имени переменной

Вместо:

PROXYAPI_API_KEY=sk-xxx

Пишут:

PROXY_API_KEY= PROXYAPI_KEY= PROXYAPI-API-KEY=

Пожалуй, это основные ошибки, но если возникнут новые, можете написать комментарий или просто спросить у ChatGPT!

На этом у меня всё. Пробуйте, у вас обязательно всё получится. В наше время легче разобраться в программировании начального уровня, используя большие языковые модели.

А если вам некогда, то вы всегда можете написать лично мне в Телеграм и я возьму эту задачу на себя, ещё и базу данных добавлю, RAG, CRM и прочие фишки, без которые бизнес станет только краше, а ещё и на сайт поставлю, прикреплю Вотсап и всё будет замечательно.

Всем спасибо и удачи!

Начать дискуссию