SpringAI基础使用

一、环境准备

  1. 安装依赖工具

    • JDK 17+(必须,Spring Boot 3.3+ 和 SpringAI 依赖此版本)。
    • IDE(如 IntelliJ IDEA)。
    • Maven/Gradle(项目管理工具,推荐 Maven)。
  2. 获取 AI 服务密钥

    • 申请 OpenAI API Key(或其他兼容大模型的 API Key),可通过以下途径:
      • GPT-API-free(免费版支持 GPT-3.5/4)。
      • AiCore(需注册,部分功能付费)。
      • 直接购买(如淘宝搜索 “OpenAI Key”)。

二、创建 Spring Boot 项目

  1. 初始化项目

    • 通过 Spring Initializr 创建项目,选择以下依赖:
      • Spring Web(Web 服务支持)。
      • Spring AI OpenAI Starter(集成 OpenAI 大模型)。
      • Lombok(可选,简化代码)。
  2. 配置 pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.0-M1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

三、配置 AI 服务信息

  1. 修改 application.properties
    spring:
      ai:
        openai:
          api-key: sk-xxxxxxxxxxx  # OpenAI API Key
          base-url: https://api.chatanywhere.tech  # 代理地址(国内推荐)
    
     
    • 若直接访问 OpenAI,需配置代理(在启动类中添加系统属性):
      @SpringBootApplication
      public class Application {
          public static void main(String[] args) {
              System.setProperty("proxyHost", "127.0.0.1"); // 代理地址
              System.setProperty("proxyPort", "7890");      // 代理端口
              SpringApplication.run(Application.class, args);
          }
      }
      

四、实现基础对话功能

  1. 创建控制器 AIController
    @RestController
    @RequestMapping("/ai")
    public class AIController {
        private final ChatClient chatClient;
    
        public AIController(ChatClient.Builder chatClientBuilder) {
            this.chatClient = chatClientBuilder.build();
        }
    
        @GetMapping("/chat")
        public String chat(@RequestParam String msg) {
            return chatClient.prompt()
                    .user(msg)        // 用户输入
                    .call()           // 调用大模型
                    .content();       // 获取响应内容
        }
    }
    

五、高级功能扩展

1. 角色预设与流式响应
  • 角色预设(配置默认系统提示)

    @Configuration
    public class AIConfig {
        @Bean
        public ChatClient chatClient(ChatClient.Builder builder) {
            return builder.defaultSystem("你是Java老师,名字叫考拉AI") // 预设角色
                          .build();
        }
    }
    
  • 流式响应(逐字符输出)

    @GetMapping(value = "/chat/stream", produces = "text/html;charset=UTF-8")
    public Flux<String> chatStream(@RequestParam String msg) {
        return chatClient.prompt().user(msg).stream().content(); // 流式返回
    }
    
2. 函数调用(集成自定义工具)
  1. 定义工具函数

    public class WeatherFunction implements Function<WeatherFunction.Request, WeatherFunction.Response> {
        public record Request(String location) {}
        public record Response(String weather) {}
    
        @Override
        public Response apply(Request request) {
            return new Response("济南天气:晴转多云"); // 模拟工具返回结果
        }
    }
    
  2. 注册函数为 Bean

    @Configuration
    public class AIConfig {
        @Bean
        @Description("查询某地天气") // 帮助模型理解函数用途
        public WeatherFunction weatherFunction() {
            return new WeatherFunction();
        }
    }
    
  3. 在对话中调用工具

    @GetMapping("/function")
    public String callFunction() {
        return chatClient.prompt()
                .user("济南天气如何?")
                .function("weatherFunction", new WeatherFunction.Request("济南")) // 调用工具
                .call()
                .content();
    }
    
3. 向量数据库与 RAG(检索增强生成)
  1. 集成向量数据库(如 Chroma)

    @Bean
    public VectorStore vectorStore(EmbeddingModel embeddingModel) {
        return new ChromaVectorStore(embeddingModel, "chroma-db"); // 创建 Chroma 存储
    }
    
  2. 向量化文本并写入数据库

    @GetMapping("/rag/index")
    public void indexDocuments() {
        List<Document> documents = Arrays.asList(
            new Document("苏州大学 船舶电气工程技术 本科"),
            new Document("实习经历:算法工程师,负责图像识别项目")
        );
        vectorStore.add(documents); // 向量化并写入
    }
    
  3. 基于 RAG 的问答

    @GetMapping("/rag/query")
    public String ragQuery(@RequestParam String question) {
        List<Document> context = vectorStore.similaritySearch(question, 3); // 检索相关文档
        Prompt prompt = new Prompt(
            "根据以下信息回答问题:" + context + "\n问题:" + question
        );
        return chatModel.call(prompt).getContent(); // 结合上下文回答
    }
    
4. 多模态支持(文本 + 图像 / 音频)
  • 文生图(OpenAI DALL-E)

    @Autowired
    private OpenAiImageModel imageModel;
    
    @GetMapping("/image")
    public String generateImage(@RequestParam String prompt) {
        ImageResponse response = imageModel.call(
            new ImagePrompt(prompt, OpenAiImageOptions.builder()
                .withModel("dall-e-3")
                .withN(1)
                .build())
        );
        return response.getUrl(); // 返回图片 URL
    }
    
  • 语音合成(Text-to-Speech)

    @Autowired
    private OpenAiAudioSpeechModel speechModel;
    
    @GetMapping("/speech")
    public void textToSpeech() throws IOException {
        SpeechResponse response = speechModel.call(
            new SpeechPrompt("你好,这是语音示例", 
                OpenAiAudioSpeechOptions.builder()
                    .withVoice(Voice.ALLOY)
                    .build())
        );
        Files.write(Paths.get("output.mp3"), response.getAudioBytes()); // 保存音频文件
    }
    

