“春天来了,AI也来了。”
第一次听说 Spring AI,我还以为只是个玩票的项目,结果一试之下,我的表情是这样的:惊呆了!
作为一个日常用 Spring Boot 打杂的后端工程师,我一边敲着接口一边琢磨:AI 能不能集成得更丝滑一点?能不能像调用数据库、写 controller 一样简单?
答案就是 —— Spring AI!
今天这篇文章,我就用“讲故事”的方式,分享我这段用 Spring AI 开发智能应用的全过程。内容可能有点长,但我保证干货多多,别眨眼!
故事的开始:从一个小需求说起
某天我们产品经理说:
“我们想搞一个文档问答助手,用户上传个 PDF,我们自动提取内容、生成 Embedding 存入向量数据库,然后接入 Chat 模型来智能回答问题。”
听起来是不是挺酷?
我当时心想:“这不就是大模型 + RAG(Retrieval Augmented Generation)那一套么?”
于是,项目开搞。而就在这个过程中,我遇到了 Spring AI,然后就被它“套牢”了……
特性一:模型支持,一网打尽!
你知道现在 AI 模型百花齐放:OpenAI、Anthropic、Azure、Cohere、本地 Ollama、HuggingFace……眼花缭乱吧?
以前用哪个模型都要单独写接入逻辑,搞得很乱。Spring AI 直接内置了模型适配器(Model Providers) ,你只需要选个 starter,引个配置,就能跑:
然后一个 ChatClient 就跑起来了:
不光是 Chat 模型,还有 Embedding 模型、Text-to-Image、Text-to-Speech 都支持。统一接口,真正做到“模型无关”。
特性二:模型提供商,灵活切换
Spring AI 的厉害之处还在于:你只要换一个 provider 实现类,就可以在多个模型之间灵活切换。
比如你用的是 OpenAI:
如果你后来想试试 Ollama 或者 Mistral,只要换个实现类,其他业务逻辑不动!
支持的模型包括:
- OpenAI / Azure OpenAI
- Anthropic Claude
- HuggingFace Inference API
- Cohere
- Ollama(本地模型)
- Together.ai
- Mistral
- VertexAI(Google)
- Bedrock(AWS)
简直像选数据库一样简单!
特性三:结构化输出,告别正则解析!
大模型吐出来一堆文字,我们以前只能用正则、小模型再处理,费时费力。Spring AI 现在支持结构化输出!
怎么实现?只要给定一个目标 POJO 类,然后:
它会自动让大模型输出一个 JSON,然后反序列化成 Java 对象!这一幕,我差点感动到哭……
特性四:向量数据库支持,多种选择!
搞问答,肯定绕不过向量数据库。Spring AI 已经帮你适配了以下主流向量数据库:
- Postgres + pgvector
- Milvus
- Pinecone
- Qdrant
- Weaviate
- Redis (向量搜索模块)
- Chroma
使用方式也很简单,你只需要实现个 EmbeddingStore 或使用默认配置,然后用 VectorStoreRetriever 配合即可。
再也不用自己拼嵌入、手动算距离、写 topK 查询啦!
特性五:工具与函数调用,AI 能“动”起来!
还记得 OpenAI Function Calling 吗?GPT 不再只是聊天,它还能“调用函数”!
Spring AI 对这一能力进行了封装,提供了 ToolSpecification 和自动注册机制。例如:
然后注入进 ChatClient:
这时模型会自主决定是否调用工具函数,并把结果融合到回答中。智能体时代,指日可待!
特性六:可观测性,放心上生产!
你是不是也担心 AI 应用上线后出什么幺蛾子?别怕,Spring AI 支持 Micrometer 可观测性!
比如你可以监控:
- Prompt 的输入长度
- 模型响应时间
- Tokens 用量
- 错误率
- Embedding 存储次数
配合 Spring Boot Actuator,部署后你就能在 Grafana 上看见所有关键指标,简直是 AI DevOps 的福音!
特性七:ETL框架,管道处理更丝滑!
处理文档、图片、PDF、网页等非结构化数据是 RAG 中最麻烦的事。
Spring AI 内置了一个轻量级 ETL 流程支持,你可以这样处理流程:
- 文档上传(PDF、TXT)
- 分段 Chunking(按 token)
- Embedding 嵌入
- 存入向量数据库
用一套管道式 API 实现,比如:
你甚至可以用 Spring Batch 把它变成批处理流程,处理 TB 级数据都没问题!
特性八:模型评估,提示优化神器!
Spring AI 提供了模型评估(Evaluation)能力,帮你评估不同 Prompt、模型、RAG 策略的效果。
你可以这样使用:
你还可以定义评价标准(如 BLEU、ROUGE、Cosine 等)甚至写个自定义评分器!
终于可以科学调优了,不再靠拍脑袋!
特性九:Spring Boot 集成,熟悉的味道!
Spring AI 是原生支持 Spring Boot 的,只需加上 starter:
然后你就能像用 JdbcTemplate 一样,用 ChatClient 和 EmbeddingClient 做 AI 调用。
配置、注入、观察、管理,都用你熟悉的 Spring 风格。没有门槛,快乐起飞!
特性十:ChatClient API,真正的聊天大脑!
ChatClient 是 Spring AI 中心组件,它封装了所有对话模型的交互逻辑。
你可以调用:
还可以:
- 传上下文历史
- 设置系统提示(system prompt)
- 控制温度、top_p 等参数
甚至支持多轮对话状态管理!
ChatClient 不再是简单 API 封装,它已经是你的“聊天业务中台”了。
特性十一:Advisors API,业务逻辑有建议!
Spring AI 中一个非常有趣的新特性叫做 Advisors API。
它是把 AI 看成一个“建议生成器”,比如:
你可以在业务流程中注入这种“智能建议”,例如商品描述生成、评论摘要、邮件草稿、翻译等。
把 AI 变成你业务流程里的“智能顾问”!
特性十二:记忆与RAG,让AI更聪明!
最后,我们说说最重要的——记忆与 RAG(检索增强生成) 。
Spring AI 提供了 MemoryStore、RetrievalAugmentedGenerationClient 等组件,你可以轻松实现以下场景:
- 记住用户的历史对话(记忆)
- 在回答问题时去外部知识库查找资料(RAG)
比如我做的文档问答项目,完整流程是这样的:
- 用户上传 PDF
- 用 PdfDocumentReader 读取并切分
- 用 EmbeddingClient 提取向量
- 存入 VectorStore
- 使用 RetrievalAugmentedGenerationClient 来根据查询检索 + 生成答案
Spring AI 把所有这些都模块化封装了,开发体验超赞!
结语:我真的用它搞定了!
这个文档问答小项目,不到三天时间我就从 0 到 MVP 搞出来了,全靠 Spring AI 的强大生态。
它不是一个“玩具项目”,而是一个面向工程的、可上生产的 AI 平台扩展。
END
如果你也想开始做 AI 项目,或者想在现有系统中无痛接入大模型,不妨试试 Spring AI。
我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!