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>
如果你想使用 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>
ChatModel 扩展
以下 Kotlin 代码示例展示了如何使用 协程与 suspend 函数 以及 类型安全构建器 来与 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
:在 IO 调度器 上执行,适合网络或文件 I/O 等阻塞任务。这样可以避免阻塞调用线程,确保响应性。model.chat
是一个 suspend 函数,使用构建器块组织聊天请求,这种方式减少了样板代码,使代码更可读、易维护。
对于高级场景,如果需要支持自定义 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 模型生成响应时,能够增量处理的功能。这在需要实时反馈的应用场景中尤其有用,如聊天界面、实时编辑器或逐 token 交互的系统。
通过 Kotlin 协程,chatFlow
扩展函数将语言模型的流式响应转换为结构化且可取消的 Flow
序列,实现协程友好、非阻塞的实现方式。
完整交互示例:
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 中定义工具时,请确保 Kotlin 编译配置保留 Java 反射所需的方法参数元数据,通过设置 javaParameters
为 true
。此设置对于保持工具规范中正确的参数名称是必要的。
如果使用 Gradle,可通过如下配置实现:
kotlin {
compilerOptions {
javaParameters = true
}
}