AlibabaCloudAI

快速体验 Spring Cloud Alibaba AI

JDK要求最低17

1.SpringAI

Spring AI 旨在简化包含人工智能相关功能的应用程序的开发,避免不必要的复杂性。

Spring AI 的核心是提供抽象,作为开发 AI 应用程序的基础。这些抽象有多种实现方式,只需极少的代码改动即可轻松实现各个大模型之间的切换。

Spring AI 提供以下功能:

  • 支持所有主要模型提供商,例如 OpenAI、Microsoft、Amazon、Google 和 Huggingface。
  • 支持的模型类型包括“聊天”和“文本到图像”,还有更多模型类型正在开发中。
  • 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 选项。还支持下拉访问模型特定功能。
  • AI 模型输出到 POJO 的映射。
  • 支持所有主要矢量数据库提供商,例如 Azure 矢量搜索、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate
  • 跨 Vector Store 提供商的可移植 API,包括同样可移植的新颖的类似 SQL 的元数据过滤器 API。
  • 函数调用
  • AI 模型和向量存储的 Spring Boot 自动配置和启动器。
  • 数据工程的 ETL 框架

2.Spring Cloud Alibaba AI

Spring Cloud Alibaba AI (以下简称 SCA AI)基于 Spring AI 0.8.1 版本完成通义系列大模型的接入。

DashScope灵积模型服务建立在 模型即服务(Model-as-a-Service,MaaS)的理念基础之上,围绕AI各领域模型,通过标准化的API提供包括模型推理、模型微调训练在内的多种模型服务。

SCA AI 目前支持的模型主要有:对话、文生图、文生语音,更多功能特性正在适配中。

3.创建SCA AI 应用

在 pom.xml 中引入如下依赖配置:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-ai</artifactId>
</dependency><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.1.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><!-- 因为 Spring AI 还没有正式发布到 maven 仓库,所以需要添加此配置项 目前 maven 仓库为假的。
issue:https://github.com/spring-projects/spring-ai/issues/537
-->
<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository>
</repositories>

4.api-key 配置

在正式开始体验之前,需要申请到模型的 api-key。申请地址:https://help.aliyun.com/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key

您可以通过 DashScope 提供的方式配置 api-key,SCA AI 完全兼容 DashScope 环境变量配置 key 的方式:https://help.aliyun.com/zh/dashscope/developer-reference/api-key-settings

当然也可以通过 SCA AI 中提供的如下配置项配置:
在application.yml中配置:

spring:cloud:ai:tongyi:# api-key setting:api-key: sk-xxxxxxxxxxxxxxxxxxx

5.聊天对话体验

