Реализация AI-ассистента для программирования (Code Assist) в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация AI-ассистента для программирования (Code Assist) в мобильном приложении
Сложная
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    874
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация AI-ассистента для программирования (Code Assist) в мобильном приложении

Мобильный Code Assist — не просто «чат с GPT про код». Это редактор с синтаксической подсветкой, автодополнением, объяснением кода и возможностью выполнить запрос в контексте открытого файла. Целевая аудитория — мобильные IDE, обучающие платформы, инструменты для code review на телефоне.

Редактор кода: базовые требования

Стандартный UITextView/EditText для кода не годится. Нужна синтаксическая подсветка, моноширинный шрифт, горизонтальный скролл и корректная обработка Tab/отступов.

На iOS — Runestone (открытый, через Tree-sitter грамматики) или Sourceful. На Android — CodeEditor от Rosemoe или встроить WebView с CodeMirror/Monaco.

// iOS с Runestone
import Runestone

let textView = TextView()
textView.theme = OneDarkTheme()
textView.language = TreeSitterLanguage.swift  // или python, js, etc.
textView.font = UIFont.monospacedSystemFont(ofSize: 14, weight: .regular)
textView.showLineNumbers = true
textView.isLineWrappingEnabled = false  // горизонтальный скролл для кода

Tree-sitter грамматики доступны для 50+ языков. Подсветка работает инкрементально — при изменении строки перепарсируется только изменённый участок, не весь файл. Это критично для больших файлов.

AI-часть: контекстные запросы

Code Assist должен понимать контекст: какой язык открыт, что находится вокруг курсора, какой код выделен. Всё это идёт в промпт.

struct CodeAssistRequest {
    let userQuestion: String
    let codeContext: CodeContext
}

struct CodeContext {
    let language: String
    let fullCode: String       // весь файл, если < 3000 токенов
    let selectionStart: Int
    let selectionEnd: Int
    let cursorLine: Int

    var selectedCode: String {
        String(fullCode.utf16.prefix(selectionEnd).dropFirst(selectionStart)) ?? ""
    }

    var surroundingContext: String {
        // 50 строк вокруг курсора
        let lines = fullCode.components(separatedBy: "\n")
        let from = max(0, cursorLine - 25)
        let to = min(lines.count, cursorLine + 25)
        return lines[from..<to].joined(separator: "\n")
    }
}

func buildMessages(for request: CodeAssistRequest) -> [ChatMessage] {
    let systemPrompt = """
    You are a \(request.codeContext.language) expert. Answer questions about the provided code.
    When suggesting code changes, output only the changed code block.
    Language: \(request.codeContext.language)
    """

    let userMessage = """
    Code context:
    ```\(request.codeContext.language)
    \(request.codeContext.surroundingContext)
    ```
    \(request.codeContext.selectedCode.isEmpty ? "" : "Selected code:\n```\n\(request.codeContext.selectedCode)\n```\n")
    Question: \(request.userQuestion)
    """

    return [
        ChatMessage(role: "system", content: systemPrompt),
        ChatMessage(role: "user", content: userMessage)
    ]
}

Парсинг code блоков из ответа

LLM возвращает текст с markdown code блоками. Нужно распарсить их и предложить применить.

// Android
fun parseCodeBlocks(response: String): List<CodeBlock> {
    val regex = Regex("```(\\w+)?\\n([\\s\\S]*?)```")
    return regex.findAll(response).map { match ->
        CodeBlock(
            language = match.groupValues[1].ifEmpty { "plaintext" },
            code = match.groupValues[2].trimEnd()
        )
    }.toList()
}

data class CodeBlock(val language: String, val code: String)

В UI — кнопка «Применить» рядом с каждым code блоком. Применение через replaceSelection() или вставку в конкретную позицию файла.

История чата и многоходовые запросы

Один вопрос про код редко достаточен. Нужна история диалога — но не вся, иначе контекст переполняется.

Стратегия: храним последние 6 пар вопрос/ответ + исходный системный промпт с контекстом файла. При изменении файла обновляем системный промпт — пересоздаём историю.

Важный нюанс: code блоки в ответах LLM занимают много токенов. При хранении истории заменяем большие code блоки [code block replaced, N lines] — это сохраняет контекст диалога без раздувания запроса.

On-device модели для кода

Для продуктов, где важна приватность кода, — Ollama с codellama:7b или qwen2.5-coder:7b на сервере пользователя. Полноценный on-device на мобильном телефоне пока нереалистичен для кодовых задач — минимальная рабочая модель требует ~4 GB RAM.

На iOS 18+ Apple Intelligence предоставляет on-device LLM через Foundation Models, но с ограниченным контекстом и без специализации на коде. Для code assist это не альтернатива cloud API.

Ориентиры по срокам

Редактор с подсветкой + базовый Q&A чат — 1 неделя. Полноценный Code Assist с контекстом файла, парсингом code блоков, применением изменений и историей диалога — 3–4 недели.