AI-чатбот — это не просто модный тренд. Грамотно настроенный бот экономит бизнесу 40–60% расходов на первую линию поддержки, работает 24/7 и отвечает за секунды. В этом туториале мы создадим бота с нуля — от регистрации токена до RAG по вашей базе знаний.
Три подхода к AI-чатботам
| Подход | Сложность | Стоимость | Гибкость | Для кого |
|---|---|---|---|---|
| No-code платформы (Crisp, Tidio) | Низкая | $30–100/мес | Ограниченная | Малый бизнес |
| Telegram-бот (Python + OpenAI API) | Средняя | $5–50/мес | Высокая | Средний бизнес, стартапы |
| Кастомный бот с RAG | Высокая | $20–200/мес | Максимальная | Средний и крупный бизнес |
Вариант 1: Telegram-бот с AI (Python + aiogram + OpenAI)
Шаг 1: Подготовка
# Создаём проект
mkdir ai-telegram-bot && cd ai-telegram-bot
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# Зависимости
pip install aiogram openai python-dotenv
Создайте файл .env:
TELEGRAM_TOKEN=ваш_токен_от_BotFather
OPENAI_API_KEY=sk-ваш_ключ_openai
Шаг 2: Базовый бот
import asyncio
import os
from dotenv import load_dotenv
from aiogram import Bot, Dispatcher, types
from aiogram.filters import CommandStart
from openai import AsyncOpenAI
load_dotenv()
bot = Bot(token=os.getenv("TELEGRAM_TOKEN"))
dp = Dispatcher()
client = AsyncOpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Хранилище истории диалогов (в памяти)
conversations: dict[int, list] = {}
SYSTEM_PROMPT = """Ты — AI-ассистент компании "ТехноМир".
Ты помогаешь клиентам с вопросами о товарах, доставке и возвратах.
Отвечай кратко, вежливо и по делу. Если не знаешь ответа — предложи
связаться с оператором по телефону 8-800-123-45-67."""
@dp.message(CommandStart())
async def start(message: types.Message):
conversations[message.from_user.id] = []
await message.answer(
"Привет! Я AI-ассистент ТехноМир. "
"Задайте любой вопрос о наших товарах и услугах."
)
@dp.message()
async def handle_message(message: types.Message):
user_id = message.from_user.id
if user_id not in conversations:
conversations[user_id] = []
# Добавляем сообщение пользователя
conversations[user_id].append({
"role": "user",
"content": message.text
})
# Ограничиваем историю (последние 20 сообщений)
history = conversations[user_id][-20:]
# Запрос к OpenAI
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
*history
],
max_tokens=1000,
temperature=0.7,
)
answer = response.choices[0].message.content
# Сохраняем ответ в историю
conversations[user_id].append({
"role": "assistant",
"content": answer
})
await message.answer(answer)
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Шаг 3: Запуск
python bot.py
Откройте Telegram, найдите вашего бота и напишите ему. Он уже отвечает с помощью AI!
Вариант 2: Веб-чатбот (No-code)
Если вам не нужен Telegram, а нужен виджет на сайт — используйте платформы с встроенным AI:
Crisp
- Стоимость: от $25/мес (Essentials) до $95/мес (Unlimited)
- AI-бот: загрузите FAQ и документацию, бот обучится автоматически
- Поддерживает русский язык
- Интеграция: сайт, Telegram, WhatsApp, Instagram
Tidio
- Стоимость: бесплатно (до 100 диалогов/мес), от $29/мес (Communicator)
- AI-бот Lyro: обучается на вашем контенте за 5 минут
- Drag-and-drop конструктор сценариев
- Аналитика и A/B-тестирование
Настройка Crisp (5 минут)
- Зарегистрируйтесь на crisp.chat
- Добавьте сайт в панели управления
- Вставьте JavaScript-код виджета на ваш сайт
- Перейдите в Plugins → AI Copilot
- Загрузите ваши FAQ, документацию, страницы сайта
- Активируйте автоматические ответы
Вариант 3: RAG-бот — ответы из вашей базы знаний
Самый мощный подход: бот находит релевантную информацию в ваших документах и формирует ответ на её основе. Не выдумывает — цитирует.
Архитектура
Документы → Разбиение на чанки → Эмбеддинги → Векторная БД
↓
Вопрос пользователя → Поиск похожих чанков → LLM → Ответ
Реализация на LlamaIndex + Telegram
import asyncio
import os
from dotenv import load_dotenv
from aiogram import Bot, Dispatcher, types
from aiogram.filters import CommandStart
from llama_index.core import (
VectorStoreIndex,
SimpleDirectoryReader,
Settings,
)
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
load_dotenv()
# Настройка LLM
Settings.llm = OpenAI(model="gpt-4o-mini", temperature=0.3)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
# Загрузка и индексация документов
print("Загрузка документов...")
documents = SimpleDirectoryReader("./knowledge_base").load_data()
index = VectorStoreIndex.from_documents(documents, show_progress=True)
query_engine = index.as_query_engine(
similarity_top_k=3,
response_mode="compact",
)
print(f"Индексировано {len(documents)} документов")
# Telegram-бот
bot = Bot(token=os.getenv("TELEGRAM_TOKEN"))
dp = Dispatcher()
@dp.message(CommandStart())
async def start(message: types.Message):
await message.answer(
"Привет! Я AI-ассистент. Задайте вопрос по нашей "
"документации, и я найду ответ."
)
@dp.message()
async def handle_message(message: types.Message):
await message.answer("Ищу ответ в базе знаний...")
response = await asyncio.to_thread(
query_engine.query, message.text
)
sources = set()
for node in response.source_nodes:
if "file_name" in node.metadata:
sources.add(node.metadata["file_name"])
answer = str(response)
if sources:
answer += f"\n\n📄 Источники: {', '.join(sources)}"
await message.answer(answer)
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Положите ваши документы (PDF, DOCX, TXT, MD) в папку knowledge_base/ и запустите бота.
Стоимость и масштабирование
Расчёт стоимости API
| Метрика | Значение |
|---|---|
| Средний запрос (input) | ~500 токенов (промпт + контекст RAG) |
| Средний ответ (output) | ~200 токенов |
| Стоимость GPT-4o-mini (input) | $0.15 / 1M токенов |
| Стоимость GPT-4o-mini (output) | $0.60 / 1M токенов |
| Стоимость 1 диалога | ~$0.0002 (~0.02 ₽) |
| 1 000 диалогов/день | ~$0.20/день (~$6/мес, ~550 ₽) |
| 10 000 диалогов/день | ~$2.00/день (~$60/мес, ~5 500 ₽) |
Для GPT-4o (не mini) стоимость выше примерно в 15 раз, но качество ответов лучше для сложных вопросов.
Снижение стоимости
- Кэширование ответов — одинаковые вопросы (FAQ) не отправлять в API повторно
- Использование GPT-4o-mini — в 15 раз дешевле GPT-4o при хорошем качестве
- Локальная модель — замените OpenAI на Ollama + Llama 3.2, стоимость API = $0
- Ограничение контекста — передавайте только 3–5 релевантных чанков, не всю историю
Масштабирование
- До 100 пользователей/день: один сервер, SQLite для хранения
- 100–1 000: PostgreSQL, Redis для кэширования, очередь задач (Celery)
- 1 000+: микросервисы, горизонтальное масштабирование, мониторинг (Grafana)
Частые ошибки
- Слишком общий промпт — бот отвечает на любые вопросы, включая нерелевантные. Ограничьте тематику в system prompt.
- Нет fallback на оператора — если бот не уверен в ответе, он должен предложить связь с человеком.
- Игнорирование аналитики — логируйте вопросы, на которые бот не смог ответить. Это ваша точка роста.
- Слишком длинный контекст — передавать всю историю из 50 сообщений дорого и бесполезно. Ограничьте 10–20 последними.
FAQ
Сколько стоит создание AI-чатбота?
DIY (самому): $0–50 на API за первый месяц + время на разработку. На заказ у фрилансера: 50 000–150 000 ₽. У агентства: 200 000–1 000 000 ₽.
Какую модель выбрать для бота?
GPT-4o-mini для большинства задач (дешёвый, быстрый, достаточно умный). GPT-4o для сложных вопросов. Claude Sonnet — если важна точность следования инструкциям.
Можно ли обойтись без программирования?
Да. Crisp, Tidio, Chatfuel, ManyChat имеют встроенный AI. Просто загрузите ваш контент и включите бота. Но гибкость будет ограничена.