Skip to content
LangChain4j 文档版本 1.22.0 源快照 75f78c02 更新于 2026-10-14

Kotlin 支持

WARNING

针对 Kotlin 用户的破坏性变更。 ChatModel 现已声明一个 Java 成员 chatAsync(ChatRequest): CompletableFuture<ChatResponse>。在 Kotlin 中,签名相同的成员会优先于扩展函数,因此原先解析到 suspend 扩展(返回 ChatResponse)的单个参数的裸调用,现在会解析到该成员(返回 CompletableFuture<ChatResponse>):

kotlin
// Before - resolved to the suspend extension, returned ChatResponse:
val response: ChatResponse = model.chatAsync(request)

// After - the bare single-arg call resolves to the Java member (a CompletableFuture):
val future: CompletableFuture<ChatResponse> = model.chatAsync(request)

// Migration - await the future...
val response: ChatResponse = model.chatAsync(request).await()
// ...or supply a coroutineContext, which still selects the suspend extension:
val response: ChatResponse = model.chatAsync(request, Dispatchers.IO)

Kotlin 是一门面向 JVM(及其他平台)的静态类型语言,能以简洁优雅的方式编写代码,并与 Java 库实现无缝互操作。 LangChain4j 利用 Kotlin 的扩展和类型安全构建器为 Java API 增添 Kotlin 特有的便利,从而允许用户为现有 Java 类扩展出面向 Kotlin 的额外功能。

开始使用

将 langchain4j-kotlin 模块添加到你的项目依赖中:

xml
 <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-kotlin</artifactId>
    <version>[LATEST_VERSION]</version>
</dependency>

如果你想使用 data class,请确保你的 classpath 中有 Jackson module kotlin。对于 Maven,添加一个运行时依赖:

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

ChatModel 扩展

这段 Kotlin 代码演示了如何使用协程与挂起函数和类型安全构建器,与 LangChain4j 中的一个 ChatModel 交互。

kotlin
val model = OpenAiChatModel.builder()
    .apiKey("YOUR_API_KEY")
    // more configuration parameters here ...
    .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,类型安全的构建器函数接受一个自定义构建器:

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

示例用法:

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

流式使用场景

StreamingChatModel 扩展为那些需要随 AI 模型生成而增量处理响应的场景提供能力。这在需要实时反馈的应用中尤其有用,例如聊天界面、实时编辑器或逐词元流式交互的系统。 借助 Kotlin 协程,chatFlow 扩展函数把来自语言模型的流式响应转换为结构化、可取消的 Flow 序列,从而实现协程友好的非阻塞处理。

下面是你如何用 chatFlow 实现一次完整交互:

kotlin
val flow = model.chatFlow { // similar to non-streaming scenario
    messages += userMessage("Can you explain how streaming works?")
    parameters { // ChatRequestParameters
        temperature = 0.7
        maxOutputTokens = 42
    }
}

runBlocking { // must run in a coroutine context 
    flow.collect { reply ->
        when (reply) {
            is StreamingChatModelReply.PartialResponse -> {
                print(reply.partialResponse) // Stream output as it arrives
            }
            is StreamingChatModelReply.CompleteResponse -> {
                println("\nComplete: ${reply.response.aiMessage().text()}")
            }
            is StreamingChatModelReply.Error -> {
                println("Error occurred: ${reply.cause.message}")
            }
        }
    }
}

作为示例,请查看这个测试。

编译器兼容性

在 Kotlin 中定义工具时,请确保将 Kotlin 编译配置设为保留元数据,以便 Java 反射能获取方法参数,即将 javaParameters 设为 true。要保持工具规范中正确的参数名,此设置是必需的。

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

kotlin
kotlin {
    compilerOptions {
        javaParameters = true
    }
}

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。