当前位置: 首页 > news >正文

Spring AI学习

https://github.com/chatanywhere/GPT_API_free

AI框架之Spring AI与Spring Cloud Alibaba AI使用讲解

超级详细Spring AI+ChatGPT(java接入OpenAI大模型)

Spring Cloud Alibaba AI 速通版!保姆级教程!

Java大模型应用开发,微服务整合DeepSeek,LangChain大型语言模型LLM实战 - 尚硅谷

Spring AI Alibaba官网

【Spring AI】Spring AI Alibaba的简单使用

【Spring AI】基于SpringAI+Vue3+ElementPlus的Q&A系统实现(后端)
【Spring AI】基于SpringAI+Vue3+ElementPlus的Q&A系统实现(前端)

文章目录

    • pom.xml
    • OpenAiApp
    • AiController
    • application.yml

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>spring-boot-dependencies</artifactId><groupId>org.springframework.boot</groupId><version>3.2.4</version></parent><groupId>org.example</groupId><artifactId>demo-openai</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.10</version></dependency></dependencies></project>

OpenAiApp

@SpringBootApplication
public class OpenAiApp {public static void main(String[] args) {/*// 设置代理String proxy ="127.0.0.1"; //100.100.101.235 8811 示例,里面填具体的代理ipint port = 7890; //代理的端口,System.setProperty("proxyType","4");System.setProperty("proxyPort"Integer.toString(port));System.setProperty("proxyHost",proxy);System.setProperty("proxySet","true");*/SpringApplication.run(OpenAiApp.class, args);}
}

AiController

