一种可复用的AI提效方案:AI点灯
在当今飞速发展的时代,AI技术正不断渗透到我们生活的各个层面,深刻改变着传统的工作方式和生活模式。面对这一重大变革,我们不能被动观望或抗拒,而应积极拥抱AI,将其作为成长的助力。只有与AI协同发展,才能在这场技术革新的浪潮中立于不败之地,顺势而为才能事半功倍。
大模型的典型特征
强项:
1. 自然语言理解与生成
2. 广泛的知识覆盖
3. 高效的文本处理
4. 学习与适应
5. 计算能力强
弱项:
1. 理解与推理局限
2. 生成内容的准确性
简单来说,可以把现在的AI看作是一个可以不断学习,能够按照指定思路理解和解决问题的强文本处理工具。那么合理利用强弱项,就可以给我们的场景带来提效了。
强项 | 弱项 | 策略 |
自然语言理解与生成 | 能够将专业领域语言跟自然语言相互转换 | |
广泛的知识覆盖 | 提供相应领域知识库,可以调用知识库能力 | |
高效的文本处理 | 把对应的领域问题转换为文本 | |
学习与适应 | 提供一些案例进行不断学习,提高准确度 | |
计算能力强 | 能够处理大量重复劳动 | |
理解与推理局限 | 指定理解问题的思路,以及解决问题的流程或步骤 | |
生成内容的准确性 | 对生成的内容进行校验 |
总结一下,就是
把专业领域的重复劳动的问题和解决方案都抽象为文本,提供相应的领域知识库,可以用自然语言来描述专业领域问题,指定AI理解问题的思路以及解决问题流程,提供一些案例提高准确度,最后对生成内容校验。
按这个思路,可以对所有领域的适用场景进行AI提效,我愿把这个方案称之为AI点灯。
适配场景
在任何领域中,能够把重复劳动包含的任务和解决方案都抽象为文本的场景。下面来看一个前端场景提效的实践案例。
▐ B端运营配置平台场景
交易产品中心,把交易链路中的一些基础和增值能力整合为产品,在交易产品中心中进行对应的实例配置和发布管理。比如已接入的一品多商、价保、一店多供、顺手买一件等产品。
这是一个交易产品中心,价保产品接入的需求设计稿的三分之一,有大量的重复页面需要开发。
开发+联调+测试需要前端大量人力,如果每个产品接入都需要这么多资源,那后续20+个交易产品以及其他运营产品接入,仅产品接入流程就需要占用一个前端全年人力。
场景页面分布
从已接入的几个产品来说,场景主要是表格页面和表单页面。
1. 数据查看、操作(表格页面,红框部分)
2. 数据增删改查(表单页面,红框部分)
3. 其他页面(10%以下)
核心问题
交易产品中心由于业务特征,具备以下特点:
1. 平台接入业务多、业务逻辑复杂,定制度高
2. 表单、表格页面占比高,场景单一
3. 对页面UI要求较低
由于业务定制高,在接入业务多的场景下,业务的增删改查都需要耗费平台人力,对人力成本要求很高,所以急需一个类似的B端运营配置平台提效方案。
提效方案探索
▐ 前端提效历史回顾
传统研发流程
需求研发流程
前端开发分层架构
一个完整前端页面的开发包含环境搭建和需求迭代流程,需求迭代流程包含页面UI层、页面逻辑层、页面数据层和项目管理:
1. UI层包含元素结构树、元素样式树
2. 逻辑层由js描述,包含初始化执行逻辑、事件触发逻辑、组件联动逻辑
3. 数据层需要获取数据,然后将数据绑定到元素上,还有页面的一些状态管理
4. 项目发布包含版本管理
优点:自由度高,可以实现任何前端需求;
缺点:需求周期、链路长。
组件复用
对已实现的模块,后续页面复用公共模块。主要代表antd等组件库:
需求研发流程
前端开发分层架构
组件复用方案可以在UI层、逻辑层进行提效,其中在UI层可以复用组件UI,逻辑层可以复用组件逻辑:
优点:定制自由度高,以组件或页面维度减少工作量,非常通用;
缺点:仅在UI层和逻辑层进行研发提效。
低代码研发流程
基于组件库,在一些前端较简单场景,由产品或者前端根据原型图使用低代码平台转化为前端页面,其中在平台页面搭建过程中添加一些页面逻辑。使用低码平台研发。阿里集团内部有宜搭、乐高等。
基于UIPaaS、iceluna(低代码平台孵化器),集团内部衍生出宜搭、乐高两个不同方向的低代码搭建平台。
宜搭为代表 | 乐高为代表 | |
面向人群 | 非技术背景(PD、运营等) | 具有技术背景,了解一些前端基础 |
适用场景 | 基于表单的数据信息化产品,比如投票、问卷、导航页等简单场景 | 定制企业级中后台系统,乐高负责前端页面的设计和搭建 |
页面UI | 拖拽搭建,一些常用基础组件 | 拖拽搭建,丰富的中后台场景组件 |
页面逻辑 | 组件配置,可添加自定义方法 | 组件配置或者组件内置,可添加自定义方法 |
优点 | 针对表单、问卷、报表、导航页等简单页面,支持度比较好。对产品、设计同学友好 | 针对中后台场景等较复杂页面支持度较好,功能完善,扩展性强 |
缺点 | 复杂场景支持度较低 | 上手成本高,较复杂场景需要对前端有足够的理解 |
需求研发流程
前端开发分层架构
低代码方案可以在环境搭建、UI层、逻辑层、数据层、项目发布进行整体提效,由于基于组件库,UI层和逻辑层提效参考组件复用,其中数据层提供数据绑定,平台提供项目发布。
优点:整体研发成本降低,解决方案相对完善,对简单场景支持度较好;
缺点:强依赖低代码平台,定制自由度受平台能力的限制,后续页面维护持续依赖平台。
D2C(Design To Code)研发流程
基于组件库,在一些新建频率较高的场景(比如会场、活动搭建等),利用图像识别或者多模态大模型把图片中的内容都识别出来,然后根据图片内容生成具体页面代码。代表集团内ai-rapidcode、达拉然、集团外蓝湖等。
需求研发流程
前端开发分层架构
D2C方案由于其生成型特性区分为首次需求和需求迭代流程,可以直接生成项目环境;首次需求时UI层部分可以直接完成,逻辑层会复用一些组件逻辑,还需要单独添加其他逻辑;需求后续进行正常迭代,流程则参考组件复用方案:
优点:可直接减少页面UI开发人力;非常适用于生成一次性项目
缺点:
1. 依赖图像识别准确度or设计稿图层划分清晰度;
2. 图片内容转化后,还需单独添加页面逻辑。
3. 不适用于不断迭代的项目,二次开发成本较高
目前基建不完善,要提高D2C的图片转化效果,需要在图像识别、设计稿图层划分、转化内容布局适配等流程耗费大量人力。
困境:复杂页面准确度不高,简单页面提效能力有限。
P2C(PRD To Code)理想流程
P2C,完整名称是Product Requirements Document To Code,即从产品需求文档直接到代码,目前一些AI前沿产品已经可以直接用需求生成页面或者应用,简化整体流程,可大幅提效,代表cursor、bolt:
需求研发流程
前端开发分层架构
P2C方案由于其生成型特性区分为首次需求和需求迭代流程。可以直接生成项目环境,并且在首次需求直接产出完整的UI层、逻辑层、数据层部分,仅需单独处理项目发布;需求迭代流程则参考组件复用方案,进行正常迭代。
优点:减少大量中间环节,可大幅提效;
缺点:对于一些特殊页面逻辑还是需要添加。依赖AI能力,页面逻辑复杂之后,后续维护和迭代的难度也会指数级别上升。
▐ 方案对比
在交易产品中心这个场景中,针对已有提效方案进行分析:
1. 组件复用。在UI层和逻辑层可节省人力,但是还需要大量人力去支持每个产品接入,开发对应产品逻辑
2. 低代码平台。可进行整体提效,但是后续开发、维护都依赖平台,并且后续复杂能力的支持也依赖平台开放程度
3. D2C。目前图像识别效果一般,效率提升很有限,并且后续页面迭代开发都需要人力维护
4. P2C。目前还过于理想,实现效果一般,并且后续页面迭代开发都需要人力维护
研发模式 | 描述 | 优点 | 缺点 | 提效能力 | 可用性 | 目前适用场景 |
组件复用 | 基于组件库,对已实现的模块,后续页面复用公共模块 | 定制自由度高,以组件或页面维度减少工作量,非常通用 | 仅在UI层和逻辑层进行研发提效 | 低 | 高 | 所有需要复用功能的前端场景 |
低代码平台 | 使用集团内其他低码平台研发。宜搭、乐高等 | 研发成本降低,解决方案相对完善,对简单场景支持度较好 | 依赖其他平台,定制自由度受低码平台能力的限制,后续页面维护持续依赖平台 | 中上 | 中 | 宜搭为代表:问卷、投票、导航页等简单页面; 乐高为代表:中后台场景 |
D2C | 使用D2C、ChatGPT等图像工具,用设计稿图片或者设计稿图层结构生成代码 | 可直接减少页面UI开发人力;适用于生成一次性项目 | 依赖图片识别准确度;图片转化时,需单独添加页面逻辑;后续迭代开发成本较高 | 中 | 低 | 一次性生成场景,比如会场搭建,运营活动页等,有详细的需求prd和设计稿 |
P2C | 利用AI能力,直接从需求生成页面 | 减少大量中间环节,可大幅提效 | 目前还过于理想,只能实现简单功能,页面复杂度提升后,后续维护和迭代成本较高 | 高 | 低 | 一次性生成场景,仅有需求prd |
目前没有很适合交易产品中心提效的方案,需要针对这个场景定制提效方案
回顾一下场景特征,交易产品中心(B端运营配置平台)有以下特点:
1. 平台接入业务多、业务逻辑复杂,定制度高
2. 表单、表格页面占比高,场景单一
3. 对页面UI要求较低
希望这样一个方案:
1. 能够复用已接入业务重复部分的UI层、逻辑层、数据层,重点是支持复用表单、表格
2. 页面UI可以妥协,但是能力需要支持应有功能
3. 尽量能够使用AI提效
基于这些前提,再沿用P2C的思路去简化流程,就有了下面方案。
▐ 方案演进——P2C协议化方案
P2C(PRD To Code)当前阶段还是过于理想,直接从需求到页面代码中间跨越了太多流程,如果在中间加一个中间层,去承载页面样式和页面功能,那就容易很多了。
希望能够复用已有能力,并且能够低成本生成页面,基于组件复用方案,采用页面协议承载了UI和逻辑,可作为需求和页面之间的中间层。
在一些流程较固定的场景(如B端运营配置平台),由产品提供PRD,使用AI把PRD转化为页面协议,最后由前端SDK转化为页面,其中降低了从产品、设计、开发、测试中重复部分的工作,协议描述了一部分页面和交互逻辑,前端SDK也内置了一部分页面UI和页面逻辑。
需求研发流程
核心难点如下:
1. 依赖前端协议SDK的完善度,需要协议支持足够多的能力和场景
2. 需要服务端对于页面协议结构有一些了解
3. AI生成页面协议的效果需要不断调优
前端开发分层架构
P2C协议化方案与传统前端开发分层有区别,新增了协议层、协议版本管理、协议SDK,协议层由UI层、逻辑层、数据层组成。可通过协议层控制页面能力和功能,首次需求仅需单独开发协议SDK和项目发布;需求迭代通过修改协议来实现,则整个需求迭代流程中前端0投入。
优点:大幅简化前端开发流程,需求迭代过程0投入。可扩展编排能力,后续可采用AI生成及优化协议;
缺点:前期投入较高,依赖前端协议SDK的完善度,调试、定位问题成本变高。
业务接入时序图
在前端协议SDK完善后,业务接入和业务需求迭代过程都无需前端投入。
P2C协议化方案
▐ 协议设计
P2C协议化方案需要开发一套前端SDK用于把协议转换为页面,后续的页面开发就转化为开发一个页面协议,那这个过程最重要的就是设计页面协议。
一个完整前端页面包含页面UI、页面逻辑、页面数据:
1. UI层是由元素结构树、元素样式树、页面数据共同组成渲染
2. 逻辑层由js描述,包含初始化执行逻辑、事件触发逻辑、组件联动逻辑
3. 数据层需要获取数据,然后将数据绑定到元素上
协议页面,由页面协议和协议SDK组成,共同组成支持这些能力:
1. 页面协议支持描述元素结构树和元素样式树、事件触发逻辑、组件联动逻辑、页面数据
2. 协议SDK负责初始化逻辑、获取数据、数据绑定、状态管理
相比普通页面,添加了渲染协议能力。
协议SDK
协议SDK用于初始化逻辑、获取数据、数据绑定、状态管理、渲染协议,从0开发协议SDK成本很高,可以复用formily这类开源协议化能力。
渲染协议:基于formily(一套前端表单解决方案),主要复用其协议化渲染能力,可以把JSON Schema协议渲染为表单,拓展一下把表单组件替换为其他组件,就可以实现页面UI组件渲染。
数据绑定:formily以组件为最小原子,以表单数据为整体状态。可以对整个表单赋值,按树结构的位置信息进行结构和数据一一绑定,是一种弱约定的数据绑定形式。这里沿用这种方式进行数据绑定,需要限制组件数据为相同的树结构下发。
协议SDK能力 | formily SDK |
初始化逻辑 | 不支持 |
获取数据 | 不支持 |
数据绑定 | 支持 |
状态管理 | 不支持 |
渲染协议 | 支持 |
formily已经支持了协议化页面核心的页面渲染能力,可以在formily基础上去拓展协议SDK不支持的能力实现完整的协议SDK功能。
1. 添加页面初始化逻辑
2. 从接口获取数据(约束接口格式)
3. 添加状态管理
采用基于formily SDK+初始化逻辑+数据获取+状态管理可以组合实现协议SDK能力。
页面协议
页面协议用于描述页面元素,采用formily最小颗粒度的组件维度来描述;下发动态数据,包括页面数据,组件初始配置(扩展),分别用于初始化页面和组件;根据平台接入方后台服务不同,需提供数据格式处理(扩展),在不同场景采用不同数据格式处理。
页面协议能力 | formily Schema协议 |
元素结构树--组件结构树 | 支持 |
元素样式树--组件样式树 | 支持 |
事件触发逻辑 | 不支持 |
组件联动逻辑 | 支持 |
页面数据--组件数据 | 不支持 |
组件初始配置(扩展) | 不支持 |
数据格式处理(扩展) | 不支持 |
在formily中协议仅支持描述元素结构、元素样式和组件联动逻辑,要描述整个页面还需要扩展一些能力:
1. 事件触发逻辑
-
复杂事件和浏览器事件,需扩展协议描述相关事件的触发和执行逻辑(约束协议格式)
简单事件,由于formily协议支持组件联动逻辑,则可以把触发和执行的行为都转换为数据驱动,通过行为依赖数据,监听其他数据变化后更改数据实现行为变更,比如某个组件的状态切换,展示\隐藏等
2. 组件数据
3. 组件初始配置
4. 数据格式处理(用于服务端处理不同场景)
其中B端运营配置平台大多都是简单事件,所以可以采用数据驱动方式简化。
采用基于formily协议+组件数据+组件初始配置+数据格式处理+数据驱动事件来组合实现页面协议能力。
完整协议页面
有了页面协议+协议SDK,就可以实现协议页面的能力了。但还是需要组件级能力复用,所以需要提供协议组件库,用于协议中描述元素,并且以组件维度封装功能。
协议组件库根据组件功能类型,可分为展示类、操作类、输入类。
基于formily,采用页面协议+协议SDK+协议组件库组合,比从0搭建协议页面减少了很多工作量,也实现了完整的协议页面。
页面联动
能够采用协议描述单个页面后,就需要添加多个页面之间的联动交互,B端运营配置平台一般有三种页面之间交互方式:
1. 跳转新页面,点击导航栏或者链接跳转
2. 在屏幕居中modal弹窗打开一个页面
3. 在屏幕右侧方drawer弹窗打开一个页面
1. 导航 or 链接跳转:
-
需要提供导航路由协议机制,下发路由协议,路由跳转联动导航栏切换
提供链接跳转功能按钮
2. modal or drawer弹窗:
-
支持触发打开modal or drawer弹窗
弹窗中间加载一个新的页面
所以需要支持额外的路由协议,以及行为触发页面交互,在B端运营配置平台场景基本都是由按钮来触发页面交互的,所以可以在按钮组件上集成链接跳转、弹窗打开新页面等能力。
▐ 整体架构
协议化方案是由协议层控制整个产品路由展示和页面展示,由颗粒度从大到小分为几个部分:
1. 路由协议,由协议控制导航栏和页面之间跳转
2. 页面协议,用于渲染页面,展示对应数据,描述页面逻辑
3. 协议组件库,最小原子能力,用于协议调用
还有额外的工具层用于生成页面协议,目前有两种方式:
1. 后端工具生成协议
2. AI工具生成协议
▐ 当前阶段研发流程
在需求文档到页面协议转换过程中,采用大模型转换页面协议,依附AI生长,具备了AI成长性。
其中前端SDK需要在这个模式运行过程中,不断完善支持新功能,类似搭积木一样,积木不断堆叠后,已有功能都能由协议直接调用,具备了功能成长性。
▐ 运行图
AI提效
▐ 表单页面
完整流程
1.0 AI生成表单协议
最初的版本是完全采用AI生成表单协议,通过prd生成一套formily JSON Schema协议来进行渲染。
优点:把前端相关部分都由AI来生成,可以减少前端工作量;
缺点:平台主要用户为服务端同学,对协议内容和结构不太理解,他们拿到生成的schema协议后,进行一些组件属性或者组件结构修改很复杂,并且没有编码IDE提示,浪费了程序员的代码优势。
适合场景:简单表单场景,非代码用户(比如产品、设计);复杂表单场景,前端用户。
2.0 后端工具生成表单协议,AI优化组件功能
协议生成流程:
1. 采用后端java代码描述表单,通过java的类进行属性限制和备注,然后用java工具本地运行生成一份基础formily JSON Schema协议
2. 采用AI优化组件前端相关的能力(比如调整样式,合并信息框、添加组件联动等)
优点:发挥服务端同学的代码优势,用最擅长的代码描述表单协议结构,不擅长的前端部分采用AI处理,前端工作量降低
缺点:整体链路变长,需后端接入
适合场景:复杂表单场景、服务端用户
使用流程
1. 添加需要优化的schema和优化需求
2. 把生成的协议拿到预览地址,贴在schema协议,进行预览
方案对比:
1.0 AI生成协议 | 2.0 后端JAVA生成协议,AI优化 | |
使用场景 | 简单表单场景、复杂表单场景 | 复杂表单场景 |
服务用户 | 简单表单场景,非代码用户(比如产品、设计); 复杂表单场景,前端用户 | 复杂表单场景,服务端用户 |
优点 | 减少前端工作量 | 减少前端工作量,发挥服务端同学代码优势 |
缺点 | 非前端用户无法直接修改生成的协议,浪费了代码优势 | 整体链路加长,需后端介入 |
▐ 表格页面
表格页面可以拆分成不同的组件分别描述,整个页面都可以采用AI生成协议。
使用流程
1. 需要输入相应表格配置的描述
1. 表名(必填
2. 左上角按钮
3. 右上角按钮
4. 是否开启关键词搜索
5. 高级搜索配置
6. 提示(灰色)
7. 强提示(红色)
8. 是否开启分页
9. 表头配置(必填
10. 操作列配置
11. 是否开启表头隐藏
12. 是否展示总计内容
2. 拿到生成的表格协议后到页面预览
案例--高级搜索配置、表头配置、表头隐藏、总计
输入
1. 表名(必填)需求信息管理
2. 左上角按钮 无
3. 右上角按钮 无
4. 是否开启关键词搜索 否
5. 高级搜索配置1. date,日期选择框2. type需求类型,下拉框,选项有全部、数据不全需求、业务、平台、xx需求3. id需求ID,输入框
6. 提示(灰色)
7. 强提示(红色)
8. 是否开启分页 是
9. 表头配置(必填) 1. 需求名称,点击后跳转"https://xxx",携带列表参数url2. 产品树3. 前端人日4. 后端人日5. 测试人日6. 总人日7. 完成时间8. 状态
10. 操作列配置1. 编辑,点击后打开模态框,"schemaKey"为"modifySchema",保存地址"/demand/save"
11. 是否开启表头隐藏 是
12. 是否展示总计内容 是,展示总计、总人日、PD人日、后端人日、测试人日、其他人日
AI输出:
{"pageType": "table","pageView": {"name": "需求信息管理","initParams": {"modifySchema": ""},"detailOperate": [],"rightButton": [],"tips": null,"strongTips": null,"filterSearch": [{"key": "date","label": "日期","component": "DatePickerWithOptions","componentProp": {"options": [{"label": "周","value": "周"},{"label": "月","value": "月"},{"label": "季","value": "季"},{"label": "年","value": "年"}]}},{"key": "type","label": "需求类型","component": "Select","componentProp": {"options": [{"label": "全部","value": "全部"},{"label": "数据不全需求","value": "数据不全需求"},{"label": "业务","value": "业务"},{"label": "平台","value": "平台"},{"label": "xx需求","value": "xx需求"}]}},{"key": "id","label": "需求ID","component": "Input","componentProp": null}],"hideSearch": true,"enablePagination": true,"total": null,"tableSource": {"header": [{"key": "name","title": "需求名称","clickEvent": {"type": "jump","path": "https://xxx","params": ["url"]}},{"key": "productTree","title": "产品树"},{"key": "frontendPerson","title": "前端人日","sorter": true},{"key": "backendPerson","title": "后端人日","sorter": true},{"key": "testPerson","title": "测试人日","sorter": true},{"key": "totalPerson","title": "总人日","sorter": true},{"key": "finishTime","title": "完成时间","sorter": true},{"key": "status","title": "状态"},{"key": "operate","title": "操作","map": {"edit": {"type": "schemaButton","text": "编辑","buttonConfig": {"title": "编辑","type": "link","path": "/demand/save","behavior": "modal","schemaKey": "modifySchema"}}}}],"scenes": [{"name": "示例需求1","productTree": "产品树1","frontendPerson": 5,"backendPerson": 10,"testPerson": 3,"totalPerson": 18,"finishTime": "2023-10-01","status": "已完成","operate": null,"url": "example_url_1"},{"name": "示例需求2","productTree": "产品树2","frontendPerson": 8,"backendPerson": 15,"testPerson": 5,"totalPerson": 28,"finishTime": "2023-10-15","status": "进行中","operate": null,"url": "example_url_2"}],"showHiddenCheckBox": true,"summary": ["总计","总人日: xx","PD人日: xx","后端人日: xx","测试人日: xx","其他人日: xx"]}}
}
助力运营平台
▐ 背景
顺手买需要在双十一前支持顺买商品运营,其中包含商品运营平台和千牛后台商家端改造。需求比较着急需要赶双十一节奏,在排期爆满的阶段,突然插入一个紧急需求,这种酸爽相信大家都懂~
以下是运营平台的工作流程:
为了快速上线,以及后续让顺买同学自己维护这个平台页面,就采用了在交易产品中心协议化的方式接入该产品。
前端主要需要投入一些新功能的开发,包含Select请求组件、文件导入、批量操作、图片上传、新增SKU弹窗、列表头部、二次确认按钮,这些能力。类似的功能后续接入时,就不再需要前端投入了。
▐ 上线效果
商品总览页面:
支持文件批量导入、批量操作表单:
商品审核页面:
后续页面调整,包含按钮、筛选项、展示内容或者表单操作等,都可以由业务服务端同学通过直接改协议实现,无需前端参与。
后续发展
在这套体系建全后,可以大幅减少前端工作量。后续仅需要针对新功能、新组件的进行开发,类似于搭积木一样能力越来越多的时候,需要开发的部分就越来越少;已有能力都能直接由协议去调用,前端理论上可以达到一劳永逸的效果。
目前一些交易产品在持续接入,前端已经无需投入,甚至无需感知。由服务端同学根据协议去构建页面,减少了前端很多工作量。
但是有一个隐患是已有功能越来越多,维护成本越来越高,页面共用组件代表对页面组件的任何修改都可能影响所有复用页面。积木搭的越高,后面搭建工作就会越来越难,所以搭建之初就需要一个稳定的基座。
AI点灯的未来
未来会在更多场景尝试把重复劳动包含的任务和解决方案都抽象为文本,然后用AI去处理文本,以此来对场景提效。有兴趣的朋友也可以尝试一下~
团队介绍
我们是淘天集团-基础交易终端团队,一支专注于手淘APP交易域(购物车、下单、订单、物流等)业务研发和体验优化的技术团队,并且负责集团内部AI应用搭建的AI Studio平台。在丰富的业务场景下,我们通过持续的技术探索、不断的创新突破,给数亿用户提供极致可靠的交易保障、极致流畅的操作交互以及极致顺滑的购物体验。另外基于AI Studio平台资源沉淀,按照电商标准环节进行拆解,同时针对典型场景支撑最佳AI实践,让集团内业务团队利用AI能力低成本实现业务效果。
¤ 拓展阅读 ¤
3DXR技术 | 终端技术 | 音视频技术
服务端技术 | 技术质量 | 数据算法
相关文章:
一种可复用的AI提效方案:AI点灯
在当今飞速发展的时代,AI技术正不断渗透到我们生活的各个层面,深刻改变着传统的工作方式和生活模式。面对这一重大变革,我们不能被动观望或抗拒,而应积极拥抱AI,将其作为成长的助力。只有与AI协同发展,才能…...
Django 模型
Django 模型 Django 模型是 Django 框架的核心组件之一,它用于定义应用程序的数据结构。在 Django 中,模型是 Python 类,通常继承自 django.db.models.Model。每个模型类代表数据库中的一个表,模型类的属性对应表中的字段。 1. 创建模型 创建 Django 模型非常简单。首先…...
【MySQL 探索者日志 】第二弹 —— 数据库基础
MySQL系列学习笔记: MySQL探索者日志__Zwy的博客-CSDN博客 各位于晏,亦菲们,请点赞关注! 我的个人主页: _Zwy-CSDN博客 目录 1、MySQL服务器,数据库,表关系 2、MySQL登录连接服务器 3、MyS…...
【51单片机-零基础chapter1】
安装软件(配套的有,不多赘述) 1.管理员身份运行keil和破解软件kegen 将CID代码复制粘贴到 一定要管理员方式,不然会error 插入板子 我的电脑,管理 1.如果是拯救者,查看端口,如果没有则显示隐藏 2.苹果不知道,好像不可以 3.其他电脑在"其他设备找" (注:本人在校已…...
stm32的掉电检测机制——PVD
有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。 STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。 STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压检…...
电脑steam api dll缺失了怎么办?
电脑故障解析与自救指南:Steam API DLL缺失问题的全面解析 在软件开发与电脑维护的广阔天地里,我们时常会遇到各种各样的系统报错与文件问题,其中“Steam API DLL缺失”便是让不少游戏爱好者和游戏开发者头疼的难题之一。作为一名深耕软件开…...
Kotlin 协程基础知识总结七 —— Flow 与 Jetpack Paging3
专题分为五大块: Paging3 的结构组成Flow 与 Paging3下拉刷新上拉刷新离奇 Bug上游数据缓存 Demo 会还原开发迭代的过程,不会直接一步到位。 1、Paging3 加载数据流程 (P105)Paging3 的简介详情可参考官方文档 Paging 库概览&…...
使用JMeter玩转tidb压测
作者: du拉松 原文来源: https://tidb.net/blog/3f1ada39 一、前言 tidb是mysql协议的,所以在使用过程中使用tidb的相关工具连接即可。因为jmeter是java开发的相关工具,直接使用mysql的jdbc驱动包即可。 二、linux下安装jmet…...
音视频入门基础:MPEG2-PS专题(3)——MPEG2-PS格式简介
一、引言 本文对MPEG2-PS格式进行简介。 进行简介之前,请各位先下载MPEG2-PS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-PS的官方文档。但是ITU提供的文档是免费的,ISO/IEC是付费的,所以我们主要阅读ITU提供的官方文档,比如较新…...
ETCD渗透利用指南
目录 未指定使用put操作报错 未指定操作版本使用get报错 首先etcd分为两个版本v2和v3,不同的API结果无论是访问URL还是使用etcdctl进行通信,都会导致问题,例如使用etcdctl和v3进行通信,如果没有实名ETCDCTL_API3指定API版本会直接…...
Python安装(新手详细版)
前言 第一次接触Python,可能是爬虫或者是信息AI开发的小朋友,都说Python 语言简单,那么多学一些总是有好处的,下面从一个完全不懂的Python 的小白来安装Python 等一系列工作的记录,并且遇到的问题也会写出,…...
SQL 中复杂 CASE WHEN 嵌套逻辑优化
目标:优化复杂的 CASE WHEN 逻辑,提升 SQL 语句的可读性与执行效率,减少多层嵌套带来的复杂性。 1. CASE WHEN 的常见问题 嵌套过深:多个条件判断嵌套,难以阅读和维护。重复逻辑:相似逻辑在多个分支中重复…...
【专题】2024年出口跨境电商促销趋势白皮书报告汇总PDF洞察(附原数据表)
原文链接:https://tecdat.cn/?p38722 在当今全球化加速演进、数字经济蓬勃发展的大背景下,跨境电商行业正以前所未有的态势重塑国际贸易格局,成为各方瞩目的焦点领域。 根据亚马逊发布的《2024年出口跨境电商促销趋势白皮书》,…...
C# 设计模式(结构型模式):代理模式
C# 设计模式(结构型模式):代理模式 在软件开发中,有时我们需要通过某种方式间接地访问一个对象,这时就可以使用代理模式(Proxy Pattern)。代理模式通过引入一个代理对象来控制对目标对象的访问…...
单片机复位电路基本理解教程文章·含上拉电阻理解电容开路理解!!!
目录 常见复位电路种类 复位电路电阻上拉理解 电容储能断路理解 编写不易,仅供学习,请勿搬运,感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-…...
深入浅出:事件监听中的适配器模式
1. 为什么需要适配器模式? 在Java的事件监听器设计中,许多接口有多个抽象方法。例如,MouseListener 接口有 5 个方法,KeyListener 接口有 3 个方法。如果我们只关心其中的一个方法(例如,鼠标点击事件&…...
常用LabVIEW算法及应用
在LabVIEW项目中,算法的应用是提高系统性能、实现特定功能、完成复杂任务的核心。LabVIEW作为一种图形化编程语言,允许用户通过直观的图形编程来实现各种复杂的算法。这些算法广泛应用于控制系统、数据采集、信号处理、图像处理、机器学习等领域。了解常…...
VTK知识学习(28)-区域提取
1、感兴趣区域(Volume ofInterest,VOI) 它是图像内部的一块子区域。在VTK中,vtkExtractVOI 类可根据用户指定的区域范围提取子图像。该Filter 的输入和输出都是一个vtkImageData,因此其结果可以直接作为图像保存。 代码: private void Test…...
基于Spring Boot + Vue3实现的在线汽车保养维修预约管理系统源码+文档
前言 基于Spring Boot Vue3实现的在线汽车保养维修预约管理系统是一种前后端分离架构的应用,它结合了Java后端开发框架Spring Boot和现代JavaScript前端框架Vue.js 3.0的优势。这样的系统可以为汽车服务站提供一个高效的平台来管理客户的预约请求 技术选型 系统…...
CAN201 Introduction to Networking(计算机网络)Pt.4 链路层
文章目录 5. Link Layer(链路层)5.1 Services of link layer(链路层的服务)5.2 Error detection and correction(错误检测和纠正)5.2.1 Partity Checks(奇偶检验)5.2.2 Checksum&…...
Python视频处理:噪声矩阵与并行计算的完美融合
噪声级别对视频质量有显著的影响,主要体现在以下几个方面: 1. 视觉质量 低噪声级别:当噪声级别较低时,视频的视觉质量较好。噪声对图像细节的干扰较小,画面看起来较为清晰和自然。观众可以更容易地识别图像中的细节和…...
wordpress开发之实现使用第三方库qrcode-generator生成二维码并上传和展示
文章目录 一、需求二、技术实现 - 利用qrcode-generator库三、代码实现 一、需求 客户的需求是能将特定的url生成二维码,以便将二维码分享或贴到合同纸上给他的客户扫描查看信息。 这个url包含的内容类似于如下格式: https://www.example.com/contrac…...
计算机网络——物理层
一、通信基础 1.相关术语: • 数据(data)——运送消息的实体。 • 信号(signal)——数据的电气的或电磁的表现。 • “模拟的”(analogous)——代表消息的参数的取值是连续的。 • “数字的”(digital)——代表消息的参数的取值是离散的。 • 码元(code)——在…...
网络IP协议
IP(Internet Protocol,网际协议)是TCP/IP协议族中重要的协议,主要负责将数据包发送给目标主机。IP相当于OSI(图1)的第三层网络层。网络层的主要作用是失陷终端节点之间的通信。这种终端节点之间的通信也叫点…...
Unity UGUI使用技巧与经验总结(不定期更新)
Text自动缩放参考连接: Unity -UGUI中Text文本框的自动调整,字体大小的自适应调节_unity添加的字体大小锁定-CSDN博客 Toggle按钮选择时,显示对应的UI界面: 为Toggle组件的On Value Change事件添加对需要显示的对象的SetActive…...
Tailwind CSS 使用简介
参考网站安装 - Tailwind CSS 中文网 号称是开始使用 Tailwind CSS 通过 npm 安装 tailwindcss,并创建你的 tailwind.config.js 文件。 npm install -D tailwindcss npx tailwindcss init 在 tailwind.config.js 文件中添加所有模板文件的路径。 /** type {im…...
嵌入式linux中socket控制与实现
一、概述 1、首先网络,一看到这个词,我们就会想到IP地址和端口号,那IP地址和端口各有什么作用呢? (1)IP地址如身份证一样,是标识的电脑的,一台电脑只有一个IP地址。 (2)端口提供了一种访问通道,服务器一般都是通过知名端口号来识别某个服务。例如,对于每个TCP/IP实…...
Go语言的 的数据封装(Data Encapsulation)核心知识
Go语言的数据封装(Data Encapsulation)核心知识 引言 在现代编程语言中,数据封装是一个重要的编程概念。它不仅帮助开发者管理复杂性,还提高了代码的可维护性和安全性。Go语言(Golang)作为一种注重简洁性…...
25/1/5 算法笔记<强化学习> MPC,交叉熵法,PETS算法
MPC 一个棋手下棋,会根据当前的局势来推演落子几步可能发生的局势,然后选择局势最好的一种情况来决定当前落子位置。 模型预测控制方法MPC,就是这样一种迭代的、基于模型的控制方法。值得注意的是MPC中不存在一个显示的策略。具体而言就是MPC在每次采取…...
最新版Chrome浏览器加载ActiveX控件之CFCA安全输入控件
背景 CFCA安全输入控件用于保证用户在浏览器、桌面客户端、移动客户端中输入信息的安全性,防止运行在用户系统上的病毒、木马等恶意程序入侵窃取用户输入的敏感信息。确保用户输入、本地缓存、网络传输整个流程中,输入的敏感信息不被窃取。广泛应用于银行…...
vue 项目集成 electron 和 electron 打包及环境配置
vue electron 开发桌面端应用 安装 electron npm i electron -D记得加上-D,electron 需添加到devDependencies,如果添加到dependencies后面运行可能会报错 根目录创建electron文件夹,在electron文件夹创建main.js(或者backgrou…...
计算机网络--UDP和TCP课后习题
【5-05】 试举例说明有些应用程序愿意采用不可靠的UDP, 而不愿意采用可靠的TCP。 解答: 这可能有以下几种情况。 首先,在互联网上传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用 TCP 协议对这些出错或丢失的分组进行重传&…...
【算法不挂科】算法期末考试题库(带解析)【选择题53道&填空题36道&算法填空题7道&问答题33道】
前言 大家好吖,欢迎来到 YY 滴算法不挂科系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 下面是相关传送门 【算法不挂科】算法期末考试题库1(带解析)【选择题53道&填空题36道&算法填空题7道&a…...
Java+maven+selenium3+testng 自动化测试环境IDEA
软件测试资料领取:[内部资源] 想拿年薪40W的软件测试人员,这份资料必须领取~ 软件测试面试刷题工具领取:软件测试面试刷题【800道面试题答案免费刷】 idea 、java环境变量jdk maven安装及环境变量配置这里就不多说了,网上有很多…...
【踩坑指南2.0 2025最新】Scala中如何在命令行传入参数以运行主函数
这个地方基本没有任何文档记录,在学习的过程中屡屡碰壁,因此记录一下这部分的内容,懒得看可以直接跳到总结看结论。 踩坑步骤 首先来看看书上让我们怎么写: //main.scala object Start {def main(args:Array[String]) {try {v…...
vue3-watchEffect异步依赖收集
当 b 更新时 a 并不会更新,因为watchEffect的依赖收集在该案例中停止于await asyncFn(),也就是只会收集同步代码的依赖,await 之后的异步代码的依赖并不会收集到 <template> <div>a: {{ a }} <br>b: {{ b }} <br>&l…...
【Go研究】Go语言脚本化的可行性——yaegi项目体验
0x01 背景——云计算中脚本化困境 作为云基础设施管理中,大量需要跟文件系统、容器等相关的操作,这些操作实现通常用脚本来实现。 现在探讨下,这些脚本为什么一定要用脚本语言来实现,以及目前实现中的常见的问题。 常见的两个场…...
Genome Research | 俄亥俄州立于忠堂组-结合深度学习与蛋白质数据库系统探究反刍动物真核微生物...
结合深度学习与蛋白质数据库系统探究反刍动物真核微生物 Probing the eukaryotic microbes of ruminants with a deep-learning classifier and comprehensive protein databases 期刊:Genome Research DOI:https://doi.org/10.1101/gr.279825.124 第一作…...
centos7yum安装mysql5.7
1、安装mysql5.7 (1) 正常安装 [rootBrianZhu /]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm [rootBrianZhu /]# yum -y install mysql57-community-release-el7-10.noarch.rpm [rootBrianZhu /]# yum -y install mysql-community-se…...
JavaScript系列(8)-- Array高级操作
JavaScript Array高级操作 📚 在前七篇文章中,我们探讨了JavaScript的语言特性、ECMAScript标准、引擎工作原理、数值类型、字符串处理、Symbol类型和Object高级特性。今天,让我们深入了解JavaScript中的Array高级操作。数组是最常用的数据结…...
蓝牙架构介绍
架构1:hostcontroller双芯片标准架构 这个标准把蓝牙协议栈分成host和controller两部分,其中host跑在AP上,controller跑在蓝牙模块上,两者之间通过HCI协议进行通信,AP芯片厂商一般会直接采用开源的Bluez来实现Host功能…...
青少年编程与数学 02-006 前端开发框架VUE 08课题、列表渲染
青少年编程与数学 02-006 前端开发框架VUE 08课题、列表渲染 一、列表渲染v-for 指令:key 属性遍历对象响应式更新列表渲染的作用 二、应用示例项目结构public/index.htmlsrc/components/TodoApp.vuesrc/main.jspackage.json构建和运行项目 课题摘要:本文介绍了Vue.js中的列表渲…...
12.3【hardware][day3]
关于使用硬件 DSP 资源实现乘法的含义 在 Xilinx 7 Series FPGA(现场可编程门阵列)中,乘法运算可以通过专门的数字信号处理(DSP)硬件资源来完成。当使用 Verilog 语言编写代码进行乘法运算时,直接使用乘号&…...
降维算法之PCA(PrincipalComponent Analysis,主成分分析)
降维是指在保留数据特征的前提下,以少量的变量表示有许多变量的数据,这有助于降低多变量数据分析的复杂度。比如在分析有 100 个变量的数据时,与其直接分析数据,不如使用 5 个变量表示数据,这样可以使后续分析比较容易…...
【JVM】总结篇-类的加载篇之 类的加载器 和ClassLoader分析
文章目录 类的加载器ClassLoader自定义类加载器双亲委派机制概念源码分析优势劣势如何打破Tomcat 沙箱安全机制JDK9 双亲委派机制变化 类的加载器 获得当前类的ClassLoader clazz.getClassLoader() 获得当前线程上下文的ClassLoader Thread.currentThread().getContextClassLoa…...
Android:文件管理:打开文件意图
三步走: 一、先在AndroidManifest.xml声明provider: <providerandroid:name"androidx.core.content.FileProvider"android:authorities"${applicationId}.FileProvider"android:exported"false"android:grantUriPermi…...
《计算机网络A》单选题(详解)
《计算机网络A》单选题-复习题库 1、计算机网络最突出的优点是( D ) A、存储容量大 B、将计算机技术与通信技术相结合 C、集中计算 D、资源共享 解析:算机网络最突出的优点是 D、资源共享。通过计算机网络&…...
【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
在Spring Boot 3.0中,你可以使用MyBatis Plus来简化数据库操作。以下是一个基本的集成示例: 1.添加依赖到你的pom.xml: <dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.…...
第147场双周赛:子字符串匹配模式、设计任务管理器、最长相邻绝对差递减子序列、删除所有值为某个元素后的最大子数组和
Q1、子字符串匹配模式 1、题目描述 给你一个字符串 s 和一个模式字符串 p ,其中 p 恰好 包含 一个 * 符号。 p 中的 * 符号可以被替换为零个或多个字符组成的任意字符序列。 如果 p 可以变成 s 的子字符串,那么返回 true ,否则返回 false…...
数据结构C语言描述9(图文结合)--二叉树和特殊书的概念,二叉树“最傻瓜式创建”与前中后序的“递归”与“非递归遍历”
前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…...