public class ChatService {// 聊天客户端private final ChatClient chatClient;// stream 流式客户端private final StreamingChatClient streamingChatClient;@Autowiredpublic ChatService(ChatClient chatClient, StreamingChatClient streamingChatClient) {this.chatClient = chatClient;this.streamingChatClient = streamingChatClient;}@Overridepublic String normalCompletion(String message) {Prompt prompt = new Prompt(new UserMessage(message));return chatClient.call(prompt).getResult().getOutput().getContent();}@Overridepublic Map<String, String> streamCompletion(String message) {StringBuilder fullContent = new StringBuilder();streamingChatClient.stream(new Prompt(message)).flatMap(chatResponse -> Flux.fromIterable(chatResponse.getResults())).map(content -> content.getOutput().getContent()).doOnNext(fullContent::append).last().map(lastContent -> Map.of(message, fullContent.toString())).block();return Map.of(message, fullContent.toString());}}

之后,创建 controller 接口调用 service 服务:

@Autowired
private ChatService chatService;@GetMapping("/example")
public String completion(@RequestParam(value = "message", defaultValue = "Tell me a joke")String message
) {return chatService.completion(message);
}@GetMapping("/stream")
public Map<String, String> streamCompletion(@RequestParam(value = "message", defaultValue = "请告诉我西红柿炖牛腩怎么做?")String message
) {return chatService.streamCompletion(message);
}

调用/example

Sure, here’s one for you: Why was the math book sad? Because it had too many problems!

调用/stream

{
“请告诉我西红柿炖牛腩怎么做?”: “材料材料:\n材料:\n牛材料:\n牛腩1000材料:\n牛腩1000g,西红柿3个(大),材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最后根据个人口味加盐调味即可材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最后根据个人口味加盐调味即可出锅。\n\n这道菜色香味材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最后根据个人口味加盐调味即可出锅。\n\n这道菜色香味俱全,营养丰富,非常适合家庭材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最后根据个人口味加盐调味即可出锅。\n\n这道菜色香味俱全,营养丰富,非常适合家庭日常食用。”
}

6.文生图体验

public class ImagesService {// 图像生成客户端private final ImageClient imageClient;@Autowiredpublic ImagesService(ImageClient client) {this.imageClient = client;}@Overridepublic ImageResponse genImg(String imgPrompt) {var prompt = new ImagePrompt(imgPrompt);return imageClient.call(prompt);}}

文生图对应的 controller 接口如下:

@Autowired
private ImagesService imagesService;@GetMapping("/img")public ResponseEntity<ByteArrayResource> getImageAsByteArray(@RequestParam(value = "prompt", defaultValue = "Painting a picture of blue water and blue sky.") String imgPrompt) {// imagesService.genImg(imgPrompt),返回包含Base64编码图片的ImageResponse对象ImageResponse imageResponse = imagesService.genImg(imgPrompt);// 解析Base64编码的JSON字符串,获取Base64编码的图片数据String b64Json = imageResponse.getResult().getOutput().getB64Json();// 将Base64编码的字符串解码为字节数组byte[] imageBytes = Base64.getDecoder().decode(b64Json);// 构建 ByteArrayResource 对象ByteArrayResource resource = new ByteArrayResource(imageBytes);// 构建 HTTP 响应头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.IMAGE_JPEG); // 根据实际图片类型设置headers.setContentLength(imageBytes.length);// 返回包含图片字节数组资源的 ResponseEntityreturn ResponseEntity.ok().headers(headers).body(resource);}

调用/img

在这里插入图片描述

7.文生语音体验

public class AudioService {private final SpeechClient speechClient;@Autowiredpublic AudioService(SpeechClient client) {this.speechClient = client;}@Overridepublic String genAudio(String text) {var resWAV = speechClient.call(text);return save(resWAV, SpeechSynthesisAudioFormat.WAV.getValue());}// 辅助方法,用于将模型的响应保存到本地.private String save(ByteBuffer audio, String type) {String currentPath = System.getProperty("user.dir");LocalDateTime now = LocalDateTime.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-HH-mm-ss");String fileName = currentPath + File.separator + now.format(formatter) + "." + type;File file = new File(fileName);try (FileOutputStream fos = new FileOutputStream(file)) {fos.write(audio.array());}catch (Exception e) {throw new RuntimeException(e);}return fileName;}}

controller 接口代码如下:

  @Autowiredprivate AudioService audioService;@GetMapping("/audio")public String genAudio(@RequestParam(value = "prompt",defaultValue = "你好,Spring Cloud Alibaba AI 框架!") String prompt) {return audioService.genAudio(prompt);}

调用/audio

在这里插入图片描述

至此,Spring Cloud Alibaba AI 提供的三种基本功能已经体验完成,后续您还可以通过设置一些个性化的参数来使大模型生成各种各样的图片和音频等。
更多配置项可以参考:https://help.aliyun.com/zh/dashscope/developer-reference/api-details。社区相关的文档正在完善,更多功能正在开发中!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数据库-小练习

根据题目要求&#xff0c;完成下列任务&#xff1a; 新建表和数据库 //建立数据库 mysql> create database mydb15_indexstu; Query OK, 1 row affected (0.00 sec)//使用数据库 mysql> use mydb15_indexstu; Database changed//创建表student mysql> create table s…

Pytorch深度学习实践(5)逻辑回归

逻辑回归 逻辑回归主要是解决分类问题 回归任务&#xff1a;结果是一个连续的实数分类任务&#xff1a;结果是一个离散的值 分类任务不能直接使用回归去预测&#xff0c;比如在手写识别中&#xff08;识别手写 0 − − 9 0 -- 9 0−−9&#xff09;&#xff0c;因为各个类别…

【C++初阶】string类

【C初阶】string类 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符串 1.2 实际中 2. 标准库中的string类 2.1 string类 2.…

栈-链栈的表示和实现

#include<stdio.h> typedef int Status; typedef int sElemType; //链栈 typedef struct StackNode{sElemType data;struct StackNode *next; }StackNode,*LinkStack; StackNode *p; //初始化 Status InitStack(LinkStack &S){SNULL;return 1; } //判空 Status Emp…

[用AI日进斗金系列]用码上飞在企微接单开发一个项目管理系统!

今天是【日进斗金】系列的第二期文章。 先给不了解这个系列的朋友们介绍一下&#xff0c;在这个系列的文章中&#xff0c;我们将会在企微的工作台的“需求发布页面”中寻找有软件开发需求的用户 并通过自研的L4级自动化智能软件开发平台「码上飞CodeFlying」让AI生成应用以解…

一文搞懂深度信念网络!DBN概念介绍与Pytorch实战

前言 本文深入探讨了深度信念网络DBN的核心概念、结构、Pytorch实战&#xff0c;分析其在深度学习网络中的定位、潜力与应用场景。 一、概述 1.1 深度信念网络的概述 深度信念网络&#xff08;Deep Belief Networks, DBNs&#xff09;是一种深度学习模型&#xff0c;代表了一…

Ruoyi-WMS部署

所需软件 1、JDK&#xff1a;8 安装包&#xff1a;https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.htmlopen in new window 安装文档&#xff1a;https://cloud.tencent.com/developer/article/1698454open in new window 2、Redis 3.0 安装包&a…

跨域浏览器解决前端跨域问题

1.问题背景 这是一种属于非主流的解决跨域的方案&#xff0c;但是也是可以正常使用而且比较简单的。如果需要使用主流的解决前端跨域方案&#xff0c;请参考这篇文章。 我这边其实是优先建议大家使用主流的跨域方案&#xff0c;如果主流的实在不行&#xff0c;那么就使用跨域…

redis:清除缓存的最简单命令示例

清除redis缓存命令 1.打开cmd窗口&#xff0c;并cd进入redis所在目录 2.登录redis redis-cli 3.查询指定队列当前的记录数 llen 队列名称 4.清除指定队列所有记录 ltrim 队列名称 1 0 5.再次查询&#xff0c;确认队列的记录数是否已清除

用uniapp 及socket.io做一个简单聊天app 2

在这里只有群聊&#xff0c;二个好友聊天&#xff0c;可以认为是建了一个二人的群聊。 const express require(express); const http require(http); const socketIo require(socket.io); const cors require(cors); // 引入 cors 中间件const app express(); const serv…

探索算法系列 - 双指针

目录 移动零&#xff08;原题链接&#xff09; 复写零&#xff08;原题链接&#xff09; 快乐数&#xff08;原题链接&#xff09; 盛最多水的容器&#xff08;原题链接&#xff09; 有效三角形的个数&#xff08;原题链接&#xff09; 查找总价格为目标值的两个商品&…

科研绘图系列:R语言组合堆积图(stacked barplot with multiple groups)

介绍 通常堆积图的X轴表示样本,样本可能会存在较多的分组信息,通过组合堆积图和样本标签分组信息,我们可以得到一张能展示更多信息的可发表图形。 加载R包 knitr::opts_chunk$set(warning = F, message = F) library(tidyverse) library(cowplot) library(patchwork)导入…

GDAL访问HDFS集群中的数据

1.集群搭建 参考文章&#xff1a;hadoop2.10.0完全分布式集群搭建 HA(QJM)高可用集群搭建_hadoop 2.10 ha-CSDN博客 创建文件夹 hdfs dfs -mkdir -p hdfs://192.168.80.132:9000/test 开放权限 hdfs dfs -chmod -R 777 /test 上传文件 hadoop fs -put /home/wh/data/res…

JavaScript(16)——定时器-间歇函数

开启定时器 setInterval(函数,间隔时间) 作用&#xff1a;每隔一段时间调用这个函数&#xff0c;时间单位是毫秒 例如&#xff1a;每一秒打印一个hello setInterval(function () { document.write(hello ) }, 1000) 注&#xff1a;如果是具名函数的话不能加小括号&#xf…

【论文复现】Vision Transformer(ViT)

1. Transformer结构 1.1 编码器和解码器 翻译这个过程需要中间体。也就是说&#xff0c;编码&#xff0c;解码之间需要一个中介&#xff0c;英文先编码成一个意思&#xff0c;再解码成中文。 那么查字典这个过程就是编码和解码的体现。首先我们的大脑会把它编码&#xff0c;编…

数仓架构解析(第45天)

系列文章目录 经典数仓架构传统离线大数据架构 文章目录 系列文章目录烂橙子-终生成长社群群主&#xff0c;前言1. 经典数仓架构2. 传统离线大数据架构 烂橙子-终生成长社群群主&#xff0c; 采取邀约模式&#xff0c;不支持付费进入。 前言 经典数仓架构 传统离线大数据架…

2000-2023年上市公司融资约束指数FC指数(含原始数据+计算结果)

2000-2023年上市公司融资约束指数FC指数&#xff08;含原始数据计算结果&#xff09; 1、时间&#xff1a;2000-2023年 2、来源&#xff1a;上市公司年报 3、指标&#xff1a;证券代码、证券简称、统计截止日期、是否剔除ST或*ST或PT股、是否剔除上市不满一年、已经退市或被…

Linus: vim编辑器的使用,快捷键及配置等周边知识详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 vim的安装创建新用户 adduser 用户名Linus是个多用户的操作系统是否有创建用户的权限查看当前用户身份:whoami** 怎么创建设置密码passwdsudo提权(sudo输入的是用户…

前端网页打开PC端本地的应用程序实现方案

最近开发有一个需求&#xff0c;网页端有个入口需要跳转三维大屏&#xff0c;而这个大屏是一个exe应用程序。产品需要点击这个入口&#xff0c;并打开这个应用程序。这个就类似于百度网盘网页跳转到PC端应用程序中。 这里我们采用添加自定义协议的方式打开该应用程序。一开始可…

前端:Vue学习 - 购物车项目

前端&#xff1a;Vue学习 - 购物车项目 1. json-server&#xff0c;生成后端接口2. 购物车项目 - 实现效果3. 参考代码 - Vuex 1. json-server&#xff0c;生成后端接口 全局安装json-server&#xff0c;json-server官网为&#xff1a;json-server npm install json-server -…