Обзор
Создадим Telegram-бота с AI-возможностями: он будет помнить контекст разговора, использовать локальную LLM через Ollama и отвечать на вопросы по вашим документам.
Установка зависимостей
pip install python-telegram-bot langchain langchain-ollama
pip install python-dotenvСтруктура проекта
tg-ai-bot/
├── bot.py
├── .env
└── requirements.txtКод бота
import os
from telegram import Update
from telegram.ext import Application, MessageHandler, filters, ContextTypes
from langchain_ollama import OllamaLLM
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import HumanMessage, AIMessage
llm = OllamaLLM(model="llama3.2")
history = {}
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
chat_id = update.effective_chat.id
user_text = update.message.text
if chat_id not in history:
history[chat_id] = []
history[chat_id].append(HumanMessage(content=user_text))
if len(history[chat_id]) > 20:
history[chat_id] = history[chat_id][-20:]
messages = [("system", "Ты полезный ассистент.")]
for msg in history[chat_id]:
role = "user" if isinstance(msg, HumanMessage) else "assistant"
messages.append((role, msg.content))
prompt = ChatPromptTemplate.from_messages(messages)
chain = prompt | llm
response = chain.invoke({})
history[chat_id].append(AIMessage(content=response))
await update.message.reply_text(response)
app = Application.builder().token(os.getenv("BOT_TOKEN")).build()
app.add_handler(MessageHandler(filters.TEXT, handle_message))
app.run_polling()Файл .env
BOT_TOKEN=your_telegram_bot_token_hereЗапуск как системная служба
[Unit]
Description=AI Telegram Bot
After=network.target
[Service]
WorkingDirectory=/home/user/tg-ai-bot
EnvironmentFile=/home/user/tg-ai-bot/.env
ExecStart=/home/user/tg-ai-bot/venv/bin/python bot.py
Restart=always
[Install]
WantedBy=multi-user.targetПолучите BOT_TOKEN у @BotFather в Telegram. Создайте нового бота командой /newbot и скопируйте токен.