跳到主要内容

Kotlin 支持

Kotlin 是一种针对 JVM(和其他平台)的静态类型语言,能够编写简洁优雅的代码,并与 Java 库实现无缝互操作。 LangChain4j 利用 Kotlin 的扩展功能类型安全构建器来增强 Java API,提供专为 Kotlin 定制的便利功能。这允许用户通过额外的功能扩展现有的 Java 类。

备注

LangChain4j 不需要 Kotlin 库作为运行时依赖,但允许用户利用 Kotlin 的协程功能进行非阻塞执行,从而提高性能和效率。

如果你想使用数据类,请确保在你的类路径中包含 Jackson module kotlin。对于 Maven,添加运行时依赖:

 <dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
<version>[LATEST_VERSION]</version>
<scope>runtime</scope>
</dependency>

ChatLanguageModel 扩展

以下 Kotlin 代码演示了如何使用协程和挂起函数以及类型安全构建器与 LangChain4j 中的 ChatLanguageModel 进行交互。

val model = OpenAiChatModel.builder()
.apiKey("YOUR_API_KEY")
// 更多配置参数...
.build()

CoroutineScope(Dispatchers.IO).launch {
val response = model.chat {
messages += systemMessage("You are a helpful assistant")
messages += userMessage("Hello!")
parameters {
temperature = 0.7
}
}
println(response.aiMessage().text())
}

交互使用 Kotlin 的协程异步进行:

  • CoroutineScope(Dispatchers.IO).launch:在 IO 调度器上执行进程,该调度器针对网络或文件 I/O 等阻塞任务进行了优化。这通过防止调用线程被阻塞来确保响应性。
  • model.chat 是一个挂起函数,使用构建器块来构建聊天请求。这种方法减少了样板代码,使代码更具可读性和可维护性。

对于高级场景,为了支持自定义 ChatRequestParameters,类型安全构建器函数接受自定义构建器:

fun <B : DefaultChatRequestParameters.Builder<*>> parameters(
builder: B = DefaultChatRequestParameters.builder() as B,
configurer: ChatRequestParametersBuilder<B>.() -> Unit
)

使用示例:

 model.chat {
messages += systemMessage("You are a helpful assistant")
messages += userMessage("Hello!")
parameters(OpenAiChatRequestParameters.builder()) {
temperature = 0.7 // DefaultChatRequestParameters.Builder 属性
builder.seed(42) // OpenAiChatRequestParameters.Builder 属性
}
}

流式处理用例

StreamingChatLanguageModel 扩展提供了功能,适用于需要在 AI 模型生成响应时逐步处理的场景。这在需要实时反馈的应用中特别有用,如聊天界面、实时编辑器或需要逐个令牌流式交互的系统。 使用 Kotlin 协程,chatFlow 扩展函数将语言模型的流式响应转换为结构化且可取消的 Flow 序列,实现协程友好的非阻塞实现。

以下是如何使用 chatFlow 实现完整交互的方法:

val flow = model.chatFlow { // 类似于非流式场景
messages += userMessage("Can you explain how streaming works?")
parameters { // ChatRequestParameters
temperature = 0.7
maxOutputTokens = 42
}
}

runBlocking { // 必须在协程上下文中运行
flow.collect { reply ->
when (reply) {
is StreamingChatLanguageModelReply.PartialResponse -> {
print(reply.partialResponse) // 输出流式到达的内容
}
is StreamingChatLanguageModelReply.CompleteResponse -> {
println("\nComplete: ${reply.response.aiMessage().text()}")
}
is StreamingChatLanguageModelReply.Error -> {
println("Error occurred: ${reply.cause.message}")
}
}
}
}

查看此测试作为示例。

编译器兼容性

在 Kotlin 中定义工具时,确保 Kotlin 编译配置为通过设置 javaParameterstrue 来保留 Java 反射所需的方法参数元数据。此设置是保持工具规范中正确参数名称所必需的。

使用 Gradle 时,可以通过以下配置实现:

kotlin {
compilerOptions {
javaParameters = true
}
}