Spring AI 是 Spring 生态中用于集成人工智能(特别是大语言模型 LLM)的框架,其核心设计目标是提供统一的抽象层,屏蔽不同 AI 供应商(如 OpenAI、Azure、阿里云通义千问等)的 API 差异,使开发者能像使用 Spring Data 或 Spring Cloud 一样开发 AI 应用。
Spring AI网址
工作原理
统一抽象层 (Abstraction Layer) Spring AI 定义了标准的接口(如 ChatClient、EmbeddingModel、ImageModel),底层通过适配器模式对接具体的 AI 提供商。开发者只需依赖 spring-ai-openai-spring-boot-starter 或其他厂商 starter,Spring Boot 自动配置机制会根据 classpath 和配置文件自动装配对应的 Bean。
提示词工程与模板 (Prompt Engineering) 通过 Prompt 对象封装系统消息(System Message)、用户消息(User Message)和历史上下文。支持 PromptTemplate 进行动态参数替换,将业务数据注入到预设的提示词结构中。
拦截器链机制 (Advisor Chain) 借鉴 Spring AOP 思想,引入 Advisor 概念。在请求发送给模型前后执行横切逻辑,如:
- 记忆管理:MessageChatMemoryAdvisor 自动加载和存储对话历史。
- RAG 增强:QuestionAnswerAdvisor 在发送请求前检索向量数据库,将相关知识片段注入 Prompt。
- 安全过滤:SafeGuardAdvisor 检查输入输出是否包含敏感信息。
结构化输出 (Structured Output) 利用模型的 JSON 模式能力,将非结构化的文本响应直接映射为 Java POJO 对象,避免手动解析字符串。
工具调用 (Tool Calling / Function Calling) 允许将 Spring Bean 方法注册为“工具”。模型在推理过程中若判断需要外部数据或执行操作,会生成工具调用请求,Spring AI 负责序列化参数、调用本地 Java 方法,并将结果返回给模型继续生成最终回答。
运行流程
以一次典型的 RAG(检索增强生成)对话为例,流程如下:
- ChatMemoryAdvisor 从存储(内存/Redis/DB)中读取该会话的历史消息。
- QuestionAnswerAdvisor 提取用户问题中的关键词,查询向量数据库(Vector Store),获取相关文档片段。
- ChatClient 调用底层的 ChatModel(如 OpenAiChatModel)。
- ChatModel 将 Prompt 转换为特定厂商的 HTTP 请求格式,发送至 AI 服务商 API。
- 接收 AI 返回的原始响应。
- 若配置了结构化输出,则反序列化为 Java 对象。
- 若涉及工具调用,则递归执行“工具调用 -> 获取结果 -> 再次请求模型”的过程。
- ChatMemoryAdvisor 将本轮对话的用户问题和 AI 回答存入历史记录。






