Spring AI总结

一. Spring AI的设计

Spring AI 抽象了一层:

之前Java访问不同的大模型需要单独写适配的API接口,现在有了spring AI可以使用一套统一的API接口,换模型,不再需要修改java代码,只需要修改配置即可。

chatClient

.prompt()

.user("你好")

.call()

.content();

例如:

  1. spring:

ai:

deepseek:

api-key: xxx

chat:

options:

model: deepseek-chat

  1. spring:

ai:

openai:

api-key: xxx

chat:

options:

model: gpt-4o-mini

一句话总结:spring AI的优势,换大模型通常只需要换配置,不需要改业务代码。

二. 在企业项目中怎么选

三. Spring AI的Demo搭建流程

  1. 引入依赖

Spring Boot 3.x + Spring AI 1.x

<dependencies>

<!-- Spring Web -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!-- Spring AI OpenAI -->

<dependency>

<groupId>org.springframework.ai</groupId>

<artifactId>spring-ai-starter-model-openai</artifactId>

</dependency>

</dependencies>

  1. 配置秘钥API Key application.yml

spring:

ai:

openai:

api-key: sk-xxxxxx

chat:

options:

model: gpt-4o-mini

  1. 创建 ChatClient

package com.itcast.springaiparent;

import org.springframework.ai.chat.client.ChatClient;

import org.springframework.stereotype.Service;

@Service

public class AiService {

private final ChatClient chatClient;

public AiService(ChatClient.Builder builder){

this.chatClient =

builder.build();

}

public String chat(String message){

return chatClient

.prompt()

.user(message)

.call()

.content();

}

}

  1. 写 Controller 测试

package com.itcast.springaiparent;

import org.springframework.web.bind.annotation.*;

@RestController

@RequestMapping("/ai")

public class AiController {

private final AiService aiService;

public AiController(AiService aiService){

this.aiService = aiService;

}

@GetMapping("/chat")

public String chat(

@RequestParam String msg

){

return aiService.chat(msg);

}

}

四. Function Calling(工具调用)

  1. 项目结构
  1. 定义天气Tool

关键就是 @Tool 注解。

复制代码
@Component
public class WeatherTool {
    /**
     * @Tool:让模型能真正调用这个工具
     * @param city
     * @return
     */
    @Tool(description = "根据城市名称查询天气")
    public String getWeather( @ToolParam(description = "城市名称,例如:北京")String city) {
        return city + "今天晴,气温 25℃";
    }
}

description告诉 AI:我这里有一个工具,可以根据城市查询天气。

  1. 创建 ChatClient

package com.example.service;

import com.example.tool.WeatherTool;

import org.springframework.ai.chat.client.ChatClient;

import org.springframework.stereotype.Service;

@Service

public class AiService {

private final ChatClient chatClient;

public AiService(

ChatClient.Builder builder,

WeatherTool weatherTool

){

this.chatClient =

builder

.defaultTools(weatherTool)

.build();

}

public String chat(String message){

return chatClient

.prompt()

.user(message)

.call()

.content();

}

}

关键代码:

.defaultTools(weatherTool)

告诉 AI: 这个 Java 对象里面的方法,你可以调用。/

五. Controller测试

@RestController

@RequestMapping("/ai")

public class AiController {

private final AiService aiService;

public AiController(AiService aiService){

this.aiService=aiService;

}

@GetMapping("/chat")

public String chat(

String msg

){

return aiService.chat(msg);

}

}

六. 如果有多个Tool,大模型来根据 需求决定调用哪个

@Component

public class OrderTool {

@Tool(description="查询订单状态")

public String queryOrder(String orderId){

return "订单已发货";

}

}

然后:

.defaultTools(

weatherTool,

orderTool

)

Function Calling本质

以前:

用户

|

你的代码判断

|

if(天气)

调天气接口

if(订单)

查订单

现在:

用户

|

LLM

|

判断意图

|

选择Tool

|

执行Java方法

|

返回答案

五. Function Calling和MCP区别?

Function Calling MCP
工具在哪里 你的Java代码 独立服务
标准 模型厂商各自实现 统一协议
适合 单体应用 企业级Agent
Spring AI 支持 支持

