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

Vue3项目中集成AI对话功能的实战经验分享

前言

最近在项目中需要集成AI对话功能,经过调研后选择了ai-suspended-ball-chat这个Vue3组件库。使用了一段时间后,想从技术使用者的角度分享一下真实的体验和踩过的坑,希望对有类似需求的开发者有所帮助。

Snipaste_2025-08-31_19-48-18

项目背景与选择理由

我们的项目是一个企业级的管理后台,需要为用户提供智能客服和代码助手功能。在选择方案时,主要考虑了以下几个因素:

  1. 开发效率:不想从头开发聊天UI和流式响应逻辑
  2. 功能完整性:需要支持文本、图片、语音等多种交互方式
  3. 可定制性:要能适配现有的设计系统
  4. 技术栈匹配:项目使用Vue3 + TypeScript

经过对比几个方案后,最终选择了ai-suspended-ball-chat,主要是被它的以下特性吸引:

  • 提供了悬浮球和独立面板两种使用方式
  • 支持流式响应,用户体验更好
  • TypeScript支持完善
  • 文档相对详细

实际使用体验

1. 安装和基础配置

安装过程很顺利,使用npm安装后直接导入即可:

npm install ai-suspended-ball-chat
<template><SuspendedBallChat:url="apiUrl":app-name="appName":domain-name="domainName":enable-streaming="true":callbacks="callbacks"/>
</template><script setup>
import { SuspendedBallChat } from 'ai-suspended-ball-chat'const apiUrl = 'https://api.your-domain.com/chat'
const appName = 'my-app'
const domainName = 'user123'const callbacks = {onUserMessage: (message) => {console.log('用户发送:', message)},onAssistantMessage: (message) => {console.log('AI回复:', message)},onError: (error) => {console.error('错误:', error)}
}
</script>

优点:

  • 开箱即用,配置简单
  • 从v0.1.33版本开始样式已内联,不需要单独引入CSS
  • TypeScript类型提示完善

2. 流式响应的实现

这是我认为这个组件最大的亮点之一。流式响应让AI回复看起来像"打字"一样,用户体验非常好。

// 后端需要返回SSE格式的数据
{"code": 0, "result": "Vue.js是一个用于构建", "is_end": false}
{"code": 0, "result": "用户界面的渐进式", "is_end": false}
{"code": 0, "result": "JavaScript框架。", "is_end": false}
{"code": 0, "result": "", "is_end": true}

实际体验:

  • 响应速度感知明显提升
  • 用户不会觉得系统"卡住了"
  • 对长回复特别有效

注意事项:

  • 需要后端正确设置响应头(Content-Type: text/event-stream)
  • 要处理网络断开的情况
  • 流式过程中用户可以点击停止按钮

3. 图片上传功能

支持上传图片让AI进行识别,这个功能在我们的客服场景中很有用。

<SuspendedBallChat:enable-image-upload="true":callbacks="callbacks"
/>

实际效果:

  • 支持拖拽上传和点击上传
  • 图片预览效果不错
  • 自动压缩大图片

遇到的问题:

  • 上传大图片时需要时间,用户可能会重复点击
  • 需要在后端对图片格式和大小做限制

4. 语音功能的使用

语音输入和播报功能在移动端特别有用:

<SuspendedBallChat:enable-voice-input="true":enable-auto-speech="true":callbacks="callbacks"
/>

实际体验:

  • 语音识别准确率还可以,中文支持不错
  • 语音播报音质清晰
  • 在嘈杂环境下识别率会下降

浏览器兼容性问题:

  • 需要HTTPS环境(本地开发localhost除外)
  • Safari在某些版本上语音功能不稳定
  • 需要用户授权麦克风权限

5. 历史记录管理

本地存储聊天历史的功能很实用:

<SuspendedBallChat:enable-local-storage="true":storage-key="'my-chat-history'":max-history-count="50":callbacks="callbacks"
/>

优点:

  • 刷新页面后聊天记录不丢失
  • 可以设置存储的最大条数
  • 支持手动清除历史

注意事项:

  • localStorage有大小限制
  • 敏感信息需要考虑安全性
  • 不同用户要用不同的storageKey

在实际项目中的应用案例

案例1:客服系统

我们在客服系统中使用悬浮球模式,用户可以随时呼出AI助手:

