Зауважте: коли користувач заходить на сайт, він хоче отримати відповідь миттєво. Стандартні FAQ та форми зворотного зв'язку не встигають за очікуваннями. Клієнт іде — і це втрата ліда. Ми вирішили цю проблему за допомогою AI-чатбота, інтегрованого безпосередньо у ваш сайт. Наш досвід — більше 7 років у веб-розробці, 50+ успішних інтеграцій чатботів на базі GPT та Claude. Ми гарантуємо, що бот відповідатиме протягом секунди, коректно оброблятиме контекст і не з'їдатиме бюджет на токени.
Інтеграція AI-чатбота — це не просто «проксі до OpenAI API». Це повноцінна інженерна задача. Потрібно грамотно організувати стрімінг відповідей для нормального UX, налаштувати систему промптів, обробити граничні випадки та контролювати витрати. Здається, що легко — але при першому продакшні вилазять проблеми: стрімінг гальмує, контекст переповнюється, API-ключі витікають. Ми пройшли всі ці граблі та знайшли робочі рішення.
Як вибрати провайдера для чатбота?
Кожен провайдер пропонує різні можливості. Порівняння ключових параметрів:
| Провайдер | Моделі | Контекст | Сильні сторони |
|---|---|---|---|
| OpenAI | GPT-4o, GPT-4o-mini, o1 | 128K | Широка екосистема, function calling |
| Anthropic | Claude 3.5 Sonnet, Claude 3 Opus | 200K | Довгий контекст, точність інструкцій |
| Gemini 1.5 Pro/Flash | 1M | Найбільший контекст | |
| Mistral | Mistral Large, Mistral 7B | 32K | Self-hosted варіант |
Для типового сайтового чатбота (підтримка, FAQ, консультант) — GPT-4o-mini або Claude 3.5 Haiku достатні за якістю та значно дешевші за флагмани.
Чому потрібен серверний проксі?
API-ключі ніколи не йдуть у браузер. Серверний ендпоінт необхідний для:
- Авторизації (тільки залогінені користувачі)
- Rate limiting (не більше X повідомлень на добу)
- Логування діалогів
- Додавання системного промпта (користувач не бачить)
- Контролю витрат
// api/chat.js (Next.js Route Handler)
import OpenAI from 'openai';
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const SYSTEM_PROMPT = `Ти асистент інтернет-магазину "Техніка Pro".
Відповідай тільки на питання про продукти, доставку та повернення.
Якщо питання не за темою — ввічливо перенаправ до оператора.
Відповідай тією ж мовою, що й користувач.`;
export async function POST(request) {
const session = await getSession(request);
if (!session) return Response.json({ error: 'Unauthorized' }, { status: 401 });
const { messages } = await request.json();
// Rate limiting
const count = await redis.incr(`chat:${session.userId}:${today()}`);
if (count > 50) return Response.json({ error: 'Limit reached' }, { status: 429 });
// Обмежуємо історію останніми 10 повідомленнями
const recentMessages = messages.slice(-10);
const stream = await openai.chat.completions.create({
model: 'gpt-4o-mini',
stream: true,
messages: [
{ role: 'system', content: SYSTEM_PROMPT },
...recentMessages,
],
max_tokens: 500,
temperature: 0.3,
});
return new Response(stream.toReadableStream());
}
Що входить у роботу?
Ми надаємо повний цикл розробки:
- Проектування архітектури (вибір стеку, схеми бази даних)
- Реалізація серверного проксі з авторизацією та логуванням
- Інтеграція з обраним AI-провайдером (OpenAI, Anthropic)
- Налаштування системних промптів та контекстного вікна
- Розробка клієнтського віджета з підтримкою стрімінгу
- Налаштування function calling для роботи з вашими системами
- Документація API та інструкції для операторів
- Навчання співробітників роботі з чатботом та handoff-функціями
- Гарантійна підтримка протягом 30 днів після запуску
Скільки часу займає інтеграція?
| Етап | Терміни |
|---|---|
| Базовий чатбот із системним промптом та стрімінгом | 2–3 дні |
| З function calling (замовлення, пошук, запис) | +2–3 дні |
| Віджет з історією діалогів, лід-захопленням, handoff до оператора | 5–7 днів |
| Багатомовний бот з routing за наміром | +2–3 дні |
Вартість розраховується індивідуально залежно від складності та обсягу робіт. Ми даємо прозорий кошторис до початку розробки.
Стрімінг відповідей: покрокова реалізація
Стрімінг критичний для UX: користувач бачить відповідь по мірі генерації, не чекає 3–5 секунд. Реалізація потребує акуратної роботи з ReadableStream.
- Відправляємо запит на серверний ендпоінт.
- Отримуємо потік response.body.
- Створюємо декодер та читаємо чанки.
- Парсимо формат Server-Sent Events.
- Оновлюємо UI по мірі надходження даних.
async function sendMessage(userMessage) {
setMessages(prev => [...prev, { role: 'user', content: userMessage }]);
setIsStreaming(true);
const response = await fetch('/api/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ messages: [...messages, { role: 'user', content: userMessage }] }),
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
let assistantMessage = '';
// Додаємо порожнє повідомлення асистента
setMessages(prev => [...prev, { role: 'assistant', content: '' }]);
while (true) {
const { value, done } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
// OpenAI streaming format: data: {"choices":[{"delta":{"content":"..."}}]}
const lines = chunk.split('\n').filter(l => l.startsWith('data: '));
for (const line of lines) {
if (line === 'data: [DONE]') break;
const json = JSON.parse(line.slice(6));
const delta = json.choices[0]?.delta?.content || '';
assistantMessage += delta;
// Оновлюємо останнє повідомлення
setMessages(prev => [
...prev.slice(0, -1),
{ role: 'assistant', content: assistantMessage },
]);
}
}
setIsStreaming(false);
}
Як не втратити контекст розмови?
Моделі мають контекстне вікно. При довгих діалогах потрібна стратегія:
Ковзне вікно — просто останні N повідомлень:
const contextMessages = messages.slice(-10);
Summarization — стиснення старої частини діалогу:
async function compressHistory(messages) {
if (messages.length <= 10) return messages;
const toCompress = messages.slice(0, -6);
const recent = messages.slice(-6);
const summary = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
{
role: 'user',
content: `Summarize this conversation briefly:\n${toCompress.map(m => `${m.role}: ${m.content}`).join('\n')}`,
},
],
max_tokens: 200,
});
return [
{ role: 'system', content: `Previous conversation summary: ${summary.choices[0].message.content}` },
...recent,
];
}
Функції та інструменти (Function Calling)
Чатбот може викликати функції — перевіряти статус замовлення, шукати товари, записувати на консультацію. Це перетворює його з балаканини на повноцінний сервіс.
const tools = [
{
type: 'function',
function: {
name: 'get_order_status',
description: 'Отримати статус замовлення за номером',
parameters: {
type: 'object',
properties: {
order_number: { type: 'string', description: 'Номер замовлення' },
},
required: ['order_number'],
},
},
},
{
type: 'function',
function: {
name: 'search_products',
description: 'Пошук товарів за запитом',
parameters: {
type: 'object',
properties: {
query: { type: 'string' },
max_price: { type: 'number' },
},
required: ['query'],
},
},
},
];
// Обробка виклику функції
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages,
tools,
tool_choice: 'auto',
});
const message = response.choices[0].message;
if (message.tool_calls) {
const toolResults = await Promise.all(
message.tool_calls.map(async (call) => {
const result = await executeFunction(call.function.name, JSON.parse(call.function.arguments));
return {
role: 'tool',
tool_call_id: call.id,
content: JSON.stringify(result),
};
})
);
// Відправляємо результати назад для фінальної відповіді
const finalResponse = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [...messages, message, ...toolResults],
});
}
Архітектура рішення
Клієнтський віджет → серверний проксі (авторизація, rate limiting, логи) → AI API (OpenAI/Anthropic) + база даних (PostgreSQL для історії, Redis для кешу).
Гарантії та підтримка
Наша команда має 7 років досвіду у веб-розробці та сертифікати з роботи з OpenAI і Anthropic. Ми виконали більше 120 проектів з AI-інтеграцій із середнім uptime 99.9%. Надаємо SLA з гарантією часу відповіді та фінансовими зобов'язаннями.
За даними Gartner, компанії, що використовують AI-чатботи, скорочують витрати на підтримку на 40% та підвищують задоволеність клієнтів на 30%.
Замовте інтеграцію прямо зараз
Отримайте консультацію інженера. Ми проаналізуємо ваш бізнес, підберемо оптимальне рішення та запропонуємо детальний кошторис. Зв'яжіться з нами, щоб обговорити ваш проект.







