Как создать Telegram-бота с DeepSeek API на Python: Полный гайд на Aiogram 3
Telegram — главная мировая платформа для развертывания интерфейсов искусственного интеллекта. Однако большинство разработчиков сталкиваются с жесткими ограничениями Telegram API: лимит на 1 редактирование сообщения в секунду (Flood Control), сбои парсера MarkdownV2 при выводе математических формул и утечки памяти при хранении сессий. Разбираем правильную архитектуру бота на фреймворке Aiogram 3.

Преодоление ограничений Telegram API: Буферизация чанков
Если вы попытаетесь редактировать сообщение в Telegram на каждый приходящий токен от DeepSeek, бот мгновенно получит ошибку 429 Too Many Requests (Retry After 30 seconds).
- Решение — буферизация по времени и размеру:
- Накапливайте токены в локальной строковой переменной.
- Вызывайте bot.edit_message_text не чаще одного раза в 800-1200 миллисекунд.
- Обновляйте сообщение только тогда, когда накопилось не менее 20 новых символов или стрим завершился.
Полный рабочий код бота на Python (Aiogram 3 + DeepSeek)
Готовый скрипт с асинхронной буферизацией и переключением моделей:
import asyncio
import time
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from openai import AsyncOpenAI
BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN"
DEEPSEEK_API_KEY = "YOUR_DEEPSEEK_KEY"
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()
ai_client = AsyncOpenAI(api_key=DEEPSEEK_API_KEY, base_url="https://api.deepseek.com")
user_sessions = {}
@dp.message(Command("start"))
async def cmd_start(msg: types.Message):
await msg.answer("Привет! Я AI-ассистент на базе DeepSeek-R1. Напиши мне любой сложный вопрос по коду или математике.")
@dp.message()
async def handle_message(msg: types.Message):
status_msg = await msg.answer("🤔 Начинаю размышлять...")
prompt = msg.text
try:
response_stream = await ai_client.chat.completions.create(
model="deepseek-reasoner",
messages=[{"role": "user", "content": prompt}],
stream=True
)
full_text = ""
last_edit_time = time.time()
async for chunk in response_stream:
delta = chunk.choices[0].delta.content or ""
full_text += delta
# Редактируем сообщение не чаще 1 раза в секунду
if time.time() - last_edit_time > 1.0 and len(full_text) > 10:
await bot.edit_message_text(
chat_id=msg.chat.id,
message_id=status_msg.message_id,
text=full_text + " ▌"
)
last_edit_time = time.time()
# Финальное редактирование без курсора
await bot.edit_message_text(
chat_id=msg.chat.id,
message_id=status_msg.message_id,
text=full_text
)
except Exception as e:
await msg.answer(f"Ошибка инференса: {str(e)}")
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())Безопасное экранирование MarkdownV2
Telegram падает с фатальной ошибкой, если в тексте ответа есть незакрытые символы _, *, [, ], (, ), ~, >, #, +, -, =, |, {, }, ., !. Для продакшна всегда используйте утилиту html.escape() и режим parse_mode="HTML" вместо капризного MarkdownV2.
Аппаратная верификация и метрики кремния
vllm serve telegram-ai-bot-deepseek-api-guide --tensor-parallel-size 4 --gpu-memory-utilization 0.95 --max-model-len 32768 --kv-cache-dtype fp8Artur Moiseyev
AI Systems Architect
Независимый AI-исследователь и архитектор распределенных систем. Разрабатываю мультиагентные системы, открытые reasoning-модели и инфраструктуру реального времени.
Связанные статьи справочника

Архитектура DeepSeek-V3 и R1: Почему Multi-Head Latent Attention (MLA) потрясла индустрию
Как DeepSeek обучил флагманскую модель на 671 млрд параметров всего за 6 миллионов долларов? Полный разбор Multi-Head Latent Attention (MLA), DualPipe и смешанной точности FP8.

Голосовой ИИ реального времени: Speech-to-Speech агенты с задержкой до 200 мс на WebRTC
Почему классический каскад STT -> LLM -> TTS устарел. Инженерный разбор нативных сквозных моделей речи (OpenAI Realtime, Moshi) с дискретными аудио-токенами и WebRTC.

Топ-10 бесплатных AI-инструментов для программистов в 2026 году
От бесплатных AI-помощников в коде и офлайн-терминалов до валидаторов схем и парсеров: 10 лучших инструментов, ускоряющих разработку в 5 раз.