promptra
← Все статьи
Гайды14 мин чтения

Как сделать чат-бота на нейросети через API

Чат-бот на нейросети через API: архитектура, рабочий Python-код с историей диалога, выбор модели GPT, Claude или Gemini под бюджет и пример Telegram-бота.

Архитектура чат-бота на нейросети: пользователь, бэкенд приложения и LLM API через единый шлюз

Чтобы сделать чат-бота на нейросети, не нужно обучать свою модель и поднимать GPU-кластер. Достаточно взять готовую LLM — GPT, Claude или Gemini — и обращаться к ней по HTTP через API. Минимальный рабочий чат-бот на GPT — это примерно 15 строк Python: вы отправляете список сообщений в эндпоинт chat/completions, получаете ответ модели и показываете его пользователю. Вся «магия» уже внутри модели; ваша задача как разработчика — собрать вокруг неё тонкий слой: хранить историю диалога, подмешивать системный промпт, выбрать модель под бюджет и подключить транспорт (веб-чат, Telegram-бот, виджет на сайте).

Эта статья — пошаговый инженерный гайд для тех, кто пишет код. Разберём архитектуру чат-бота на нейросети от запроса пользователя до ответа модели, дадим рабочий Python-код с поддержкой контекста диалога, покажем, как gemini-чат-бот и бот на GPT отличаются только идентификатором модели в одном и том же коде, соберём Telegram-бот как реальный пример и посчитаем, во сколько обойдётся каждый запрос в рублях. Цены — из нашего каталога на 2026-05-29, без наценки на токены, оплата на юрлицо в рублях с закрывающими документами. Поехали.

Что такое чат-бот на нейросети через API

Чат-бот на нейросети — это приложение, которое принимает текст от пользователя, отправляет его большой языковой модели (LLM) и возвращает сгенерированный ответ. Слово «через API» здесь ключевое: вместо того чтобы держать модель у себя, вы вызываете её как внешний сервис по сети. Провайдер (OpenAI, Anthropic, Google) держит модель на своих серверах, а вы платите за токены — единицы текста, которые модель прочитала на входе и сгенерировала на выходе.

Принципиальное отличие чат-бота от одиночного запроса — память диалога. Сама по себе LLM не помнит предыдущие реплики: каждый запрос к API независим (stateless). Чтобы бот «помнил» контекст разговора, ваше приложение должно при каждом новом сообщении отправлять модели всю предыдущую переписку — список сообщений с ролями system, user, assistant. Именно поэтому архитектура чат-бота крутится вокруг управления этим списком: куда его складывать, как обрезать, когда сбрасывать.

Чем чат-бот на API отличается от готовых решений вроде интерфейса ChatGPT:

  • Готовый продукт (ChatGPT, Claude.ai) — это веб-приложение для конечного пользователя. Вы не контролируете промпты, не интегрируете в свой продукт, не получаете программный доступ.
  • Чат-бот на API — это ваш код. Вы задаёте поведение системным промптом, подключаете свою базу знаний, встраиваете бота в Telegram, на сайт, в CRM, в мобильное приложение — куда угодно, где есть HTTP-клиент.

Для российской команды есть ещё один слой: прямой доступ к API OpenAI, Anthropic и Google из РФ затруднён — карты не проходят, аккаунты блокируются. Поэтому в коде ниже мы обращаемся не напрямую к провайдеру, а через OpenAI-совместимый шлюз с рублёвой оплатой. С точки зрения кода разница — одна строка base_url. Подробно про доступ и оплату мы писали в гайде OpenAI API в России 2026.

Архитектура чат-бота: от запроса пользователя до ответа модели

Любой чат-бот на нейросети — это три слоя плюс внешний LLM API. Разберём поток одного сообщения.

  1. Клиент (транспорт). Откуда приходит текст: окно веб-чата, Telegram, виджет на сайте, голосовой ввод. Клиент только передаёт строку пользователя в бэкенд и показывает ответ.
  2. Бэкенд (ваш код). Сердце бота. Здесь живёт логика: получить сообщение, достать историю диалога этого пользователя, добавить системный промпт, собрать массив messages, вызвать LLM API, получить ответ, сохранить его в историю, вернуть клиенту.
  3. Хранилище состояния. Где лежит история переписки: в оперативной памяти процесса (для прототипа), в Redis (для продакшена с тысячами пользователей), в Postgres (если нужна постоянная история). Ключ — идентификатор пользователя или чата.
  4. LLM API. Внешний эндпоинт chat/completions, в который уходит массив сообщений и возвращается ответ модели.
