初学Spring AI 笔记

目录

  1. [Spring AI 简介](#Spring AI 简介)
  2. 依赖与环境配置
  3. 基础概念
  4. [集成 OpenAI(或其他 LLM 提供商)](#集成 OpenAI(或其他 LLM 提供商))
  5. [Prompt 模板引擎](#Prompt 模板引擎)
  6. [Embedding 与向量数据库](#Embedding 与向量数据库)
  7. [Spring AI Chat Client 使用](#Spring AI Chat Client 使用)
  8. [Spring AI 和 LangChain 对比](#Spring AI 和 LangChain 对比)
  9. 常见问题与建议

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 手动加载

推荐链接

相关推荐
盘古信息IMS3 分钟前
告别 “老系统困境”!三真科技 × 盘古信息:汽车电子数字化工厂升级
人工智能·科技·汽车
Alter12308 分钟前
用AI重构人机关系,OPPO智慧服务带来了更“懂你”的体验
人工智能·重构
爱看科技9 分钟前
科技新突破!微美全息(NASDAQ:WIMI)研发保留运动想象脑机接口“方差密钥”技术
大数据·人工智能·科技
中科岩创18 分钟前
青海某公路水渠自动化监测服务项目
大数据·人工智能·物联网
lzj_pxxw21 分钟前
嵌入式开发技巧:舍弃标志位,用宏定义函数实现程序单次运行
笔记·stm32·单片机·嵌入式硬件·学习
gordon~924 分钟前
Spring 的bean是安全的吗
java·安全·spring·bean
报错小能手24 分钟前
python(入门)map内置函数及import模块导入,as别名
开发语言·人工智能·python
Jump 不二39 分钟前
百度 PaddleOCR 3.0 深度测评:与 MinerU 的复杂表格识别对决
人工智能·深度学习·百度·ocr
用户51914958484540 分钟前
Flutter应用设置插件 - 轻松打开iOS和Android系统设置
人工智能·aigc