阿里也出手了!Spring Cloud Alibaba AI 尝鲜(保姆级教程)

Spring Cloud Alibaba之 AI Spring Cloud Alibaba AI 为 Java 开发者提供了一个快速接入并使用阿里云通义系列大模型的解决方案。通过整合 Spring Cloud Alibaba 和 Spring AI,开发者可以轻松地构建基于 AI 的微服务应用,实现对话、文生图、文生语音等多种功能。本文提供了一个简单的在线聊天 AI 应用示例,展示了从项目创建、依赖引入、配置文件编写到业务逻辑实现的全过程。 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

8645c79a805e7ea1292f0d78e335a40c.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:blog.youkuaiyun.com/qq_34742146
/article/details/140503128

3dbe789c8a3a388e8a4a732149af4862.jpeg


Spring AI简介

Spring AI是一个面向AI工程的应用框架。其目标是将可移植性和模块化设计等设计原则应用于AI领域的Spring生态系统, 转换为人话来说就是:Spring出了一个AI框架,帮助我们快速调用AI,从而实现各种功能场景。

但是重点:对于国内开发者不太友好已经不太支持了。于是乎Spring Cloud Alibaba AI出世了!

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

Spring Cloud Alibaba AI 简介

Spring Cloud Alibaba AI 基于 Spring AI 0.8.1 版本完成通义系列大模型的接入。DashScope灵积模型服务建立在 模型即服务(Model-as-a-Service,MaaS)的理念基础之上,围绕AI各领域模型,通过标准化的API提供包括模型推理、模型微调训练在内的多种模型服务。

目前支持的模型主要有:对话、文生图、文生语音,更多功能特性正在适配中。那以上介绍完之后咱们就完成一些案例来看看效果吧

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

开发环境

这里说下我本地的环境,阿里要求JDK为17+

JDK17,Maven3.5以上,Spring Boot2.0+,Spring Cloud2021+

创建工程

创建父工程

创建项目就是正常的Maven项目

  • 引入依赖

<?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>

    <groupId>com.tongyi</groupId>
    <artifactId>tongyi2</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>aliai</module>
    </modules>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>17</java.version>
        <spring-boot.version>2.7.18</spring-boot.version>
        <spring-cloud.version>2021.0.8</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
    </properties>

    <!-- springboot、springcloud、springcloud alibaba-->
    <dependencyManagement>
        <dependencies>
            <!-- SpringCloud 微服务 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- SpringCloud Alibaba 微服务 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- SpringBoot 依赖配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>
创建子工程

创建子工程就是正常的maven项目(选中父工程右键)

  • 引入依赖

<?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">
    <parent>
        <artifactId>tongyi2</artifactId>
        <groupId>com.tongyi</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>aliai</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-ai</artifactId>
            <version>2023.0.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>


    </dependencies>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.18</version>
                <configuration>
                    <mainClass>com.usian.AliApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
  • 添加配置文件

主要配置阿里云申请的api-key:

  • https://dashscope.console.aliyun.com/model

8cd9aaf0c4340d8002695cbbec0cb760.jpeg
spring:
  cloud:
    ai:
      tongyi:
        api-key: your api-key #自己在阿里云官网申请的api-key
server:
  port: 8081

案例

以下所有案例均在一个项目中编写,小伙伴们不要整懵了哈

单轮对话
  • 编写业务层接口

public interface TongYiService {
 //聊天对话
    String completion(String message);
}
  • 编写业务层抽象类

public abstract class AbstractTongYiServiceImpl implements TongYiService {

 private static final String INFO_PREFIX = "please implement ";
 private static final String INFO_SUFFIX = "() method.";

 @Override
 public String completion(String message) {
  throw new RuntimeException(INFO_PREFIX + Thread.currentThread().getStackTrace()[2].getMethodName());
 }
}
  • 编写业务层实现类

@Service
public class TongYiServiceImpl implements TongYiService{

    private static final String INFO_PREFIX = "please implement ";
    private static final String INFO_SUFFIX = "() method.";

