基于Spring AI alibaba组件AI问答功能开发示例

基于Spring AI alibaba组件AI问答功能开发示例

功能效果图:
在这里插入图片描述
http://localhost:9999/ai/test
http://localhost:9999/ai/chat?input=ai

配置 application.yaml 指定 API-KEY(可通过访问阿里云百炼模型服务平台获取,有免费额度可用。)
阿里云百炼
阿里云百炼模型服务平台
https://ai.aliyun.com/

架构版本
JDK17
SpringBoot3.3.3
Spring-AI 1.0.0-M3
Spring-AI-Alibaba1.0.0-M3.1
vue3

架构版本JDK17
SpringBoot3.3.3
Spring-AI 1.0.0-M3
Spring-AI-Alibaba1.0.0-M3.1
vue3

aiApplication.java入口类

package com.cwgis;import com.cwgis.pg.function.MockOrderService;
import com.cwgis.pg.function.Response;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Description;import java.util.function.Function;/*** Hello world!*/
@SpringBootApplication
public class aiApplication {public static void main(String[] args) {SpringApplication.run(aiApplication.class, args);System.out.println("===============");System.out.println("ai服务正在运行中!");System.out.println("===============");}@Bean@Description("根据用户编号和订单编号查询订单信息")public Function<MockOrderService.Request, Response> getOrderFunction(MockOrderService mockOrderService) {return mockOrderService::getOrder;}
}

ChatController.java问答服务类

package com.cwgis;import com.cwgis.pg.core.AjaxResult;
import com.cwgis.pg.function.MJDLTBService;
import com.cwgis.pg.function.MockWeatherService;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;import java.util.Objects;@RestController
@RequestMapping("/ai")
public class ChatController {private final ChatClient chatClient;public ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping("/test")public AjaxResult test() {String r= this.chatClient.prompt().user("测试").call().content();return AjaxResult.success(r);}//自动加载自定义function函数@PostMapping("/chat")public AjaxResult chat(String input) {String r= this.chatClient.prompt().function("getWeather", "根据城市查询天气", new MockWeatherService()).functions("getOrderFunction")     //获取aiApplication类中注册的Bean函数.function("MJDLTBService","根据城市和地类名称查询地类图斑面积",new MJDLTBService()).user(input).call().content();return AjaxResult.success(r);}@PostMapping("/stream")public AjaxResult stream(String input) {Flux<String> content = this.chatClient.prompt().user(input).stream().content();String r= Objects.requireNonNull(content.collectList().block()).stream().reduce((a, b) -> a + b).get();return AjaxResult.success(r);}//函数调用@PostMapping("/weather-service")public AjaxResult weatherService(String subject) {String r= chatClient.prompt().function("getWeather", "根据城市查询天气", new MockWeatherService()).user(subject).call().content();return AjaxResult.success(r);}@PostMapping("/order-detail")public AjaxResult orderDetail() {String r= chatClient.prompt().functions("getOrderFunction")     //获取aiApplication类中注册的Bean函数.user("帮我查询一下订单, 用户编号为1001, 订单编号为2001").call().content();return AjaxResult.success(r);}//
}

MJDLTBService.java自定义服务函数