六. RAG的实现原理

实现功能:

用户问:"公司的请假制度是什么?"

AI 不知道答案

→ 去知识库搜索

→ 找到《员工手册.pdf》

→ 把相关内容交给 GPT

→ AI 根据文档回答

1. RAG的整体工作流程

第一次准备

PDF / Word / txt

|

|

v

Document Reader

|

|

v

Text Splitter

|

|

v

Embedding模型

|

|

v

Vector DB

(向量数据库)

用户提问

用户:

"公司年假多少天?"

|

v

Embedding问题向量

|

v

Vector DB搜索相似内容

|

v

找到相关文档片段

|

v

Prompt增强

|

v

LLM回答

2. 技术选型

组件 技术
Spring AI 1.x
LLM OpenAI / Ollama
Embedding OpenAI / BGE
向量库 Chroma
文档 txt

3. 添加依赖

<dependencies>

<!-- Spring Web -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!-- Spring AI OpenAI -->

<dependency>

<groupId>org.springframework.ai</groupId>

<artifactId>spring-ai-starter-model-openai</artifactId>

</dependency>

<!-- 向量数据库 Chroma -->

<dependency>

<groupId>org.springframework.ai</groupId>

<artifactId>

spring-ai-starter-vector-store-chroma

</artifactId>

</dependency>

</dependencies>

  1. 配置

spring:

ai:

openai:

api-key: sk-xxxx

chat:

options:

model: gpt-4o-mini

vectorstore:

chroma:

client:

host: localhost

port: 8000

4. 加载文档进入向量数据库

@Component

public class DataLoader {

private final VectorStore vectorStore;

public DataLoader(

VectorStore vectorStore

){

this.vectorStore=vectorStore;

}

@PostConstruct

public void load(){

Resource resource =

new ClassPathResource(

"docs/company.txt"

);

TextReader reader =

new TextReader(resource);

List<Document> documents =

reader.get();

vectorStore.add(documents);

}

}

5. 创建 RAG 查询

@Service

public class RagService {

private final ChatClient chatClient;

public RagService(

ChatClient.Builder builder,

VectorStore vectorStore

){

this.chatClient =

builder

.defaultAdvisors(

new QuestionAnswerAdvisor(

vectorStore

)

)

.build();

}

public String ask(String question){

return chatClient

.prompt()

.user(question)

.call()

.content();

}

}

重点代码:

.defaultAdvisors(

new QuestionAnswerAdvisor(vectorStore)

)

问题

|

向量搜索

|

找文档

|

拼接Prompt

|

调用LLM

相关推荐
zandy10114 分钟前
中电金信金融 AI 工程化实践:异构模型纳管、智能体治理与 AI 原生软件工厂
人工智能·金融
吴佳浩8 分钟前
中小企业跑125B 大模型:显存装不下的时候,Strata 做了什么
人工智能·llm
学IT的周星星16 分钟前
LangGraph:用「流程图」的方式编排 Agent
数据库·人工智能·大模型·llm·流程图·agent
Lichee2018 分钟前
招行Java 面试知识点梳理:Spring 事务、锁、线程池、集合
java·面试
NC 王炸19 分钟前
不用 API Key,也能让网页调用 AI?Opera 把本地模型接进了浏览器
人工智能·浏览器扩展·ai 工具·本地 ai·opera·webai
锋行天下21 分钟前
Langgraph 实现类似Langchain记忆上下文过长裁剪
人工智能·后端
不老刘22 分钟前
Antigravity 的 New Worktree 模式:给 AI 代理一个安全的“平行工位”
人工智能·git·ai编程·antigravity
m0_7196408723 分钟前
高校人工智能实验室搭建,2026年具身智能科研设备适配建议
人工智能·经验分享
樱木花道長26 分钟前
AMD Ross 深度系列 8:FAQ 七问七答(文末附网盘链接)
人工智能·fpga开发
吴名氏.26 分钟前
Java转AI Agent教程(第一周)让模型先跑起来
人工智能·python·ai·ai agent