    @Override
    public String completion(String message) {
        throw new RuntimeException(INFO_PREFIX + Thread.currentThread().getStackTrace()[2].getMethodName());
    }
}
  • 编写控制层

@RestController
@RequestMapping("/ai")
@CrossOrigin
public class TongYiController {
/**
     * 聊天对话应用  单轮对话
     * @param message
     * @return
     */
    @GetMapping("/example")
    public String completion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message,HttpServletRequest request,HttpServletResponse response) {
        String completion = tongYiSimpleService.completion(message);
        return completion;
    }
}
  • 测试

可以在地址栏输入地址进行访问http://localhost:8081/ai/example?message=讲一个笑话

7e041c61d34867904989ff97b4835219.jpeg

以上就是Spring Cloud Alibaba AI入门案例

可以整合Vue输入

<div id="app" >
    <template>
     <div >
          <h1 >单轮输出</h1>
          <el-form   :inline="true">
              <el-form-item label="问题">
                  <el-input  v-model="singletext" placeholder="请输入问题"></el-input>
              </el-form-item>
              <el-form-item>
                  <el-button type="primary" @click="SingleAnswer">提问</el-button>
              </el-form-item>
          </el-form>
          {{singleresponse}}
      </div>
</template>
</div> 
<script>
    new Vue({
        el: "#app",
        data: {
            singletext:'',//单轮输入值
            singleresponse:'',//单轮输出结果
        },
        methods: {
            //单轮对话
            SingleAnswer: function() {
                var vm = this;
                axios.get("http://localhost:8081/ai/example?message="+this.singletext).then(function(response) {
                    vm.singleresponse = response.data;
                }).catch(function(error) {
                    console.log(error);
                });
            }
        }
    });
</script>
1effa162f84c915700479703d23536df.jpeg
多轮对话
  • 编写业务层接口

/**
 * 多轮对话
 * @param message 用户问题.
 * @return AI 答案.
 */
String multiCompletion(String message);
  • 编写业务层抽象类

@Override
public String multiCompletion(String message) {
 throw new RuntimeException(INFO_PREFIX + Thread.currentThread().getStackTrace()[2].getMethodName());
}
  • 编写业务层实现类

@Override
public String multiCompletion(String message) {
    throw new RuntimeException(INFO_PREFIX + Thread.currentThread().getStackTrace()[2].getMethodName());
}
  • 编写控制层

/**
 * 多轮聊天应用
 *
 * @param message
 * @return
 */
@GetMapping("/multi")
public String multi(@RequestParam String message) {
    String completion = tongYiMultiServiceImpl.multiCompletion(message);
    return completion;
}
  • 编写前端

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script src="js/marked.min.js"></script>
    <title>SCA AI Example Front</title>
    <style>
        body {
            background-color: #f8f9fa;
            font-family: Arial, sans-serif;
        }

        .container {
            margin: 50px auto;
            width: 800px;
            background-color: #fff;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
        }

        h1 {
            color: #2ecc71;
            text-align: center;
            margin-bottom: 30px;
        }

        label {
            display: block;
            margin-bottom: 10px;
            color: #333;
        }

        input[type="text"] {
            width: 100%;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 3px;
        }

        input[type="submit"] {
            background-color: #2ecc71;
            color: #fff;
            border: none;
            padding: 10px 20px;
            border-radius: 3px;
            cursor: pointer;
            width: 100%;
        }

        .chat-box {
            width: 100%;
            height: 500px;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 3px;
            overflow-y: scroll;
        }

        .message {
            margin-bottom: 10px;
            padding: 10px;
            background-color: #f1f1f1;
            border-radius: 3px;
        }

        .user-message {
            background-color: #2ecc71;
            color: #fff;
        }

        .bot-message {
            background-color: #3498db;
            color: #fff;
        }

        .loader {
            text-align: center;
        }

        .loader::after {
            content: "";
            display: inline-block;
            width: 20px;
            height: 20px;
            border-radius: 50%;
            border: 2px solid #ccc;
            border-top-color: #2ecc71;
            animation: spin 1s infinite linear;
        }

        @keyframes spin {
            to {
                transform: rotate(360deg);
            }
        }
    </style>
