文档问答、RAG、嵌入、工具调用…Spring AI 全包了!

290 阅读6分钟



“春天来了,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岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!