二、SpringAI+DeepSeek-模型(Model)
一、ChatModel 聊天模型核心1. 公共能力能力说明多模态文本/图片/PDF/音频/视频输入不同模型支持不一样Tools/Function Call函数调用让LLM调用Java本地方法查询外部接口、数据库流式处理FluxChatResponseSSE流式输出打字机效果重试spring.ai.retry.*全局重试配置指数退避可观测性链路追踪、指标、日志内置JSON输出两种模式简单JSON / JSON Schema强约束结构化输出本地部署Ollama 可本地跑模型DeepSeek/OpenAI是云端APIOpenAI兼容APIOllama、DeepSeek、vLLM都兼容OpenAI协议可以直接复用OpenAI客户端通用重试配置所有模型共享spring: ai: retry: max-attempts: 10 backoff: initial-interval: 2s multiplier: 5 max-interval: 3m on-client-errors: false # 4xx默认不重试2. DeepSeek 模型云端API依赖 starter自动配置dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-deepseek/artifactId /dependencyapplication.ymlspring: ai: deepseek: api-key: ${DEEPSEEK_API_KEY} # 环境变量注入不要硬编码 base-url: [https://api.deepseek.com](https://api.deepseek.com) chat: options: model: deepseek-chat # deepseek-reasoner为推理模型 temperature: 0.8 maxTokens: 2000关键特性双模型deepseek-chat通用对话deepseek-reasoner推理模型返回独立思维链CoTreasoningContent多轮对话注意不要把上一轮的reasoningContent塞回消息列表否则报400只保留最终回答文本进入上下文前缀补全DeepSeekAssistantMessage.prefixAssistantMessage(\python\n)强制模型输出指定代码块获取推理内容示例ChatResponse response chatModel.call(new Prompt(9.11 and 9.8 which bigger?, DeepSeekChatOptions.builder().model(DeepSeekApi.ChatModel.DEEPSEEK_REASONER.getValue()).build() )); DeepSeekAssistantMessage msg (DeepSeekAssistantMessage) response.getResult().getOutput(); String reasoning msg.getReasoningContent(); // 思考过程 String answer msg.getText(); // 最终答案手动创建客户端不使用自动配置DeepSeekApi deepSeekApi DeepSeekApi.builder().apiKey(apiKey).build(); DeepSeekChatOptions options DeepSeekChatOptions.builder().model(deepseek-chat).temperature(0.4).build(); DeepSeekChatModel chatModel DeepSeekChatModel.builder().deepSeekApi(deepSeekApi).defaultOptions(options).build();3. Ollama本地部署模型重点依赖starterdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-ollama/artifactId/dependencyapplication.ymlspring:ai:ollama:base-url:[http://localhost:11434](http://localhost:11434)init:pull-model-strategy:when_missing# 可选 always / never / when_missing生产建议never提前ollama pullchat:options:model:llama3.2temperature:0.7num-ctx:2048# 上下文窗口keep-alive:5m# 模型驻留内存时长启动拉取模型ollama pull llama3.2支持HuggingFace GGUF模型ollama pull hf.co/xxx核心能力思考模式 Thinking Modedeepseek-r1/qwen3OllamaChatOptions.builder().model(deepseek-r1).enableThinking()// 开启思考.build();// 获取思考内容存在metadata thinkingStringthinkingresponse.getResult().getMetadata().get(thinking);若用OpenAI兼容端点对接ollama思考字段名称变成reasoningContent结构化输出两种模式.format(json)任意合法JSON结构不可控.outputSchema(jsonSchemaString)强约束生产推荐强制输出匹配JSON Schema搭配BeanOutputConverter直接把返回JSON转Java Record对象多模态llava系列模型支持传入图片MediavarimageResourcenewClassPathResource(test.png);UserMessageuserMessagenewUserMessage(描述图片,newMedia(MimeTypeUtils.IMAGE_PNG,imageResource));OpenAI兼容模式直接使用OpenAiChatModel对接ollama服务4. OpenAI ChatModelgpt系列兼容通用OpenAI协议依赖starterdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-openai/artifactId/dependencyapplication.ymlspring:ai:openai:api-key:${OPENAI_API_KEY}base-url:[https://api.openai.com](https://api.openai.com)chat:options:model:gpt-4o-mini temperature:0.7区分推理模型参数普通模型(gpt4o/gpt3.5)maxTokenso1/o3推理系列maxCompletionTokens两者互斥不能同时设置重点多模态gpt4o支持图片、音频输入responseFormat支持JSON_OBJECT/JSON_SCHEMA强结构化输出extraBody向OpenAI兼容服务vLLM/Ollama/DeepSeek传递模型特有参数top_k、repeat_penalty推理内容官方OpenAI gpt o系列接口不返回reasoningContentDeepSeek R1/vLLM兼容接口才返回reasoningContent5. ChatController 通用示例三个模型写法几乎一样RestControllerpublicclassChatController{privatefinalChatModelchatModel;AutowiredpublicChatController(ChatModelchatModel){this.chatModelchatModel;}// 同步返回GetMapping(/ai/generate)publicMapString,Stringgenerate(RequestParam(defaultValue讲个笑话)Stringmessage){returnMap.of(generation,chatModel.call(message));}// 流式SSEGetMapping(/ai/generateStream)publicFluxChatResponsestream(RequestParam(defaultValue讲个笑话)Stringmessage){PromptpromptnewPrompt(newUserMessage(message));returnchatModel.stream(prompt);}}二、ImageModel 图像生成模型DALL·E顶层接口ImageModel入参ImagePrompt返回ImageResponseFunctionalInterfacepublicinterfaceImageModelextendsModelImagePrompt,ImageResponse{ImageResponsecall(ImagePromptrequest);}ImagePrompt包装多条ImageMessage ImageOptionsImageMessage文本提示词 权重weightImageResponseImageGeneration列表包含图片二进制/urlOpenAI DALL·E 配置spring:ai:openai:api-key:${OPENAI_API_KEY}image:options:model:dall-e-3size:1024x1024 quality:hd response-format:b64_json # url/b64_json代码示例ImageResponseresponseopenaiImageModel.call(newImagePrompt(一只浅金色小狗,OpenAiImageOptions.builder().quality(hd).N(1).height(1024).width(1024).build()));ImageGenerationgenresponse.getResult();byte[]imageBytesgen.getOutput().getImageBytes();三、ModerationModel 内容审核模型OpenAI Moderation检测文本是否包含违规内容暴力、色情、自残、仇恨言论ModerationPromptpromptnewModerationPrompt(待审核文本);ModerationResponseresponseopenAiModerationModel.call(prompt);Moderationresultresponse.getResult().getOutput();booleanflaggedresult.isFlagged();// 是否标记违规Categoriescategoriesresult.getCategories();// categories.isSexual() / isViolence() / isSelfHarm() 等