</head>
<body>
<div class="container">
    <h1>Spring Cloud Alibaba AI</h1>
    <form id="form">
        <label for="message">输入信息:</label>
        <input type="text" id="message" name="message" placeholder="输入信息!">
        <br>
        <br>
        <input type="submit" value="提问">
    </form>
    <br>
    <div id="loader" class="loader" style="display: none;"></div>
    <div id="chat-box" class="chat-box"></div>
</div>

<script>
    var loader = document.getElementById("loader");

    document.getElementById("form").addEventListener("submit", function(event) {
        event.preventDefault();

        var messageInput = document.getElementById("message");
        var message = messageInput.value;
        messageInput.value = "";

        var chatBox = document.getElementById("chat-box");

        var userMessage = document.createElement("div");
        userMessage.className = "message user-message";
        userMessage.textContent = "用户: " + message;
        chatBox.appendChild(userMessage);
        chatBox.scrollTop = chatBox.scrollHeight;

        loader.style.display = "block";

        var xhr = new XMLHttpRequest();
        xhr.open("GET", "http://localhost:8081/ai/example?message=" + encodeURIComponent(message), true);
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4) {
                loader.style.display = "none";

                if (xhr.status === 200) {
                    var response = xhr.responseText;

                    var botMessage = document.createElement("div");
                    botMessage.className = "message bot-message";

                    var botMessageText = document.createElement("span");
                    botMessageText.className = "message-text";
                    botMessage.appendChild(botMessageText);
                    botMessageText.innerHTML = marked.marked(response);

                    chatBox.appendChild(botMessage);
                    chatBox.scrollTop = chatBox.scrollHeight;
                } else if (xhr.status === 400) {
                    var error = JSON.parse(xhr.responseText);

                    var errorMessage = document.createElement("div");
                    errorMessage.className = "message bot-message";
                    errorMessage.textContent = "Bot: " + error.message;
                    chatBox.appendChild(errorMessage);
                    chatBox.scrollTop = chatBox.scrollHeight;
                } else {
                    var errorMessage = document.createElement("div");
                    errorMessage.className = "message bot-message";
                    errorMessage.textContent = "Bot: Failed to connect to the backend service. Please make sure the backend service is running.";
                    chatBox.appendChild(errorMessage);
                    chatBox.scrollTop = chatBox.scrollHeight;
                }
            }
        };

        xhr.onloadstart = function() {
            loader.style.display = "block";
        };

        xhr.onloadend = function() {
            loader.style.display = "none";
        };

        xhr.send();
    });
</script>
</body>
</html>
  • 测试

输入一个问题,回答后接着第一个问题继续提问

1def3f738d3e642491ca3bc06d36a2d1.jpeg
文生图

输入文字,最后输出图片

  • 编写业务层接口

// 生成图片
ImageResponse genImg(String imgPrompt);
  • 编写业务层抽象类

@Override
public ImageResponse genImg(String imgPrompt) {
 throw new RuntimeException(INFO_PREFIX + Thread.currentThread()
   .getStackTrace()[2].getMethodName() + INFO_SUFFIX);
}
  • 编写业务层实现类

@Override
public ImageResponse genImg(String imgPrompt) {
    throw new RuntimeException(INFO_PREFIX + Thread.currentThread()
            .getStackTrace()[2].getMethodName() + INFO_SUFFIX);
}
  • 编写控制层

/**
 * 文生图应用
 * @param imgPrompt
 * @return
 */
@GetMapping("/img")
public String genImg(@RequestParam(value = "prompt", defaultValue = "Painting a picture of blue water and blue sky.") String imgPrompt) {
    ImageResponse imageResponse = tongYiImgService.genImg(imgPrompt);
    String url = imageResponse.getResult().getOutput().getUrl();
    return url;
}
  • 编写前端

<div id="app" >
    <template>
      <!--生成图片-->
            <div >
                <h1 >生成图片</h1>
                <el-form   :inline="true">
                    <el-form-item label="问题">
                        <el-input  v-model="imgtext" placeholder="请输入问题"></el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" @click="fetchAnswer">提问</el-button>
                    </el-form-item>
                </el-form>
                <div v-if="imgresponse!=''">
                    <img :src="imgresponse"  alt="生成的图片" width="300px" height="300px">
                </div>
            </div>