import org.springframework.ai.audio.transcription.AudioTranscriptionPrompt;
import org.springframework.ai.audio.transcription.AudioTranscriptionResponse;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.model.Media;
import org.springframework.ai.openai.*;
import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.ai.openai.api.OpenAiAudioApi;
import org.springframework.ai.openai.api.OpenAiImageApi;
import org.springframework.ai.openai.audio.speech.SpeechPrompt;
import org.springframework.ai.openai.audio.speech.SpeechResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.stereotype.Controller;
import org.springframework.util.MimeTypeUtils;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import reactor.core.publisher.Flux;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;/*
https://github.com/chatanywhere/GPT_API_free
转发Host1: https://api.chatanywhere.tech (国内中转,延时更低)
转发Host2: https://api.chatanywhere.org (国外使用)AiCore API    https://api.xty.app/token
OpenAI购买平台 https://eylink.cn/spring ai 使用官方示例代码 https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-openai/src/test*/
@SuppressWarnings("all")
@Controller
public class AiController {@Autowired(required = false)private ChatClient.Builder builder;// 一次返回@RequestMapping("test01")@ResponseBodypublic String test01(@RequestParam("prompt") String prompt) {ChatClient chatClient = builder.defaultSystem("You are a helpful assistant.").build();String response = chatClient.prompt(prompt).system("You are also talented").call().content();// String response = chatClient.prompt().user(prompt).call().content();return response;}// 逐词返回@RequestMapping(value = "test02", produces = "text/html;charset=utf-8")@ResponseBodypublic Flux<String> test02(@RequestParam("prompt") String prompt) {ChatClient chatClient = builder.build();Flux<String> flux = chatClient.prompt(prompt).stream().content();// flux.subscribe(System.out::println);return flux;}// @see OpenAiAutoConfiguration@Autowiredprivate ChatModel chatModel;@RequestMapping(value = "test03")@ResponseBodypublic String test03(@RequestParam("prompt") String prompt) {ChatResponse chatResponse = chatModel.call(new Prompt(new UserMessage(prompt),OpenAiChatOptions.builder().model("deepseek-reasoner").temperature(0.8).build()));return chatResponse.getResult().getOutput().getText();}@RequestMapping(value = "test04", produces = "text/html;charset=utf-8")@ResponseBodypublic Flux<String> test04(@RequestParam("prompt") String prompt) {return chatModel.stream(new Prompt(new UserMessage(prompt),OpenAiChatOptions.builder().model("deepseek-chat").temperature(0.8).build())).flatMap(chatResponse -> Flux.just(chatResponse.getResult().getOutput().getText()));}@Autowiredprivate OpenAiImageModel openaiImageModel;// 文生图@RequestMapping(value = "test05")@ResponseBodypublic String test05(@RequestParam("prompt") String prompt) {ImageResponse response = openaiImageModel.call(new ImagePrompt("draw a cat",OpenAiImageOptions.builder().quality("hd").withModel(OpenAiImageApi.DEFAULT_IMAGE_MODEL).N(1).height(1024).width(1024).build()));return response.getResult().getOutput().getUrl();}@Autowiredprivate OpenAiAudioSpeechModel openAiAudioSpeechModel;// 文生语音@RequestMapping(value = "test06")@ResponseBodypublic void test06(@RequestParam("prompt") String prompt) throws IOException {OpenAiAudioSpeechOptions speechOptions = OpenAiAudioSpeechOptions.builder().model(OpenAiAudioApi.TtsModel.TTS_1.value).voice(OpenAiAudioApi.SpeechRequest.Voice.ALLOY).responseFormat(OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3).speed(1.0f).build();SpeechPrompt speechPrompt = new SpeechPrompt("大家好,欢迎来到这里,希望大家开心!", speechOptions);SpeechResponse response = openAiAudioSpeechModel.call(speechPrompt);StreamUtils.copy(response.getResult().getOutput(), new FileOutputStream(new File(System.getProperty("user.dir") + "\\test06.mp3")));}@Autowiredprivate OpenAiAudioTranscriptionModel openAiTranscriptionModel;// 语音转文本@RequestMapping(value = "test07")@ResponseBodypublic void test07(@RequestParam("prompt") String prompt) throws IOException {OpenAiAudioTranscriptionOptions transcriptionOptions = OpenAiAudioTranscriptionOptions.builder().responseFormat(OpenAiAudioApi.TranscriptResponseFormat.TEXT).temperature(0f).build();FileSystemResource audioFile = new FileSystemResource(new File(System.getProperty("user.dir") + "\\test06.mp3"));AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioFile, transcriptionOptions);AudioTranscriptionResponse response = openAiTranscriptionModel.call(transcriptionRequest);System.out.println(response.getResult().getOutput());}// 多模态@RequestMapping(value = "test08")@ResponseBodypublic void test08(@RequestParam("prompt") String prompt) throws IOException {ClassPathResource imageResource = new ClassPathResource("multimodal.test.png");UserMessage userMessage = new UserMessage("Explain what do you see in this picture?", // contentnew Media(MimeTypeUtils.IMAGE_PNG, imageResource)); // mediaChatResponse response = chatModel.call(new Prompt(userMessage,OpenAiChatOptions.builder()// 指定模型.model(OpenAiApi.ChatModel.GPT_4_TURBO_PREVIEW).build()));System.out.println(response.getResult().getOutput().getText());}}

application.yml

spring:ai:openai:# base-url: https://api.chatanywhere.tech# base-url: https://api.chatanywhere.orgbase-url: https://api.xty.app # 中转站api-key: sk-xxxchat:options:# model: gpt-3.5-turbo# model: deepseek-reasoner# model: deepseek-chatmodel: gpt-4

http://www.mrgr.cn/news/93739.html

相关文章:

  • MySQL复习笔记
  • CGI程序刷新共享内存视频流到HTTP
  • moodle 开源的在线学习管理系统(LMS)部署
  • Java学习--MySQL
  • 中级网络工程师面试题参考示例(1)
  • 山东大学计算机科学与技术学院软件工程实验日志(更新中)
  • 【vitepress】如何搭建并部署自己的博客网站
  • VBA 数据库同一表的当前行与其他行的主键重复判断实现方案1
  • 【洛谷P1080国王游戏】2025-3-7
  • Java 大视界 -- 基于 Java 的大数据实时数据处理框架性能评测与选型建议(121)
  • 1.12.信息系统的分类【ES】
  • langchain系列(九)- LangGraph 子图详解
  • Django小白级开发入门
  • FPGA学习篇——Verilog学习5(reg,wire区分及模块例化)
  • 大数据_数仓建模_八股
  • 考研机试常见基本题型
  • 蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码
  • C#模拟鼠标点击,模拟鼠标双击,模拟鼠标恒定速度移动,可以看到轨迹
  • 数据结构第五节:二叉搜索树(BST)的基本操作与实现
  • RuoYi框架添加自己的模块(学生管理系统CRUD)