相关新闻

C语言贪吃蛇源码包:从课程设计到游戏开发的完整实践

C语言贪吃蛇源码包:从课程设计到游戏开发的完整实践

简介:一套基于C语言的经典贪吃蛇游戏源码包,覆盖从1.0到3.0的多个版本,适合C语言初学者、游戏开发入门者以及希望研究经典小游戏实现细节的开发者。项目涵盖游戏循环、输入处理、碰撞检测、蛇身增长等核心逻辑,同时涉及链表、文件…

2026/9/26 2:12:51 阅读更多 →
自托管云开发平台Coder:从环境即代码到AI编码代理

自托管云开发平台Coder:从环境即代码到AI编码代理

1. 从"开发机上云"到"AI进沙箱":Coder到底在解决什么问题?去年我接手一个后端项目,第一件事不是看代码,而是帮三个新同事把本地环境装好。一个要降 Python 版本,一个要换 JDK,还有一个…

2026/9/24 23:49:34 阅读更多 →
云计算技术观察(三):云和数据中心正在被当作“公用事业”来监管——新加坡《数字基础设施法案》的技术解读

云计算技术观察(三):云和数据中心正在被当作“公用事业”来监管——新加坡《数字基础设施法案》的技术解读

一个监管门槛的设定逻辑2026年9月8日,新加坡数字发展与信息部(MDDI)向国会提交《数字基础设施法案》一读。法案建立两套新的许可制度,分别针对主要云服务和数据中心的安全韧性,以及数据中心运营的环境可持续性。这个法…

2026/9/24 23:49:34 阅读更多 →

最新新闻

E2E脚本化测试为何比手动更可靠?从原理到Playwright实践

E2E脚本化测试为何比手动更可靠?从原理到Playwright实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 6:05:05 阅读更多 →
TI C2000Ware注册机制深度解析:v0.0报错的本质与工程级修复

TI C2000Ware注册机制深度解析:v0.0报错的本质与工程级修复

1. 这不是“装个软件”那么简单:C2000Ware安装失败背后的真实战场你点开CCS(Code Composer Studio),新建一个F28004x工程,刚想调用GPIO_toggle(),编译器就甩给你一行红色报错:“Product c2000wa…

2026/9/26 6:05:05 阅读更多 →
TeamAI-CLI:团队级 AI Agent 中间层工具,让个人 AI 能力变成团队资产

TeamAI-CLI:团队级 AI Agent 中间层工具,让个人 AI 能力变成团队资产

1. 为什么团队需要一个 AI Agent 中间层1.1 从"个人玩具"到"团队资产"的断层我观察到一个很普遍的现象:团队里总有一两个人特别会用 AI。他们电脑上装了一堆 CLI 工具,本地存着几十个精心调教过的 prompt 模板,知道什么任…

2026/9/26 6:05:05 阅读更多 →
工业界面协议与Canvas渲染引擎实践:从DSL到高性能部署

工业界面协议与Canvas渲染引擎实践:从DSL到高性能部署

1. 工业现场为什么需要一套自己的界面协议1.1 从一块"卡死"的触摸屏说起三年前我在一个装配车间做设备数据采集的改造,现场有十几台老式工控机,屏幕分辨率清一色 1024768,跑的是某组态软件做的监控画面。问题出在哪?操作…

2026/9/26 6:05:05 阅读更多 →
Aliens Eye如何判断账号是否存在?ML+30维特征混合检测算法深度剖析

Aliens Eye如何判断账号是否存在?ML+30维特征混合检测算法深度剖析

Aliens Eye如何判断账号是否存在?ML30维特征混合检测算法深度剖析 【免费下载链接】Aliens_eye Hunt down 840 social media accounts using AI 项目地址: https://gitcode.com/gh_mirrors/al/Aliens_eye Aliens Eye 是一款 AI 驱动的用户名账号检测&#xf…

2026/9/26 6:05:05 阅读更多 →
VMware虚拟机安装全攻略:从零搭建Linux开发环境与故障排查

VMware虚拟机安装全攻略:从零搭建Linux开发环境与故障排查

1. 为什么我至今还在用本地虚拟机做开发环境每次带新人,我都会让他们先在本地装一台虚拟机。不是因为我守旧,而是因为本地虚拟机是成本最低、容错率最高的“环境试验田”。你可以在里面随便折腾分区、随便改内核参数、随便装一堆互相冲突的运行时&#x…

2026/9/26 6:04:04 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

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

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

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

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

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

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

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →