Kotlin и ChatGPT: создаем ИИ-ассистента для кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Kotlin встречает ИИ: почему разработчики на Kotlin уже используют ChatGPT

Мир разработки меняется на глазах. Ещё вчера мы боялись, что нейросети заменят программистов, а сегодня — активно используем их как супер-помощников. И если вы пишете на Kotlin, у вас есть уникальное преимущество: этот язык идеально подходит для создания быстрых, современных и безопасных приложений, которые могут общаться с ChatGPT.

В этой статье мы разберём, как использовать ChatGPT в разработке на Kotlin — не как теоретическую концепцию, а как рабочий инструмент. Вы узнаете, как интегрировать OpenAI API в свой проект, обрабатывать ответы нейросети и строить на их основе полезные функции. Без воды, с реальными примерами кода.

Где Kotlin и ИИ встречаются на практике

Kotlin — это не только Android. Это бэкенд на Ktor, микросервисы на Spring Boot, data science и даже мультиплатформенные приложения. Добавив к этому ChatGPT API, вы получаете возможность:

  • Автоматически генерировать документацию к коду
  • Создавать чат-ботов с естественным языком
  • Анализировать пользовательский ввод и классифицировать его
  • Писать «умный» поиск по базе знаний
  • Проверять код на ошибки и предлагать исправления

И всё это — на родном для вас Kotlin. Никакого Python, никаких лишних зависимостей. Только Ktor, ktor-client и немного магии промптов.

Готовим проект: минимальный набор для работы с ChatGPT

Для начала нам понадобится HTTP-клиент. В Kotlin-мире лучший выбор — Ktor Client. Он лёгкий, асинхронный и идеально подходит для работы с REST API.

Добавьте зависимости в build.gradle.kts:

dependencies {
    implementation("io.ktor:ktor-client-core:2.3.7")
    implementation("io.ktor:ktor-client-cio:2.3.7")
    implementation("io.ktor:ktor-client-content-negotiation:2.3.7")
    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
}

Теперь создадим простой класс для общения с OpenAI. Он будет отправлять запросы к ChatGPT API и возвращать ответ в удобном виде.

Пишем код: первый запрос к ChatGPT на Kotlin

Начнём с модели данных. Мы будем использовать Kotlin Serialization для работы с JSON.

@Serializable
data class ChatMessage(
    val role: String,
    val content: String
)

@Serializable
data class ChatRequest(
    val model: String = "gpt-3.5-turbo",
    val messages: List<ChatMessage>,
    val temperature: Double = 0.7
)

@Serializable
data class ChatResponse(
    val choices: List<Choice>
)

@Serializable
data class Choice(
    val message: ChatMessage
)

Теперь напишем функцию, которая отправляет сообщение в ChatGPT и возвращает ответ:

class OpenAIClient(private val apiKey: String) {
    private val client = HttpClient(CIO) {
        install(ContentNegotiation) {
            json(Json {
                ignoreUnknownKeys = true
            })
        }
    }

    suspend fun ask(prompt: String): String {
        val request = ChatRequest(
            messages = listOf(
                ChatMessage("user", prompt)
            )
        )

        val response: ChatResponse = client.post("https://api.openai.com/v1/chat/completions") {
            header("Authorization", "Bearer $apiKey")
            contentType(ContentType.Application.Json)
            setBody(request)
        }.body()

        return response.choices.first().message.content
    }
}

Обратите внимание: мы используем suspend-функцию — это значит, что вызов не блокирует поток. Идеально для современных приложений на Kotlin.

Живой пример: ИИ-помощник для генерации кода

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

Вот как будет выглядеть вызов:

suspend fun generateCode(description: String): String {
    val prompt = """
        Напиши код на Kotlin для следующей задачи:
        $description
        Только код, без объяснений. Используй современный стиль Kotlin.
    """.trimIndent()

    return openAIClient.ask(prompt)
}

Запускаем в корутине:

fun main() = runBlocking {
    val client = OpenAIClient("ВАШ_API_КЛЮЧ")
    val code = client.generateCode("функция, которая считает факториал числа рекурсивно")
    println(code)
}

Вы получите что-то вроде:

fun factorial(n: Int): Long {
    return if (n == 0) 1L else n * factorial(n - 1)
}

Вуаля! ChatGPT написал за вас код на Kotlin. Теперь представьте, как это ускорит рутинные задачи: написание getter/setter, генерация data-классов, создание тестов.

Продвинутый кейс: ИИ-ассистент для документации

Одна из самых нудных задач — писать документацию. Но с ChatGPT это становится делом пары секунд. Создадим функцию, которая принимает исходный код и возвращает KDoc-комментарий.

suspend fun generateDocumentation(codeSnippet: String): String {
    val prompt = """
        Напиши KDoc-комментарий для следующего кода на Kotlin.
        Объясни, что делает функция, её параметры и возвращаемое значение.
        Код:
        $codeSnippet
    """.trimIndent()

    return openAIClient.ask(prompt)
}

Пример использования:

val code = """
    fun calculateDiscount(price: Double, percent: Double): Double {
        return price * (1 - percent / 100)
    }
""".trimIndent()

val doc = client.generateDocumentation(code)
println(doc)

На выходе вы получите полноценный KDoc, который можно сразу вставить в проект:

/**
 * Рассчитывает цену со скидкой.
 * @param price исходная цена
 * @param percent процент скидки
 * @return цена после применения скидки
 */

Работа с контекстом: диалоговый режим на Kotlin

Иногда одного запроса недостаточно. Хочется вести диалог, где ChatGPT помнит предыдущие сообщения. Для этого нужно передавать всю историю беседы.

Добавим в наш класс поддержку контекста:

class ChatSession(private val apiKey: String) {
    private val messages = mutableListOf<ChatMessage>()
    private val client = OpenAIClient(apiKey)

    suspend fun send(message: String): String {
        messages.add(ChatMessage("user", message))
        val response =                

Блоги

Рекомендаций по книгам