Skip to content

Spring AI 核心概念

⏱ 阅读约 15 分钟 ⭐ 核心概念 🔗 项目应用:云智汇 AI 教育平台

Spring AI 是 Spring 生态下的 AI 应用开发框架,旨在将 AI 能力以 Spring 的方式集成到 Java 应用中。本文梳理其核心组件与设计理念。

项目实践:云智汇 AI 教育平台中,使用 Spring AI 构建路由工作流 Agent,实现了课程问答、个性化推荐与智能下单的意图识别和任务分发。

ChatClient — 统一入口

ChatClient 是与 LLM 交互的核心接口,屏蔽了不同模型提供商的底层差异:

java
ChatClient chatClient = ChatClient.builder(chatModel)
    .defaultSystem("你是一个专业的助手")
    .defaultAdvisors(new SimpleLoggerAdvisor())
    .build();

Builder 模式设计: Spring AI 使用 Builder 模式构建 ChatClient,支持链式调用配置 System Prompt、Advisor 链、默认参数等。这种设计使得同一个 ChatClient 实例可以在多处复用,同时保持配置的一致性。

Prompt 封装: 对话请求通过 Prompt 对象封装,包含 System Message、User Message 和 ChatOptions(温度、最大 Token 等参数)。返回的 ChatResponse 包含多个 Generation 候选和 ChatResponseMetadata(Token 消耗等元数据)。

Advisor — 拦截器模式

Advisor 是 Spring AI 中最具设计感的组件之一,本质上是一个请求/响应拦截器链。

工作原理:

用户请求 → Advisor.before() → ChatModel 调用 → Advisor.after() → 返回结果

每个 Advisor 可以:

  • before:修改请求内容(如注入 RAG 检索到的上下文)
  • after:修改响应内容(如格式化输出、记录日志)

常用 Advisor:

Advisor功能
QuestionAnswerAdvisorRAG 检索增强,自动将相关文档注入 Prompt
ChatMemoryAdvisor管理对话历史,维护上下文连贯性
SimpleLoggerAdvisor记录请求/响应日志
RetrievalAugmentationAdvisor更高级的 RAG 实现,支持自定义检索策略

Advisor 链执行顺序: 多个 Advisor 按 order 值排序执行,数值越小优先级越高。这与 Spring MVC 的 Filter 链和 Spring Security 的 Filter Chain 思路一致。

Tool Calling — 工具调用

Tool Calling 让 LLM 能够调用外部工具(函数),扩展其能力边界:

java
ChatClient.create(chatModel)
    .prompt("北京今天天气怎么样?")
    .tools(weatherTool)
    .call()
    .content();

流程:

  1. 用户提出问题
  2. LLM 判断需要调用工具,返回 tool_calls 请求
  3. 框架自动执行对应的 Java 方法
  4. 将执行结果回传给 LLM
  5. LLM 基于工具返回的结果生成最终回答

工具定义: 通过 @Tool 注解标记方法,框架自动提取方法名、参数名和 JavaDoc 作为工具描述传递给 LLM。

ChatMemory — 对话记忆

ChatMemory 管理多轮对话的上下文,支持多种存储后端:

  • InMemoryChatMemory:内存存储,适合开发测试
  • CassandraChatMemory:持久化到 Cassandra
  • 自定义实现:可对接 MySQL、Redis 等

记忆窗口: 可配置保留最近 N 轮对话,避免超出 LLM 上下文窗口限制。

与 LangChain4j 的对比

特性Spring AILangChain4j
设计理念Spring 生态集成,声明式配置独立框架,注解驱动
核心抽象ChatClient + AdvisorAiServices + 注解
RAG 实现QuestionAnswerAdvisorContentRetriever + 注入
工具调用@Tool 注解@Tool 注解
记忆管理ChatMemory + Advisor@MemoryChatMemoryStore
适用场景Spring Boot 项目任意 Java 项目

一句话总结: Spring AI 更适合已有 Spring Boot 技术栈的团队,而 LangChain4j 更灵活、适用范围更广。两者的核心概念(Chat、RAG、Tool、Memory)基本对齐,只是实现范式不同。

AI 应用开发 / Agent 开发实习生