概述
Spring AI 旨在简化集成人工智能功能的应用程序开发过程,避免不必要的复杂性。虽然该项目从 LangChain 和 LlamaIndex 等 Python 项目获得灵感,但它并非直接移植,而是面向多种编程语言的通用解决方案。其核心目标是解决 AI 集成的基本挑战:将企业数据和 API 与 AI 模型相连接。
核心特性
Spring AI 提供了一系列抽象层,使得在极少代码更改的情况下即可轻松替换组件。主要功能包括:
- 跨 AI 提供商的可移植 API,支持聊天、文本生成图像和嵌入模型,既支持同步也支持流式调用。
- 支持主流 AI 模型提供商(如 Anthropic、OpenAI、Google 等),涵盖聊天补全、嵌入、音频转录等多种类型。
- 结构化输出:将 AI 模型的输出映射为 POJO 对象。
- 支持主流向量数据库(如 PostgreSQL/PGVector、Redis、Milvus 等),并提供类 SQL 的元数据过滤接口。
- 工具/函数调用:允许模型请求执行客户端的工具和函数,从而访问实时信息。
- 可观测性、文档引入 ETL 框架以及 AI 模型评估工具。
- 提供 Spring Boot 自动配置和 Starter,包含 ChatClient API 和 Advisors API。
通过这些功能,你可以轻松实现诸如'对文档进行问答'或'与文档进行聊天'等常见用例。
核心概念
模型 (Models)
AI 模型是处理和生成信息的算法。Spring AI 当前支持处理语言、图像和音频输入输出的模型。除了常见的文本生成,还包括文本嵌入(Embedding),用于捕捉语义关系。
提示词 (Prompts)
提示是基于语言的输入,指导 AI 模型生成特定输出。一个提示通常包含多个角色,如 system(设定上下文)和 user(用户输入)。编写有效的提示需要像与人对话一样沟通,这也是'提示工程'成为独立学科的原因。
嵌入 (Embeddings)
嵌入是将文本、图像或视频转换为浮点数数组(向量)的过程。这些向量捕捉语义信息,通过计算向量间的距离来判断相似度。这在检索增强生成(RAG)等场景中尤为关键。
Tokens
Token 是 AI 模型运作的基本单元,大致相当于单词的 75%。Token 数量不仅影响上下文窗口限制,还直接关联使用费用。Spring AI 能帮助你管理上下文窗口内的数据切分。
结构化输出 (Structured Output)
传统上 AI 输出是字符串,即使请求 JSON 格式也不保证准确。结构化输出通过精心设计的提示,将结果映射为真正的数据结构(如 POJO),便于应用集成。
扩展大模型私有信息
有三种主要技术让 AI 结合自有数据:
- 微调 (Fine Tuning):调整模型内部权重,资源消耗高,适合专家。
- 提示填充 (Prompt Stuffing):将数据嵌入提示中,即 RAG 方案的基础。
- 工具调用 (Tool Calling):注册外部服务,使模型能查询实时数据或执行操作。
RAG 概述
RAG 涉及批处理风格的 ETL 管道,将非结构化数据写入向量数据库。关键步骤包括保留语义边界的文档拆分,以及利用向量数据库找到与用户问题相似的片段。
Tool Calling 概述
工具调用弥补了 LLM 知识冻结的不足。你可以将服务定义为带有 @Tool 注解的方法,模型会根据需求调用这些工具。流程包括定义工具、模型发送调用请求、应用执行工具并将结果返回给模型。
响应评估
有效评估 AI 系统对用户请求的输出至关重要。Spring AI 提供了 Evaluator API,支持基础策略来评估模型响应的准确性、一致性和事实正确性,防止'幻觉'错误。
Spring Boot 集成
版本需求
整合 Spring AI 1.0.0 需要使用 Spring Boot 3.4.x。确保父工程中明确指定 Spring Boot 版本。
3.4.6
org.springframework.boot
spring-boot-dependencies
${springboot.version}
pom
import