六、运行与测试

  1. 启动项目

    mvn spring-boot:run
    
  2. 测试接口

    • 访问 http://localhost:8080/ai/chat?msg=你好 测试基础对话。
    • 访问流式接口 http://localhost:8080/ai/chat/stream?msg=讲个故事 观察实时输出。
    • 调用工具接口 http://localhost:8080/ai/function 验证函数集成。

七、最佳实践建议

  1. 提示词设计

    • 使用结构化提示(如 SystemMessage + UserMessage)明确角色和目标。
    • 添加占位符(如 {user_input})动态生成提示,参考:

      java

      SystemMessage system = new SystemMessage("你是{role},需回答{topic}相关问题");
      UserMessage user = new UserMessage("请解释SpringAI的作用");
      
  2. 性能优化

    • 对长文本进行分块(TokenTextSplitter),避免超过模型输入限制。
    • 缓存高频查询结果,减少大模型调用次数。
  3. 安全与成本控制

    • 限制未认证用户的调用频率,避免 API Key 泄露。
    • 监控大模型调用成本(如 OpenAI 的 Token 消耗),设置预算预警。

通过以上步骤,可快速搭建基于 SpringAI 的 AI 应用,实现对话交互、工具集成、知识检索等功能。根据需求扩展向量数据库、多模态支持或复杂提示词逻辑,即可构建生产级 AI 原生应用。

<think>好的,用户想要查找关于Spring AI使用教程、示例和介绍。我需要根据提供的引用内容来整理相关信息,并生成相关问题。首先,查看用户提供的引用内容: 引用[1]提到前两篇文章介绍了Spring AI的基本概念和核心功能,第三篇重点讲解实际项目中的使用,并提供代码示例。引用[2]讨论了如何集成OpenAI、进行function call调用以及高阶用法如传递历史上下文对话和调整模型参数。引用[3]简单说明了Spring AI Chat的示例,指出它方便Java开发者集成AI功能,并能切换不同的AI提供商。引用[4]则提到了评估AI响应和使用Spring CLI等进阶内容,并预告后续教程。 接下来,我需要将这些信息组织成结构清晰的回答,分步骤介绍Spring AI使用教程。首先介绍基本概念,然后准备工作,接着核心功能如集成OpenAI、Function Call,再讲高阶用法如上下文传递和参数调整,最后提到进阶主题如评估响应和使用CLI工具。同时,需要确保所有数学表达式格式正确,但根据用户问题,可能涉及数学的部分较少,主要集中在代码示例和步骤说明。 生成相关问题时要覆盖用户可能感兴趣的方面,比如基础教程、集成方法、Function Call实现、上下文传递、参数调整、应用场景比较以及CLI工具使用。检查是否有遗漏的信息点,确保引用标记正确,每个引用只出现一次。最后,保持回答简洁,符合用户要求的结构,不使用Markdown,使用自然的中文。</think>### Spring AI 使用教程与示例介绍 #### 1. **基本概念与核心功能** Spring AI 是一个帮助 Java 开发者快速集成 AI 功能的框架,其核心功能包括: - **统一抽象层**:支持切换不同 AI 提供商(如 OpenAI、Hugging Face 等),无需修改核心代码[^3]。 - **简化调用流程**:提供标准化接口,降低代码复杂度,例如通过 `ChatClient` 实现对话交互[^3]。 #### 2. **准备工作** - **依赖配置**:在 `pom.xml` 中添加 Spring AI 相关依赖(如 `spring-ai-openai-spring-boot-starter`)。 - **API 密钥设置**:在 `application.properties` 中配置 AI 服务提供商的 API 密钥[^1]。 #### 3. **核心功能示例** ##### **集成 OpenAI** ```java @RestController public class ChatController { @Autowired private ChatClient chatClient; @GetMapping("/chat") public String chat(@RequestParam String message) { return chatClient.call(message); } } ``` 此代码通过 Spring Boot 快速实现一个对话接口。 ##### **Function Call 调用** 通过注解声明函数并绑定到 AI 模型,例如天气查询功能: ```java @Function public Weather getWeather(@RequestParam String location) { // 调用天气 API 并返回结果 } ``` AI 模型可自动解析用户输入中的位置参数并调用此函数[^2]。 #### 4. **高阶用法** - **历史上下文传递**:通过 `ChatHistory` 对象维护对话上下文,实现多轮交互[^2]。 - **模型参数调整**:设置温度值(`temperature`)控制生成结果的随机性,例如: ```java OpenAiChatOptions options = new OpenAiChatOptions(); options.setTemperature(0.7); // 范围 0~1,值越高结果越多样 ``` #### 5. **进阶主题** - **评估 AI 响应**:使用 Spring AI 提供的工具验证生成内容的准确性与相关性[^4]。 - **Spring CLI 工具**:通过命令行快速生成 Spring AI 项目骨架[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值