DevGang
Авторизоваться

Как создать собственного чат-бота на 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 для создания базового чат-бота — отличный способ улучшить взаимодействие с пользователем. Этот пример обеспечивает прочную основу, на которой вы можете создавать и добавлять дополнительные функции по мере необходимости. Исследуйте и экспериментируйте с этими инструментами, чтобы полностью раскрыть их потенциал!

Источник:

#ChatGPT
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу