Разговорный 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 недели |
Стоимость рассчитывается индивидуально. Закажите аудит вашего проекта — оценим объём работ.