package com.cwgis.pg.function;import com.fasterxml.jackson.annotation.JsonClassDescription;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;import java.util.function.Function;//采用AI问答模式,从本地数据库中查询地类面积值的功能
public class MJDLTBService implements Function<MJDLTBService.Request, Response> {@Overridepublic Response apply(MJDLTBService.Request request) {String city=request.city();String dlmc=request.dlmc();if(city!=null && dlmc!=null){//到数据库中去查询,用sql语句查询String sql="select sum(tbmj) from dltb where zldwmc like '%"+request.city()+"%' and dlmc like '%"+request.dlmc()+"%'";//sde.getValueDouble(sql);return new Response(String.format("%s%s的地类面积为查询后面积值500亩", request.city(),request.dlmc()));}else {return new Response(String.format("暂时无法查询%s的地类面积。", request.city()));}}@JsonInclude(JsonInclude.Include.NON_NULL)@JsonClassDescription("根据城市和地类名称查询地类图斑面积")public record Request(@JsonProperty(required = true, value = "city") @JsonPropertyDescription("城市, 比如杭州") String city,@JsonProperty(required = true, value = "dlmc") @JsonPropertyDescription("地类, 比如水田、旱地、耕地、园地、林地、草地、建设用地、农用地、未利用地") String dlmc) {}}

MockWeatherService.java自定义天气查询服务

package com.cwgis.pg.function;import java.util.function.Function;import com.fasterxml.jackson.annotation.JsonClassDescription;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;public class MockWeatherService implements Function<MockWeatherService.Request, Response> {@Overridepublic Response apply(Request request) {if (request.city().contains("杭州")) {return new Response(String.format("%s%s晴转多云, 气温32摄氏度。", request.date(), request.city()));}else if (request.city().contains("上海")) {return new Response(String.format("%s%s多云转阴, 气温31摄氏度。", request.date(), request.city()));}else if (request.city().contains("成都")) {return new Response(String.format("%s%s阴转小雨, 气温5摄氏度。", request.date(), request.city()));}else {return new Response(String.format("暂时无法查询%s的天气状况。", request.city()));}}@JsonInclude(JsonInclude.Include.NON_NULL)@JsonClassDescription("根据日期和城市查询天气")public record Request(@JsonProperty(required = true, value = "city") @JsonPropertyDescription("城市, 比如杭州") String city,@JsonProperty(required = true, value = "date") @JsonPropertyDescription("日期, 比如2024-08-22") String date) {}}
public record Response(String description) {
}

resources/application.yml应用配置参数

#基本配置
server.port: 9999
server.tomcat.max-http-form-post-size: 5120MB
spring:application:name: galaxy-aiai:dashscope:api-key: sk-111111111111111111111111111

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><groupId>com.cwgis</groupId><artifactId>galaxy-ai</artifactId><version>1.0-SNAPSHOT</version><name>galaxy-ai</name><description>Building AI applications with Spring Boot</description><!-- FIXME change it to the project's website --><url>http://www.cwgis.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><spring-boot.version>3.3.3</spring-boot.version><commons.io.version>2.13.0</commons.io.version><commons.text.version>1.6</commons.text.version><commons.lang3.version>3.12.0</commons.lang3.version><commons.fileupload.version>1.3.3</commons.fileupload.version><!-- Spring AI --><spring-ai.version>1.0.0-M3</spring-ai.version><spring-ai-alibaba.version>1.0.0-M3.1</spring-ai-alibaba.version><dashscope-sdk-java.version>2.15.1</dashscope-sdk-java.version><!-- plugin versions --><maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version><maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version><maven-failsafe-plugin.version>3.1.2</maven-failsafe-plugin.version><maven-javadoc-plugin.version>3.5.0</maven-javadoc-plugin.version><maven-source-plugin.version>3.3.0</maven-source-plugin.version><jacoco-maven-plugin.version>0.8.10</jacoco-maven-plugin.version><flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version><maven-deploy-plugin.version>3.1.1</maven-deploy-plugin.version><asciidoctor-maven-plugin.version>2.2.3</asciidoctor-maven-plugin.version><maven-assembly-plugin.version>3.7.0</maven-assembly-plugin.version><maven-dependency-plugin.version>3.5.0</maven-dependency-plugin.version><maven-site-plugin.version>4.0.0-M13</maven-site-plugin.version><maven-project-info-reports-plugin.version>3.4.5</maven-project-info-reports-plugin.version><maven-jar-plugin.version>3.3.0</maven-jar-plugin.version><spring-javaformat-maven-plugin.version>0.0.39</spring-javaformat-maven-plugin.version><maven-gpg-plugin.version>3.0.1</maven-gpg-plugin.version></properties><dependencyManagement><dependencies><dependency><groupId>org.junit</groupId><artifactId>junit-bom</artifactId><version>5.11.0</version><type>pom</type><scope>import</scope></dependency><!--常用工具类 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons.io.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-text</artifactId><version>${commons.text.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>common-lang3</artifactId><version>${commons.lang3.version}</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency><!--add alibaba java lib --><dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>${dashscope-sdk-java.version}</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><scope>test</scope></dependency><!-- Optionally: parameterized tests support --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> <!-- 检查是否有新版本并相应更新 --></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>${spring-ai-alibaba.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot.version}</version></dependency></dependencies><build><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><groupId>io.spring.javaformat</groupId><artifactId>spring-javaformat-maven-plugin</artifactId><version>${spring-javaformat-maven-plugin.version}</version><executions><execution><phase>validate</phase><inherited>true</inherited><goals><goal>validate</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-site-plugin</artifactId><version>${maven-site-plugin.version}</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven-compiler-plugin.version}</version><configuration><release>${java.version}</release><compilerArgs><compilerArg>-parameters</compilerArg></compilerArgs></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${maven-surefire-plugin.version}</version><configuration><argLine>${surefireArgLine}</argLine></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>${maven-jar-plugin.version}</version><configuration><archive><manifestEntries><Implementation-Title>${project.artifactId}</Implementation-Title><Implementation-Version>${project.version}</Implementation-Version></manifestEntries></archive></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>${flatten-maven-plugin.version}</version><executions><execution><id>flatten</id><phase>process-resources</phase><goals><goal>flatten</goal></goals><configuration><updatePomFile>true</updatePomFile><flattenMode>ossrh</flattenMode><pomElements><distributionManagement>remove</distributionManagement><dependencyManagement>remove</dependencyManagement><repositories>remove</repositories><scm>keep</scm><url>keep</url><organization>resolve</organization></pomElements></configuration></execution><execution><id>clean</id><phase>clean</phase><goals><goal>clean</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><version>${maven-deploy-plugin.version}</version></plugin></plugins></pluginManagement></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories>
</project>

ai.ts前端访问代码

import request from "@/utils/request"export function chat(msg) {    let data={input:msg};//let ai_url=config.ai_url;//var jsonStr=JSON.stringify(data);return request({baseURL:"/ai",url:'/ai/chat?input='+msg,method:'post'});    
}export function test() {// var jsonStr=JSON.stringify(data);//let ai_url=config.ai_url;return request({baseURL:"/ai",url:'/ai/test',method:'get'});    
}export function weatherService(msg) {    let data={input:msg};//let ai_url=config.ai_url;//var jsonStr=JSON.stringify(data);return request({baseURL:"/ai",url:'/ai/weather-service?subject='+msg,method:'post'});    
}export function orderDetail() {// var jsonStr=JSON.stringify(data);//let ai_url=config.ai_url;return request({baseURL:"/ai",url:'/ai/order-detail',method:'post'});    
}

前端index.vue页面

<template><div v-loading="loading" class="app" element-loading-text="数据请求中">      <div class="app_content">请在下面输入框提问后搜索</div><a-textarea v-model:value="msgAsk" placeholder="Basic usage" :rows="20" /><a-input-searchv-model:value="msg"placeholder="请输入要搜索的信息"enter-button="搜索"size="large"      @search="searchClick"/></div>    
</template>
<script setup lang="ts">
import * as page    from "@/api/vuePage"
import * as ai      from "@/api/ai"//
const loading = page.ts_ref(false);
let msg=page.ts_ref("");
let msgAsk=page.ts_ref("");const  searchClick=async function(){loading.value=true;//page.showMsg(msg.value);let r=await ai.chat(msg.value);msgAsk.value=r.msg;//console.log(r);//debugger;//let r=await ai.orderDetail();//msgAsk.value=r.msg;//let r=await ai.weatherService(msg.value);//msgAsk.value=r.msg;//loading.value=false;
}</script><style scoped lang="less">
.app{border: 1px solid #ccc;height: 99%;margin: 0 auto;width: 1024px;background-color: white;box-shadow: 0 0 20px 3px #ccc;.app_header {text-align: center;border-bottom: 1px solid #9a9a9a;height: 90px;.app_title {font-size: 24px;font-weight: bolder;height: 90px;line-height: 90px;box-sizing: border-box;color: #2f2f2f;}.date {margin-top: 10px;font-size: 15px;height: 40px;color: #8a8a8a;background-color: #ebe6eb;line-height: 40px;}}.app_content {margin-top: 15px;min-height: 30px;padding: 20px;box-sizing: border-box;overflow: auto;height: 12%;}
}
</style>

本blog地址:https://blog.csdn.net/hsg77

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux - 线程基础

文章目录 1.什么是线程2.线程vs进程3.线程调度4.线程控制4.1 POSIX线程库4.2创建线程4.3线程终止4.4线程等待4.5线程分离 5、线程封装 1.什么是线程 在Linux操作系统中&#xff0c;线程是进程内部的一个执行流。在Linux操作系统下&#xff0c;执行流统称为轻量级进程&#xff0…

5、AI测试辅助-生成测试用例思维导图

AI测试辅助-生成测试用例思维导图 创建测试用例两种方式1、Plantuml思维导图版本 (不推荐&#xff09;2、Markdown思维导图版本&#xff08;推荐&#xff09; 创建测试用例两种方式 完整的测试用例通常需要包含以下的元素&#xff1a; 1、测试模块 2、测试标题 3、前置条件 4、…

PTA编程题:N个数求和

问题描述 思路分析 问题分解 输入处理&#xff1a;将分数拆解为分子和分母&#xff0c;存储并处理。 分数相加规则&#xff1a; 即分子相加、分母相乘。 结果化简&#xff1a;求分数的最大公因数&#xff08;GCD&#xff09;&#xff0c;将其约分至最简形式。 带分数处理&…

Selenium + 数据驱动测试:从入门到实战!

引言 在软件测试中&#xff0c;测试数据的多样性和灵活性对测试覆盖率至关重要。而数据驱动测试&#xff08;Data-Driven Testing&#xff09;通过将测试逻辑与数据分离&#xff0c;极大地提高了测试用例的可维护性和可扩展性。本文将结合Selenium这一流行的测试工具&#xff0…

RK3568平台(中断篇)ARM中断流程

一.ARM 处理器程序运行的过程 ARM芯片属于精简指令集计算机 (RISC: Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 ③ 使用RISC指令的CPU复杂度小一点,易于设计 比如对于 a=a+b 这…

视频修复技术和实时在线处理

什么是视频修复&#xff1f; 视频修复技术的目标是填补视频中的缺失部分&#xff0c;使视频内容连贯合理。这项技术在对象移除、视频修复和视频补全等领域有着广泛的应用。传统方法通常需要处理整个视频&#xff0c;导致处理速度慢&#xff0c;难以满足实时处理的需求。 技术发…

推荐一款专业电脑护眼工具:CareUEyes Pro

CareUEyes Pro是一款非常好用的专业电脑护眼工具&#xff0c;软件小巧&#xff0c;界面简单&#xff0c;它可以自动过滤电脑屏幕的蓝光&#xff0c;让屏幕显示更加的不伤眼&#xff0c;更加舒适&#xff0c;有效保护你的眼睛&#xff0c;可以自定义调节屏幕的色调&#xff0c;从…

Element UI 组件库详解【Vue】

文章目录 一、引言二、安装并使用1. 安装2. 使用 三、常见组件说明1. 基础组件2. 布局组件3. 布局容器4. 选择框组件5. 输入框组件6. 下拉框组件7. 日期选择器8. 上传组件9. 表单组件10. 警告组件11. 提示组件12. 表格组件 一、引言 官方网站&#xff0c;element.eleme.cn El…

相机触发模式

参考自&#xff1a;相机触发模式_硬触发和软触发的区别-CSDN博客 一、图像采集模式分类 相机的图像采集模式分为内触发模式与外触发模式。其中内触发模式包含连续采集、单帧采集两种形式&#xff1b;外触发模式包含软件外触发、硬件外触发。本文以海康相机的软件平台作介绍&a…

脚手架vue-cli,webpack模板

先安装node.js&#xff0c;它是服务器端&#xff0c;用于给页面提供服务。前端学习不需要会node.js&#xff0c;只需要学会node.js衍生出来的npm命令即可。 npm 是node.js的一个工具&#xff0c;作用是进行包管理&#xff0c;npm是node.js的包管理器。 接着安装脚手架&#xff…

Stable Diffusion核心网络结构——CLIP Text Encoder

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

ggplot2 分面图等添加注释文字,相加哪里加哪里: 自定义函数 AddText()

如果分面图上还想再添加文字&#xff0c;只能使用底层的grid包了。 函数定义 # Add text to ggplot2 figures # # param label text you want to put on figure # param x position x, left is 0, right 1 # param y position y, bottom is 0, up 1 # param color text color…

ubuntu中使用ffmpeg和nginx推流rtmp视频

最近在测试ffmpeg推流rtmp视频&#xff0c;单独安装ffmpeg是无法完成推流的&#xff0c;需要一个流媒体服务器&#xff0c;常用nginx&#xff0c;可以直接在ubuntu虚拟机里面测试一下。 测试过程不涉及编译ffmpeg和nginx&#xff0c;仅使用基本功能&#xff1a; 1 安装ffmpeg …

解决upload上传之后,再上传没有效果

解决upload上传之后&#xff0c;再上传没有效果 注释&#xff1a;这是第二次上传&#xff0c;两次网络请求都是第一次上传的&#xff0c;这次上传没有网络请求 原因&#xff1a;在我的代码里我限制了上传数量为1&#xff0c;然后上传成功后&#xff0c;上传列表没有清空&#…

NVR接入录像回放平台EasyCVR视频融合平台加油站监控应用场景与实际功能

在现代社会中&#xff0c;加油站作为重要的能源供应点&#xff0c;面临着安全监管与风险管理的双重挑战。为应对这些问题&#xff0c;安防监控平台EasyCVR推出了一套全面的加油站监控方案。该方案结合了智能分析网关V4的先进识别技术和EasyCVR视频监控平台的强大监控功能&#…

基于web的音乐网站(Java+SpringBoot+Mysql)

目录 1系统概述 1.1 研究背景 1.2研究目的 1.3系统设计思想 2相关技术 2.1 MYSQL数据库 2.2 B/S结构 2.3 Spring Boot框架简介 3系统分析 3.1可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2系统性能分析 3.2.1 系统安全性 3.2.2 数据完整性 …

中间件--laravel进阶篇

laravel版本11.31,这中间件只有3种,分别是全局中间件,路由中间件,控制器中间件。相比thinkphp8,少了一个应用中间件。 一、创建中间件 laravel创建中间件可以使用命令的方式创建,非常方便。比如php artisan make:middleware EnsureTokenIsValid。EnsureTokenIsValid是中间…

杰发科技AC7840——EEP中RAM的配置

sample和手册中示例代码的sram区地址定义不一样 这个在RAM中使用没有限制&#xff0c;根据这个表格留下足够空间即可 比如需要4096字节的eep空间&#xff0c;可以把RAM的地址改成E000&#xff0c;即E000-EFFF&#xff0c;共4096bytes即可。

实验室管理平台:Spring Boot技术构建

3系统分析 3.1可行性分析 通过对本实验室管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本实验室管理系统采用SSM框架&#xff0c;JAVA作为开发语言&a…

ThinkPHP8使用workerman

应用场景说明&#xff1a;通过建立通信&#xff0c;不同用户进行消息推送或数据更新&#xff0c;因为本身需要作为服务端进行主动消息推送&#xff0c;因此使用Gateway方式&#xff0c;如果不需要的可以不采用这种形式&#xff0c;以下内容仅为参考&#xff0c;具体业务场景&am…