Как создать собственного чат-бота на Kotlin с помощью GPT: пошаговое руководство
В этом посте мы покажем вам практический пример того, как интегрировать GPT в приложение Kotlin для создания базового чат-бота. Этот чат-бот сможет естественно и эффективно отвечать на запросы пользователей.
Настройка проекта
Шаг 1. Настройка зависимостей
Сначала убедитесь, что в вашем проекте есть необходимые зависимости. Мы будем использовать OkHttp для обработки HTTP-запросов и org.json для работы с JSON.
Добавьте следующие зависимости в файл build.gradle.kts:
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib")
implementation("com.squareup.okhttp3:okhttp:4.9.1")
implementation("org.json:json:20210307")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
}
Структура папок:
ChatbotKotlinGPT/
├── build.gradle.kts
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle.kts
└── src/
├── main/
│ ├── kotlin/
│ │ ├── Chatbot.kt
│ │ ├── GPTClient.kt
│ │ └── ConversationHandler.kt
│ └── resources/
└── test/
├── kotlin/
└── resources/
Шаг 2. Настройте запрос GPT
Создайте класс GPTClient.kt
для обработки запросов к GPT API, функцию для отправки запросов к GPT API и получения ответов. Вам понадобится ключ API от OpenAI, который вы можете получить, зарегистрировавшись на их платформе.
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import org.json.JSONObject
class GPTClient(private val apiKey: String) {
private val client = OkHttpClient()
fun getResponse(prompt: String): String? {
val requestBody = JSONObject()
.put("model", "gpt-3.5-turbo")
.put("messages", listOf(
mapOf("role" to "user", "content" to prompt)
))
.put("max_tokens", 100)
.toString()
val request = Request.Builder()
.url("https://api.openai.com/v1/chat/completions")
.post(RequestBody.create("application/json".toMediaTypeOrNull(), requestBody))
.addHeader("Authorization", "Bearer $apiKey")
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) {
println("Error: ${response.code}")
println("Error Body: ${response.body?.string()}")
return null
} else {
val responseBody = response.body?.string()
return JSONObject(responseBody)
.getJSONArray("choices")
.getJSONObject(0)
.getJSONObject("message")
.getString("content")
}
}
}
fun getResponseSafely(prompt: String): String {
return try {
val response = getResponse(prompt)
response ?: "Error: No response from GPT."
} catch (e: Exception) {
"Exception: ${e.message}"
}
}
}
Шаг 3. Обработка исключений
Важно правильно обрабатывать исключения, чтобы обеспечить надежность вашего приложения:
fun getResponseSafely(prompt: String): String {
return try {
val response = getResponse(prompt)
response ?: "Error: No response from GPT."
} catch (e: Exception) {
"Exception: ${e.message}"
}
}
Использование сопрограмм для асинхронных вызовов
Чтобы повысить эффективность и скорость реагирования вашего приложения, используйте сопрограммы Kotlin для асинхронной обработки вызовов API GPT. Создайте класс для обработки диалога: ConversationHandler.kt
, чтобы улучшить взаимодействие с пользователем, вы можете сохранить историю разговоров и предоставить ее GPT для поддержания контекста.
import kotlinx.coroutines.*
class ConversationHandler(private val gptClient: GPTClient) {
private val conversationHistory = mutableListOf<String>()
fun start() = runBlocking {
while (true) {
print("You: ")
val userInput = readLine()
if (userInput.isNullOrEmpty()) break
conversationHistory.add("You: $userInput")
val context = conversationHistory.joinToString("\n")
val gptResponse = async { gptClient.getResponseSafely("Context: $context\nResponse:") }
val response = gptResponse.await()
println("Chatbot: $response")
conversationHistory.add("Chatbot: $response")
}
}
}
Реализация чат-бота
Шаг 1. Создайте простой интерфейс
В этом примере мы будем использовать базовый интерфейс консоли, чтобы продемонстрировать взаимодействие с чат-ботом Chatbot.kt
.
fun main() {
val apiKey = "YOUR_API_KEY" // replace with you API_KEY
val gptClient = GPTClient(apiKey)
val conversationHandler = ConversationHandler(gptClient)
conversationHandler.start()
}
Репозиторий
https://github.com/josmel/ChatbotKotlinGPT
Заключение
Интеграция GPT в приложение Kotlin для создания базового чат-бота — отличный способ улучшить взаимодействие с пользователем. Этот пример обеспечивает прочную основу, на которой вы можете создавать и добавлять дополнительные функции по мере необходимости. Исследуйте и экспериментируйте с этими инструментами, чтобы полностью раскрыть их потенциал!