AI辅助分析系统
1. 第一阶段:调用智谱模型api实现对话
创建一个支持 Spring AI 的 Spring Boot 的项目
- Maven类型
- 依赖:Spring Web 构建web接口,Lombok 简化代码
配置智谱模型API key
在 src/main/resources/application.yml 中配置:
spring:
ai:
zhipuai:
api-key: ec5a6063b1ca43978c645a8ce4d8f34b.2xaMYImCVdSnl9SL
chat:
options:
model: glm-4.7
在src/main/java/com.example/aiassistant/ 创建一个新Calss,TestAiController
package com.example.aiassistant;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestAiController {
private final ChatClient chatClient;
// Spring AI 会自动帮你配置好 ChatClient.Builder
public TestAiController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/test")
public String testAi(@RequestParam(defaultValue = "你好,介绍一下你自己") String message) {
// 这一行就是最简单的 AI 调用
return chatClient.prompt().user(message).call().content();
}
}
声明这是一个REST控制器,会自动将返回结果序列化为JSON/文本
@RestController
public class TestAiController {
声明一个final的ChatClient实例,通过构造器注入
Spring AI会自动帮你配置好ChatClient.Builder
private final ChatClient chatClient;
Spring AI会自动帮你配置好ChatClient.Builder,这里通过构造函数注入ChatClient.Builder
public TestAiController(ChatClient.Builder builder) {
// 使用builder构建ChatClient实例
this.chatClient = builder.build();
}
定义一个GET接口,路径为"/test"
RequestParam表示从URL参数获取message,默认值为"你好,介绍一下你自己"
@GetMapping("/test")
public String testAi(@RequestParam(defaultValue = "你好,介绍一下你自己") String message) {
return chatClient.prompt().user(message).call().content();
}
}
使用链式调用与大模型交互:
- chatClient.prompt(): 开始构建对话
- .user(message): 设置用户输入内容
- .call(): 发送请求到大模型
- .content(): 获取模型返回的文本内容
详细的执行流程
// 完整调用链:
chatClient // ChatClient实例
.prompt() // 创建一个Prompt对象
.user(message) // 设置用户角色消息
.call() // 发送请求到AI模型,返回Response
.content() // 从Response中提取文本内容
分析:
- Spring MVC 是 Spring Boot 处理 Web 请求的核心模块
- Spring Boot 内置的 Tomcat 具有线程池机制。每一个 HTTP 请求进入后,Tomcat 都会分配一个独立的线程去处理
在浏览器中输入http://localhost:8080/test,按下回车,message会被打包为一个HTTP请求报文
通过TCP/IP协议,请求报文投递到了本机8080端口,Tomcat服务器监听到,将其转化为Java对象
报文对象进入Java程序后,Spring MVC将其分发给/test,分发,匹配,注入message参数
通过ChatClient调用Spring AI框架里的 ZhiPuAiChatModel
当执行下面这行代码的时候
chatClient.prompt().user(message).call().content();
后台发生了以下通信过程
- Spring AI核心组件将message包装成智谱要求的JSON格式
- 鉴权模块利用你提供的api-key自动计算一个JWT Token 放在请求头里
- HTTP客户端发起一个HTTP POST请求到智谱的公网URL
Java程序伪装成了一个高级浏览器,去访问了智谱的API接口
智谱云端接收到你的加密请求,验证 Token 正确后,把文本输入到 GLM 模型中,算出回答
智谱把结果(JSON)发回给你的 Spring Boot。Spring AI 自动把复杂的 JSON 简化
你的 Controller 把这句字符串return
Spring MVC 再把它包装成 HTTP 响应,最后在你的浏览器屏幕上打印出来

2. 第二阶段:引入RAG
创建AiConfig类:
package com.example.aiassistant;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AiConfig {
// 1. 定义向量库(AI 的本地内存知识库)
@Bean
public VectorStore vectorStore(EmbeddingModel embeddingModel) {
return SimpleVectorStore.builder(embeddingModel).build();
}
// 2. 这里的 ChatClient.Builder 是 Spring AI 2.0 的新用法,非常优雅
@Bean
public ChatClient chatClient(ChatClient.Builder builder) {
return builder.build();
}
}
- @Configuration表示这是一个配置类,Spring容器会扫描其中的@Bean方法
- @Bean注解:将方法返回值注册为Spring容器中的一个Bean
VectorStore:向量存储接口,用于存储和检索嵌入向量
EmbeddingModel:嵌入模型,用于将文本转换为向量
SimpleVectorStore:Spring AI提供的简单向量存储实现
.builder(embeddingModel):使用嵌入模型构建向量存储
.build():创建VectorStore实例
这里的 ChatClient.Builder 是 Spring AI 2.0 的新用法,非常优雅
创建ChatClient Bean,用于与AI模型交互
数据加载器,创建DataLoderService类
告诉 Spring AI:“把这个 CSV 文件读了,变成向量存进内存里。”
package com.example.aiassistant;
import jakarta.annotation.PostConstruct;
import org.springframework.ai.reader.TextReader;
import org.springframework.ai.transformer.splitter.TokenTextSplitter;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
@Service
public class DataLoaderService {
private final VectorStore vectorStore;
@Value("classpath:data/signal_plan_sample.csv")
private Resource csvResource;
public DataLoaderService(VectorStore vectorStore) {
this.vectorStore = vectorStore;
}
@PostConstruct
public void init() {
// 1. 读取 CSV 文本
TextReader reader = new TextReader(csvResource);
// 2. 将数据“喂”给向量库(内部会自动调用智谱的 Embedding 接口进行向量化)
vectorStore.accept(TokenTextSplitter.builder().build().apply(reader.get()));
System.out.println("🚀 交通信号方案已成功载入 AI 知识库!");
}
}
下载了一个交通监控的数据集,记录了交通信息

数据流向:
HTTP请求 → Controller → 获取参数 → 构建提示 → 向量检索 → AI调用 → HTTP响应
客户端 → 端口8080 → message → 系统提示+用户消息 → 相关文档 → AI模型 → 回答文本

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)