spring AI都能做什么

Spring AI 是 Spring 官方推出的一个用于简化 Java 应用中集成人工智能(AI)功能的框架。它旨在将大语言模型(LLMs)、向量数据库、提示工程(Prompt Engineering)、RAG(检索增强生成)等 AI 能力,以 Spring 开发者熟悉的方式(如依赖注入、自动配置、模板类等)无缝集成到 Spring Boot 应用中。

与大型语言模型集成

Spring通过简单的配置快速集成 OpenAI、Azure OpenAI、HuggingFace、Ollama、Mistral、Google Gemini 等主流 LLM 服务。

java 复制代码
ChatClient chatClient = ... // 自动注入或配置
ChatResponse response = chatClient.call("帮我写一个天气查询的API");
System.out.println(response.getResult().getOutput());

提供了ChatClient和ChatModel和大模型进行对话

ChatModel API 让应用开发者可以非常方便的与 AI 模型进行文本交互,它抽象了应用与模型交互的过程,包括使用 Prompt 作为输入,使用 ChatResponse 作为输出等。

java 复制代码
@RestController
public class ChatModelController {
  private final ChatModel chatModel;

  public ChatModelController(ChatModel chatModel) {
    this.chatModel = chatModel;
  }

  @RequestMapping("/chat")
  public String chat(String input) {
    ChatResponse response = chatModel.call(new Prompt(input));
    return response.getResult().getOutput().getContent();
  }
}

ChatClient 提供了与 AI 模型通信的 Fluent API,它支持同步和反应式(Reactive)编程模型。与 ChatModel、Message、ChatMemory 等原子 API 相比,更加灵活,代码更精简。

java 复制代码
@RestController
public class ChatController {

  private final ChatClient chatClient;

  public ChatController(ChatClient.Builder builder) {
    this.chatClient = builder.build();
  }

  @GetMapping("/chat")
  public String chat(String input) {
    return this.chatClient.prompt()
        .user(input)
        .call()
        .content();
  }
}

Prompt 模板支持

可以定义 prompt 模板,使用变量动态生成 prompt。使用类似 Spring Boot 配置和注入方式加载模板。

java 复制代码
PromptTemplate template = new PromptTemplate("请用Java写一个{task}的例子");
String prompt = template.render(Map.of("task", "文件读取"));

支持RAG

支持将文本向量化后存储到向量数据库(如 Redis, Pinecone, PostgreSQL with pgvector, Milvus 等)。可用于构建 RAG 应用,实现文档问答、知识库问答等。

java 复制代码
EmbeddingClient embeddingClient = ...;
VectorStore vectorStore = new PgVectorStore(...);
vectorStore.add(List.of(new Document("Spring 是什么框架?", metadata)));

支持对话记忆

支持基于chat memory的对话记忆,也就是不需要调用显示的记录每一轮的对话历史。

java 复制代码
//初始化基于内存的对话记忆
ChatMemory chatMemory = new InMemoryChatMemory();

DashScopeChatModel chatModel = ...;
ChatClient chatClient = ChatClient.builder(dashscopeChatModel)
.defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
.build();

//对话记忆的唯一标识
String conversantId = UUID.randomUUID().toString();

ChatResponse response = chatClient
        .prompt()
        .user("我想去新疆")
        .advisors(spec -> spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, conversantId)
                .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10))
        .call()
        .chatResponse();
String content = response.getResult().getOutput().getContent();
Assertions.assertNotNull(content);

logger.info("content: {}", content);

response = chatClient
        .prompt()
        .user("可以帮我推荐一些美食吗")
        .advisors(spec -> spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, conversantId)
                .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10))
        .call()
        .chatResponse();
content = response.getResult().getOutput().getContent();
Assertions.assertNotNull(content);

logger.info("content: {}", content);

支持Function Calling 和 MCP

Spring AI 提供了 @Tool 注解,可将任意 Java 方法注册为 LLM 可调用的工具:

java 复制代码
@Tool("获取指定城市的当前天气")
public String getCurrentWeather(String location) {
    // 调用天气 API
}
相关推荐
賬號封禁中miu1 分钟前
图论之最小生成树
java·数据结构·算法·图论
rayufo1 分钟前
深度学习图像复原论文《SwinIR: Image Restoration Using Swin Transformer》解读及其代码实现
人工智能·深度学习·transformer
万俟淋曦2 分钟前
【论文速递】2025年第42周(Oct-12-18)(Robotics/Embodied AI/LLM)
人工智能·ai·机器人·大模型·论文·robotics·具身智能
月明长歌3 分钟前
Java数据结构:PriorityQueue堆与优先级队列:从概念到手写大根堆
java·数据结构·python·leetcode·
lalala_Zou4 分钟前
小米日常实习一面
java·后端·面试
hero_heart5 分钟前
opencv和摄影测量坐标系的转换
人工智能·opencv·计算机视觉
算法与双吉汉堡11 分钟前
【短链接项目笔记】Day3 用户模块剩余部分
java·redis·后端
Chengbei1111 分钟前
fastjson 原生反序列化配合动态代理绕过限制
java·安全·网络安全·系统安全·安全架构
Java后端的Ai之路12 分钟前
【分析式AI】-时间序列模型一文详解
人工智能·aigc·时间序列·算法模型·分析式ai
lhrimperial12 分钟前
MySQL底层原理
java·后端·mysql