springAI学习 一

一、Spring AI 概述

什么是Spring AI?

  • Spring生态的AI集成框架

  • 统一API访问不同AI服务(OpenAI、Azure OpenAI、Anthropic等)

  • 支持多种AI功能:聊天、文生图、嵌入、向量存储等

Spring AI 是一个用于 AI 工程的应用框架。 其目标是将 Spring 生态系统设计原则应用于 AI 领域,如可移植性和模块化设计,并推广将 POJO 作为应用构建模块到人工智能领域的应用。

二、学习资源

官方资源

  1. 文档spring.io/projects/spring-ai

  2. 参考文档:Spring AI Reference Documentation

  3. 示例项目GitHub - spring-ai/spring-ai-samples

实践建议

  1. 从OpenAI开始:先用OpenAI API熟悉基本概念

  2. 尝试本地模型:使用Ollama运行本地LLM

  3. 实现RAG应用:构建文档问答系统

  4. 集成到现有项目:为已有Spring Boot项目添加AI能力

三、核心概念

1. AI Models

  • 聊天模型:ChatClient、ChatModel

  • 嵌入模型:EmbeddingClient、EmbeddingModel

  • 图像模型:ImageClient、ImageModel

  • 语音模型:AudioClient、AudioModel

2. Prompt Engineering

java 复制代码
PromptTemplate template = new PromptTemplate("请用{style}风格解释:{topic}");
Prompt prompt = template.create(Map.of("style", "简单易懂", "topic", "机器学习"))

3. 输出解析

java 复制代码
@Parser(description = "天气预报响应")
public class WeatherResponse {
    private String city;
    private double temperature;
    private String condition;
}

四、快速开始

1. 添加依赖

XML 复制代码
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>0.8.1</version>
</dependency>

2. 基础配置

XML 复制代码
spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        model: gpt-3.5-turbo
        # model: gpt-4.1-mini

3. 基本使用示例

java 复制代码
@Service
public class ChatService {
    private final ChatClient chatClient;
    
    public String chat(String message) {
        return chatClient.call(message);
    }
    
    // 流式响应
    public Flux<String> streamChat(String message) {
        return chatClient.stream(message)
            .map(ChatResponse::getOutput);
    }
}

四、核心功能详解

1. 聊天功能

java 复制代码
// 带上下文对话
List<Message> messages = new ArrayList<>();
messages.add(new UserMessage("你好"));
messages.add(new AssistantMessage("你好!有什么可以帮助你?"));
messages.add(new UserMessage("Java是什么?"));

ChatResponse response = chatClient.call(new Prompt(messages));
复制代码

2. 函数调用(Function Calling)

java 复制代码
@Bean
public FunctionCallback weatherFunction() {
    return FunctionCallbackWrapper.builder(new WeatherService())
        .withName("getWeather")
        .withDescription("获取城市天气")
        .build();
}
复制代码

3. RAG(检索增强生成)

java 复制代码
// 1. 创建向量存储
VectorStore vectorStore = new InMemoryVectorStore(embeddingModel);

// 2. 添加文档
vectorStore.add(List.of(
    new Document("Spring AI是Spring官方AI框架", Map.of("source", "docs"))
));

// 3. 检索相关文档
List<Document> docs = vectorStore.similaritySearch(request);

// 4. 增强提示
String enhancedPrompt = "基于以下信息:" + docs + "\n问题:" + question;
复制代码

4. 多模态支持

java 复制代码
// 图像生成
ImagePrompt prompt = new ImagePrompt("一只可爱的猫");
ImageResponse response = imageClient.call(prompt);

// 语音转文字
AudioPrompt audioPrompt = new AudioPrompt(audioFile);
AudioTranscription transcription = audioClient.call(audioPrompt);

五、支持的AI服务

主要Provider:

  • OpenAI:GPT、DALL-E

  • Azure OpenAI:Azure上的OpenAI服务

  • Anthropic:Claude模型

  • Google Vertex AI:Gemini模型

  • Hugging Face:开源模型

  • 本地模型:Ollama、LM Studio等




相关推荐
小鹿的周先生13 分钟前
Spring-AI-第2篇-ChatClient 实战:使用 DeepSeek 完成第一次 AI 对话
java·人工智能·spring
ajassi200026 分钟前
AI语音智能体开发日记(十五)智能体LCD屏幕GIF动画显示方案——从GIF到BMP的完整实战
人工智能·ai·ai编程
ServBay1 小时前
Claude 账号可能被盗刷,而你毫无察觉
api·ai编程·claude
骐骥11 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦1 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
敢敢是只喵i2 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
程序员黎剑3 小时前
Spring-Bean生命周期-构造器访问Autowired字段为null
java·后端·spring
用户7565061786113 小时前
开发 Nemu 的第四天:真实 Beta 如何把一帧判断改造成状态机
aigc·ai编程
空想兔3 小时前
AgentPulse:实时监控所有的 OpenCode Agent 跑到哪一步了
react.js·ai编程
m4Rk_3 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github