news 2026/5/1 6:22:52

轻松入门SpringAI-SpringAI综合案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
轻松入门SpringAI-SpringAI综合案例

轻松入门 Spring AI 综合案例
(2025-2026 比较实用且完整的入门组合示例)

以下是一个相对完整的、适合初学者到中级的 Spring AI 综合案例,包含目前最常用的几种核心能力:

功能清单: 1. 普通对话(ChatClient 最基础用法) 2. 流式回答(打字机效果) 3. 会话记忆(短期记忆) 4. 系统提示词工程 5. RAG 简单实现(基于内存向量存储) 6. 函数调用(Function Calling / Tools) 7. 结构化输出(JSON模式 + Bean转换)

完整综合案例代码(单文件版)

@RestController@RequestMapping("/ai/demo")@RequiredArgsConstructor@Slf4jpublicclassAiDemoController{privatefinalChatClientchatClient;// 1. 最基础聊天@GetMapping("/chat")publicStringsimpleChat(@RequestParamStringmessage){returnchatClient.prompt().user(message).call().content();}// 2. 流式回答(前端最推荐)@GetMapping(value="/stream",produces=MediaType.TEXT_EVENT_STREAM_VALUE)publicFlux<String>streamChat(@RequestParamStringmessage){returnchatClient.prompt().user(message).stream().content();}// 3. 带记忆 + 系统角色(最常用的组合写法)privatefinalChatMemorychatMemory=newMessageWindowChatMemory(10);// 保留最近10条@GetMapping("/memory")publicStringchatWithMemory(@RequestParamStringsessionId,@RequestParamStringmessage){returnchatClient.prompt().system(""" 你是一位友善、幽默、说话很接地气的「资深Java架构师」 用中文回答,尽量使用 markdown 格式排版 喜欢用表情和生活化比喻解释复杂概念 """).user(message).advisors(newMessageChatMemoryAdvisor(chatMemory,sessionId)).call().content();}// 4. 简单 RAG (内存向量存储版 - 适合快速体验)privatefinalEmbeddingModelembeddingModel;privatefinalVectorStorevectorStore=newSimpleVectorStore(embeddingModel);@PostConstructpublicvoidinitKnowledgeBase(){List<String>docs=List.of("Spring AI 是 Spring 家族推出的官方大模型集成框架,目标是让 Java 开发者用最熟悉的方式使用大语言模型。","目前支持 OpenAI、Azure、Ollama、HuggingFace、阿里通义、百度文心、智谱、Moonshot、DeepSeek 等多种模型。","ChatClient 是 Spring AI 提供的核心高层抽象,类似 RestTemplate 在 HTTP 时代的地位。","2025年下半年开始,Spring AI 正式进入 1.0 阶段,API 基本稳定。");List<Document>documents=docs.stream().map(content->newDocument(content,Map.of("source","spring-ai-doc"))).toList();vectorStore.add(documents);}@GetMapping("/rag")publicStringsimpleRag(@RequestParamStringquestion){List<Document>similarDocs=vectorStore.similaritySearch(SearchRequest.query(question).withTopK(3));Stringcontext=similarDocs.stream().map(Document::getContent).collect(Collectors.joining("\n\n"));returnchatClient.prompt().system("你现在是一个基于给定上下文回答问题的专家助手。\n上下文:\n"+context).user(question).call().content();}// 5. 函数调用(工具调用) - 经典天气例子@GetMapping("/tools")publicStringweatherWithTools(@RequestParamStringcity){recordWeatherInfo(@JsonProperty("city")Stringcity,@JsonProperty("temperature")doubletemperature,@JsonProperty("condition")Stringcondition,@JsonProperty("humidity")inthumidity){}Function<WeatherRequest,WeatherInfo>fakeWeatherFunction=req->newWeatherInfo(req.city(),24.5,"多云转晴",65);returnchatClient.prompt().user("请告诉我"+city+"现在的天气怎么样?").functions(List.of(FunctionCallbackContext.builder().function("get_weather",fakeWeatherFunction).description("获取指定城市的当前天气信息").responseConverter(newBeanOutputConverter<>(WeatherInfo.class)).build())).call().content();}// 6. 结构化输出(最推荐的写法之一)publicrecordTravelPlan(@JsonProperty("destination")Stringdestination,@JsonProperty("days")intdays,@JsonProperty("budget_level")StringbudgetLevel,// low/medium/high@JsonProperty("highlights")List<String>highlights,@JsonProperty("tips")List<String>tips){}@GetMapping("/structured")publicTravelPlanstructuredTravelPlan(@RequestParamStringdestination,@RequestParam(defaultValue="3")intdays,@RequestParam(defaultValue="medium")Stringbudget){BeanOutputConverter<TravelPlan>converter=newBeanOutputConverter<>(TravelPlan.class);StringjsonSchema=converter.jsonSchema;Stringprompt=""" 你是一位专业的旅行规划师。 请为用户规划一份 %d 天的%s预算%s旅行计划。 请严格按照以下 JSON Schema 输出,不要输出任何多余的文字: %s 目的地:%s """.formatted(days,budget,destination,jsonSchema,destination);StringrawJson=chatClient.prompt(prompt).call().content();returnconverter.convert(rawJson);}}

推荐学习路径(难度递增)

阶段重点掌握内容建议耗时推荐练习题目
第1天ChatClient基本用法 + 流式 + 系统提示词2~4小时写一个AI聊天室(带历史记录)
第2天会话记忆 + PromptTemplate3~5小时实现多角色对话(客服/面试官/女友等)
第3天简单RAG(内存/文件/PGVector)6~10小时做一个个人简历/知识库问答机器人
第4~5天Function Calling + 结构化输出8~15小时实现:天气+汇率+查快递+生成周报
第6天+多Agent协作 / ReAct / 工具链编排持续学习中写一个「程序员小助手」Agent(写代码+查资料+写文档)

一句话总结当前(2026年初)最舒服的入门技术栈建议:

Spring Boot 3.3.x + Spring AI 1.0.x + 硅基流动/DeepSeek官方 OpenAI兼容接口 + deepseek-r1:free / deepseek-v3:free(推理最强) + ChatClient流式 + Memory + 简单RAG + Function Calling + 结构化输出

祝你玩得开心,早日做出属于自己的AI小产品~ 🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 5:48:37

StretchSense获230万美元融资,推动XR训练手套全球扩张

StretchSense获230万美元融资&#xff0c;推动XR训练手套全球扩张 可穿戴技术公司StretchSense已成功筹集230万美元资金&#xff0c;本轮融资由PXN Ventures领投&#xff0c;某机构提供支持。该公司目前已通过三轮外部融资筹集了总计近2000万美元。 StretchSense成立于2012年&a…

作者头像 李华
网站建设 2026/4/30 3:09:29

2024最新大数据架构趋势:云原生与湖仓一体实战指南

2024大数据架构趋势深度解析&#xff1a;云原生与湖仓一体实战指南 一、引言&#xff1a;为什么说“云原生湖仓一体”是2024大数据的“必选项”&#xff1f; 1.1 一个真实的痛点&#xff1a;企业数据架构的“两难困境” 某零售企业的技术负责人最近很头疼&#xff1a; 数据分散…

作者头像 李华
网站建设 2026/5/1 6:08:25

大数据领域中 RabbitMQ 的消息压缩技术

大数据场景下RabbitMQ消息压缩实战:从原理到落地的全攻略 摘要/引言 在大数据时代,高吞吐量、大体积消息已成为RabbitMQ的常见挑战:比如电商系统的交易日志(每条10KB+)、物联网的传感器数据(每秒10万条)、数据同步中的全量备份(单条100KB+)。这些场景下,未压缩的消…

作者头像 李华
网站建设 2026/4/24 14:25:39

2. 训练 vs 推理:真正烧钱的是哪一步

作者&#xff1a;HOS(安全风信子) 日期&#xff1a;2026-01-17 来源平台&#xff1a;GitHub 摘要&#xff1a; 2026年&#xff0c;AI行业的成本结构已经发生根本性转变。本文通过云厂商真实数据揭示&#xff0c;推理的累计成本已超过训练10倍以上&#xff0c;成为真正烧钱的环节…

作者头像 李华
网站建设 2026/5/1 6:07:12

5. vLLM 出现前的推理地狱

作者&#xff1a;HOS(安全风信子) 日期&#xff1a;2026-01-17 来源平台&#xff1a;GitHub 摘要&#xff1a; 2023年vLLM出现之前&#xff0c;大模型推理面临着显存碎片化、低效调度和高延迟等诸多挑战&#xff0c;被称为"推理地狱"。本文通过回顾pre-vLLM时代的痛点…

作者头像 李华
网站建设 2026/5/1 6:02:05

7. 为什么云厂商集体选择 vLLM

作者&#xff1a;HOS(安全风信子) 日期&#xff1a;2026-01-17 来源平台&#xff1a;GitHub 摘要&#xff1a; 2026年&#xff0c;AWS、阿里云、字节跳动等全球顶级云厂商纷纷选择vLLM作为其大模型推理的核心框架。本文深入分析了云厂商集体选择vLLM的原因&#xff0c;包括高吞…

作者头像 李华