Блок-схема потока сообщения в чат-боте: клиент передаёт текст в бэкенд, бэкенд достаёт историю из хранилища, добавляет системный промпт, отправляет массив сообщений в LLM API и возвращает ответ обратно клиенту

Что важно понять про массив messages — это и есть «состояние» диалога, которое вы каждый раз пересобираете и отправляете модели целиком:

[
  {"role": "system",    "content": "Ты вежливый ассистент службы поддержки."},
  {"role": "user",      "content": "Привет, как сбросить пароль?"},
  {"role": "assistant", "content": "Здравствуйте! Откройте настройки и..."},
  {"role": "user",      "content": "А если у меня нет доступа к почте?"}
]

Роль system задаёт характер и правила бота, роли user и assistant чередуются — это история. Модель читает весь массив и продолжает диалог следующей репликой assistant. Каждое сообщение в массиве — это входные токены, за которые вы платите. Отсюда главное архитектурное напряжение чат-бота: чем длиннее история, тем «умнее» контекст, но тем дороже каждый запрос. Об управлении этим — отдельный раздел ниже.

Рабочий Python-код: чат-бот с историей диалога

Перейдём к коду. Используем официальную библиотеку openai — она работает с любым OpenAI-совместимым эндпоинтом, в том числе с нашим. Установка:

pip install openai

Минимальный чат-бот без памяти — один запрос, одна реплика:

from openai import OpenAI

client = OpenAI(
    api_key="prm-xxxxxxxxxxxx",          # ключ из личного кабинета
    base_url="https://api.promptra.ru/v1",  # OpenAI-совместимый шлюз
)

response = client.chat.completions.create(
    model="openai/gpt-5.4",
    messages=[
        {"role": "system", "content": "Ты лаконичный ассистент. Отвечай по-русски."},
        {"role": "user", "content": "Объясни, что такое токен в LLM, в двух предложениях."},
    ],
)

print(response.choices[0].message.content)

Это уже работающий чат-бот на GPT, но без памяти: он ответит на один вопрос и забудет его. Чтобы бот держал контекст диалога, нужно хранить и пополнять массив messages. Вот полноценный консольный чат-бот с историей:

from openai import OpenAI

client = OpenAI(
    api_key="prm-xxxxxxxxxxxx",
    base_url="https://api.promptra.ru/v1",
)

SYSTEM_PROMPT = "Ты дружелюбный ассистент. Отвечай кратко и по делу, по-русски."

# История диалога. Системный промпт всегда первый.
history = [{"role": "system", "content": SYSTEM_PROMPT}]

def ask(user_text: str) -> str:
    # 1. Добавляем реплику пользователя в историю
    history.append({"role": "user", "content": user_text})

    # 2. Отправляем модели ВСЮ историю целиком
    response = client.chat.completions.create(
        model="openai/gpt-5.4",
        messages=history,
        temperature=0.6,
    )

    # 3. Сохраняем ответ модели — чтобы помнить его в следующем запросе
    answer = response.choices[0].message.content
    history.append({"role": "assistant", "content": answer})
    return answer

if __name__ == "__main__":
    print("Чат-бот запущен. Введите 'выход' для завершения.")
    while True:
        text = input("Вы: ")
        if text.strip().lower() in {"выход", "exit", "quit"}:
            break
        print("Бот:", ask(text))

Запустите его, и бот будет помнить разговор: спросите «как меня зовут?» после того как представитесь — он вспомнит, потому что вся переписка уезжает модели при каждом запросе. Три шага в функции ask — это и есть вся суть чат-бота: добавить вопрос, отправить историю, сохранить ответ.

