跳到主要内容

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 模型提供商:

提供商模型类型
OpenAIGPT-3.5, GPT-4, DALL-E, Whisper
AnthropicClaude 系列
MicrosoftAzure OpenAI
GoogleGemini, Vertex AI
AmazonBedrock
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 AILangChain (Python)LlamaIndex
语言Java/KotlinPythonPython
Spring 集成原生支持
学习曲线低(熟悉 Spring)
企业级支持一般一般
生产就绪

小结

Spring AI 为 Java 开发者提供了构建 AI 应用的简洁方案:

  • 统一的 API:跨提供商的可移植接口
  • Spring 集成:与 Spring Boot 无缝整合
  • 企业级特性:可观测性、测试支持
  • 丰富的功能:RAG、工具调用、结构化输出

下一步

参考资源