</template>
</div> 
<script>
    new Vue({
        el: "#app",
        data: {
            imgtext: '',//图片输入问题
            imgresponse: '',//图片返回结果
        },
        methods: {
            //生成图片
            fetchAnswer: function() {
                var vm = this;
                axios.get("http://localhost:8081/ai/img?prompt="+ this.imgtext).then(function(response) {
                    vm.imgresponse = response.data;
                }).catch(function(error) {
                    console.log(error);
                });
            },
        }
    });
</script>
  • 测试

82eb43724ed14bfdba0d04619311f71f.jpeg
文生语音

输入文字,转换成语音,且用语音回答答案

  • 编写业务层接口

// 生成音频
String genAudio(String text);
  • 编写业务层抽象类

@Override
public String genAudio(String text) {
 throw new RuntimeException(INFO_PREFIX + Thread.currentThread()
   .getStackTrace()[2].getMethodName() + INFO_SUFFIX);
}
  • 编写业务层实现类

@Override
public String genAudio(String text) {
    throw new RuntimeException(INFO_PREFIX + Thread.currentThread()
            .getStackTrace()[2].getMethodName() + INFO_SUFFIX);
}
  • 编写控制层

/**
 * 文字问题输入语音文字输出
 * @param message
 * @param request
 * @param response
 * @return
 */
