Spring AI第一课-简单问答

发布时间:2026/9/7 19:38:40

Spring AI第一课-简单问答
Spring AI 快速入门集成 DeepSeek 大模型实战笔记今天上手了 Spring AI 的第一课用 Spring Boot DeepSeek API 搭了一个最简单的 AI 聊天应用。把整个过程和知识点整理一下方便后续回顾。一、什么是 Spring AISpring AI 是 Spring 官方推出的 AI 应用开发框架核心目标是让 Java 开发者像使用 Spring Data 操作数据库一样用统一的抽象来调用各种大模型。它的核心特点统一 API 抽象不管是 OpenAI、DeepSeek、智谱还是通义千问接口调用方式基本一致切换模型只改配置自动装配Spring Boot Starter 机制引入依赖 写配置就能用高阶能力支持 RAG、Function Calling、多模态、向量数据库等入门阶段先从聊天开始二、项目配置详解application.propertiesspring.application.nameSpringAIQuickStart server.port8080 # Deepseek API 配置 spring.ai.deepseek.base-urlhttps://api.deepseek.com spring.ai.deepseek.api-keysk-xxxxxxxxxxxxxxxxxxxx spring.ai.deepseek.chat.options.modeldeepseek-chat spring.ai.deepseek.chat.options.temperature0.8逐行拆解知识点配置项作用注意点spring.ai.deepseek.base-urlDeepSeek API 的基础地址国内模型必须手动指定 base-url默认是 OpenAI 的地址spring.ai.deepseek.api-keyAPI 密钥从 DeepSeek 官网控制台获取生产环境绝对不能硬编码建议用环境变量或配置中心chat.options.model指定使用的模型名称DeepSeek 聊天模型一般填deepseek-chatchat.options.temperature采样温度范围 0~2值越高回答越随机、越有创造力值越低越稳定、越严谨。0.8 属于偏创意的平衡值小知识pom.xml 里需要引入spring-ai-deepseek-spring-boot-starter依赖Spring Boot 才会自动装配 DeepSeekChatModel 这个 Bean。三、Controller 层实现ChatControllerRestController RequestMapping(/ai) public class ChatController { Autowired private DeepSeekChatModel chatModel; GetMapping(/generate) private String generate(RequestParam(valuemessage, defaultValue你是谁) String message) { String response chatModel.call(message); return response; } }核心知识点1. DeepSeekChatModel 是什么这是 Spring AI 自动装配好的聊天模型客户端本质上封装了 HTTP 请求、鉴权、序列化等底层逻辑。我们只需要注入直接调用就行不用手写 RestTemplate/WebClient。2.chatModel.call(message)方法最简单的同步调用方式传入一个 String返回一个 String内部会自动构建 ChatRequest调用 DeepSeek 的/chat/completions接口阻塞式调用大模型生成需要几秒这段时间线程会一直等待。生产环境建议用流式stream接口提升体验3. 几个可以优化的点generate方法权限是privateSpring MVC 其实也能识别但规范上应该写成public没有异常处理API 调用失败会直接抛 500没有对话历史每次调用都是全新的上下文多轮对话需要自己维护 message 列表四、前端聊天页面前端是一个纯 HTML CSS JS 的单页通过fetch调用后端/ai/generate接口。关键实现点1. 消息渲染机制function addMessage(role, text) { // 动态创建 DOM 元素区分 user / ai 两种样式 }用role参数控制气泡方向用户消息靠右紫色渐变AI 消息靠左白色卡片。2. 打字指示器Typing Indicatorfunction addTypingIndicator() { ... } function removeTypingIndicator() { ... }请求发出后显示三个跳动的小圆点AI 回复回来后移除——这是聊天应用的标配交互解决了等待期间的空白焦虑。3. XSS 防护function escapeHtml(text) { const div document.createElement(div); div.textContent text; return div.innerHTML; }AI 返回的内容直接插入 DOM 有 XSS 风险用textContent转义是最简单的处理方式。4. 跨域问题这里前端页面和后端接口是同源部署都在 8080 端口所以 fetch 直接写/ai/generate就行。如果前后端分离部署后端需要配置CrossOrigin或全局 CORS 配置。五、完整调用链路梳理用户输入文字 → 前端 fetch 发送 GET 请求 /ai/generate?messagexxx → ChatController 接收参数 → DeepSeekChatModel.call() 内部封装 HTTP 请求 → 调用 DeepSeek 官方 API (api.deepseek.com) → 大模型生成回答并返回 ← 拿到响应字符串 ← Controller return 字符串 ← 前端收到 response → 渲染 AI 气泡到页面六、踩坑与注意事项API Key 泄露风险代码里硬编码 key 只是练习用实际项目一定要放到环境变量或 Nacos 等配置中心同步调用超时call()是阻塞的复杂回答可能耗时十几秒需要调整 Tomcat 超时时间或者改用 SSE 流式输出没有上下文记忆每次调用都是独立的AI 不记得上一句说了什么。多轮对话需要把历史消息组装成ListMessage传给chatModel.call()Temperature 参数调优做代码生成、事实问答建议调低0.20.5做创意写作、头脑风暴可以调高0.71.0七、下一步可以学什么流式输出Streaming用stream()方法实现打字机效果用户体验直接拉满多轮对话用ChatMemory管理对话历史Prompt 模板PromptTemplate统一管理提示词RAG 检索增强结合向量数据库让 AI 回答你的私有文档Function Calling让 AI 调用你写的 Java 方法总结Spring AI 把大模型调用的复杂度封装得非常彻底一个 Starter 几行配置 一个call()方法就能跑通完整的 AI 聊天应用。这节课只是入门核心价值在于 Spring 生态的统一抽象——后面换模型、加功能都不用推翻重写。

