AI-чат на сайте — уже не «вау», а ожидаемая функция в B2B и продуктовых сайтах. Расскажу, как это собирается на стеке Next.js плюс OpenAI или Claude, и какие моменты на старте часто упускают.
Архитектура: фронт, бэк, провайдер
Базовая схема: пользователь пишет в виджет на сайте, фронт шлёт запрос на ваш API-роут, ваш сервер обращается к OpenAI/Anthropic API, ответ стримом возвращается на фронт.
Прямой запрос с фронта в OpenAI — большая ошибка. Это утечка API-ключа и неконтролируемые расходы. Всегда промежуточный слой на вашем сервере.
В Next.js это API-роут или Server Action, который проксирует запросы. Стриминг — через Web Streams API или Server-Sent Events. Vercel AI SDK даёт удобные обёртки и для бэка, и для UI.
Стриминг ответа
LLM-ответы могут идти 5-30 секунд. Без стриминга пользователь видит спиннер всё это время и часто закрывает чат.
const stream = await openai.chat.completions.create({
model: "gpt-4o-mini",
messages,
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || "";
// отправляем чанк на фронт
}
На фронте — useChat из ai/react или собственная реализация с EventSource. UX становится мгновенным: первые слова приходят за 0.5-1 секунду.
Контекст и память
Чат без памяти — раздражает. Минимально: храните последние 10-20 сообщений диалога. Передавайте их в каждом запросе как часть messages.
Долговременная память — отдельная тема. Можно делать через summarization (после N сообщений сжимаем диалог в краткое резюме) или через RAG (индексируем предыдущие диалоги в pgvector, при новом сообщении ищем релевантное).
Для сайта обычно хватает короткой памяти и хорошего системного промпта.
Системный промпт и ограничения
Системный промпт — главное место настройки. В нём вы:
- Задаёте роль (например, «Ты — помощник по нашему продукту»).
- Описываете границы (что отвечать, что не отвечать).
- Прикладываете контекст о компании (FAQ, описание услуг).
Для длинного контекста (FAQ, документация) — RAG. Не пихайте всё в системный промпт: это дорого, и качество падает.
Безопасность и злоупотребления
AI-чат на публичном сайте — мишень для злоупотреблений. Что делаем:
- Rate limit по IP: 10-20 сообщений в минуту, 100-200 в час.
- Лимит длины сообщения: 2000-4000 символов.
- Лимит токенов в ответе: 500-1000.
- Фильтрация по словарю (запрос про цены конкурента → стандартный ответ).
- Капча после 5 сообщений от анонима.
Без этого один скрипт за ночь спалит вам 50 000 рублей на API.
RAG для базы знаний
Если у вас 50-500 страниц документации/FAQ — RAG почти обязателен. Архитектура:
- Разбиваете контент на чанки (500-1000 токенов с overlap 100).
- Получаете эмбеддинги через OpenAI
text-embedding-3-small. - Кладёте в pgvector или Qdrant с метаданными.
- На запрос пользователя — генерируете эмбеддинг, ищете top-5 чанков, вставляете их в промпт.
Это даёт ответы, основанные на ваших данных, без галлюцинаций.
Стоимость
Прикидки на gpt-4o-mini (актуальные цены меняются — сверяйтесь с OpenAI):
- Сообщение пользователя 100 токенов плюс контекст 2000 токенов плюс ответ 300 токенов = 2400 токенов на запрос.
- 1000 диалогов в месяц по 5 сообщений = 12 миллионов токенов.
Дёшево, пока не подключили GPT-4 или большие контексты. С Claude Sonnet или GPT-4o цена выше в 5-10 раз.
Приватность и 152-ФЗ
Если в чате собираются персональные данные — это нужно обрабатывать по 152-ФЗ. OpenAI и Anthropic — иностранные сервисы, передача требует уведомления о трансграничном переводе.
Если приватность критична — рассмотрите локальные модели (Llama 3, Mistral, GigaChat, YandexGPT). Качество ниже флагманов OpenAI/Claude, но данные не уходят за границу.
Итого
AI-чат на сайте — это API-прокси с rate limit, стриминг, короткая память и RAG для контекста. На стандартном стеке Next.js плюс OpenAI это собирается за 1-2 недели для MVP. Главные засады: безопасность, контроль расходов и юридические нюансы при персональных данных.
Частые вопросы
Какая базовая архитектура AI-чата на сайте?
Базовая схема: пользователь пишет в виджет на сайте, фронт шлёт запрос на ваш API-роут, ваш сервер обращается к OpenAI/Anthropic API, ответ стримом возвращается на фронт. Прямой запрос с фронта в OpenAI — большая ошибка. Это утечка API-ключа и неконтролируемые расходы. Всегда промежуточный слой на вашем сервере. В Next.js это API-роут или Server Action, который проксирует запросы. Стриминг через Web Streams API или Server-Sent Events. Vercel AI SDK даёт удобные обёртки.
Зачем нужен стриминг в AI-чате?
LLM-ответы могут идти 5-30 секунд. Без стриминга пользователь видит спиннер всё это время и часто закрывает чат. С stream: true в OpenAI или Anthropic API ответ приходит чанками, и каждый чанк отправляется на фронт. На фронте — useChat из ai/react или собственная реализация с EventSource. UX становится мгновенным: первые слова приходят за 0.5-1 секунду. Это критично для удержания пользователя в диалоге — длительный спиннер убивает конверсию.
Как организовать память диалога в AI-чате?
Чат без памяти — раздражает. Минимально: храните последние 10-20 сообщений диалога. Передавайте их в каждом запросе как часть messages. Долговременная память — отдельная тема. Можно делать через summarization (после N сообщений сжимаем диалог в краткое резюме) или через RAG (индексируем предыдущие диалоги в pgvector, при новом сообщении ищем релевантное). Для сайта обычно хватает короткой памяти и хорошего системного промпта. Длинная память увеличивает стоимость токенов в каждом запросе.
Как защитить AI-чат от злоупотреблений?
AI-чат на публичном сайте — мишень для злоупотреблений. Что делаем. Rate limit по IP: 10-20 сообщений в минуту, 100-200 в час. Лимит длины сообщения: 2000-4000 символов. Лимит токенов в ответе: 500-1000. Фильтрация по словарю (запрос про цены конкурента → стандартный ответ). Капча после 5 сообщений от анонима. Без этого один скрипт за ночь спалит вам 50 000 рублей на API. Это типичный сценарий, который стоит закрыть до публичного запуска чата.
Сколько стоит AI-чат на сайте в месяц?
Прикидки на gpt-4o-mini: сообщение пользователя 100 токенов плюс контекст 2000 токенов плюс ответ 300 токенов = 2400 токенов на запрос. 1000 диалогов в месяц по 5 сообщений = 12 миллионов токенов — обычно укладывается в несколько тысяч рублей. Дёшево, пока не подключили GPT-4 или большие контексты. С Claude Sonnet или GPT-4o цена выше в 5-10 раз. Без RAG системный промпт раздувается до десятков тысяч токенов, и стоимость кратно растёт. Кешируйте системный промпт через provider-side caching.
Как соблюсти 152-ФЗ с AI-чатом на сайте?
Если в чате собираются персональные данные — это нужно обрабатывать по 152-ФЗ. OpenAI и Anthropic — иностранные сервисы, передача требует уведомления о трансграничном переводе. Если приватность критична — рассмотрите локальные модели (Llama 3, Mistral, GigaChat, YandexGPT). Качество ниже флагманов OpenAI/Claude, но данные не уходят за границу. Для коммерческой эксплуатации в РФ часто оптимален гибрид: GigaChat или YandexGPT для основной логики, плюс открытая модель для специфических задач.