<template><div class="customer-service"><SuspendedBallChat:url="chatApiUrl":app-name="'customer-service'":domain-name="userId":location="'right-bottom'":size="'medium'":custom-icon-url="'/icons/service.png'":enable-streaming="true":enable-image-upload="true":assistant-config="assistantConfig":callbacks="serviceCallbacks"/></div>
</template><script setup>
const assistantConfig = {avatar: '/avatars/service-bot.png',name: '小助手',description: '我是您的专属客服助手'
}const serviceCallbacks = {onUserMessage: (message) => {// 记录用户咨询日志logUserQuery(message)},onAssistantMessage: (message) => {// 分析回复质量analyzeResponse(message)}
}
</script>

效果:

  • 用户咨询量提升了40%
  • 平均响应时间从2分钟缩短到10秒
  • 客服工作量减少了60%

案例2:代码助手

在代码编辑器页面使用独立面板模式:

<template><div class="code-editor-layout"><div class="editor-area"><!-- 代码编辑器 --></div><div class="assistant-panel" v-if="showAssistant"><ChatPanel:url="codeApiUrl":app-name="'code-assistant'":domain-name="userId":title="'代码助手'":enable-streaming="true":preset-tasks="codeTasks":callbacks="codeCallbacks"@close="showAssistant = false"/></div></div>
</template><script setup>
const codeTasks = [{icon: '🐛',title: '代码调试',description: '帮助分析和修复代码问题'},{icon: '📝',title: '代码注释',description: '为代码添加详细注释'},{icon: '🔧',title: '代码优化',description: '提供代码优化建议'}
]const codeCallbacks = {clickAssistantMsgCallback: (message) => {// 将AI生成的代码插入到编辑器insertCodeToEditor(message)}
}
</script>

效果:

  • 开发效率提升了25%
  • 代码质量有明显改善
  • 新手程序员上手更快

性能优化经验

1. 按需加载

组件包体积较大(主要是因为支持代码高亮、数学公式等功能),建议按需加载:

<template><div><button @click="loadChat">打开AI助手</button><component :is="chatComponent" v-if="chatComponent" /></div>
</template><script setup>
import { ref } from 'vue'const chatComponent = ref(null)const loadChat = async () => {if (!chatComponent.value) {const { SuspendedBallChat } = await import('ai-suspended-ball-chat')chatComponent.value = SuspendedBallChat}
}
</script>

效果:

  • 首屏加载速度提升60%
  • 按需加载减少了不必要的资源消耗

2. 请求优化

const customRequestConfig = {headers: {'Authorization': `Bearer ${token}`,},timeout: 30000,retryCount: 3,retryDelay: 1000
}

3. 历史记录优化

// 限制历史记录数量,避免localStorage过大
<SuspendedBallChat:max-history-count="20":storage-key="`chat-${userId}`"
/>

遇到的问题和解决方案

1. 样式冲突问题

问题: 项目中的全局CSS影响了组件样式

解决方案:

/* 使用更具体的选择器覆盖样式 */
.my-app .chat-panel-container {font-family: 'PingFang SC', sans-serif !important;
}/* 或者使用CSS变量自定义主题 */
:root {--ai-chat-primary-color: #1890ff;--ai-chat-bg-color: #ffffff;
}

2. 移动端适配

问题: 在移动端悬浮球位置不合适

解决方案:

<SuspendedBallChat:location="isMobile ? 'right-bottom' : 'right-center'":size="isMobile ? 'small' : 'medium'"
/>

3. 网络异常处理

问题: 网络不稳定时用户体验差

解决方案:

const callbacks = {onError: (error) => {if (error.code === 'NETWORK_ERROR') {// 显示网络错误提示showToast('网络连接异常,请检查网络后重试')} else {// 其他错误处理showToast('服务暂时不可用,请稍后重试')}}
}

建议和最佳实践

1. 接口设计建议

如果要自建后端接口,建议:

// 统一的响应格式
{"code": 0,"result": "AI回复内容","is_end": true,"metadata": {"usage": { "tokens": 150 },"model": "gpt-3.5-turbo"}
}

2. 用户体验优化

  • 设置合理的超时时间(建议30秒)
  • 提供明确的加载状态提示
  • 长回复时支持中断功能
  • 添加使用提示和帮助文档

3. 安全考虑

  • 后端要做输入内容过滤
  • 敏感信息不要存储在localStorage
  • 设置合理的请求频率限制
  • 对上传的图片做安全检查

总结

经过几个月的使用,我对ai-suspended-ball-chat组件的评价是:

优点:

  • 功能完整,开箱即用
  • 流式响应体验很好
  • TypeScript支持完善
  • 文档相对详细
  • 可定制性强

不足:

  • 包体积较大,需要按需加载
  • 某些浏览器兼容性问题
  • 移动端体验还可以进一步优化

适用场景:

  • 企业级管理后台的AI客服
  • 代码编辑器的智能助手
  • 知识库问答系统
  • 在线教育的AI老师

不适用场景:

  • 对包体积有严格要求的项目
  • 需要高度定制化UI的场景
  • 老旧浏览器支持要求高的项目

总的来说,如果你的项目需要快速集成AI对话功能,并且使用Vue3技术栈,这个组件是一个不错的选择。它帮我们节省了大量开发时间,让我们能专注于业务逻辑而不是UI实现。

当然,任何技术选择都要结合具体的项目需求。建议在正式使用前,先用demo验证一下是否满足你的具体需求。

参考资源

  • 组件官方文档
  • 在线演示
  • API接口文档

希望这篇分享对正在考虑使用这个组件的开发者有所帮助。如果你有任何问题或不同的使用经验,欢迎交流讨论。

相关文章:

Vue3项目中集成AI对话功能的实战经验分享

ai-suspended-ball-chat组件使用体验摘要 本文分享了Vue3项目中使用ai-suspended-ball-chat组件集成AI对话功能的实践经验。该组件提供悬浮球和独立面板两种模式,支持流式响应、图片上传、语音交互等功能,显著提升了用户体验。通过实际案例展示了在客服系统和代码助手场景中的…...

gulimall出现服务间调用org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose 问题

java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(Ljava/lang/String;Lorg/springframework/cloud/client/loadbalancer/Request;)Lorg/springframework/cloud/client/ServiceInstance;A调用B模块出现上面这个问题,…...

Java02课前问题列表

Java02课前问题列表1.方法相关问题 public class Main {static void changeStr(String x) {x = "xyz";}static void changeArr(String[] strs) {for (int i = 0; i < strs.length; i++) {strs[i] = strs[i]+""+i;}}public static void main(String[] ar…...

达梦数据库安装和使用

1、达梦数据库安装地址 https://eco.dameng.com/document/dm/zh-cn/start/install-dm-windows-prepare.html 2、 点击下载3、4、 现在版本只需要点击exe文件56 点击【下一步】如图所示7、 接受授权协议8 如果没有key文件可跳过 如果有点击浏览找到key文件系统自动校验9建议典型…...

CSP 赛前周记

初赛前 - 第一周(末) 这学期的第一周,据说是本学期第二长的假期,故开始摸摸。 Day1 - 周五 晚上回来开了把信奥大联赛,发现比你谷月赛还烂,IOI 赛制,风格跟 CSP 三不沾,每周有时间打打玩玩吧(结果被打爆了,只有 230pts)。总结Day2 - 周六 由于作业多得一批,白天在疯…...

Day16对数组的基本认识

数组的定义package array;public class ArrayDemo1 {//变量类型 变量名称 = 变量的值//数组类型 同上public static void main(String[] args) {int [] nums;//声明一个数组nums = new int [10];//创建一个数组int [] nums1 =new int [10];//两种写法都可,初学建议拆分避免…...

Ubuntu 界面变为 Mac

sudo apt install gnome-tweaks...

今日随笔

今天完成了社会实践调查作业...

Day16

数组的定义package array;public class ArrayDemo1 {//变量类型 变量名称 = 变量的值//数组类型 同上public static void main(String[] args) {int [] nums;//声明一个数组nums = new int [10];//创建一个数组int [] nums1 =new int [10];//两种写法都可,初学建议拆分避免…...

PVE9环境下飞牛OS安装vGPU驱动

1.安装过程# 切换root权限 sudo su -# 屏蔽nouveau echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau.conf# 更新initramfs update-initramfs -u# 安装组件 apt update && apt install build-essential dkms linux-headers-generic lib…...

02020304 .NET Core核心基础组件04-配置系统、Json文件配置、选项方式读取、扁平化环境变量其它配置源

02020304 .NET Core核心基础组件04-配置系统、Json文件配置、选项方式读取、扁平化&环境变量&其它配置源 1. 配置系统入门(视频2-32)传统Web.config配置的缺点,之前DI讲过。 为了兼容,仍然可以使用web.config和ConfigurationManage类,但不推荐。 .NET中的配置系统…...

md格式

markdown # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题*斜体* **粗体** ***粗斜体*** ~~删除线~~ `print("hello world)` ==高亮== 一级标题 二级标题 三级标题 四级标题 斜体 粗体 粗斜体 删除线 print("hello world) 高亮>一层嵌套引用 >>二层嵌套…...

CSP-S模拟20

前言: 一场通过乱搞获得如下成绩的比赛。\(T1:\) 思路: 一场情况超级复杂(bushi)的大模拟(应该可以这么叫吧?)直接先这样这样,在那样那样,最后在叽里呱啦就好了。 嘿嘿,开个玩笑嘛。首先,我们知道一定至少从\(S\)跳到\(S\)到\(T\)的那条链上,这样我们可以就\(S\)跳…...

第7篇、Kafka Streams 与 Connect:企业级实时数据处理架构实践指南

Kafka Streams 与 Kafka Connect:企业级实时数据处理架构实践指南 技术背景与适用场景 在现代数据架构中,实时数据处理已成为企业数字化转型的核心能力。Apache Kafka作为分布式流处理平台,提供了两个关键组件:Kafka Streams:轻量级流处理库,支持有状态实时计算 Kafka Co…...

Day16编写一个计算机程序

package method; import java.util.Scanner; public class Demo6 {/**作业:*1 写四个方法,加减乘除*2 利用循环+switch进行用户交互*3 传递需要操作的两个数*4 输出结果*/public static void main(String[] args) {Scanner scanner = new Scanner(System.in);boolean sco…...

迷宫最短路径

2025.9.11 曹立 题目内容 给定一个迷官的地图,地图是一个二维矩阵,其中0表示通道,1表示墙壁,S表示起点,E表示终点。你需要从起点S出发,通过最路径到达终点E,返回最短路径的步数,如果无法到达终点,则返回-1,迷宫中会有虫洞,用数字2表示,成对出现,你走入虫洞可以穿越…...

千靶日记-0003

day-3 今天事情不多,继续打靶,这个靶机关键点不多 Hommie靶机复盘 https://t.bilibili.com/1111299672388927491?share_source=pc_native...

COMSOL 6.3 下载+安装教程+激活教程:一站式下载安装激活操作说明

COMSOL 6.3 作为主流多物理场仿真软件,是工程设计与科研的重要工具。不少用户在下载安装时会遇权限不足、许可证无效等问题。本教程围绕安全下载渠道、 step-by-step 安装步骤、常见问题解决展开,还附入门实操,助你高效完成安装,快速上手软件。目录一、先搞懂:COMSOL 6.3 …...

20231427-田泽航-Linux命令实践

1...

202207_BUGKU_二维码GIF

GIF分离,QRCODE,ZXING库Tags:GIF分离,QRCODE,ZXING库 0x00. 题目0x01. WP 01 分离GIF工具路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件/Tools 工具名称:风二西_GIF图片分离工具.zip 02 使用脚本批量扫描 exp.py #将指定文件夹下的文件…...

20250910NOIP模拟赛

20250910NOIP模拟赛 A 题意: 有 \(n\) 个小球分为红、蓝两种颜色排成一排,现在你可以进行若干次操作,每次操作选择任意 \(R+B\) 个小球,使其有 \(R\) 个红球,\(B\) 个蓝球,把这些小球全部染为白色,且在该选择序列中,最左侧的球到最右侧的球之间不得存在已经被染为白色的…...

分治 NTT 一则

le0n 太强大!1...

U604938 你不准卡 O(n sqrt n log L) 其中 L log L = sqrt n

U604938 你不准卡 O(n sqrt n log L) 其中 L log L = sqrt n 如题目所言,这道题的出现就是为此,所以不要说什么 wyy。 首先是空间上卡掉了 \(n\sqrt n\) 空间的做法,然后因为值域限制卡掉了回滚莫队(也许只是我菜才不会写?)。总之再有什么我也没法了,就这样。 如果你要卡…...

20250906

20250906T1 推倒骨牌 多维护几个东西就能直接倍增了。不要开 long long。代码 #include <iostream> #include <algorithm> #include <string.h> #define lowbit(x) ((x) & (-(x))) using namespace std; int n, q; struct BIT {pair<int, int> bi…...

【2025最新推荐】AI大模型API中转站 | 国内直连ChatGPT/Claude/Gemini全系API接口服务

作为一名开发者,你是否曾为了使用ChatGPT、Claude等AI模型而苦恼?网络问题、支付困难、成本昂贵...这些痛点让很多国内开发者望而却步。今天给大家推荐简易API中转站,解决这些问题。 1.什么是API中转站? API中转站是专为国内开发者打造的AI模型API中转服务平台。简单来说,…...

在用灵魂去感受另一个灵魂的震颤

【用灵魂去感受另一个灵魂的震颤】...

html怎么写

html 1. 基本结构 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title> <bod…...

谁拿了谁的伞?

我:要去上课了,哎,不想去上课,我想在工位带着。算了,还是去吧。我的伞放在工位门口左边,光线很黑,拿错了雨伞,拿成了学长的雨伞去上课。一到教室,刚坐下,老师就开始说,不让坐最后一排啊,你们几个快做前面去,然后我就拿着我的伞坐到了前面。这课是真无聊,我准备上…...

NSSCTF-misc

签到 用emoji-aes解码,key为GAME ☀☺⏩☺⌨☂☃✅ 得到flag{10ve_4nd_Peace} GIF有点大GETwbStego4open 隐写 首先,wbStego4open会把插入数据中的每一个ASCII码转换为二进制形式 然后,把每一个二进制数字再替换为十六进制的20或09,20代表0,09代表1 最后,将这些被转换后的…...

百粉粉福

应机房某人要求,说要搞一个百粉粉福,决定先做一个 \(Q&A\) ,其它的请各位想想可以做什么别的粉福。 \(Q&A\) 可以直接回复这篇帖子或直接私信我,到时候会发到你谷主页,文章跟博客园,支持一下呗QwQ \(Q&A\)Q:瑞平我 @Misty_PostA:感觉是非常可爱的学弟,平时…...

lc1024-视频拼接

难度:中等(中期)题目描述给定一些区间和一个数字 time,找到能覆盖 [0, time] 的最少区间数示例 输入:clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], time = 10 输出:3 解释:选 [0,2], [8,10], [1,9]输入:clips = [[0,1],[1,2]], time = 5 输出:-1 解释:找不到返回…...

多元统计分析1

多元统计分析1 大三开始学习多元统计分析,首先使一些预备知识,基本是就是一些高代,数分,概率论的有些难度的知识。我个人觉得这些知识还是有难度的,尤其是距离高代已经过去了一年时间了。 概率论这里就是一些随机变量的均值,方差的性质。由于涉及到了多变量的协方差矩阵一…...

OI界的梗

%%% 在C++“%”是取模的意思,简称模,是膜拜大佬的意思(%越多,语气越强) 蒟蒻 他本是一种可以吃的植物(就是魔芋),可是因为他谐音“巨弱”,所以,他被用作自嘲,但没人会说别人是蒟蒻的,这是一种基础礼仪 神犇(读ben(第一声))、巨佬 神犇是大牛的升级版 巨佬是大佬…...

202404_QQ_ZIP嵌套

ZIP,嵌套Tags:ZIP,嵌套 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202404_QQ_ZIP嵌套.zip 0x01. WP打开txt文件发现文件头为504b0304 导入到010Editor另存为tmp.zip 打开tmp.zip发现里面是另一个txt 打开…...

无重复字符的最长子串-leetcode

题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长 的长度。 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子…...

两个常见的 计数问题 trick

两个非常有用的计数 trick,虽然感觉比较典。 计数转 01 有一件事情:\(v=\sum_{i=1}^V [v \geq i]\),\(V\) 为值域。看着好像没有什么突破性的转变,但是当我们对很多东西进行统计的时候,如果对于 有多少个大于等于 某个值 \(v\) 是好做的话,那么我们就可以做这个转化:\(\…...

搜维尔科技:Xsens人形机器人拟人动作AI训练,提升机器人工作精度与效率

随着人工智能与机器人技术的深度融合,人形机器人正从实验室走向工业制造、医疗护理、公共服务等真实场景。然而,要让机器人真正"像人类一样工作",其动作的流畅性、精准度与环境适应性仍是技术突破的关键。Xsens动作捕捉系统通过创新的拟人化动作AI训练方案,为机器…...

文件轮转机制

文件轮转机制 基于文件的持久化队列(File-based Persistent Queue),利用 双文件切换(Double Buffering / File Rotation) 来保证批处理、高效写入、并发安全。 方法主要实现的机制双文件切换(Double Buffering / File Rotation) • 通过 inputFile(正在写的新数据) 和…...

202110_绿盟杯_隐藏的数据

ZIP,伪加密,密码爆破,DOCX文件Tags:ZIP,伪加密,密码爆破,DOCX文件 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202110_绿盟杯_隐藏的数据.zip 0x01. WP 01 打开压缩包,发现有word文件和zip文件,得到flag1…...

【初赛】图 - Slayer

欧拉图 在图论中,欧拉路径是经过图中每条边恰好一次的路径,欧拉回路是经过图中每条边恰好一次的回路。 如果一个图中存在欧拉回路,则这个图被称为欧拉图;如果一个图中不存在欧拉回路但是存在欧拉路径,则这个图被称为半欧拉图。 对于连通图 G,以下三个性质是互相等价的: …...

线上课

反射反射就是在程序运行时 获取到类的信息(成员变量 成员方法 构造方法) 并操作对象的属性和方法 获取class对象就可以拿到类的信息 获取class对象Class.forName(全类名) 类名.class 对象.getClass字节码是唯一的 无论哪种方式获取 都是同一个class对象当通过反射拿到的构造…...

弹窗、抽屉、当前页和新开页,到底怎么选? - 智慧园区

弹窗、抽屉、当前页、新开页,看似只是交互容器的选择,实则关乎信息密度、操作路径与用户心智的精准匹配。本文从B端产品的真实场景出发,拆解四种容器的使用逻辑与适配原则,帮助产品经理构建更清晰的设计判断框架。在B端产品的设计实践中,你是否曾面临过以下的灵魂拷问?你…...

POJ 2566 Bound Found

题面描述: 美国航空航天局(该机构似乎正经历叛逆期:"我就要用英尺,才不用米呢!")接收并数字化了极可能来自地外文明的信号。每个信号包含两部分:一个由n个整数值组成的序列和一个非负整数t。虽然细节不便透露,但研究人员发现信号编码了两个整数值。这两个值可…...

搜维尔科技:Haption触觉力反馈系统,沉浸式远程呈现、数字孪生、混合现实和移动远程机器人

为您的项目提供技术和经验 自2001年以来,HAPTION力反馈设备已被用于广泛的研究应用。 您是否希望在您的项目中使用HAPTION力反馈设备 您是否正在寻找国内厂商来申请新项目 增强人机交互-远程操作,实现人机交互 图片 图片 通过最先进的社交、视觉、触觉、音频和嗅觉技术的出色…...

飞书免费企业邮箱推荐

1、品牌背书:成长技术最快的企业,稳定性拉满 对于中小企业而言,一款稳定、安全且免费的企业邮箱,不仅能降低运营成本,更能提升团队沟通效率。飞书作为字节跳动旗下的协同办公平台,其推出的免费企业邮箱服务,凭借 “零成本、强协同、高安全” 的特点,成为越来越多企业的…...

CF1140F Extending Set of Points

还是比较好想的一个题。 首先你这个 \((x, y)\) 看着就很像连边关系,这是很重要的一步,一般这种二元关系都可以想着上图。 然后你发现,所谓的扩展不过就是在能加上边的地方都加上边,就是一个连通块都连满了。 这个时候注意到原图是一个二分图,能加的边不过就是所有左部点向…...

Lark免费企业邮箱推荐

Lark是飞书的国际版 Lark(飞书)的免费企业邮箱是中小型团队高效协作的理想选择,尤其适合追求低成本、高集成度的企业。以下是基于最新功能和用户反馈的深度推荐:一、核心功能与优势免费版基础能力全面无广告纯净体验:不同于部分免费邮箱,Lark 免费版全程无广告干扰,专注…...

CMP 40HX在PVE9.0配置vGPU

在PVE9.0下CMP 40HX使用NVIDIA vGPU19.0显卡虚拟化拆分技术 本文参考文章:https://yangwenqing.com/archives/2729/最近看了很多vGPU的文章,心里面痒痒,就想搞一块矿卡来玩玩。在选择方面考虑了P106-100、CMP 30HX 、CMP 40HX,最终选则了CMP 40HX。 如果你需要玩vGPU,百元…...

耶日奈曼:置信区间与假设检验的奠基者

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 在20世纪统计学的发展历程中,耶日奈曼(Jerzy Neyman, 1894–1981)无疑是一位具有里程碑意义的人物。他不仅在理论层面上为数理统计学奠定了严格的推断体系…...

尚硅谷后台管理系统

尚硅谷后台管理系统商品添加业务逻辑添加品牌,是新的数据 请求url中,可以将添加品牌和编辑品牌放在同一个函数中,根据data.id判断是否是新数据<el-uploadclass="avatar-uploader"action="/api/admin/product/fileUpload":show-file-list="false…...