Spring AI总结
一. Spring AI的设计Spring AI 抽象了一层之前Java访问不同的大模型需要单独写适配的API接口现在有了spring AI可以使用一套统一的API接口换模型不再需要修改java代码只需要修改配置即可。chatClient.prompt().user(你好).call().content();例如:1. spring:ai:deepseek:api-key: xxxchat:options:model: deepseek-chat2. spring:ai:openai:api-key: xxxchat:options:model: gpt-4o-mini一句话总结spring AI的优势换大模型通常只需要换配置不需要改业务代码。二. 在企业项目中怎么选三. Spring AI的Demo搭建流程1. 引入依赖Spring Boot 3.x Spring AI 1.xdependencies!-- Spring Web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring AI OpenAI --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-openai/artifactId/dependency/dependencies2. 配置秘钥API Key application.ymlspring:ai:openai:api-key: sk-xxxxxxchat:options:model: gpt-4o-mini3. 创建 ChatClientpackage com.itcast.springaiparent;import org.springframework.ai.chat.client.ChatClient;import org.springframework.stereotype.Service;Servicepublic 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();}}4. 写 Controller 测试package com.itcast.springaiparent;import org.springframework.web.bind.annotation.*;RestControllerRequestMapping(/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. 项目结构2. 定义天气Tool关键就是Tool注解。Component public class WeatherTool { /** * Tool让模型能真正调用这个工具 * param city * return */ Tool(description 根据城市名称查询天气) public String getWeather( ToolParam(description 城市名称例如北京)String city) { return city 今天晴气温 25℃; } }description告诉 AI我这里有一个工具可以根据城市查询天气。3. 创建 ChatClientpackage com.example.service;import com.example.tool.WeatherTool;import org.springframework.ai.chat.client.ChatClient;import org.springframework.stereotype.Service;Servicepublic 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测试RestControllerRequestMapping(/ai)public class AiController {private final AiService aiService;public AiController(AiService aiService){this.aiServiceaiService;}GetMapping(/chat)public String chat(String msg){return aiService.chat(msg);}}六. 如果有多个Tool大模型来根据 需求决定调用哪个Componentpublic class OrderTool {Tool(description查询订单状态)public String queryOrder(String orderId){return 订单已发货;}}然后.defaultTools(weatherTool,orderTool)Function Calling本质以前用户|你的代码判断|if(天气)调天气接口if(订单)查订单现在用户|LLM|判断意图|选择Tool|执行Java方法|返回答案五. Function Calling和MCP区别Function CallingMCP工具在哪里你的Java代码独立服务标准模型厂商各自实现统一协议适合单体应用企业级AgentSpring AI支持支持六. RAG的实现原理实现功能用户问“公司的请假制度是什么”AI 不知道答案→ 去知识库搜索→ 找到《员工手册.pdf》→ 把相关内容交给 GPT→ AI 根据文档回答1. RAG的整体工作流程第一次准备PDF / Word / txt||vDocument Reader||vText Splitter||vEmbedding模型||vVector DB(向量数据库)用户提问用户:公司年假多少天?|vEmbedding问题向量|vVector DB搜索相似内容|v找到相关文档片段|vPrompt增强|vLLM回答2. 技术选型组件技术Spring AI1.xLLMOpenAI / OllamaEmbeddingOpenAI / BGE向量库Chroma文档txt3. 添加依赖dependencies!-- Spring Web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring AI OpenAI --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-openai/artifactId/dependency!-- 向量数据库 Chroma --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-vector-store-chroma/artifactId/dependency/dependencies4. 配置spring:ai:openai:api-key: sk-xxxxchat:options:model: gpt-4o-minivectorstore:chroma:client:host: localhostport: 80004. 加载文档进入向量数据库Componentpublic class DataLoader {private final VectorStore vectorStore;public DataLoader(VectorStore vectorStore){this.vectorStorevectorStore;}PostConstructpublic void load(){Resource resource new ClassPathResource(docs/company.txt);TextReader reader new TextReader(resource);ListDocument documents reader.get();vectorStore.add(documents);}}5. 创建 RAG 查询Servicepublic 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

相关新闻

LLM应用缓存优化:从传统KV到语义化向量检索的设计与实践

LLM应用缓存优化:从传统KV到语义化向量检索的设计与实践

1. 项目概述:当KV缓存遇上LLM,为什么“老伙计”需要一次大升级?如果你在过去几年里深度参与过Web后端开发或者高并发系统的构建,那么对KV(Key-Value)缓存这个概念一定不会陌生。从Redis到Memcached&#xf…

2026/10/12 3:38:46 阅读更多 →
Spring Boot集成Redis:模式选型与性能优化实战

Spring Boot集成Redis:模式选型与性能优化实战

1. Redis与Spring Boot集成概述 Redis作为当今最流行的内存数据库之一,在Spring Boot生态中扮演着重要角色。我经历过从早期Spring Data Redis的简单封装到现在成熟的全模式支持,深刻体会到不同部署模式对系统架构的影响。在真实生产环境中,R…

2026/10/7 15:51:19 阅读更多 →
具身智能:VLA-TVA数据闭环增强机制

具身智能:VLA-TVA数据闭环增强机制

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它融合深度强化学习(DRL)、卷积神经…

2026/10/11 18:35:31 阅读更多 →

最新新闻

ppt-master 的 IBM 品牌身份预设解析:从 Carbon Blue 设计规范到可执行的 design_spec

ppt-master 的 IBM 品牌身份预设解析:从 Carbon Blue 设计规范到可执行的 design_spec

AI 技能人工智能 【免费下载链接】ppt-master AI 把任意文档生成真正可编辑的 PowerPoint —— 原生形状与动画、演讲者备注可合成音频旁白、还能参考你自己的 .pptx 模板,而不是一张张图片 何雨果出品 项目地址: https://gitcode.com/hugohe3/ppt-master 点击查看…

2026/10/12 3:38:09 阅读更多 →
Windows 11 如何装回 Windows 10 任务栏与开始菜单:ExplorerPatcher 完整安装与调优指南

Windows 11 如何装回 Windows 10 任务栏与开始菜单:ExplorerPatcher 完整安装与调优指南

Windows 11 如何装回 Windows 10 任务栏与开始菜单:ExplorerPatcher 完整安装与调优指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher…

2026/10/12 3:38:09 阅读更多 →
泡泡战士国服v0.1.5.005客户端版本考古:从版本号到运行环境

泡泡战士国服v0.1.5.005客户端版本考古:从版本号到运行环境

看到“泡泡战士国服客户端v0.1.5.005_20110411”这个标题,很多老玩家应该会心一笑:这行名字里藏着一整个2011年春天的记忆。一个带日期的版本号,其实就是一款网游在某个时间点留下的完整化石,服务器列表、资源索引、版本策略、玩法…

2026/10/12 3:38:09 阅读更多 →
Cortex 数据迁移实战:使用 blocksconvert 将历史 chunks 数据转换为 TSDB blocks

Cortex 数据迁移实战:使用 blocksconvert 将历史 chunks 数据转换为 TSDB blocks

可观测性时序数据库后端指标监控 【免费下载链接】cortex A horizontally scalable, highly available, multi-tenant, long term Prometheus. 项目地址: https://gitcode.com/gh_mirrors/cortex6/cortex 点击查看 免费下载 本指南围绕 Cortex 的 blocksconvert 工…

2026/10/12 3:38:09 阅读更多 →
semantic-router 使用场景指南:为 Agent、云、数据中心、边缘与混合企业构建可编程模型决策层

semantic-router 使用场景指南:为 Agent、云、数据中心、边缘与混合企业构建可编程模型决策层

后端API网关模型推理服务AI Agent 【免费下载链接】semantic-router An open, programmable decision layer for models and compute. 项目地址: https://gitcode.com/gh_mirrors/sem/semantic-router 点击查看 免费下载 vLLM Semantic Router 的核心定位&#xff…

2026/10/12 3:38:09 阅读更多 →
信创落地四层技术栈:芯片、操作系统、数据库与中间件适配攻略

信创落地四层技术栈:芯片、操作系统、数据库与中间件适配攻略

1. 这个项目到底在解决什么问题先说结论:这不是一个“追赶潮流”的选题,而是很多做国产化替代的团队,在立项时才发现自己绕不开的技术底座问题。过去十年,大部分应用系统跑在西方主导的软硬件栈上。芯片用国外架构,操作…

2026/10/12 3:37:09 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/11 14:36:54 阅读更多 →