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 编译配置为通过设置 javaParameters
为 true
来保留 Java 反射所需的方法参数元数据。此设置是保持工具规范中正确参数名称所必需的。
使用 Gradle 时,可以通过以下配置实现:
kotlin {
compilerOptions {
javaParameters = true
}
}