📖

Kotlin Notebook を使ってみる

2023/12/11に公開

この記事は mob Advent Calendar の11日目の記事です。

今日は Kotlin Notebook を使ってみます。

https://blog.jetbrains.com/ja/kotlin/2023/07/introducing-kotlin-notebook/

データサイエンスの領域でよく使われる Jupiter Notebook を Kotlin で使えるプラグインが Kotlin Notebook です。データサイエンス以外でもちょっとしたことを試す場合などで役立ったりします。

※ IntelliJ IDEA Ultimateでのみ使うことができるようです。

今回は下記でもやったOpenAIのライブラリを Kotlin Notebook で試したいと思います。

https://zenn.dev/mobdev/articles/74bd09154c927f

何かを試すときにプロジェクトの新規作成などを行う必要がなくて、かなり楽なはずです。

インストール

下記の手順でインストールできます。

  1. Itellij IDEA を開いて、 「Preferences...」
  2. Plugins を選択
  3. Maketplace タグで Kotlin Notebook を検索
  4. インストール & 再起動

早速試してみる

ファイルを作成する

依存関係を追加する

このようなコードを書いて、実行します。

USE {
    dependencies {
        val ktorVersion = "2.3.2"
        implementation("com.aallam.openai:openai-client:3.6.1")
        implementation("io.ktor:ktor-client-core:$ktorVersion")
        implementation("io.ktor:ktor-client-apache:$ktorVersion")
    }
}

こうすることで openai のライブラリを使えるようになりました。( Ktor は openai に必要なため入れています)

また @file:DependsOn("io.ktor:ktor-client-core:2.3.2") みたいな書き方もできます 。

もし依存関係を変えたい場合は Restart Kernel をした方がいいかもしれません。修正しても依存関係が変わらずに不具合が起こる場合があります。

コードを書いて実行する

次の Cell に下記を入力して、 APIキーを置き換えて実行してみましょう。

import com.aallam.openai.api.chat.ChatCompletionRequest
import com.aallam.openai.api.chat.ChatMessage
import com.aallam.openai.api.chat.ChatResponseFormat
import com.aallam.openai.api.chat.ChatRole
import com.aallam.openai.api.model.ModelId
import com.aallam.openai.client.OpenAI
import kotlinx.coroutines.runBlocking

val openAI = OpenAI(
    token = "{自分のAPIキー}",
)

val request = ChatCompletionRequest(
    model = ModelId("gpt-4-1106-preview"),
    messages = listOf(
        ChatMessage(
            role = ChatRole.User,
            content = "こんにちは。今日の各都市の天気をランダムで { city: 名前, weathre: 天気 } の形のjsonで返してください"
        )
    ),
    responseFormat = ChatResponseFormat.JsonObject
)
runBlocking {
    val result = openAI.chatCompletion(request)
    println(result.choices.firstOrNull()?.message?.content)
}

このような結果が返却されました。無事に出力されています。

と、このように データサイエンス以外でも、とあるライブラリの使い心地を試してみる場合などにもかなり良いです。

もし興味がある人は下記でいろんな機能が紹介されているので覗いてみてください。

https://datalore.jetbrains.com/report/static/sBgNeHxfaKG1tVRDWl3KqU/DMtWM05XWOT2Oi6yxZjVkJ

Discussion