Розмовний AI-асистент у мобільному застосунку швидко втрачає контекст, якщо не керувати історією діалогу. Кожен запит користувача та відповідь моделі додають токени — при активному використанні ліміт вікна вичерпується за 10–15 повідомлень, а витрати на API зростають експоненційно. Ми інтегруємо контекстне вікно та управління історією діалогу AI в мобільні застосунки під ключ. На основі нашого досвіду (10+ років у мобільній розробці та 50+ AI-проектів) ми гарантуємо ефективне використання контексту. Правильна стратегія управління контекстом скорочує витрати на API до 30%.
Чому зростає історія діалогу і як це впливає на вартість?
Кожен обмін додає токени: запит користувача + відповідь моделі. При середньому повідомленні 50–100 токенів і 20 парах — вже 2000–4000 токенів лише на історію, плюс системний промпт. При gpt-4o з ціною $5 за 1M input токенів — дрібниця, але при 1000 активних користувачів з 50 повідомленнями на день витрати перевищують $250 на день лише на історію. Економія на ефективному управлінні може сягати 30% від вартості API-запитів.
Друга проблема: різні моделі мають різні ліміти (GPT-4o — 128K, Claude — 200K, YandexGPT — 8K). Застосунок, оптимізований під одну модель, може давати збої при перемиканні на іншу.
Як керувати контекстом при зміні AI-моделі?
Для універсальності рекомендується реалізувати абстракцію над управлінням контекстом: задати максимальну кількість токенів для поточної моделі та динамічно підлаштовувати стратегію (ковзне вікно з порогом, що залишає запас). Наприклад, для YandexGPT з 8K лімітом варто використовувати ковзне вікно з менш ніж 7K токенів, залишаючи місце під відповідь. Для GPT-4o з 128K можна застосовувати гібридну пам'ять без обмежень. Такий підхід дозволяє перемикати моделі без зміни логіки.
Три стратегії управління історією діалогу AI
Детальніше про стратегії
Ковзне вікно — тримаємо останні N повідомлень, відкидаємо старіші. Швидко, передбачувано. Мінус: модель забуває початок розмови.
func buildMessages(history: [Message], systemPrompt: String, maxTokens: Int = 3000) -> [Message] {
var result: [Message] = []
var tokenCount = countTokens(systemPrompt)
for message in history.reversed() {
let msgTokens = countTokens(message.content)
if tokenCount + msgTokens > maxTokens { break }
result.insert(message, at: 0)
tokenCount += msgTokens
}
return result
}
Вибір N (maxTokens) залежить від моделі: для YandexGPT — 7000, для GPT-4o — 100000. Оптимальне значення підбирається експериментально.
Сумаризація — коли історія перевищує поріг, відправляємо старі повідомлення на сумаризацію через дешевшу модель (gpt-4o-mini, claude-haiku). Отримуємо summary, зберігаємо як system-повідомлення, видаляємо сумовані повідомлення. Приклад промпту: "Сумаризуй наступний діалог, виділивши ключові факти та рішення. Збережи деталі, важливі для подальшого спілкування."
Гібридний підхід з пам'яттю — для довгострокових асистентів. Короткочасна пам'ять (останні 10–15 повідомлень), довгострокова пам'ять (структуровані факти), семантичний пошук за ембедінгами. Цей підхід у 3 рази краще утримує контекст порівняно з простим ковзним вікном.
Порівняння стратегій
| Стратегія | Швидкість | Якість контексту | Складність реалізації |
|---|---|---|---|
| Ковзне вікно | Висока | Низька (забування) | Низька |
| Сумаризація | Середня | Середня (втрата деталей) | Середня |
| Гібридна пам'ять | Середня | Висока | Висока |
Отримайте консультацію з архітектури контекстного вікна — ми допоможемо обрати оптимальну стратегію для вашого проекту.
Як реалізувати гібридну пам'ять: покрокове керівництво
- Визначте типи фактів. Які дані потрібно запам'ятовувати? Наприклад, для медичного асистента: алергії, поточні ліки, хронічні захворювання.
- Створіть схему довгострокової пам'яті. Використовуйте SQLite або in-memory словник. Кожен факт — ключ-значення з тегом часу.
- При кожній відповіді моделі витягуйте факти. Відправляйте останні 10–15 повідомлень + всі актуальні факти в промпт.
- Після отримання відповіді оновлюйте факти. Додатковий виклик моделі (меншої) витягує нові факти з діалогу.
- Періодично чистіть застарілі факти. Видаляйте факти, не підтверджені більше тижня.
Деталі реалізації
Довгострокова пам'ять може зберігатися у вигляді графу знань або простих пар ключ-значення. Для витягування фактів використовуйте structured output моделей, наприклад, JSON-формат. Це спрощує парсинг та оновлення. Важливо перевіряти коректність витягнутих фактів і не допускати зациклення.
Як обрати стратегію для вашого мобільного застосунку?
Якщо застосунок потребує запам'ятовування ключових фактів (алергії, вподобання), гібридна пам'ять — єдиний робочий варіант. Сумаризація без явного збереження фактів може призвести до юридичних ризиків у медичних або фінансових асистентах. Ми рекомендуємо проводити аудит вимог перед вибором. Зв'яжіться з нами для консультації — допоможемо визначитися.
Технічні аспекти: зберігання, підрахунок токенів та UI
Зберігання історії на мобільному
SQLite — стандарт. Структура:
CREATE TABLE conversations (
id TEXT PRIMARY KEY,
created_at INTEGER,
title TEXT,
model TEXT,
summary TEXT
);
CREATE TABLE messages (
id TEXT PRIMARY KEY,
conversation_id TEXT REFERENCES conversations(id),
role TEXT CHECK(role IN ('user', 'assistant', 'system')),
content TEXT,
token_count INTEGER,
created_at INTEGER
);
CREATE INDEX idx_messages_conversation ON messages(conversation_id, created_at);
token_count рахується при збереженні — не при кожному завантаженні.
Підрахунок токенів на мобільному
Точний підрахунок потребує токенізатора для конкретної моделі. Згідно з Wikipedia, токенізація — процес розбиття тексту на токени. На сервері — tiktoken для OpenAI, tokenizers від HuggingFace. На мобільному використовуємо евристику: англійська ~4 символи = 1 токен, російська ~2–2.5 символи = 1 токен, код ~3 символи = 1 токен. Для відповідального підрахунку (тарифікація, ліміти) — серверна валідація.
UI: відображення історії
Список повідомлень — UITableView зі зворотним порядком (нові знизу) або LazyColumn в Compose з reverseLayout = true. При стримінгу останнє повідомлення оновлюється на місці без перестрибування скролу. Індикація контекстного вікна (візуальна смужка або лічильник токенів) зменшує скарги на забудькуватість асистента.
Що ми пропонуємо та терміни
Що входить в роботу
- Документація з архітектури управління історією
- Вихідний код модуля контекстного вікна з тестами
- Інтеграція з обраною моделлю AI (GPT, Claude, YandexGPT)
- Налаштування підрахунку токенів та моніторингу витрат
- Навчання команди роботі з системою
Орієнтири за термінами
| Етап | Тривалість |
|---|---|
| Ковзне вікно з SQLite | 3–4 дні |
| Гібридна пам'ять з сумаризацією | 1,5–2,5 тижні |
| Повний цикл (аналітика → деплой) | 2–4 тижні |
Вартість розраховується індивідуально. Замовте аудит вашого проекту — оцінимо обсяг робіт.







