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 =