Kotlinサポート
KotlinはJVM(およびその他のプラットフォーム)を対象とする静的型付け言語で、Javaライブラリとの相互運用性を備えた簡潔でエレガントなコードを可能にします。 LangChain4jはKotlinの拡張機能と型安全ビルダーを活用して、Java APIをKotlin固有の便利な機能で強化します。これにより、ユーザーは既存のJavaクラスをKotlin 向けにカスタマイズした追加機能で拡張できます。
はじめに
プロジェクトの依存関係にlangchain4j-kotlin
モジュールを追加します:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-kotlin</artifactId>
<version>[LATEST_VERSION]</version>
</dependency>
データクラスを使用する場合は、クラスパスにJackson module kotlinがあることを確認してください。Mavenの場合、ランタイム依存関係を追加します:
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
<version>[LATEST_VERSION]</version>
<scope>runtime</scope>
</dependency>
ChatModel拡張機能
このKotlinコードは、コルーチンとサスペンド関数と型安全ビルダーを使用してLangChain4jのChatModel
と対話する方法を示しています。
val model = OpenAiChatModel.builder()
.apiKey("YOUR_API_KEY")
// その他の設定パラメータはこちら...
.build()
CoroutineScope(Dispatchers.IO).launch {
val response = model.chat {
messages += systemMessage("あなたは役立つアシスタントです")
messages += userMessage("こんにちは!")
parameters {
temperature = 0.7
}
}
println(response.aiMessage().text())
}
対話はKotlinのコルーチンを使用して非同期的に行われます:
CoroutineScope(Dispatchers.IO).launch
:ネットワークやファイルI/Oなどのブロッキングタスクに最適化されたIOディスパッチャーでプロセスを実行します。これにより、呼び出しスレッドがブロックされるのを防ぎ、応答性を確保します。model.chat
はサスペンド関数で、ビルダーブロックを使用してチャットリクエストを構造化します。このアプローチによりボイラープレートが減少し、コードの可読性と保守性が向上します。
高度なシナリオでは、カスタムChatRequestParameters
をサポートするために、型安全ビルダー関数はカスタムビルダーを受け入れます:
fun <B : DefaultChatRequestParameters.Builder<*>> parameters(
builder: B = DefaultChatRequestParameters.builder() as B,
configurer: ChatRequestParametersBuilder<B>.() -> Unit
)
使用例:
model.chat {
messages += systemMessage("あなたは役立つアシスタントです")
messages += userMessage("こんにちは!")
parameters(OpenAiChatRequestParameters.builder()) {
temperature = 0.7 // DefaultChatRequestParameters.Builderプロパティ
builder.seed(42) // OpenAiChatRequestParameters.Builderプロパティ
}
}
ストリーミングのユースケース
StreamingChatModel
拡張機能は、AIモデルによって生成されるレスポンスを段階的に処理する必要があるユースケースに機能を提供します。これは、チャットインターフェース、ライブエディタ、またはトークンごとのストリーミング対話を必要とするシステムなど、リアルタイムフィードバックを必要とするアプリケーションで特に有用です。
Kotlinコルーチンを使用して、chatFlow
拡張関数は言語モデルからのストリーミングレスポンスを構造化されたキャンセル可能なFlow
シーケンスに変換し、コルーチンフレンドリーなノンブロッキング実装を可能にします。
以下はchatFlow
を使用した完全な対話の実装方法です:
val flow = model.chatFlow { // 非ストリーミングシナリオと同様
messages += userMessage("ストリーミングの仕組みを説明してもらえますか?")
parameters { // ChatRequestParameters
temperature = 0.7
maxOutputTokens = 42
}
}
runBlocking { // コルーチンコンテキストで実行する必要があります
flow.collect { reply ->
when (reply) {
is StreamingChatModelReply.PartialResponse -> {
print(reply.partialResponse) // 到着したらすぐに出力をストリーム
}
is StreamingChatModelReply.CompleteResponse -> {
println("\n完了: ${reply.response.aiMessage().text()}")
}
is StreamingChatModelReply.Error -> {
println("エラーが発生しました: ${reply.cause.message}")
}
}
}
}
例としてこのテストをご覧ください。
コンパイラの互換性
Kotlinでツールを定義する場合、メソッドパラメータに対するJavaリフレクションのためのメタデータを保持するように、KotlinコンパイルがjavaParameters
をtrue
に設定するように構成されていることを確認してください。この設定は、ツール仕様で正しい引数名を維持するために必要です。
Gradleを使用する場合、以下の設定で実現できます:
kotlin {
compilerOptions {
javaParameters = true
}
}