Несколько практических деталей этого кода:

  • temperature — степень «творчества» модели от 0 до 2. Для поддержки и фактических ответов ставьте 0.2–0.5, для генерации идей и текстов — 0.7–1.0.
  • response.usage — в ответе модель возвращает prompt_tokens и completion_tokens. Это ровно то, за что вы платите. Логируйте их с первого дня, чтобы видеть расход.
  • Стриминг. Добавьте stream=True, и ответ придёт по кусочкам (как печатающийся текст в ChatGPT) — это улучшает ощущение скорости. Для веб- и Telegram-ботов почти обязательно.

Ограничение истории: как не сжечь бюджет на длинных диалогах

Наивное хранение всей истории имеет проблему: после 50 реплик каждый запрос тащит модели всю переписку, и вы платите за входные токены снова и снова. Контекст у современных моделей огромный (у GPT-5.4 и Claude Sonnet 4.6 — порядка миллиона токенов), так что технически влезет всё, но платить за это незачем. Две стандартные стратегии:

  • Скользящее окно. Храните системный промпт плюс последние N пар «вопрос-ответ» (например, 10). Старые реплики выкидываете. Просто и работает для большинства ботов.
  • Суммаризация. Когда история разрастается, отдельным дешёвым запросом просите модель сжать старую часть диалога в короткое резюме и заменяете им хвост истории. Сложнее, но сохраняет смысл длинных разговоров.

Простое скользящее окно поверх кода выше:

MAX_TURNS = 10  # сколько последних пар «вопрос-ответ» помнить

def trim(history: list) -> list:
    system = history[:1]              # системный промпт сохраняем всегда
    dialogue = history[1:]
    # оставляем последние MAX_TURNS*2 сообщений (вопрос + ответ)
    return system + dialogue[-MAX_TURNS * 2 :]

Вызывайте history = trim(history) перед каждым запросом — и расход на входные токены перестанет расти бесконтрольно.

Выбор модели под бюджет: Sonnet, GPT-5.4, DeepSeek или флагман

Главное решение, которое определяет и качество, и счёт вашего чат-бота, — какую модель подключить. Хорошая новость: в OpenAI-совместимом API модель — это просто строка в параметре model. Сменить GPT на Claude или Gemini — поменять один идентификатор, код не трогаете.

Правило выбора простое: дорогую флагманскую модель берут только там, где дешёвая систематически ошибается. Для массовых задач чат-бота — ответы на типовые вопросы, классификация обращений, извлечение полей из текста — разница в качестве между флагманом и средней моделью почти не видна, а в счёте видна сразу. Для сложного многошагового рассуждения, длинного кода, анализа с множеством условий — наоборот, экономия на модели выходит дороже из-за ошибок.

Цены ниже — из нашего каталога на 2026-05-29, рубли за 1 млн токенов, по курсу ЦБ 71.668 ₽/$, без наценки на токены. Для чат-бота обычно важнее output (ответы модели длиннее, чем вопросы):

МодельВход, ₽/1МВыход, ₽/1МКонтекстКогда брать в чат-бот
Claude Haiku 4.570350200KРоутинг, классификация, простые ответы
Qwen 3.6 Plus201301MМассовые ответы, многоязычие, бюджет
DeepSeek V4 Pro30601MСамый дешёвый под объём, код и логика
GPT-5.4 Mini50320400KДешёвый GPT для автоматизации
Claude Sonnet 4.621010701MБаланс качества и цены, рабочая лошадка
GPT-5.417010701.05MУниверсал для чата и общих задач
Gemini 3.1 Pro Preview1408601MСильный reasoning, мультимодал с аудио
Claude Opus 4.735017901MСложный код, агенты, долгое рассуждение
GPT-5.535021501.05MФлагман OpenAI для самых тяжёлых задач
Горизонтальная столбчатая диаграмма стоимости 1 млн выходных токенов в рублях для чат-бота: DeepSeek V4 Pro 60 ₽ терракотовым, Qwen 3.6 Plus 130 ₽, Claude Haiku 4.5 350 ₽, GPT-5.4 1070 ₽, Claude Opus 4.7 1790 ₽, GPT-5.5 2150 ₽, заголовок и подписи на русском