@GetMapping("/audio/speech")
public void genAudio(@RequestParam(value = "prompt") String prompt, HttpServletRequest request, HttpServletResponse response) {
    String audio = tongYiAudioService.genAudio(prompt);
    try {
        FileInputStream is = new FileInputStream(audio);
        int i = is.available(); // 得到文件大小
        byte data[] = new byte[i];
        is.read(data); // 读数据
        is.close();
        response.setContentType("audio/wav"); // 设置返回的文件类型
        OutputStream toClient = response.getOutputStream(); // 得到向客户端输出二进制数据的对象
        toClient.write(data); // 输出数据
        toClient.close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
 /**
 * 文字输入语音输出答案
 * @param message
 * @param request
 * @param response
 * @return
 */
@GetMapping("/exampleToMp3")
public void exampleToMp3(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message,HttpServletRequest request,HttpServletResponse response) {
    String completion = tongYiSimpleService.completion(message);
    String audio = tongYiAudioService.genAudio(completion);
    try {
        FileInputStream is = new FileInputStream(audio);
        int i = is.available(); // 得到文件大小
        byte data[] = new byte[i];
        is.read(data); // 读数据
        is.close();
        response.setContentType("audio/wav"); // 设置返回的文件类型
        OutputStream toClient = response.getOutputStream(); // 得到向客户端输出二进制数据的对象
        toClient.write(data); // 输出数据
        toClient.close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
  • 编写前端

<div id="app" >
    <template>
     <!--文字转语音-->
            <div >
                <h1 >文字转语音</h1>
                <el-form   :inline="true">
                    <el-form-item label="问题">
                        <el-input  v-model="mp3text" placeholder="请输入问题"></el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" @click="Mp3Answer">提问</el-button>
                    </el-form-item>
                </el-form>
                <div v-if="mp3response!=''">
                    <audio :src="mp3response" controls id="audio_demo" ></audio>
                </div>
                <div v-if="mp3text2response!=''">
                    <audio :src="mp3text2response" controls id="audio_demo1" ></audio>
                </div>
            </div>
</template>
</div> 
<script>
    new Vue({
        el: "#app",
        data: {
           mp3text:'',//语音输入问题
           mp3response:'',//语音返回结果
           mp3text2response:''//文字输入语音输出结果
        },
        methods: {
           //文字转语音
            Mp3Answer: function() {
                var vm = this;
                axios({
                    url:'http://localhost:8081/ai/audio/speech?prompt='+this.mp3text,
                    responseType:'blob'
                }).then(result=>{
                    vm.mp3response = window.URL.createObjectURL(result.data);
                })
                //文字输出结果
                axios({
                    url:'http://localhost:8081/ai/exampleToMp3?message='+this.mp3text,
                    responseType:'blob'
                }).then(result=>{
                    vm.mp3text2response = window.URL.createObjectURL(result.data);
                })
               
            }
        }
    });
</script>
  • 测试

865664689e599d39bb400e303c929aae.jpeg

以上就是一些基本案例。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

d1faebc3e66e3a68c4d652c7a7c3b5db.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

cd65a7eac90f07995bcf251bc7b7c21e.png

77ac8f5ea95795378d8681d550d18e45.pngd728cbc91b715f30a8543e6cd81e4100.png6ec326f1cb32a230042668110b4bbc1f.png0f7ee9511f5d6a79a370bd3e18c3a6e9.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
Spring Alibaba Ai 实现聊天和文生图功能 阅读详情

相关推荐

Spring AI与Spring Cloud Alibaba AI框架实战指南

AI集成是现代企业级应用开发的核心需求,Spring生态推出的Spring AI和Spring Cloud Alibaba AI框架为开发者提供了高效解决方案。Spring AI作为模型无关的中间件,通过统一API简化了OpenAI、Hugging Face等各类AI模型的接入;而Spring Cloud Alibaba AI则深度整合阿里云AI服务,如通义千问和视觉识别,特别适合云原生场景。这两个框架都遵循Spring的约定优于配置原则,显著降低了AI能力集成的复杂度。在实际应用中,开发者可以快速实现对话

weixin_30911451的博客 474

阿里出击!Spring Cloud Alibaba AI 初体验

原始的Spring AI并没有国内相关大模型的接入,对国内开发者不太友好。总的来说,Spring Cloud Alibaba AI 目前基于Spring AI 0.8.1版本 API 完成通义系列大模型的接入。

m0_63171455的博客 3593

惊呆了!Oracle 11g从入门到放弃的保姆级指南(新手必看)

本文为Oracle 11g数据库新手提供了一份详尽的入门指南。内容涵盖从安装配置、SQL*Plus工具使用、核心的SQL增删改查操作,到事务、索引等进阶概念的解析。文章旨在帮助初学者避开常见陷阱,快速掌握这一经典关系型数据库管理系统的基本操作与核心技能,实现从入门到上手。

ooo22的博客 268

Spring Cloud Alibaba 最新版本(基于Spring Boot 3.1.0)整合完整使用及与各中间件集成

只介绍如何集成及使用,概念性的东西就不细说了。慢慢更新。

Ricardo.M.Yu的博客 1万+

CentOS7无外网环境下MySQL8.0完整离线部署指南

本文详细介绍了在CentOS7无外网环境下,如何通过MySQL8.0二进制包进行完整离线部署。指南涵盖了从环境准备、依赖安装、用户与目录创建,到数据库初始化、服务配置及远程访问设置的全过程,并提供了关键的避坑技巧,帮助企业运维人员在内网环境中高效、稳定地搭建MySQL数据库服务。

xxx12的博客 1029

超详细Matlab R2021a免费安装教程(附安装包)

Matlab是一种高级技术计算语言和交互式环境,用于算法开发、数据可视化和数值计算。它集成了数学、工程和科学计算的丰富函数库,提供了强大的数据分析和绘图工具。Matlab还支持并行计算和大规模数据处理,适用于各种领域,如信号处理、图像处理、控制系统、机器学习等。

waicsdn_haha的博客 1万+

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

使用Spring Cloud Alibaba AI快速实现简单对话、文字生成图片、文字生成语音等

qq_40525480的博客 1261

[Dify实战] 招投标标书智能生成:模板套用 + 风险校验

摘要:本文提出基于Dify构建AI标书生成工作流,解决传统标书撰写中内容重复(80%复用率)、人工修改效率低、风险检查易出错等痛点。方案包含三大核心模块:1)智能生成(基于模板自动填充项目信息);2)风险校验(AI自动检查废标风险点);3)多角色协作。通过拆分标书结构、设置详细Prompt、建立风险检查清单,实现从"人工撰写"到"参数化自动生成+AI审核"的转型,最终输出标准格式文档并支持企业系统集成。典型应用场景下,系统能自动生成技术方案并识别关键风险(如支付安全合

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 828

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

在软件开发的世界中,Java一直是企业级应用的主力军。而Spring框架,尤其是Spring Boot,以其生态系统的丰富性,为开发者提供了无与伦比的便利。现在,Spring Boot正迈向一个新的纪元——人工智-能的时代。Spring AI项目的推出,不仅标志着Spring生态的进一步扩展,也为广大Java开发者开启了一个全新的编程领域。Spring AI是从著名的Python。

上善若泪 1万+

13、基因相似性度量的相关性及特征选择研究

本文研究了基因相似性度量和特征选择在生物学中的应用,详细介绍了GO术语相似性度量的多种方法,包括语义度量和路径长度度量,并分析了不同方法在酵母和人类数据集上的表现。研究发现,Avg-sum方法和基于路径长度的度量在多数情况下效果较好。此外,通过晚期辐射毒性预测的案例研究,探讨了特征选择的重要性及可能面临的过拟合和噪声干扰问题,并提出了相应的解决策略。

js777的博客 127

华为自研 ERP、Oracle EBS 与 SAP 上线时系统配置思路设计差异深度分析

本文对比分析了华为自研ERP、Oracle EBS和SAP S/4HANA三大ERP系统在上线配置思路上的核心差异。从架构设计看,华为采用分布式微服务架构,SAP采用分层服务架构,Oracle采用集中式一体化架构;在模块配置上,华为以业务场景为导向,SAP基于行业模板,Oracle强调模块独立性;数据迁移方面,华为侧重业务规则清洗,SAP注重数据质量监控,Oracle依赖标准化工具;流程适配上,华为系统随流程调整,SAP在框架内优化,Oracle需定制开发;定制开发模式差异明显,华为采用插件化扩展,SAP使

金牌架构师 1455

【JavaEE】【SpringAI】Spring AI Alibaba

spring ai Alibaba

yj20040627的博客 2088

SAN存储与协议,了解SCSI、FC和ISCSI

在前面我们介绍SAN存储及iSCSI协议的时候了解到SAN存储其实是一个CS架构的系统。存储系统本身就是整个系统的服务端。以IP-SAN(也就是基于iSCSI的SAN存储)为例,其整体架构如图1所示。 图1 CS架构 对于存储系统来说,通常是由专业的存储厂商提供,比较知名的如EMC、NetAPP、IBM和日立等等。国内存储厂商也迅速崛起,比较知名的如华为、宏杉、浪潮和同友等等。另外,还有一些小的存储厂商,他们往往集中在某个领域,比如专注文件系统或者块存储等等。 除了专业的存储设备外,其实Linux

shuningzhang的专栏 2686

阿里也出手了!Spring CloudAlibaba AI问世了

可能有些小伙伴已经忘记了SpringAI是啥?我们这儿再来简单回顾一下。Spring AI是一个面向AI工程的应用框架。其目标是将可移植性和模块化设计等设计原则应用于AI领域的Spring生态系统,并将POJO作为应用程序的构建块推广到AI领域。转换为人话来说就是:Spring出了一个AI框架,帮助我们快速调用AI,从而实现各种功能场景。以Spring AI为基础,并在此基础上,基于版本 API 完成通义系列大模型的接入实现阿里云通义系列大模型全面适配。在当前最新版本中,

jennycisp的博客 3368

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

无敌!Spring Cloud Alibaba AI!

Spring AI 是从著名的 Python 项目LangChain和LlamaIndex中汲取灵感,它不是这些项目的直接移植,它的成立信念是,下一波生成式人工智能应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在。提供抽象能力简化 AI 应用的开发模型与向量支持AI 集成与自动配置Spring AI 简化了我们构建大型复杂的 AI 应用的过程,当然如果你的项目仅仅是需要调用一个 AI 接口,那其实直接调用官方 SDK 反而更方便。

java_121388的博客 1099

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

阿里也出手了!Spring Cloud Alibaba AI 初体验

在当前最新版本中,Spring Cloud Alibaba AI 主要完成了几种常见生成式模型的适配,包括对话、文生图、文生语音等,开发者可以使用 Spring Cloud Alibaba AI 开发基于通义的聊天、图片或语音生成 AI 应用,框架还提供 OutParser、Prompt Template、Stuff 等实用能力。个人开发者如果仅仅需要简答的问答接口,无需使用Spring AI,然而,当项目中需要开发比较复杂的AI功能,如果仅仅使用官方的SDK,写出的代码可能不太容易长期维护。

2501_92606851的博客 817

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Cloud Alibaba AI 入门与实践

本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。

zlt2000的博客 1271

10分钟接入AI大模型—Spring Cloud Alibaba

AI大模型的发展迅速,成为全球科技竞争的新高地,具有极大的发展潜力和广泛的应用前景。

qq_17153885的博客 3263

阿里出手了!Spring Cloud Alibaba AI 接入的体验很nice!

什么是Spring AISpring AI是从著名的Python项目 LangChain 和 LlamaIndex 中汲取灵感,它不是这些项目的直接移植,它的成立信念是,「下一波生成式人工智能应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在」。我们可以从Spring AI的官网描述中,总结出Sp...

cnzzs的博客 662

Spring AI与Spring Cloud Alibaba AI整合实践

在Java企业级开发中,AI功能的引入常面临技术栈割裂与运维复杂度高的挑战。Spring AI作为Spring生态的标准化AI集成方案,通过抽象层设计统一了不同AI服务提供商的接入方式,显著降低了跨语言调用的复杂度。其核心价值在于将AI能力无缝融入现有Spring技术栈,实现自动配置、健康检查等企业级特性。特别地,Spring Cloud Alibaba AI进一步针对阿里云大模型优化,提供与Nacos、Sentinel等组件的深度集成。这种架构设计使得开发者可以专注于业务逻辑,同时灵活切换底层AI服务,适

weixin_34279184的博客 380

阿里也出手了 Spring CloudAlibaba AI问世了

可能有些小伙伴已经忘记了SpringAI是啥?我们这儿再来简单回顾一下。Spring AI是一个面向AI工程的应用框架。其目标是将可移植性和模块化设计等设计原则应用于AI领域的Spring生态系统,并将POJO作为应用程序的构建块推广到AI领域。转换为人话来说就是:Spring出了一个AI框架,帮助我们快速调用AI,从而实现各种功能场景。以Spring AI为基础,并在此基础上,基于版本 API 完成通义系列大模型的接入实现阿里云通义系列大模型全面适配。

再小的帆也能远航,把分享变成一种习惯 4363

Spring Cloud Alibaba是什么

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程​​本身并不是一个拿来即可用的框架,它是一套微服务规范,这套规范共有两代实现。2018 年 12 月12 日,Netflix 公司宣布 Spring Cloud Netflix 系列大部分组件都进入维护模式,不再添加新特性。这严重地限制了 Spring Cloud 的高速发展,于是各大互联网公司和组织开始把目光转向 Spring Cloud 的第二代实现:Spring Cloud Alibaba。

了解➔熟悉➔掌握➔精通 1394

阿里百炼&Spring AI Alibaba

此仓库中包含许多 Example 来介绍 Spring AI Alibaba 从基础到高级的各种用法和 AI 项目的最佳实践。

pscool的博客 2202

【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)

本文介绍了如何使用 Spring Cloud Alibaba AI 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。首先概述了 Spring Cloud Alibaba AI 的概念及其与 Spring AI 和阿里云通义大模型的关系。接着列出了使用该框架所需的前置条件,包括 JDK 17+、Spring Boot 3.0+ 以及通义 API-KEY 的获取。随后详细阐述了开发步骤,包括后端和前端的关键代码示例。最后展示了项目的实际运行效果。

JavaDog程序狗 1959
上一篇: token是用来鉴权的,那session是用来干什么的?
下一篇: 一行代码,实现请假审批流程(Java版)
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值