Spring AI 简介
Spring AI 是 Spring 生态系统中用于构建 AI 驱动应用程序的新框架,它简化了 AI 功能的集成过程。
什么是 Spring AI?
Spring AI 旨在简化人工智能应用程序的开发,减少不必要的复杂性。该项目的核心理念是:
Spring AI 解决了 AI 集成的根本挑战:将企业数据和 API 与 AI 模型连接起来。
核心特点
| 特点 | 说明 |
|---|---|
| 跨模型 API | 支持多种 AI 提供商的可移植 API |
| 结构化输出 | 将 AI 模型输出映射到 POJO |
| 向量数据库 | 支持所有主流向量数据库 |
| 工具调用 | 允许模型执行客户端工具和函数 |
| RAG 支持 | 内置检索增强生成支持 |
| 可观测性 | 提供 AI 操作的可视化洞察 |
支持的 AI 模型提供商
Spring AI 支持以下主流 AI 模型提供商:
| 提供商 | 模型类型 |
|---|---|
| OpenAI | GPT-3.5, GPT-4, DALL-E, Whisper |
| Anthropic | Claude 系列 |
| Microsoft | Azure OpenAI |
| Gemini, Vertex AI | |
| Amazon | Bedrock |
| Ollama | 本地模型(Llama, Mistral 等) |
| 阿里云 | 通义千问 |
| 百度 | 文心一言 |
核心概念
1. 模型(Models)
AI 模型是处理和生成信息的算法,Spring AI 支持以下模型类型:
┌─────────────────────────────────────────────────────────────┐
│ Spring AI 模型类型 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 输入类型 输出类型 │
│ ───────────────────────────────────── │
│ 文本 ───> 文本 (Chat 模型) │
│ 文本 ───> 图片 (图像生成模型) │
│ 文本/图片 ───> 文本 (多模态模型) │
│ 文本 ───> 向量 (Embedding 模型) │
│ 音频 ───> 文本 (语音识别模型) │
│ │
└─────────────────────────────────────────────────────────────┘
2. 提示词(Prompts)
提示词是引导 AI 模型生成特定输出的语言输入:
// 简单提示词
String prompt = "解释什么是 Spring Boot";
// 带角色的提示词
List<Message> messages = List.of(
new SystemMessage("你是一个 Java 专家"),
new UserMessage("解释什么是 Spring Boot")
);
3. 提示词模板(Prompt Templates)
使用模板引擎创建动态提示词:
String template = "告诉我一个关于{topic}的{adjective}笑话";
PromptTemplate promptTemplate = new PromptTemplate(template);
Prompt prompt = promptTemplate.create(Map.of(
"topic", "程序员",
"adjective", "搞笑"
));
4. 嵌入向量(Embeddings)
将文本转换为数值向量表示:
文本输入 ───> Embedding 模型 ───> 向量 [0.1, 0.2, 0.3, ...]
│
▼
向量数据库
5. Token
Token 是 AI 模型处理文本的基本单位:
┌─────────────────────────────────────────────────────────────┐
│ Token 概念 │
├─────────────────────────────────────────────────────────────┤
│ │
│ "Hello, how are you?" │
│ │ │
│ ▼ │
│ ["Hello", ",", " how", " are", " you", "?"] │
│ │ │
│ Token 数量 = 6 │
│ │
│ 重要提示: │
│ - 1 Token ≈ 0.75 个英文单词 │
│ - 中文:1 个汉字 ≈ 2-3 个 Token │
│ - Token = 费用(按使用量计费) │
│ - 模型有 Token 限制(上下文窗口) │
│ │
└─────────────────────────────────────────────────────────────┘
6. 结构化输出(Structured Output)
将 AI 响应转换为 Java 对象:
// 定义输出结构
record Person(String name, int age, List<String> hobbies) {}
// 获取结构化输出
Person person = chatClient.prompt()
.user("生成一个人物信息")
.call()
.entity(Person.class);
架构设计
Spring AI 采用抽象设计,便于切换不同的 AI 提供商:
┌─────────────────────────────────────────────────────────────┐
│ Spring AI 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────┐ │
│ │ 应用程序代码 │ │
│ └─────────────┬───────────────┘ │
│ │ │
│ ┌─────────────▼───────────────┐ │
│ │ Spring AI 抽象 API │ │
│ │ ChatClient / Embedding │ │
│ └─────────────┬───────────────┘ │
│ │ │
│ ┌──────────────────────┼──────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ OpenAI │ │ Ollama │ │ Claude │ │
│ └────────┘ └────────┘ └────────┘ │
│ │
│ 轻松切换 AI 提供商,只需更改配置 │
│ │
└─────────────────────────────────────────────────────────────┘
主要应用场景
1. 智能问答系统
基于文档的问答系统,支持企业知识库。
2. 内容生成
自动生成文章、代码、摘要等内容。
3. 语义搜索
使用向量嵌入实现语义相似度搜索。
4. 智能助手
构建对话式 AI 助手,支持多轮对话。
5. 数据分析
利用 AI 分析数据并生成报告。
与其他框架对比
| 特性 | Spring AI | LangChain (Python) | LlamaIndex |
|---|---|---|---|
| 语言 | Java/Kotlin | Python | Python |
| Spring 集成 | 原生支持 | 无 | 无 |
| 学习曲线 | 低(熟悉 Spring) | 中 | 中 |
| 企业级支持 | 强 | 一般 | 一般 |
| 生产就绪 | 高 | 中 | 中 |
小结
Spring AI 为 Java 开发者提供了构建 AI 应用的简洁方案:
- 统一的 API:跨提供商的可移植接口
- Spring 集成:与 Spring Boot 无缝整合
- 企业级特性:可观测性、测试支持
- 丰富的功能:RAG、工具调用、结构化输出
下一步
- 环境搭建 - 配置 Spring AI 开发环境
- ChatClient API - 学习聊天客户端 API
- 提示词模板 - 掌握提示词工程