Как читать таблицу под типовые сценарии чат-бота:

  • Массовый бот поддержки, FAQ-бот, ассистент в Telegram с большим потоком. Берите дешёвый низ таблицы: DeepSeek V4 Pro, Qwen 3.6 Plus или GPT-5.4 Mini. На простых ответах качества хватает, а 60–320 ₽ за миллион выходных токенов держат счёт под контролем при тысячах диалогов.
  • Универсальный бот среднего качества. Claude Sonnet 4.6 и GPT-5.4 — рабочие лошадки: оба 1070 ₽ за миллион выхода, оба тянут связные диалоги, рассуждение и код среднего уровня. С них стоит начинать, если не уверены.
  • Сложный ассистент: код-помощник, агент с инструментами, юридический или аналитический бот. Сюда уже флагманы — Claude Opus 4.7, GPT-5.5 или Gemini 3.1 Pro. Платите за глубину только там, где она реально нужна.

Отдельно про DeepSeek V4 Pro: цена 30/60 ₽ — это промо-тариф со скидкой 75%, который действует до 2026-05-31. После окончания акции базовая ставка будет примерно вчетверо выше (около 120/240 ₽ за миллион). Если строите бота на нём — закладывайте базовую цену в расчёты заранее. Подробный разбор каждой флагманской модели — в статьях про GPT-5.5 API за рубли, а также на страницах ChatGPT API, Claude API и Gemini API.

Один код — любая модель: GPT, Claude, Gemini

Поскольку шлюз OpenAI-совместимый, gemini-чат-бот и бот на GPT — это один и тот же код с разным значением model. Можно даже маршрутизировать запросы по сложности: дешёвая модель на простое, флагман на сложное.

# Простой вопрос → дёшево
model = "deepseek/deepseek-v4-pro"

# Нужен сильный reasoning → флагман
model = "openai/gpt-5.5"

# Нужен мультимодал с аудио → Gemini
model = "google/gemini-3.1-pro-preview"

# Код вызова не меняется — только строка model
response = client.chat.completions.create(model=model, messages=history)
Схема маршрутизации чат-бота по моделям: входящие запросы делятся ромбом «Сложность задачи?» на ветку 80 процентов к дешёвой модели DeepSeek и ветку 20 процентов к флагману GPT-5.5, подпись внизу «Один API, выбор модели параметром model», русские подписи

Telegram-бот на нейросети: рабочий пример

Telegram — самый частый транспорт для чат-бота в рунете: не нужно делать фронтенд, аудитория уже там, бесплатный хостинг диалогов. Соберём телеграм-бот на нейросети поверх кода выше. Понадобится библиотека python-telegram-bot и токен бота от @BotFather:

pip install python-telegram-bot openai
import os
from collections import defaultdict
from openai import OpenAI
from telegram import Update
from telegram.ext import (
    Application, CommandHandler, MessageHandler, filters, ContextTypes,
)

client = OpenAI(
    api_key=os.environ["LLM_API_KEY"],
    base_url="https://api.promptra.ru/v1",
)

SYSTEM_PROMPT = "Ты дружелюбный Telegram-ассистент. Отвечай кратко, по-русски."
MAX_TURNS = 10

# История по каждому чату отдельно: ключ — chat_id
histories: dict[int, list] = defaultdict(
    lambda: [{"role": "system", "content": SYSTEM_PROMPT}]
)

async def start(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
    histories[update.effective_chat.id] = [
        {"role": "system", "content": SYSTEM_PROMPT}
    ]
    await update.message.reply_text("Привет! Я бот на нейросети. Спрашивай.")

async def on_message(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
    chat_id = update.effective_chat.id
    history = histories[chat_id]
    history.append({"role": "user", "content": update.message.text})

    # Скользящее окно: системный промпт + последние пары
    trimmed = history[:1] + history[1:][-MAX_TURNS * 2 :]

    response = client.chat.completions.create(
        model="openai/gpt-5.4",
        messages=trimmed,
        temperature=0.6,
    )
    answer = response.choices[0].message.content
    history.append({"role": "assistant", "content": answer})
    await update.message.reply_text(answer)

def main():
    app = Application.builder().token(os.environ["TELEGRAM_TOKEN"]).build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, on_message))
    app.run_polling()

