在使用 Spring AI 开发 GenAI 应用时,经常会参考 Python 相关的代码。没办法,在 GenAI 上的支持,Python 比 Java 要好不少。LangChain,LlamaIndex 这些Python 库,很多 GenAI 应用开发都在用。在 GitHub 上可以找到很多的代码示例。
很多代码示例都是用 Jupyter Notebook 写的。Jupyter Notebook 的确是很好用的。可视化的编辑方式,文档和代码结合在一起,可以直接运行,还可以保存结果。非常适合于编写代码示例,并展示运行结果。
在我写 Spring AI 代码示例的时候,也想要这样的东西。我就找有没有 Java 的 Jupyter kernel。在 Jupyter 的官网上,确实找到了列出来的 Java kernel。不过这些 kernel 都是社区维护的,感觉也不怎么稳定。有些都比较长时间没有更新了。
然后我就看到 Kotlin 的 kernel。这个 kernel 是由 Kotlin 官方维护的,质量和更新速度都有保障。我就打算用这个了。
用 conda 安装了之后,运行 Jupyter notebook,选择 Kotlin 作为 kernel 就可以了。
conda install -c jetbrains kotlin-jupyter-kernel
下面是 Notebook 启动之后的效果。
我用 Jupyter notebook 写了几个 Spring AI 的例子,下面用一个例子来说明。这个例子是用 Spring AI 调用 Ollama 来实现最简单的聊天功能。
首先需要添加相关的依赖。注解 @file:Repository 的作用是添加 Maven 仓库。@file:DependsOn 的作用是声明运行时所需要的 Maven 依赖。这里声明了使用 spring-ai-ollama 的 1.0.0-M2 版本。
@file:Repository("https://repo1.maven.org/maven2")
@file:Repository("https://repo.spring.io/milestone/")
@file:DependsOn("org.springframework.ai:spring-ai-ollama:1.0.0-M2")
添加了依赖之后,下一步就可以直接写 Kotlin 代码并运行。这一步与平常写 Kotlin 代码并没有声明区别。
import org.springframework.ai.chat.client.ChatClient
import org.springframework.ai.ollama.OllamaChatModel
import org.springframework.ai.ollama.api.OllamaOptions
import org.springframework.ai.ollama.api.OllamaApi
val chatClient = ChatClient.builder(OllamaChatModel(OllamaApi())).build()
val options = OllamaOptions.builder().withModel("llama3.2:1b").build()
val output = chatClient.prompt().user("who are you?").options(options).call().content()
println(output)
直接运行这个代码块,就可以看到输出结果。下面是在 Notebook 中编辑和运行的效果。
Notebook 发布到 GitHub 之后,可以直接在 GitHub 上预览,这样就方便了阅读。下面是在 GitHub 上的预览效果。
我写的几个 Spring AI 的代码示例,可以在 GitHub 上找到(alexcheng1982/spring-ai-examples)。如果对使用 Spring AI 开发 RAG 应用感兴趣,可以关注我的付费课程。AI 大模型的检索增强生成 - Spring AI 实现。也可以点击【阅读原文】来查看。