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

推荐链接

相关推荐
Wang's Blog8 小时前
Java框架快速入门: Spring Security+OAuth2之数据库和实体类的RBAC改造
java·数据库·spring
锋行天下8 小时前
LangGraph 1.2+ 新特性:set_node_defaults,批量统一节点策略
人工智能
找方案8 小时前
AI+人力资源:AI招聘面试的兴起与争议
人工智能·面试·职场和发展
日常通勤穿搭8 小时前
2026 电商 AI 作图工具推荐|淘宝抖音跨境商品主图 AI 生图测评
人工智能·aigc·ai工具·电商美工
ZhengEnCi8 小时前
L2A-一个域名如何访问多台云服务器-子域名、路径前缀与Nginx反向代理选型指南
linux·人工智能
2601_963749108 小时前
越华环保集团污水站曝气系统边缘闭环控制架构与能耗优化实现
人工智能·架构
工业涂料百问8 小时前
【生产施工】系列(六)工业涂料固化方式怎么选?自然干 / UV / 电子束原理与选型实战
人工智能
M78佐菲8 小时前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
葡萄城技术团队9 小时前
活字格 12.1 新特性解密:禁用自动回复后,AI 对话单元格也能流式输出了
人工智能
东风破_9 小时前
从 RAG 到 Agentic RAG:第一步,让模型决定「要不要检索」
人工智能