if __name__ == "__main__":
    main()

Запуск:

export TELEGRAM_TOKEN="123456:ABC-DEF..."   # от @BotFather
export LLM_API_KEY="prm-xxxxxxxxxxxx"       # из личного кабинета
python bot.py

Это полноценный телеграм-бот с памятью на каждый чат: каждый пользователь ведёт свой диалог, бот помнит контекст в пределах последних десяти реплик. Ключевое отличие от консольной версии — словарь histories с ключом chat_id: у каждого собеседника своя история, они не смешиваются.

Схема Telegram-бота на нейросети: пользователь пишет в Telegram, бот на сервере хранит отдельную историю по chat_id, отправляет её в LLM API через шлюз и возвращает ответ в чат, русские подписи к блокам

Что добавить для продакшена:

  • Перенести историю в Redis. Словарь в памяти теряется при перезапуске и не масштабируется на несколько процессов. Redis с TTL на ключ решает оба вопроса.
  • Индикатор набора. await ctx.bot.send_chat_action(chat_id, "typing") перед запросом — пользователь видит «бот печатает».
  • Обработка ошибок и лимитов. Оборачивайте вызов API в try/except, на таймауте показывайте вежливое сообщение, логируйте response.usage для контроля расхода.
  • Webhook вместо polling. Для нагруженного бота run_webhook эффективнее, чем run_polling.

Сколько стоит чат-бот в месяц: прикидка

Посчитаем расход на реальном примере. Допустим, телеграм-бот поддержки обрабатывает 1000 диалогов в день, в среднем диалог — 6 реплик. Возьмём средний размер: вход (история + промпт) около 800 токенов на запрос, выход около 200 токенов.

На один диалог из 6 реплик: примерно 6 запросов × (800 вход + 200 выход) ≈ 4800 входных + 1200 выходных токенов. За день при 1000 диалогов — около 4.8 млн входных и 1.2 млн выходных токенов. За месяц (30 дней) — примерно 144 млн входных и 36 млн выходных.

Стоимость в месяц по каталожным ценам:

МодельВход 144МВыход 36МИтого/мес
DeepSeek V4 Pro (промо)~4 320 ₽~2 160 ₽~6 480 ₽
Qwen 3.6 Plus~2 880 ₽~4 680 ₽~7 560 ₽
GPT-5.4 Mini~7 200 ₽~11 520 ₽~18 720 ₽
GPT-5.4 / Sonnet 4.6~24 480 ₽~38 520 ₽~63 000 ₽

Цифры приблизительные — реальный расход зависит от длины ваших промптов и ответов, но порядок виден: на массовом боте выбор модели меняет счёт в десять раз. Для FAQ-бота берите дешёвый низ таблицы; флагман на таком потоке экономически не оправдан. Сократить вход помогает скользящее окно из раздела выше — без него история раздувается и счёт растёт.

К токенам добавляется сервисная комиссия 5% — она удерживается один раз при пополнении баланса (за работу сервиса, эквайринг, биллинг), а не с каждого токена. На сами цены токенов наценки нет: они один в один с провайдером по курсу ЦБ.

Оплата чат-бота на юрлицо в рублях

Для пет-проекта вопрос оплаты не стоит — пополнили баланс картой и работаете. Но если чат-бот — это рабочий инструмент компании или продукт с пользователями, расходы на LLM API нужно проводить по бухгалтерии. Прямой доступ к OpenAI, Anthropic и Google из России для этого не подходит: оплата идёт через зарубежные карты без нормальных закрывающих документов, а аккаунты нестабильны.

У нас оплата идёт на юрлицо — ООО «ТРАФИК АГРЕГАТОР» (ИНН 9707022118) — в рублях, с полным пакетом первичных документов: договор-оферта, счёт, акт, счёт-фактура и УПД. Документооборот ведём через ЭДО (Диадок, СБИС), так что закрывающие попадают прямо в вашу учётную систему. Расходы на API чат-бота корректно учитываются как услуги, а не висят серой выплатой на сотруднике. Про юридическую сторону подробно — в статье Легально ли использовать OpenAI/Claude на юрлицо в РФ.