相关新闻

FIR数字滤波器设计:从原理到FPGA工程实践

FIR数字滤波器设计:从原理到FPGA工程实践

2026/8/28 20:04:54

1. FIR数字滤波器设计实战开篇作为一名在数字信号处理领域摸爬滚打多年的工程师,我至今记得第一次独立完成FIR滤波器设计时的场景。当时为了滤除工业传感器信号中的50Hz工频干扰,我翻遍了各种教材和论文,却发现大多数资料要么过于理论化&…

3分钟搞定实时字幕:Windows本地语音转文字工具完整指南

3分钟搞定实时字幕:Windows本地语音转文字工具完整指南

2026/9/7 14:35:04

3分钟搞定实时字幕:Windows本地语音转文字工具完整指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录手忙脚乱?还在为视频字幕制作头疼?今天,我要向您…

中科蓝讯蓝牙芯片FLASH存储机制与SDK接口详解

中科蓝讯蓝牙芯片FLASH存储机制与SDK接口详解

2026/8/27 4:15:27

1. 中科蓝讯芯片架构与FLASH存储机制解析在中科蓝讯蓝牙芯片方案中,内置FLASH存储是实现参数持久化的关键组件。根据实际项目经验,其典型架构采用SPI接口连接的NOR Flash芯片,容量通常为512KB或1MB。这种设计在TWS耳机、智能穿戴等低功耗场景…

福昕PDF编辑器便携版:从部署到实战的完整指南

福昕PDF编辑器便携版:从部署到实战的完整指南

2026/9/7 19:32:17

1. 项目概述:为什么我最终留下了福昕PDF编辑器便携版 日常工作绕不开PDF,无论是合同签署、标书制作,还是论文排版、报表归档,PDF都是最终交付格式。但PDF在诞生之初,设计逻辑侧重“固定版式”而非“编辑修改”&#xf…

一个注解搞定接口限速:自定义注解+Spring拦截器+Redis实践

一个注解搞定接口限速:自定义注解+Spring拦截器+Redis实践

2026/9/7 19:32:17

1. 先聊清楚:这个“限速注解”到底解决了什么问题做后端接口开发的时候,限速是个绕不开的话题。尤其是面向公网的业务接口,一旦遇到突发流量、爬虫脚本、或者某个调用方写了个有问题的重试循环,服务端的压力瞬间就能被打满。轻则接…

用 Obsidian 管理 AI Agent Skills:从技能包到知识网络的工程化实践

用 Obsidian 管理 AI Agent Skills:从技能包到知识网络的工程化实践

2026/9/7 19:32:17

最近圈子里都在聊 AI 的 skills 机制。Claude Code 的 skills、Codex 的 skills,还有 GitHub 上那些 superpower skills、baoyu skills 仓库,本质上都是在给 AI Agent 装上一个个"技能包":一个目录、一份 SKILL.md、几个参考脚本&a…

百亿卡券数据架构升级:OceanBase单库双擎实践与踩坑实录

百亿卡券数据架构升级:OceanBase单库双擎实践与踩坑实录

2026/9/7 19:32:17

会员日大促结束当晚,我盯着监控面板上的数据库CPU曲线没敢合眼。卡券系统的核心库在峰值时段CPU已经顶到80%以上,磁盘IO等待时不时跳红,这还是在提前做了批量发券削峰之后。运营同学一个“全员领券”的运营位,就能让券表在几秒内涌…

Spring Boot + 微信小程序社区事件处理系统实战解析

Spring Boot + 微信小程序社区事件处理系统实战解析

2026/9/7 19:32:17

做社区事件处理这种面向居民的应用,如果你打算用Spring Boot做后端、微信小程序做前端,那这基本是这几年最成熟也最稳的一类组合。我刚把手头这套社区事件处理系统从需求到上线完整跑了一遍,从最初的需求梳理、表结构设计,到后端的…

斗图助手 第 008 个开关:长按表情显示+1的位置、验证方法与风险边界

斗图助手 第 008 个开关:长按表情显示+1的位置、验证方法与风险边界

2026/9/7 19:22:17

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/7 3:44:24

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/7 8:03:37

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

2026/9/7 0:01:24

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目:基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念,但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测,PyQt5 负责提供可视化的桌面交互界…

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

2026/9/7 0:01:24

简介:UL 1642是锂电池安全领域的重要规范,本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读,用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件,压缩包大小834KB,便…

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

2026/9/7 0:01:24

简介:BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本,由BSI标准出版,重点规定游乐设施和游乐设备在设计与制造环节的安全准则,与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

远程协作的工作台整理

远程协作的工作台整理

2026/9/7 3:38:07

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/6 23:21:51

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…