ДокументацияБот поддержки по вашей базе знаний

Бот поддержки по вашей базе знаний

СценарииНовичок25 мин

У вас будет бот, который отвечает клиентам только по вашей базе знаний, а если ответа нет — пишет «передаю сотруднику» и шлёт вопрос в чат операторов.

Нужно: ключ fetch_... с лимитом расхода (создать, лимиты), баланс (пополнить), Python 3.10+. Для Telegram — бот из статьи Telegram-бот с нейросетью.

  1. 1
    Соберите базу знаний

    Создайте knowledge_base.md: доставка, оплата, возврат, гарантия, часы работы, контакты. Пишите конкретно, с цифрами. Пример — ниже.

  2. 2
    Сохраните код

    Скопируйте код из раздела «Готовый код» ниже в support.py рядом с базой.

  3. 3
    Проверьте в терминале
    bash
    pip install openai
    export ZUKKO_API_KEY="fetch_..."
    python support.py

    Задайте вопросы из базы и вне её. На каждый придёт JSON: ответ, needs_human и причина.

  4. 4
    Проверьте на 20 реальных вопросах

    Возьмите вопросы клиентов, включая неудобные. Бот не должен выдумывать цены и сроки. Автоматическая проверка — LLM как судья.

1Пример базы знаний

knowledge_base.md
# Доставка
- По Москве курьером: 1–2 дня, 300 ₽, бесплатно от 5000 ₽.
- По России: СДЭК, 3–7 дней, стоимость считается при оформлении заказа.
- Самовывоз: Москва, ул. Примерная, 1, пн–пт 10:00–20:00.

# Оплата
- Картой на сайте, через СБП, наличными курьеру.

# Возврат
- 14 дней с момента получения, если товар не был в использовании.
- Деньги возвращаем в течение 10 рабочих дней тем же способом оплаты.

# Контакты
- Поддержка работает пн–пт 9:00–21:00 по Москве.

2Готовый код

Модель — claude-haiku-5-5 (или deepseek-v4.1-flash): обе строго соблюдают схему JSON. Вопросы без ответа пишутся в unanswered.jsonl — раз в неделю дописывайте их в базу. Изменили базу — перезапустите бота.

support.py
import asyncio
import json
import logging
import os
from datetime import datetime, timezone
from pathlib import Path

from openai import APIConnectionError, APIStatusError, AsyncOpenAI

log = logging.getLogger("support")

MODEL = os.environ.get("ZUKKO_SUPPORT_MODEL", "claude-haiku-5-5")
COMPANY = "Магазин «Пример»"
KNOWLEDGE_BASE = Path(os.environ.get("KB_FILE", "knowledge_base.md")).read_text(encoding="utf-8")

3Подключите к Telegram

  1. 1
    Положите файлы рядом

    support.py и knowledge_base.md — в папку с bot.py из статьи Telegram-бот с нейросетью.

  2. 2
    Создайте чат операторов

    Создайте группу в Telegram и добавьте в неё бота.

  3. 3
    Вставьте код в bot.py

    Код заменяет on_message и добавляет команду /id. В main() добавьте строку app.add_handler(CommandHandler("id", show_id)).

    bot.py (добавить)
    from support import answer as support_answer
    
    ADMIN_CHAT_ID = int(os.environ["ADMIN_CHAT_ID"])  # чат, куда приходят вопросы для оператора
    
    
    async def show_id(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
        """Команда /id: подсказывает номер чата — нужен для ADMIN_CHAT_ID."""
        await update.message.reply_text(f"chat id: {update.effective_chat.id}")
    
    
    async def on_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
        chat_id = update.effective_chat.id
        if chat_id == ADMIN_CHAT_ID:
            return  # в рабочем чате операторов бот молчит
  4. 4
    Узнайте номер чата

    Напишите /id в группе операторов. Бот пришлёт номер (у групп он начинается с минуса).

  5. 5
    Запустите

    Задайте export ADMIN_CHAT_ID="-100..." и запустите бота. Вопросы для человека придут в чат операторов, клиенту оператор пишет сам.

4Если не работает

Что видитеЧто сделать
FileNotFoundError: knowledge_base.mdПоложите файл рядом с support.py или укажите путь в KB_FILE
Бот выдумывает цену или срокДобавьте факт в базу. Повторяется — возьмите модель сильнее
Бот зовёт человека почти всегдаДобавьте в базу формулировки клиентов, посмотрите unanswered.jsonl
В логе «неверный JSON»Возьмите claude-haiku-5-5 или deepseek-v4.1-flash
Операторам ничего не приходитОтправьте /id в группе операторов и скопируйте номер с минусом в ADMIN_CHAT_ID. Бот должен быть в группе
401, 402, 403, 429См. Telegram-бот и Ошибки API
Бот поддержки по вашей базе знаний · Документация Zukko