С технической стороны это ничего не меняет: тот же OpenAI-совместимый API, тот же код, одна строка base_url. Вы просто получаете предсказуемый доступ к моделям и нормальные документы для бухгалтерии.

FAQ

Как сделать чат-бота на нейросети с нуля?

Возьмите готовую модель (GPT, Claude или Gemini) и обращайтесь к ней по API — обучать свою не нужно. Минимальный чат-бот на Python — около 15 строк: установите библиотеку openai, создайте клиент с вашим ключом и base_url, отправьте список сообщений в chat.completions.create, покажите ответ. Чтобы бот помнил диалог, храните массив messages и пополняйте его репликами пользователя и модели при каждом запросе. Готовый рабочий код — в разделах выше.

Какая нейросеть лучше для чат-бота?

Зависит от задачи и бюджета. Для массовых ботов (FAQ, поддержка, классификация) хватает дешёвых моделей: DeepSeek V4 Pro (60 ₽ за 1М выхода), Qwen 3.6 Plus (130 ₽) или GPT-5.4 Mini (320 ₽). Для универсального бота среднего качества — Claude Sonnet 4.6 или GPT-5.4 (оба 1070 ₽). Для сложных ассистентов с кодом и многошаговым рассуждением — флагманы Claude Opus 4.7, GPT-5.5 или Gemini 3.1 Pro. Правило: флагман берут только там, где дешёвая модель систематически ошибается.

Как сделать чат-бота на GPT в Telegram?

Соберите бота из двух частей: библиотека python-telegram-bot принимает сообщения из Telegram, а библиотека openai отправляет их модели. Для каждого чата храните отдельную историю диалога с ключом chat_id, чтобы пользователи не мешали друг другу. Полный рабочий пример телеграм-бота на нейросети с памятью на каждый чат — в разделе «Telegram-бот на нейросети» выше. Токен бота берётся у @BotFather, ключ к API — в личном кабинете.

Как чат-бот запоминает контекст диалога?

Сама модель не помнит ничего — каждый запрос к API независим. Память реализует ваше приложение: оно хранит массив сообщений (system, user, assistant) и при каждом новом вопросе отправляет модели всю предыдущую переписку целиком. Модель читает историю и продолжает диалог. Чтобы не платить за бесконечно растущую историю, применяют скользящее окно (хранить последние N пар реплик) или суммаризацию старой части диалога.

Сколько стоит чат-бот на нейросети через API?

Платите только за токены — текст на входе и выходе. Для бота на 1000 диалогов в день на дешёвой модели (DeepSeek, Qwen) расход — порядка 6 500–7 500 ₽ в месяц; на универсальной (GPT-5.4, Sonnet 4.6) — около 63 000 ₽. Цифры зависят от длины промптов и ответов; точную прикидку с разбивкой смотрите в разделе «Сколько стоит чат-бот в месяц». Цены на токены — без наценки, по курсу ЦБ; сервисная комиссия 5% берётся только при пополнении баланса.

Можно ли менять модель в чат-боте без переписывания кода?

Да. В OpenAI-совместимом API модель — это просто строка в параметре model. Чтобы переключить бота с GPT на Claude или Gemini, поменяйте одно значение (openai/gpt-5.4anthropic/claude-sonnet-4.6google/gemini-3.1-pro-preview), остальной код не трогаете. Это позволяет маршрутизировать запросы по сложности: дешёвую модель на простые вопросы, флагман на сложные.

Если хотите обсудить подключение, подобрать модель под нагрузку вашего чат-бота или посчитать стоимость под конкретный сценарий — напишите команде Promptra напрямую в Telegram: t.me/nesterov_av. Без эскалаций и саппорта первой линии — технические вопросы решаются за один разговор.

Promptra

Готовы попробовать Promptra?

Один API-ключ ко всем флагманским LLM. Оплата на юр.лицо, цены в рублях по курсу ЦБ. Тестовые токены бесплатно.

Promptra

Готовы попробовать Promptra?

Один API-ключ ко всем флагманским LLM. Оплата на юр.лицо, цены в рублях по курсу ЦБ. Тестовые токены бесплатно.