Kotlin 支持 | LangChain4j
Kotlin 是一種面向 JVM(及其他平臺)的靜態類型語言,能夠實現簡潔優雅的代碼,并與 Java 庫無縫互操作。
LangChain4j 利用 Kotlin 擴展和類型安全構建器來增強 Java API,為其增添特定于 Kotlin 的便利功能,從而允許用戶為現有的 Java 類擴展額外的功能,以滿足 Kotlin 的特定需求。
注意
LangChain4j 并不要求將 Kotlin 庫作為運行時依賴,但卻 enables 用戶利用 Kotlin 的協程能力來實現非阻塞執行,進而提升性能和效率。
如果你想使用數據類,那么請確保你的類路徑中包含 Jackson 模塊 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
擴展為需要在生成響應時逐步處理的場景提供了功能支持。這對于需要實時反饋的應用(如聊天界面、實時編輯器或具有流式逐令牌交互的系統)尤為實用。
借助 Kotlin 協程,chatFlow
擴展函數將語言模型的流式響應轉換為結構化的、可取消的 Flow
序列,從而實現與協程友好的非阻塞式處理。
以下是利用 chatFlow
實現完整交互的示例:
val flow = model.chatFlow { // 與非流式場景類似messages += userMessage("Can you explain how streaming works?") // 將用戶消息添加到消息列表中parameters { // 配置聊天請求參數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 編譯配置保留 Java 反射在方法參數上的元數據,需要將 javaParameters
設置為 true
。這一設置對于在工具規范中保持正確的參數名稱是必需的。
當使用 Gradle 時,可以通過以下配置實現:
kotlin {compilerOptions {javaParameters = true}
}
相關示例
- 點擊 👉使用langchain4j開發的開源項目🔥