目录
- [Spring AI 简介](#Spring AI 简介)
- 依赖与环境配置
- 基础概念
- [集成 OpenAI(或其他 LLM 提供商)](#集成 OpenAI(或其他 LLM 提供商))
- [Prompt 模板引擎](#Prompt 模板引擎)
- [Embedding 与向量数据库](#Embedding 与向量数据库)
- [Spring AI Chat Client 使用](#Spring AI Chat Client 使用)
- [Spring AI 和 LangChain 对比](#Spring AI 和 LangChain 对比)
- 常见问题与建议
Spring AI 简介
Spring AI 是 Spring 团队推出的人工智能集成框架,旨在简化 AI 模型(如 OpenAI、Hugging Face、Mistral、Azure OpenAI)与 Spring 应用的结合。
核心特性:
- 支持多种 LLM(OpenAI、Azure、Ollama、HuggingFace 等)
- Prompt 模板支持
- Embedding 和向量数据库支持
- 与 Spring Boot 无缝集成
依赖与环境配置
Maven 依赖示例(以 OpenAI 为例)
xml
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1</version>
</dependency>
配置 application.yml
yaml
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
base-url: https://api.openai.com/v1/
chat:
model: gpt-3.5-turbo
基础概念
概念 | 说明 |
---|---|
LLM Client | 连接大型语言模型的客户端封装 |
Prompt | 提示语模板,用于格式化输入 |
Embedding | 文本向量化表示,用于检索和相似度匹配 |
Vector Store | 向量数据库(如 Redis、Pinecone、Chroma) |
RAG | 检索增强生成,结合检索与 LLM 生成回答 |
集成 OpenAI(或其他 LLM 提供商)
java
@Autowired
private OpenAiChatClient chatClient;
public void askModel() {
String result = chatClient.call("用一句话描述Spring AI");
System.out.println(result);
}
如果使用 Prompt 模板:
java
@Autowired
private PromptTemplate promptTemplate;
public void promptWithTemplate() {
Map<String, Object> params = Map.of("topic", "Spring AI", "style", "简洁");
Prompt prompt = promptTemplate.createPrompt(params);
System.out.println(chatClient.call(prompt));
}
Prompt 模板引擎
支持多种风格(SpEL、Mustache、Handlebars 等)
示例:
src/main/resources/prompts/summary.st
txt
用{{style}}的方式总结 {{topic}} 的核心内容。
java
PromptTemplate promptTemplate = new PromptTemplate(ResourcePromptTemplateLoader.fromClasspath("prompts/summary.st"));
Prompt prompt = promptTemplate.createPrompt(Map.of("style", "简洁", "topic", "Spring AI"));
Embedding 与向量数据库
Spring AI 提供标准接口对接向量数据库(如 Redis, Chroma, Milvus 等)
依赖添加(示例以 Chroma 为例):
xml
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-chroma-store</artifactId>
</dependency>
示例配置:
yaml
spring:
ai:
embedding:
model: text-embedding-ada-002
代码使用:
java
@Autowired
EmbeddingClient embeddingClient;
EmbeddingRequest request = new EmbeddingRequest(List.of("Spring AI 是什么?"));
EmbeddingResponse response = embeddingClient.embed(request);
List<Float> vector = response.getResult().get(0).getEmbedding();
Spring AI Chat Client 使用
java
@Autowired
ChatClient chatClient;
public void chat() {
String response = chatClient.prompt()
.user("介绍一下 Spring AI")
.call()
.content();
System.out.println(response);
}
增强调用(上下文、多轮对话)
java
ChatResponse res = chatClient.prompt()
.system("你是一个Java专家")
.user("Spring AI 有什么优势?")
.call();
System.out.println(res.getResult().getOutput().getContent());
Spring AI 和 LangChain 对比
项目 | Spring AI | LangChain |
---|---|---|
开发语言 | Java / Kotlin | Python |
上手难度 | 简单,Spring Boot 原生集成 | 中等,需要了解链式结构和模块机制 |
社区支持 | Spring 官方维护 | 开源社区驱动(使用广泛) |
功能支持 | 基础功能完善,正在扩展中 | 丰富:RAG、Agents、Tool、Chains等 |
适用场景 | Java 企业应用、SpringBoot 项目 | 原型开发、快速迭代、学术/科研 |
常见问题与建议
Q1: OpenAI API 报错 401 Unauthorized?
- 确保配置了正确的
api-key
- 检查网络是否能访问
https://api.openai.com
Q2: 如何替换模型?
- 修改
application.yml
的 model 名称,如gpt-4
,gpt-3.5-turbo
Q3: 如何引入 Prompt 模板?
- 使用
@PromptTemplate
注解,或ResourcePromptTemplateLoader
手动加载