‌AI系列1:Spring AI

📅 2026/7/13 16:30:09
‌AI系列1:Spring AI
‌传送门PyCharm无法识别LangChain库的问题序言最近在B站看AI相关视频发现都是用的Python几乎没有用JAVA来写代码的。在Spring做为JAVA应用事实标准的情况下不可能对这种情况视而不见或者说是这种挑战的应对。所以推出了springAISpring AI 解决了 AI 集成的根本挑战Connecting your enterprise Data and APIs with AI Models.将您的企业数据与 API 同 AI 模型相连接。Spring AI is an application framework for AI engineering. Its goal is to apply to the AI domain Spring ecosystem design principles such as portability and modular design and promote using POJOs as the building blocks of an application to the AI domain.Spring AI该项目旨在简化包含人工智能功能的应用程序的开发而不会产生不必要的复杂性。该项目从著名的 Python 项目如 LangChain 和 LlamaIndex中汲取灵感但 Spring AI 并不是这些项目的直接移植。 该项目的成立理念是下一波生成式 AI 应用程序将不仅适用于 Python 开发人员而且将在许多编程语言中无处不在。-------------------------------出于Spring AI介绍使用springAI官方地址spring的官方地址Spring AI中文地址Spring AI入门指南由于是要快速通过代码来跑一个例子所以不去纠结它的背景、架构、原理及源码所以先体验一把springAI的Hello World具体可以参考入门指南环境依赖根据spring的要求使用springAI有明确的支持版本可以看官方的说明Spring AI supports Spring Boot 3.4.x and 3.5.x.所以得到的版本依赖如下Spring Boot的版本要3.4.x and 3.5.x所以对应的JDK版本要求Spring Boot 3.x 系列统一要求JDK 17为最低运行版本因为用的maven管理所以对应的版本为3.6Spring Boot 初始化首先要初始化一个Java项目这里有几种方式。方式一是直接使用spring的工具前往 start.spring.io 并选择您希望在新应用中使用的 AI 模型和向量存储方式二可以直接在idea里面创建Spring Boot项目这个需要安装Spring Initializr插件安装之后就可以创建SpringAI项目了项目名称为ai-learn-demo1JDK为17。并添加对应的依赖SpringBoot的版本为3.5.14Web依赖、AI模型为DeepSeek。依赖管理dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version1.0.0/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement聊天模型API聊天模型是最常用也是使用最广泛的模型所以这里就以聊天模型为例子来演示。springAI为聊天模型定义了统一的接口这里是ChatModel接口定义public interface ChatModel extends ModelPrompt, ChatResponse, StreamingChatModel { default String call(String message) {...} Override ChatResponse call(Prompt prompt); }call()方法带有一个String参数简化了初步使用避免了更复杂的Prompt和ChatResponse类所带来的复杂性。 在实际应用中更常见的是使用接受Prompt实例并返回ChatResponse的call()方法。现在更流行的方式是流式响应这个springAI也有支持。这里是StreamingChatModel接口定义:public interface StreamingChatModel extends StreamingModelPrompt, ChatResponse { default FluxString stream(String message) {...} Override FluxChatResponse stream(Prompt prompt); }stream()方法接受一个类似于ChatModel但使用响应式 Flux API 流式传输响应的String或Prompt参数。聊天模型对比springAI几乎支持全部的模型这里直接引用官方的数据聊天模型对比本表比较了Spring AI支持的多种聊天模型并详细列出了它们的功能多模态: 模型能够处理的输入类型例如文本、图像、音频、视频。工具/函数调用: 模型是否支持函数调用或工具使用。流式处理如果模型支持提供流式响应。重试支持重试机制。可观察性: 监控和调试功能。内置JSON: 原生支持JSON输出。本地部署模型是否可以在本地运行。OpenAI API 兼容性如果模型与OpenAI的API兼容。提供者多模态Tools/Functions流处理重试可观测性内置JSON本地OpenAI API 兼容Anthropic Claude文本、PDF、图像Azure OpenAI文本, 图片深度求索OpenAI代理文本谷歌GenAI文本PDF文件图片音频视频Google Vertex AI Gemini文本PDF文件图片音频视频Groq (OpenAI-proxy)文本, 图片HuggingFace文本Ollama文本, 图片DeepSeek提供者多模态Tools/Functions流处理重试可观测性内置JSON本地OpenAI API 兼容深度求索OpenAI代理文本从上表中可以看到DeepSeek模型的的相关特性也就是深度求索。所以这里以DeepSeek为例来进行调用深度搜索聊天前提条件使用DeepSeek的API调用需要在DeepSeek进行注册以及创建API-KEYAPI keys依赖管理在pom文件中添加对DeepSeek模型的依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-deepseek/artifactId /dependency聊天属性DeepSeek提供了很多属性来控制对应的模型功能这里主要需要3个基本属性application.propertiesspring.application.nameai-learn-demo1 server.port8080 spring.ai.deepseek.base-urlhttps://api.deepseek.com # 将api-key替换为您的DeepSeek凭据。 spring.ai.deepseek.api-keyYOUR_API_KEY spring.ai.deepseek.chat.options.modeldeepseek-chat具体的配置含义可以参考DeepSeek的官方地址首次调用 API示例控制器RestController public class ChatController { private final DeepSeekChatModel chatModel; Autowired public ChatController(DeepSeekChatModel chatModel) { this.chatModel chatModel; } GetMapping(/ai/generate) public Map generate(RequestParam(value message, defaultValue Tell me a joke) String message) { return Map.of(generation, chatModel.call(message)); } GetMapping(/ai/generateStream) public FluxChatResponse generateStream(RequestParam(value message, defaultValue Tell me a joke) String message) { var prompt new Prompt(new UserMessage(message)); return chatModel.stream(prompt); } }测试DeepSeek模型把项目启动起来发起一个请求http://localhost:8080/ai/generate?message你是谁呀写在最后至此就可以通过springAI实现了调用DeepSeek模型了。不过DeepSeek模型需要充值最少1块所以下一节会通过Ollama来部署本地模型并通过springAI来调用