引言随着人工智能技术的飞速发展将 AI 能力集成到应用中变得越来越重要。Spring AI 项目应运而生旨在为 Java 开发者提供一个简洁、一致的编程模型方便地将各种 AI 模型如 OpenAI、Azure OpenAI、Hugging Face 等的功能集成到 Spring 应用中。本文将带你快速入门 Spring AI重点介绍几个核心概念和功能ChatClient、Function Calling、Advisor、多模态Multimodal以及 RAG检索增强生成。1. ChatClient对话交互的核心ChatClient是 Spring AI 中用于与 AI 模型进行对话式交互的核心接口。它抽象了与不同 AI 提供商后端通信的细节提供了一个统一的 API。基本用法你可以注入一个ChatClientBean然后使用它来发送用户消息 (UserMessage) 并接收 AI 模型的响应 (AssistantMessage)。优势无需关心底层的 HTTP 请求、认证、JSON 序列化/反序列化等繁琐细节。Spring AI 帮你处理了这些。示例Autowired private ChatClient chatClient; public String getAiResponse(String userMessage) { // 创建用户消息 UserMessage userMsg new UserMessage(userMessage); // 发送消息并获取 AI 响应 AssistantMessage aiResponse chatClient.call(userMsg); // 返回 AI 的文本内容 return aiResponse.getContent(); }2. Function Calling让 AI 调用你的代码Function Calling 是大型语言模型LLM的一项强大功能它允许模型在响应中请求调用开发者预定义的函数或工具。Spring AI 对此提供了良好的支持。工作原理开发者定义一组函数描述其名称、参数结构、用途。在对话请求中告知 AI 模型有哪些函数可用。AI 模型根据用户输入和上下文判断是否需要调用某个函数。如果需要调用模型会返回一个结构化的请求包含要调用的函数名和参数。你的应用代码执行该函数并将结果返回给 AI 模型。AI 模型结合函数执行结果生成最终回复给用户。Spring AI 实现通过FunctionCallback接口或其具体实现如SimpleFunctionCallback来定义函数及其执行逻辑。在创建ChatClient或发送请求时注册这些回调。应用场景获取实时数据如天气、股票、执行数据库操作、调用外部 API、进行复杂计算等。意义极大地扩展了 AI 模型的能力边界使其能够访问和操作外部世界的信息和系统。3. Advisor定制对话流程Advisor 是 Spring AI 中的一个重要概念它允许你在对话请求发送到 AI 模型之前和响应返回给用户之后插入自定义的逻辑。这类似于一个拦截器Interceptor或切面Aspect。主要功能请求前处理 (before):修改用户消息、添加上下文信息、记录日志、添加系统提示等。响应后处理 (after):解析 AI 响应、处理 Function Calling 请求调用实际函数、格式化输出、记录响应、处理错误等。实现方式实现ChatClientAdvisor接口并重写before和after方法。然后将你的 Advisor 注册到ChatClient。应用场景在每次对话前自动添加角色设定或对话历史。实现复杂的 Function Calling 处理流程。对 AI 输出进行安全过滤或内容审核。统一添加日志或监控。处理特定的错误或重试逻辑。优势提供了一种非侵入式的方式来增强和定制核心的ChatClient行为使代码更模块化和可维护。4. 多模态超越文本的理解与生成传统的 LLM 主要处理文本。多模态模型则能够理解和生成多种类型的数据最常见的是同时处理文本和图像。Spring AI 支持Spring AI 提供了对多模态模型如 OpenAI 的 GPT-4V的支持。核心接口ImageClient:用于生成图像文生图。MultimodalChatClient:扩展了ChatClient允许在对话请求中同时包含文本消息 (TextContent) 和图像消息 (ImageContent)。应用场景用户上传一张图片并询问相关问题例如“这张图片里是什么动物”。让 AI 描述一张图片的内容。根据文本描述生成创意图片。分析图表或截图并提取信息。示例 (MultimodalChatClient 发送图片和文本)Autowired private MultimodalChatClient chatClient; public String analyzeImage(byte[] imageData, String question) { // 创建图像内容 ImageContent imageContent new ImageContent(new Media(Media.Type.IMAGE_JPEG, imageData)); // 创建文本问题 TextContent textContent new TextContent(question); // 发送多模态请求 (包含图片和文本) AssistantMessage response chatClient.call(imageContent, textContent); return response.getContent(); }5. RAG检索增强生成RAG 是一种技术架构用于解决 LLM 知识局限于其训练数据可能过时或不包含特定私有数据的问题。它结合了信息检索IR和文本生成LLM。工作原理检索Retrieve当用户提出一个问题时系统首先从外部的、特定的数据源如文档数据库、向量数据库、知识库中检索与问题最相关的文档片段。增强Augment将检索到的相关文档片段作为上下文和用户的原始问题一起构造成新的提示Prompt输入给 LLM。生成GenerateLLM 基于这个“增强”后的提示包含问题和相关上下文生成最终的答案。Spring AI 实现Spring AI 提供了构建 RAG 应用的基础组件和模式。VectorStore:用于存储文档的向量表示支持多种向量数据库如 Pinecone, Redis, Chroma, PGVector 等。你需要将文档分割DocumentReader并嵌入EmbeddingClient后存入VectorStore。Retriever:接口定义如何根据查询用户问题从VectorStore中检索相关文档。常用实现如VectorStoreRetriever。集成到对话通常在ChatClientAdvisor的before方法中实现 RAG 流程获取用户问题 - 用Retriever查找相关文档 - 将文档作为上下文添加到发送给 AI 模型的提示中。优势让 LLM 能够基于最新、特定的私有数据生成答案。提高答案的准确性、相关性和可信度。减少 LLM 产生“幻觉”编造信息的情况。应用场景智能客服基于产品文档回答、企业内部知识问答、法律或医疗领域的专业咨询、基于特定数据集的报告生成等。