Зачем бизнесу AI-ассистент (и почему прямо сейчас)
Давайте начнём с честного вопроса: а вам вообще нужен AI-ассистент? Может, это просто модный хайп?
Вот несколько признаков того, что вам пора задуматься:
- Ваша служба поддержки отвечает на одни и те же вопросы каждый день
- Клиенты пишут в нерабочее время и не получают ответа до утра
- Менеджеры тратят полдня на объяснение условий доставки/возврата/оплаты
- У вас есть FAQ-страница, которую никто не читает (классика жанра)
- Новые сотрудники задают одинаковые вопросы каждую неделю
Если хотя бы 2 пункта - про вас, то AI-ассистент окупится за первый месяц. Не преувеличиваем. А теперь давайте его сделаем.
Что мы будем делать
За неделю мы соберём полноценного AI-ассистента, который:
- Знает всё о вашем бизнесе (товары, услуги, условия, FAQ)
- Отвечает на вопросы клиентов 24/7
- Не придумывает ерунду (отвечает только по вашим данным)
- Может работать в Telegram, на сайте или где угодно
- Стоит $50-100 в месяц (а не $50,000, как "корпоративные решения")
Звучит как план? Поехали.
День 1-2: Собираем базу знаний
AI-ассистент хорош ровно настолько, насколько хороши данные, которые вы ему дали. Мусор на входе - мусор на выходе. Поэтому первый шаг - самый важный.
Что собирать
Соберите всё, что может пригодиться для ответов клиентам:
- FAQ - все частые вопросы и ответы
- Описания товаров/услуг - что продаёте, сколько стоит, чем отличается
- Условия - доставка, оплата, возврат, гарантия
- О компании - история, команда, контакты, режим работы
- Инструкции - как пользоваться продуктом, как оформить заказ
В каком формате
Идеальный формат - простой текст. Не нужно делать красивые PDF или презентации. AI читает текст, а не картинки.
// Пример файла base_knowledge/delivery.txt
// Просто текст, разделённый на логические блоки
# Доставка
## Сроки доставки
- Москва и МО: 1-2 рабочих дня
- Санкт-Петербург: 2-3 рабочих дня
- Другие города: 3-7 рабочих дней
- Самовывоз: в день заказа (после подтверждения)
## Стоимость доставки
- Бесплатно при заказе от 5000 руб
- Москва: 300 руб
- Санкт-Петербург: 400 руб
- Другие города: от 350 руб (зависит от региона)
## Отслеживание
После отправки вы получите трек-номер по SMS и email.
Отследить заказ можно на сайте в разделе "Мои заказы"
или по ссылке из SMS.
День 3: Настраиваем серверную часть
Теперь создадим сервер, который будет обрабатывать вопросы. Не пугайтесь кода - мы объясним каждую строчку:
// server.js - наш AI-ассистент
// Устанавливаем: npm install express openai fs
import express from "express"
import OpenAI from "openai"
import fs from "fs"
import path from "path"
// Создаём сервер
const app = express()
app.use(express.json()) // чтобы понимать JSON-запросы
// Подключаемся к OpenAI
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY // ключ из переменных окружения
})
// Загружаем базу знаний из текстовых файлов
function loadKnowledgeBase() {
const knowledgeDir = "./base_knowledge"
let allText = ""
// Читаем все .txt файлы из папки
const files = fs.readdirSync(knowledgeDir)
for (const file of files) {
if (file.endsWith(".txt")) {
const content = fs.readFileSync(
path.join(knowledgeDir, file),
"utf-8"
)
allText += `\n\n--- ${file} ---\n${content}`
}
}
console.log(`Загружено файлов: ${files.length}`)
console.log(`Общий размер базы знаний: ${allText.length} символов`)
return allText
}
// Загружаем при старте сервера
const knowledgeBase = loadKnowledgeBase()
console.log("База знаний загружена!")
console.log("Сервер готов к работе")
День 3 (продолжение): API для вопросов
// Добавляем обработку вопросов
// Системный промпт - инструкция для AI
// Это САМАЯ ВАЖНАЯ часть! От промпта зависит качество ответов
const systemPrompt = `Ты - AI-ассистент компании [Название вашей компании].
ПРАВИЛА:
1. Отвечай ТОЛЬКО на основе предоставленной базы знаний
2. Если в базе знаний нет информации для ответа - скажи:
"К сожалению, у меня нет информации по этому вопросу.
Пожалуйста, свяжитесь с нами: [контакты]"
3. Отвечай дружелюбно, но кратко и по делу
4. Не придумывай информацию - лучше признайся, что не знаешь
5. Если вопрос не связан с компанией - вежливо скажи,
что можешь помочь только по вопросам о компании
БАЗА ЗНАНИЙ:
${knowledgeBase}`
// Обработчик вопросов
app.post("/api/ask", async (req, res) => {
try {
const { question } = req.body
// Проверяем, что вопрос не пустой
if (!question || question.trim().length === 0) {
return res.status(400).json({ error: "Вопрос не может быть пустым" })
}
// Отправляем вопрос в ChatGPT вместе с базой знаний
const response = await openai.chat.completions.create({
model: "gpt-4o-mini", // быстрая и недорогая модель
temperature: 0.3, // меньше "творчества", больше точности
max_tokens: 500, // ограничиваем длину ответа
messages: [
{ role: "system", content: systemPrompt },
{ role: "user", content: question }
]
})
// Отправляем ответ клиенту
const answer = response.choices[0].message.content
res.json({
answer: answer,
// Сколько стоил этот запрос (для мониторинга расходов)
tokens_used: response.usage.total_tokens
})
} catch (error) {
console.error("Ошибка:", error.message)
res.status(500).json({
error: "Что-то пошло не так. Попробуйте ещё раз."
})
}
})
// Запускаем сервер
app.listen(3000, () => {
console.log("AI-ассистент запущен на порту 3000!")
console.log("Попробуйте: POST /api/ask с телом { question: \"....\" }")
})
Вот и всё! Серверная часть готова. Уже сейчас можно отправлять вопросы и получать ответы.
День 4: Делаем виджет для сайта
Серверная часть работает - теперь нужен красивый интерфейс. Сделаем чат-виджет, который можно встроить на любой сайт:
// chat-widget.js - виджет чата для сайта
// Подключается одной строкой: <script src="chat-widget.js"></script>
(function() {
// Создаём кнопку чата (кружок в правом нижнем углу)
const button = document.createElement("div")
button.innerHTML = "💬"
button.style.cssText = `
position: fixed;
bottom: 20px;
right: 20px;
width: 60px;
height: 60px;
border-radius: 50%;
background: #00ff88;
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
cursor: pointer;
box-shadow: 0 4px 20px rgba(0,255,136,0.3);
z-index: 10000;
transition: transform 0.2s;
`
button.onmouseover = () => button.style.transform = "scale(1.1)"
button.onmouseout = () => button.style.transform = "scale(1)"
// Создаём окно чата
const chat = document.createElement("div")
chat.style.cssText = `
position: fixed;
bottom: 90px;
right: 20px;
width: 380px;
max-height: 500px;
border-radius: 16px;
background: #1a1a1a;
border: 1px solid rgba(255,255,255,0.1);
display: none;
flex-direction: column;
overflow: hidden;
z-index: 10000;
box-shadow: 0 10px 40px rgba(0,0,0,0.5);
`
// HTML внутри окна чата
chat.innerHTML = `
<div style="padding:16px;background:#111;border-bottom:1px solid rgba(255,255,255,0.1)">
<div style="font-weight:bold;color:#fff;font-size:14px">
AI-ассистент
</div>
<div style="color:rgba(255,255,255,0.4);font-size:12px">
Обычно отвечаем за пару секунд
</div>
</div>
<div id="chat-messages" style="flex:1;overflow-y:auto;padding:16px;min-height:300px">
<div style="background:rgba(0,255,136,0.1);padding:10px 14px;border-radius:12px;
color:rgba(255,255,255,0.7);font-size:13px;max-width:80%">
Привет! Я AI-ассистент. Задайте мне любой вопрос о нашей компании.
</div>
</div>
<div style="padding:12px;border-top:1px solid rgba(255,255,255,0.1);display:flex;gap:8px">
<input id="chat-input" type="text" placeholder="Введите вопрос..."
style="flex:1;background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.1);
border-radius:10px;padding:10px 14px;color:#fff;font-size:13px;outline:none" />
<button id="chat-send"
style="background:#00ff88;color:#000;border:none;border-radius:10px;
padding:10px 16px;font-weight:bold;cursor:pointer;font-size:13px">
→
</button>
</div>
`
document.body.appendChild(button)
document.body.appendChild(chat)
// Открываем/закрываем чат
let isOpen = false
button.onclick = () => {
isOpen = !isOpen
chat.style.display = isOpen ? "flex" : "none"
button.innerHTML = isOpen ? "✕" : "💬"
}
// Отправка сообщения
const input = chat.querySelector("#chat-input")
const sendBtn = chat.querySelector("#chat-send")
const messages = chat.querySelector("#chat-messages")
async function sendMessage() {
const text = input.value.trim()
if (!text) return
// Показываем сообщение пользователя
messages.innerHTML += `
<div style="text-align:right;margin-top:12px">
<span style="background:rgba(255,255,255,0.1);padding:10px 14px;
border-radius:12px;color:#fff;font-size:13px;display:inline-block;
max-width:80%;text-align:left">${text}</span>
</div>`
input.value = ""
// Показываем индикатор загрузки
const loadingId = "loading-" + Date.now()
messages.innerHTML += `
<div id="${loadingId}" style="margin-top:12px">
<span style="color:rgba(255,255,255,0.3);font-size:13px">
Думаю...
</span>
</div>`
messages.scrollTop = messages.scrollHeight
try {
// Отправляем вопрос на сервер
const response = await fetch("/api/ask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ question: text })
})
const data = await response.json()
// Убираем индикатор загрузки
document.getElementById(loadingId).remove()
// Показываем ответ
messages.innerHTML += `
<div style="margin-top:12px">
<div style="background:rgba(0,255,136,0.1);padding:10px 14px;
border-radius:12px;color:rgba(255,255,255,0.8);font-size:13px;
max-width:85%;line-height:1.5">
${data.answer}
</div>
</div>`
} catch (err) {
document.getElementById(loadingId).remove()
messages.innerHTML += `
<div style="margin-top:12px">
<span style="color:rgba(255,100,100,0.7);font-size:13px">
Ошибка. Попробуйте ещё раз.
</span>
</div>`
}
messages.scrollTop = messages.scrollHeight
}
sendBtn.onclick = sendMessage
input.onkeydown = (e) => { if (e.key === "Enter") sendMessage() }
})()
// Теперь добавьте на сайт:
// <script src="/chat-widget.js"></script>
// И чат-виджет появится в правом нижнем углу!
День 5: Подключаем Telegram
Многие клиенты предпочитают Telegram. Подключить бота - дело на пару часов:
// telegram-bot.js
// Устанавливаем: npm install telegraf
import { Telegraf } from "telegraf"
// Создаём бота (токен получаем у @BotFather в Telegram)
const bot = new Telegraf(process.env.TELEGRAM_BOT_TOKEN)
// Приветствие при старте
bot.start((ctx) => {
ctx.reply(
"Привет! Я AI-ассистент компании [Название].\n\n" +
"Задайте мне любой вопрос о наших товарах, " +
"доставке, оплате или услугах.\n\n" +
"Например: \"Сколько стоит доставка в Москву?\""
)
})
// Обработка сообщений
bot.on("text", async (ctx) => {
const question = ctx.message.text
// Показываем, что бот "печатает"
await ctx.sendChatAction("typing")
try {
// Отправляем вопрос на наш сервер
const response = await fetch("http://localhost:3000/api/ask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ question })
})
const data = await response.json()
// Отправляем ответ пользователю
await ctx.reply(data.answer)
} catch (error) {
await ctx.reply(
"Извините, произошла ошибка. " +
"Попробуйте повторить вопрос или свяжитесь с нами напрямую."
)
}
})
// Запускаем бота
bot.launch()
console.log("Telegram-бот запущен!")
// Корректное завершение при остановке
process.once("SIGINT", () => bot.stop("SIGINT"))
process.once("SIGTERM", () => bot.stop("SIGTERM"))
День 6: Добавляем историю диалога
Сейчас наш бот отвечает на каждый вопрос отдельно. Но клиенты часто ведут диалог:
"Сколько стоит доставка?" - "300 рублей" - "А если заказ больше 5000?" - ???
Бот не помнит, что разговор про доставку! Исправим:
// Добавляем память диалогов
// Хранилище диалогов (в памяти - для простоты)
// В продакшене лучше использовать Redis или базу данных
const conversations = new Map()
// Максимум сообщений в истории (чтобы не тратить все токены)
const MAX_HISTORY = 10
app.post("/api/ask", async (req, res) => {
const { question, sessionId } = req.body
// sessionId - уникальный ID пользователя/сессии
// На сайте можно генерировать случайный ID при первом визите
// В Telegram - это ctx.from.id
// Получаем историю диалога (или создаём новую)
if (!conversations.has(sessionId)) {
conversations.set(sessionId, [])
}
const history = conversations.get(sessionId)
// Добавляем новый вопрос в историю
history.push({ role: "user", content: question })
// Обрезаем, если история слишком длинная
if (history.length > MAX_HISTORY) {
// Удаляем самые старые сообщения (но НЕ первое!)
history.splice(0, history.length - MAX_HISTORY)
}
// Отправляем в GPT с полной историей
const response = await openai.chat.completions.create({
model: "gpt-4o-mini",
temperature: 0.3,
messages: [
{ role: "system", content: systemPrompt },
...history // вся история диалога
]
})
const answer = response.choices[0].message.content
// Добавляем ответ в историю
history.push({ role: "assistant", content: answer })
res.json({ answer })
})
// Теперь бот помнит контекст:
// Клиент: "Сколько стоит доставка в Москву?"
// Бот: "Доставка в Москву стоит 300 рублей..."
// Клиент: "А если заказ больше 5000?"
// Бот: "При заказе от 5000 рублей доставка бесплатная!"
// (бот помнит, что речь про доставку)
День 7: Тестируем и запускаем
Последний день - тестирование. Вот чек-лист:
- Базовые вопросы - проверьте 20-30 типичных вопросов клиентов
- Каверзные вопросы - "какая у вас зарплата?", "расскажи анекдот" - бот должен корректно отклонять
- Несуществующая информация - спросите то, чего нет в базе знаний - бот должен честно ответить "не знаю"
- Контекст диалога - проверьте, что бот помнит предыдущие сообщения
- Нагрузка - отправьте 10 вопросов одновременно - всё должно работать
Что можно улучшить дальше
Базовый бот готов и работает. Но его можно сделать ещё лучше:
- Векторный поиск - вместо загрузки всей базы знаний в промпт, использовать RAG (поиск релевантных фрагментов). Это обязательно для больших баз знаний
- Аналитика - какие вопросы задают чаще всего? На какие бот не может ответить?
- Оценка ответов - кнопки "полезно/не полезно" под каждым ответом
- Передача оператору - если бот не может помочь - подключить живого человека
- Мультиязычность - GPT отлично работает на разных языках
- Интеграция с CRM - сохранять все диалоги, анализировать потребности клиентов
Всё это мы уже делали для наших клиентов. Базовый бот - за неделю. Продвинутый с RAG, аналитикой и интеграциями - за 1-2 недели. Если не хотите возиться с кодом сами - напишите нам, сделаем всё под ключ. А если хотите попробовать сами - эта статья вам в помощь.
Сколько это стоит
Давайте посчитаем месячные расходы на содержание бота:
| Статья расходов | Стоимость | Комментарий |
|---|---|---|
| OpenAI API (GPT-4o-mini) | $20-50/мес | Зависит от количества вопросов |
| Сервер (VPS) | $10-20/мес | Хватит самого простого |
| Домен + SSL | $1-2/мес | Если нужен свой домен для виджета |
| Итого | $30-70/мес | Дешевле одного сотрудника поддержки |
Для сравнения: один сотрудник службы поддержки обходится в 40,000-80,000 руб/месяц. AI-ассистент не заменит людей полностью, но может взять на себя 60-80% типовых вопросов. Считайте сами.
Реальные примеры использования
Вот несколько кейсов, которые мы реализовали (без имён клиентов - NDA):
- Интернет-магазин электроники - бот отвечает на вопросы о товарах, наличии, сравнивает характеристики. Снизил нагрузку на поддержку на 45%
- Юридическая компания - бот проводит первичную консультацию, определяет тип проблемы клиента и записывает на приём к нужному специалисту
- Образовательная платформа - бот-наставник, который помогает студентам с вопросами по курсу и даёт подсказки (но не решает за них!)
- HR-отдел крупной компании - внутренний бот для сотрудников. Отпуска, больничные, регламенты - всё в одном месте
Типичные ошибки (чтобы вы их не повторяли)
- Слишком креативный промпт - не просите бота "быть весёлым и креативным". Клиентам нужны точные ответы, а не стендап
- Нет fallback-а - если бот не знает ответ, он должен предложить связаться с живым человеком. Не оставляйте клиента в тупике
- Устаревшая база знаний - обновили цены на сайте, но забыли обновить базу для бота? Бот будет говорить старые цены. Настройте регулярное обновление
- Нет лимитов - без ограничений один любопытный пользователь может "наговорить" на $100 за день. Добавьте лимит запросов
Итого: ваш план на неделю
- День 1-2: Собираем и структурируем базу знаний
- День 3: Настраиваем сервер и API
- День 4: Делаем виджет для сайта
- День 5: Подключаем Telegram
- День 6: Добавляем историю диалогов
- День 7: Тестируем и запускаем!
Это базовый AI-ассистент, который уже приносит пользу. Дальше можно улучшать бесконечно: добавлять RAG, аналитику, интеграции с CRM и мессенджерами.
Главное - начать. Базовый бот за неделю лучше идеального бота, который "когда-нибудь потом".
Если хотите сэкономить время и получить сразу продвинутую версию - мы в ENOT.SOFTWARE делаем AI-ассистентов для бизнеса "под ключ". От идеи до запуска - 1-2 недели. Оставьте заявку, и мы бесплатно оценим, подходит ли AI-ассистент для вашего бизнеса. Спойлер: в 90% случаев - подходит.