核心功能详解

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

CapCut Mate 是一个基于 Python 的剪映自动化控制工具,提供完整的视频编辑自动化解决方案。该项目通过 FastAPI 提供 RESTful API 接口,支持草稿管理、媒体处理、编辑效果系统和视频生成流程的自动化控制。

项目结构

项目采用模块化设计,主要分为以下几个核心层次:

graph TB
subgraph "API 层"
Router[路由层]
Schemas[请求/响应模型]
end
subgraph "服务层"
CreateDraft[草稿创建服务]
MediaServices[媒体处理服务]
EffectServices[效果处理服务]
VideoGen[视频生成服务]
end
subgraph "核心库层"
DraftLib[草稿管理系统]
MediaLib[媒体处理库]
EffectLib[效果系统]
Automation[自动化控制]
end
subgraph "工具层"
Utils[工具函数]
Cache[缓存管理]
Logger[日志系统]
end
Router --> Schemas
Router --> CreateDraft
Router --> MediaServices
Router --> EffectServices
Router --> VideoGen
CreateDraft --> DraftLib
MediaServices --> MediaLib
EffectServices --> EffectLib
VideoGen --> Automation
DraftLib --> Utils
MediaLib --> Utils
EffectLib --> Utils

核心组件

CapCut Mate 的核心功能围绕四个主要组件构建:

1. 草稿管理系统

负责剪映草稿的创建、管理和持久化存储,支持模板驱动的草稿生成和多轨道管理。

2. 媒体处理引擎

提供视频、音频、图片和字幕的自动化处理能力,支持批量媒体添加和格式转换。

3. 编辑效果系统

实现关键帧动画、遮罩效果、文字样式和特效应用的自动化控制。

4. 视频生成流程

通过云渲染服务实现高质量视频的自动化生成和导出。

架构概览

系统采用分层架构设计,确保各组件间的松耦合和高内聚:

sequenceDiagram
participant Client as 客户端
participant API as API网关
participant Router as 路由器
participant Service as 业务服务
participant Draft as 草稿系统
participant Media as 媒体处理
participant Render as 渲染引擎
Client->>API : HTTP请求
API->>Router : 路由分发
Router->>Service : 业务逻辑调用
Service->>Draft : 草稿操作
Service->>Media : 媒体处理
Service->>Render : 视频生成
Render-->>Service : 生成结果
Service-->>Router : 响应数据
Router-->>API : 标准响应
API-->>Client : 最终结果

详细组件分析

草稿管理系统

草稿管理系统是整个 CapCut Mate 的核心基础,负责管理剪映草稿的生命周期。

核心功能特性
  • 模板驱动创建:基于预定义模板快速生成新草稿
  • 多轨道管理:支持视频、音频、字幕和特效轨道的独立管理
  • 实时缓存:内存缓存机制提升草稿操作性能
  • 双文件兼容:自动同步草稿配置文件
模板系统标准化实现

系统现已实现模板系统的标准化,通过统一的模板架构支持多种草稿格式:

模板系统架构

graph TB
subgraph "模板系统标准化"
TemplateSystem[模板系统]
TemplateManager[模板管理器]
TemplateLoader[模板加载器]
TemplateValidator[模板验证器]
end
subgraph "模板类型"
TraditionalTemplate[传统模板<br/>draft_info.json]
ModernTemplate[现代模板<br/>draft_content.json]
HybridTemplate[混合模板<br/>双文件兼容]
end
subgraph "兼容性层"
CompatibilityLayer[兼容性层]
DualFileMode[双文件模式]
SingleFileMode[单文件模式]
end
TemplateSystem --> TemplateManager
TemplateManager --> TemplateLoader
TemplateManager --> TemplateValidator
TemplateLoader --> TraditionalTemplate
TemplateLoader --> ModernTemplate
TemplateLoader --> HybridTemplate
HybridTemplate --> CompatibilityLayer
CompatibilityLayer --> DualFileMode
CompatibilityLayer --> SingleFileMode
模板架构和文件结构

系统现在支持三种不同的模板架构,提供更灵活的草稿创建能力:

传统模板结构(default)

  • 使用 draft_info.json 作为主要配置文件
  • 包含完整的草稿元数据和配置信息
  • 适用于传统的剪映草稿格式
  • 支持基本的草稿功能

现代模板结构(default2)

  • 使用 draft_content.json 作为主要配置文件
  • 包含更丰富的媒体素材和轨道信息
  • 支持更复杂的编辑效果和动画
  • 具备更好的剪映 5.9+ 兼容性

混合模板结构(双文件兼容)

  • 同时支持 draft_info.jsondraft_content.json
  • 自动同步两个文件的内容
  • 确保向后兼容性和向前兼容性
  • 解决不同版本剪映的兼容性问题
graph TB
subgraph "模板架构标准化"
Traditional[传统模板<br/>draft_info.json]
Modern[现代模板<br/>draft_content.json]
Hybrid[混合模板<br/>双文件兼容]
end
subgraph "双文件兼容模式"
DualFile[双文件兼容]
DraftContent[draft_content.json]
DraftInfo[draft_info.json]
end
Traditional --> DualFile
Modern --> DualFile
Hybrid --> DualFile
DualFile --> DraftContent
DualFile --> DraftInfo
草稿创建流程
flowchart TD
Start([开始创建草稿]) --> ValidateParams["验证参数<br/>宽度和高度"]
ValidateParams --> CopyTemplate["复制模板文件"]
CopyTemplate --> LoadTemplate["加载草稿模板"]
LoadTemplate --> SetDimensions["设置画布尺寸"]
SetDimensions --> EnableDualMode["启用双文件兼容模式"]
EnableDualMode --> AddMainTrack["添加主轨道"]
AddMainTrack --> SaveDraft["保存草稿"]
SaveDraft --> UpdateCache["更新缓存"]
UpdateCache --> ReturnURL["返回草稿URL"]
ReturnURL --> End([完成])
ValidateParams --> |参数无效| Error[抛出异常]
CopyTemplate --> |文件错误| Error
LoadTemplate --> |模板加载失败| Error
EnableDualMode --> |兼容模式失败| Error
AddMainTrack --> |轨道创建失败| Error
SaveDraft --> |保存失败| Error
双文件兼容模式实现

系统实现了智能的双文件同步机制,确保不同格式的草稿文件能够正确处理:

双文件兼容模式特性

  • 自动同步:保存时自动同步两个文件的内容
  • 智能检测:根据当前保存的文件类型自动推导另一个文件路径
  • 向后兼容:支持传统模板格式
  • 向前兼容:支持现代模板格式

媒体处理功能

媒体处理系统提供完整的视频、音频、图片和字幕处理能力。

视频处理流程
sequenceDiagram
participant Client as 客户端
participant Service as 视频服务
participant Downloader as 下载器
participant Material as 素材管理
participant Segment as 片段管理
participant Track as 轨道管理
Client->>Service : 添加视频请求
Service->>Downloader : 下载视频文件
Downloader-->>Service : 本地文件路径
Service->>Material : 创建视频素材
Material-->>Service : 素材对象
Service->>Segment : 创建视频片段
Segment-->>Service : 片段ID
Service->>Track : 添加到轨道
Track-->>Service : 轨道ID
Service-->>Client : 处理结果
字幕处理系统

字幕系统支持丰富的样式定制和动画效果:

编辑效果系统

效果系统提供关键帧动画、遮罩效果和文字样式的自动化控制。

关键帧动画实现

关键帧系统支持多种动画属性的精确控制:

视频生成流程

视频生成系统通过云渲染服务实现高质量视频的自动化处理。

生成流程
flowchart TD
Submit([提交生成任务]) --> ValidateAPIKey["验证API密钥"]
ValidateAPIKey --> CheckPoints["检查账户积分"]
CheckPoints --> ValidateDraft["验证草稿URL"]
ValidateDraft --> SubmitTask["提交到任务队列"]
SubmitTask --> WaitQueue["等待队列处理"]
WaitQueue --> RenderProcess["开始渲染"]
RenderProcess --> MonitorProgress["监控进度"]
MonitorProgress --> CheckComplete{"渲染完成?"}
CheckComplete --> |否| MonitorProgress
CheckComplete --> |是| SaveOutput["保存输出文件"]
SaveOutput --> NotifyClient["通知客户端"]
NotifyClient --> End([完成])
ValidateAPIKey --> |密钥无效| Error[抛出异常]
CheckPoints --> |积分不足| Error
ValidateDraft --> |URL无效| Error

剪映自动化控制机制

系统集成了剪映自动化控制功能,支持窗口操作和导出流程的自动化。

窗口状态管理
stateDiagram-v2
[*] --> Home : 初始状态
Home --> Edit : 打开草稿
Edit --> PreExport : 点击导出
PreExport --> ExportStart : 导出开始页面
PreExport --> Exporting : 导出进行中
PreExport --> ExportSucceed : 导出成功
ExportStart --> Exporting : 点击最终导出
Exporting --> ExportSucceed : 导出完成
ExportSucceed --> Home : 返回主页
Home --> [*] : 关闭应用

依赖关系分析

graph TB
subgraph "外部依赖"
FastAPI[FastAPI框架]
uiautomation[UI自动化]
Pydantic[数据验证]
end
subgraph "内部模块"
Router[路由模块]
Service[服务模块]
Draft[草稿系统]
Utils[工具模块]
end
subgraph "核心库"
ScriptFile[脚本文件]
VideoSegment[视频片段]
TextSegment[文本片段]
EffectSegment[效果片段]
end
FastAPI --> Router
Router --> Service
Service --> Draft
Service --> Utils
Draft --> ScriptFile
Draft --> VideoSegment
Draft --> TextSegment
Draft --> EffectSegment
uiautomation --> Draft
Pydantic --> Service

性能考虑

系统在设计时充分考虑了性能优化:

缓存策略

  • 内存缓存:草稿对象缓存在内存中,避免重复加载
  • 文件缓存:媒体文件下载后缓存到本地磁盘
  • 智能清理:定期清理过期的缓存数据

并发处理

  • 异步任务:视频生成采用异步队列处理
  • 批量操作:支持媒体文件的批量添加和处理
  • 资源池:连接池和线程池优化资源使用

优化建议

  1. 数据库优化:对于大量草稿的场景,建议使用数据库存储
  2. CDN集成:媒体文件建议使用 CDN 加速
  3. 负载均衡:高并发场景下建议部署多实例

故障排除指南

常见问题及解决方案

草稿创建失败

症状:创建草稿时报错
原因

  • 模板文件缺失
  • 权限不足
  • 磁盘空间不足

解决方案

  1. 检查模板目录是否存在
  2. 验证写入权限
  3. 检查磁盘空间
媒体文件下载失败

症状:视频或音频下载中断
原因

  • 网络连接不稳定
  • 文件URL失效
  • 文件过大超时

解决方案

  1. 检查网络连接
  2. 验证文件URL有效性
  3. 调整超时设置
自动化控制失败

症状:剪映窗口操作失败
原因

  • 窗口未找到
  • 权限不足
  • 版本不兼容

解决方案

  1. 确认剪映已安装且可运行
  2. 以管理员权限运行
  3. 检查剪映版本兼容性
双文件兼容模式问题

症状:草稿文件保存后不一致
原因

  • 双文件同步失败
  • 文件权限问题
  • 模板格式不匹配

解决方案

  1. 确保启用双文件兼容模式
  2. 检查文件写入权限
  3. 验证模板文件完整性

结论

CapCut Mate 提供了一个完整、可靠的剪映自动化解决方案。通过模块化的架构设计和完善的错误处理机制,系统能够稳定地处理各种视频编辑任务。其核心优势包括:

  1. 完整的功能覆盖:从草稿创建到视频生成的全流程自动化
  2. 灵活的扩展性:模块化设计便于功能扩展和维护
  3. 稳定的性能表现:优化的缓存策略和并发处理机制
  4. 完善的错误处理:全面的异常捕获和恢复机制
  5. 先进的模板架构:支持双文件兼容模式和多种模板格式
  6. 强大的模板扩展能力:灵活的草稿创建和管理机制

模板系统标准化的创新价值

  • 统一标准:通过标准化模板系统,解决了不同版本剪映的兼容性问题
  • 向后兼容:支持传统模板格式,确保历史项目的可用性
  • 向前兼容:采用现代模板格式,充分利用最新功能特性
  • 智能切换:自动检测和适配不同的模板格式,提升用户体验

未来的发展方向包括:

  • 增强云渲染服务的稳定性
  • 扩展更多剪映功能的支持
  • 优化移动端适配
  • 提升用户体验和易用性
  • 进一步完善模板系统和文件兼容性
  • 深化模板系统的标准化程度,支持更多模板变体

引言

Broadcom 于 2025 年 11 月发布了 Spring Framework 7.0 和 Spring Boot 4.0(官方公告见此处此处)。新版本框架引入了原生 REST API 版本控制、用于实现整个 Spring 产品栈标准化空值安全的 JSpecify 注解,以及内置的弹性能力(包括重试机制和并发限流)。Spring Boot 4.0 采用 Jackson 3 来处理 JSON,并将原有的单体自动配置 JAR 拆分为多个独立模块。Spring Framework 7.0 仍以 JDK 17 作为基线版本,同时支持 JDK 25,并将 Jakarta EE 11 和 Kotlin 2.2 升级为新的基线版本。

Spring Boot 4 发布后,多个 Spring 相关项目也相继推出了主要版本,包括 Spring CloudSpring ModulithSpring Shell。Spring Boot 4.1 预计将于 2026 年 5 月发布。

InfoQ 近日与 Broadcom Spring 团队核心成员展开交流,探讨了 Spring Framework 7 与 Spring Boot 4 带来的重大架构升级与功能改进。本次对话围绕其战略转变展开,包括将重试、并发限流等能力直接集成到框架内核来实现核心弹性,以及模块化自动配置所带来的性能提升。

专家组还探讨了对 HTTP API 版本控制的原生支持实现方案,以及 AI 编码工具在现代开发者工作流程中带来的变革性作用。最后,团队给出了从 Spring Boot 3 升级至 4 的指南,重点介绍了可用于简化企业应用迁移的专用工具、兼容模块及社区资源。

专家组成员

InfoQ:Spring Boot 4 的自动配置模块化在实际应用中会带来怎样的性能影响?你认为这又将如何影响第三方 Starter 的开发?

Phil Webb:性能并非本次模块化改造的核心目标,但我相信在启动耗时上会有一定优化。许多自动配置类仅在类路径中检测到特定类时才会触发,而在早期版本的 Spring Boot 中,应用每次启动都需要检查大量类。模块化后,需要检查的类数量会大幅减少。

另一项小幅性能提升是最终构建的可执行 JAR 包的体积上。只引入所需模块可以让 JAR 体积更小,需要读取的数据量也随之减少。

InfoQ:为什么将 Spring Retry 集成到 Spring Framework 中,而不是保持其模块化独立?

Sam Brannen:核心弹性能力是 Spring Framework 7 的一大核心方向,为此我们新增了重试支持以及基于注解的并发限流功能。

从历史来看,Spring 社区一直依靠 Spring Retry 项目实现各种形式的重试能力。而在 Spring 7 中,我们决定将核心重试支持纳入 Spring 产品体系的最底层,即 Spring Framework 自身。尽管这项能力的设计思路源自 Spring Retry 项目,但我们已对其进行全面重构,在 spring-corespring-context 模块中实现了一套精简的核心重试功能。这让所有 Spring 开发者无需额外引入依赖,即可直接使用 RetryTemplate@Retryable。简单来说,核心重试能力将始终可用,Spring Framework 自身也能基于这些重试能力进行构建,例如在 RestClient 中。

在功能方面,RetryTemplate 允许开发者在代码中直接使用程序化重试,可完全自主控制重试策略与退避策略。而 @Retryable 则提供了声明式方式,开发者只需在类或方法上添加该注解并通过注解属性指定重试与退避配置即可。@Retryable 天然支持命令式编程模型;与 Spring Retry 项目不同的是,Spring Framework 中的 @Retryable 还可用于返回响应式类型的方法。Spring 会借助 Project Reactor 的 Retry 规范来装饰响应式流。对于非响应式返回类型,Spring 则会配置 RetryPolicy 并委托给 RetryTemplate 处理。

最后,@ConcurrencyLimit 允许开发者为指定方法调用配置并发限制。该机制能有效保护目标资源不被过多线程同时访问,效果类似于线程池或连接池的大小限制,超出限制时会阻止访问。这种限制在使用虚拟线程(Virtual Threads)时尤为实用,因为虚拟线程通常不受线程池容量的约束。

InfoQ:Spring Framework 7 基于 HTTP 头实现 API 版本控制,你们计划如何与 JavaScript、Python、.NET 等社区协作,让这些版本更易于它们接入使用?

Rossen Stoyanchev:Spring Framework 7 服务器端应用可以从多种 API 版本策略中做出选择,包括路径、请求头、查询参数或媒体类型参数,具体方案需要综合多方面因素来确定。

一个关键因素是预期变更的深度。例如,基于路径的版本控制可以适配底层领域模型中更深度的结构性变更;而基于请求头和查询参数的版本控制则适用于更轻量级的变更,支持按需对控制器映射进行渐进式版本管理。

另一个因素是不同 REST API 规范的存在。例如,如果需要或选择遵循微软 REST API 指南,可选用路径版本(如 v1.0)或 api-version 查询参数。而如果遵循 Zalando RESTful API 指南,则使用 version 媒体类型参数。

鉴于可选方案与行业实践种类繁多,Spring Boot 不会提供开箱即用的默认配置。应用程序必须显式地启用 API 版本控制,并自行选定版本策略,以及请求头/查询参数名称、版本格式(如语义化版本或日期版本)等细节。最终决定权完全交由开发人员掌握。

从着手设计 API 版本控制功能之初我们就明确,这是一个复杂的领域,存在诸多不同观点,并没有放之四海而皆准的方案。因此我们的目标并非强制或引导开发者选用某一套特定方案,而是提供基础构建模块,赋予开发者自主权并支持他们做出的任何选择。

客户端需要遵循服务器端的约定。例如,如果你编写客户端调用 GitHub REST API,就需要使用 X-GitHub-Api-Version 请求头。从这个角度而言,版本策略的具体实现与技术栈关系不大,更多取决于应用自身的 REST API 设计选择。

Spring 的 RestClient 和 WebClient 构建器支持一次性配置 API 版本控制,这样在发起请求时业务代码无需处理具体的 HTTP 请求细节。同样,HTTP 接口客户端的 HttpExchange 注解现已支持版本属性,并与 HTTP 请求细节解耦,相关配置可统一设置,无需修改请求调用代码。预计 JavaScript、Python、.NET 及其他客户端库也会提供类似的功能与可配置能力。

InfoQ:你在 Spring 项目中使用 Claude Code、GitHub Copilot 或 Google Gemini 这类 AI 编码工具的体验如何?你认为这些新工具会给 Spring 开发者的工作带来怎样的改变?

Mark Pollack:这些工具带来的使用体验极具变革意义。我认为各类开发者都不会再沿用过去二十年的编程方式了。对于经验丰富、具备优秀设计能力的开发者而言,与现代 AI 编码工具协作堪称颠覆性突破。我们还需要时间观察哪些开发者能真正高效运用这些工具。因此,我对这类工具在编码领域的变革作用十分看好。也有人持不同意见,尤其是那些喜欢问 AI 类似“ strawberry 里有多少个字母 r ”、并热衷于揪出这类简单问题错误的人,但简而言之,这就是我个人的真实感受。

InfoQ:包含详细规则、规范与最佳实践的文档能够引导 AI 编码工具生成更高质量的代码。对 Claude Code 而言,这类文档可以作为技能配置或子智能体使用。你们是否计划发布此类文档?例如可以是针对特定项目的,如 Spring Web MVC 或 Spring Data,也可以是通用型的,涵盖安全或性能等横向共性问题。

Martin Lippert:这确实是个很有意思的话题。我们正在积极研究可以直接落地的方案,以及通过合作能实现的内容,但目前一切还处在探索阶段。即将发布的 Spring Tools 5 将成为首批适配 AI 编码环境的 Spring 工具,例如它会提供相关能力,向工作区项目周边的编码助手提供更深入的 Spring 相关洞察。我们下一步的具体规划尚未最终确定。

InfoQ:Spring Boot 4 给不少开发者带来了升级方面的挑战,其中包括 Jackson 3 包名变更与 JSpecify 空值注解适配。开发者可借助哪些工具或 AI 支持来完成 Spring Boot 3 应用的升级工作?

Phil Webb:我们很庆幸拥有一个活跃的开发者社区,社区成员试用了早期里程碑版本并给出了很好的反馈。这促使我们优化了部分决策,以便更好地帮助需要升级的开发者。例如,我们专门提供了一个 Jackson 2 兼容模块,因为我们了解到目前许多生态系统尚未迁移至 Jackson 3。

我们同时也在升级内部的应用程序,来亲身体验升级过程中的痛点。我们惊喜地发现,许多典型的 Spring Boot 应用程序无需花费太多精力即可完成升级。例如,不少包重命名仅涉及自动配置类,而这些类用户通常不会直接导入。我们还针对性地为重命名的配置属性提供了工具支持,让 IDE 和属性迁移工具包能够帮助开发者快速找到替代项。

计划升级的开发者可以先参考我们 Wiki 上的迁移指南。我们预计社区可能会像以往一样,针对常见迁移问题提供对应的 OpenRewrite 规则。购买了 Broadcom 技术支持的客户可以使用 Application Advisor 工具 进行升级。

当然,任何重大版本升级都无法做到完全顺畅无阻。我们也预计,对 Spring Boot 进行深度集成与扩展的用户相比普通应用开发者需要投入更多时间完成升级。

InfoQ:Spring Boot 2.7 在 Spring Boot 3 发布时仍有 12 个月的免费维护期,之后还提供了 37 个月的付费支持。Spring Boot 3.5 目前还有 7 个月免费维护期,将于 2026 年 6 月结束,随后将提供长达 72 个月的付费支持。你认为这会对企业采用 Spring Boot 4 产生怎样的影响?

Michael Minella:从我们与用户的交流来看,开源支持时长的几个月差异并不会影响他们的升级时机。社区在一年多前就已经知道这个主要版本即将发布,那些选择继续使用开源支持版本的用户在此期间也一直参与其中。为了让用户尽早参与进来,我们在这个版本周期中首次向 Maven Central 发布了里程碑版和候选版,这使得反馈数量显著增加,也让我们能够进一步优化这些版本。

不过对大多数用户而言,企业支持周期的大幅延长切实影响了他们管理应用集群的方式。无论是选择投入更多时间完成重大版本升级,还是利用延长支持为计划下线、不再投入维护的应用提供保障,这两种都是目前产品中切实可用的选择。

我们理解所有这些场景。尽管我们坚信,对用户而言保持版本最新是最优选择(我们也通过 Application Advisor 提供了相应工具),但我们同样构建了配套方案来覆盖所有的选项,因为并非每个应用程序都需要同等程度的维护投入。

结论

Spring Boot 4 引入了模块化自动配置,通过减少类路径检查来提升启动速度,并生成更小的 Jar 包。Spring Framework 7 通过 RetryTemplate@Retryable 内置了重试支持,以及用于并发限流的 @ConcurrencyLimit,这个注解在使用虚拟线程时尤为实用。API 版本控制支持路径、请求头、查询参数和媒体类型等多种策略,Spring Boot 不会强制指定默认方案。Spring 团队认为 AI 编码工具具有变革性价值,并计划推出具备 AI 适配能力的 Spring Tools 5,而更全面的 AI 指导文档目前仍在研究阶段。

升级到 Spring Boot 4 后,大多数常规应用程序只需投入合理成本即可完成迁移。Jackson 2 兼容模块可简化向 Jackson 3 的过渡升级,IDE 工具也能协助处理配置属性的重命名问题。官方 Wiki 上的迁移指南是最佳起点,社区提供的 OpenRewrite 规则可自动化大部分迁移工作。购买了 Broadcom 商业支持的客户还可使用 Application Advisor 工具。

关于支持时间表,Spring 团队表示,Spring Boot 3.5 缩短的免费开源支持周期(在 Spring Boot 4 发布后仅剩余 7 个月)并未对大多数用户的升级时间安排造成明显影响。而大幅延长的企业支持周期(如今付费支持长达 72 个月)则为企业提供了更大灵活性,使其可以按自身节奏规划升级,或维护那些计划淘汰的应用程序。

【声明:本文由 InfoQ 翻译,未经许可禁止转载。】

查看英文原文:https://www.infoq.com/articles/spring-team-spring-7-boot-4/

Canva AI 2.0 发布

4 月 16 日,Canva 可画发布 Canva AI 2.0,宣布向「一体化生产力系统」转型。

此次更新引入了新底层架构,其核心能力包括:对话式设计,即允许用户通过自然语言或语音直接生成完整、可编辑设计;智能体编排,即自动调动多种工具以实现复杂任务(如生成多渠道营销全案);智能对象编辑,即支持对单一元素进行精准微调而不影响整体;以及持久记忆,即学习用户工作习惯、自动应用品牌风格。

在智能化工作流方面,Canva AI 2.0 将应用场景拓展至日常办公处理。新系统打通了 Slack、Gmail、Zoom 和Google Drive 等常用办公软件,可直接提取音视频要点或聊天记录,生成文档。此外,还新增了支持后台离线运转的自动规划功能、全网调研能力、支持 HTML 文件导入修改的 Canva Code 2.0,以及能够根据需求描述一键生成结构化表格的 Sheets AI。

Canva AI 2.0 将在全球部分地区逐步开启内测首发。来源


Anthropic 发布 Claude Opus 4.7 模型

Anthropic 发布 Claude Opus 4.7 模型。该模型基于 Opus 4.6 优化,Anthropic 表示重点提升复杂软件工程任务中的表现,减少对人工干预的依赖。同时,其在图像分析、指令跟随以及文档与幻灯片生成等场景中的表现也有所增强,并被认为具备更高的创造力。

不过,Anthropic 表示,Opus 4.7 并未推动公司能力边界,其整体性能仍低于此前发布的 Claude Mythos Preview 模型,后者在多项评测中表现更优。

出于安全考虑,Anthropic 目前仅向包括英伟达、摩根大通、谷歌、苹果和微软在内的部分合作伙伴提供 Claude Mythos Preview。Opus 4.7 作为公开模型,用于测试新的网络安全防护机制,并加入更多安全限制。公司同时推出 Cyber Verification Program,允许安全研究人员在特定条件下使用该模型开展漏洞研究。

定价维持不变,为每百万输入 token 5 美元、输出 token 25 美元。不过 Anthropic 表示,Opus 4.7 升级了 tokenizer,同样文本可能消耗过去 1.0 到 1.35 倍的 token;且在高推理档下,特别是多轮交互场景中,Opus 4.7 的思考更深入,输出 token 也会更长。来源


OpenAI 升级 Codex,新增多项实用功能

OpenAI 于 4 月 17 日宣布升级 Codex,进一步强化其代理式开发能力。新版 Codex 支持直接操作桌面应用,可在后台执行任务,并允许多个代理并行工作,适用于前端调试、应用测试以及无 API 环境下的开发流程。同时,Codex 新增应用内浏览器、图像生成与编辑、记忆功能,并支持 GitLab Issues、Atlassian Rovo、Microsoft Suite 等插件。

据 OpenAI 介绍,新增的「电脑操作」能力可让代理在用户电脑上完成点击、输入等操作,同时不影响用户使用其他应用。内置浏览器支持网页浏览与页面批注,方便开发者为代理提供更具体的修改意见。图像能力基于 gpt-image-1.5,可用于产品原型、界面设计和游戏素材的生成与迭代。

除功能扩展外,Codex 开始引入「记忆」,可记录用户偏好、历史修改记录及常用工作方式,以提升后续任务执行效率。相关个性化能力将逐步开放。

目前,这批更新已开始向登录 ChatGPT 的 Codex 桌面应用用户推送。其中,桌面操作功能首阶段仅支持 macOS。Enterprise、Edu 以及欧盟和英国地区用户的相关功能也将在后续开放。来源


大疆发布 Osmo Pocket 4 云台相机

4 月 16 日,大疆推出新一代口袋云台相机 Osmo Pocket 4。

该机配备全新一英寸 CMOS 传感器,结合 ƒ/2.0 大光圈,实现 14 级动态范围,并支持 10-bit D-Log 专业色彩模式。在视频规格方面,支持最高 4K、240 fps 慢动作录制,同时新增空间音频录制与变焦拾音功能,并支持通过 OsmoAudio 直连 DJI 麦克风发射器,实现四声道音频录制。

系统方面,Osmo Pocket 4 搭载智能跟随 7.0 系统,支持最高 4 倍距离跟拍,同时升级对焦系统,新增「锁定主角追焦」和「登记主角优先」模式,并支持手势控制。影像方面,该机对人像肤色进行了优化,并提供可调节的美肤滤镜。此外,还支持外接补光灯,支持多档色温与亮度调节。

产品提供标准套装和全能套装两个版本,售价分别为 2999 元和 3799 元。全能套装额外包含 DJI Mic 3 发射器、补光灯、增广镜及迷你三脚架等配件。大疆同时推出 DJI Care 随心换服务,1 年版售价 219 元(含 2 次置换权益),2 年版售价 349 元(含 4 次置换权益)。来源

大疆在发布 Osmo Pocket 4 云台相机的同时,还表示将推出双摄版本 Pocket 4P。来源


亚马逊推出最薄电视棒 Fire TV Stick HD

4 月 15 日,Amazon 正式推出新一代 Fire TV Stick HD 流媒体设备,主打更轻薄机身与性能提升。该产品支持 1080p 视频输出,定价 34.99 美元,已开启预售,预计将于 4 月 29 日起在多个市场陆续发货。

据官方介绍,新款 Fire TV Stick HD 在外观设计上进行了明显优化,整体厚度较上一代产品减少约 30%,亚马逊称其为「有史以来最纤薄的流媒体设备」。设备支持通过电视 USB 接口直接供电,在部分不具备 USB 接口的电视上,则可通过 USB-C 线缆搭配电源适配器供电。

性能方面,新款设备较上一代 HD 型号平均提升超过 30%,亚马逊表示在开机速度及应用加载方面有所优化。同时,其支持 Wi-Fi 6 与蓝牙 5.3 标准。系统层面,该设备预装基于 Linux 内核的 Vega OS,并集成 Alexa+ 语音助手,支持更自然的语音交互。界面方面,新版本采用亚马逊此前更新的内容分类布局,将影视、直播、体育与新闻等内容进行分区展示。

该产品首批将在美国、英国、加拿大、墨西哥、日本、澳大利亚和新西兰上市,后续还将拓展至欧洲多个国家。来源


Adobe 发布 Firefly AI 助手

4 月 15 日,Adobe 宣布推出 Firefly AI Assistant。官方表示,这是一款具备智能体(Agent)能力的 AI 创作助手,可在 Creative Cloud 多款应用中执行跨步骤任务。

与依赖逐条指令的传统 AI 工具不同,Firefly AI Assistant 采用基于目标的任务执行模式。用户通过自然语言描述需求后,系统可自动规划工作流程,并在 Adobe Photoshop、Adobe Premiere Pro、Adobe Lightroom、Adobe Illustrator 和 Adobe Express 等应用之间完成多步骤操作。

Adobe 表示,该助手将提供统一的对话界面,用于管理任务上下文,并将生成结果同步至相关应用。同时,系统内置多种预设创意功能,例如通过单一提示完成图像风格调整等操作,从而简化常见创作流程。

Firefly AI Assistant 还具备一定的个性化能力,可根据用户历史操作逐步调整输出风格。此外,该工具集成 Frame.io 的审阅功能,支持整理项目反馈并与相关人员共享,外部成员也可直接提交可执行的修改意见。

目前,Firefly AI Assistant 尚未正式上线。Adobe 计划在未来几周内向 Beta 测试用户开放公测版本。来源


腾讯发布混元 3D 世界模型 2.0 发布

腾讯于 4 月 16 日宣布,混元 3D 世界模型 2.0(HY-World 2.0)正式发布并开源。该模型属于多模态世界模型,可基于文字、图片、视频等输入自动生成、重建并模拟 3D 场景。

据介绍,HY-World 2.0 支持导出 Mesh、3DGS(3D Gaussian Splatting)及点云等多种 3D 资产格式,并可与现有游戏开发流程对接,用于快速生成地图与关卡原型。在效果表现上,腾讯称新模型在场景完整度(如物体侧面与背面生成)以及对输入内容的还原程度方面有所提升。

此外,该模型采用 3DGS 与 Mesh 的混合表征方式,使生成场景支持具备真实碰撞反馈的交互体验。配套升级的 HY-Pano 2.0 模型则引入端到端隐式学习方法,可在无需相机参数的情况下,将普通图像转换为 360 度全景。

在训练方面,腾讯表示模型结合了真实全景图像与基于 Unreal Engine(UE)生成的合成数据,以提升生成质量与泛化能力。目前,相关模型及技术资料已在 GitHub 平台开源。来源


万事达卡为中国持卡人提供 Apple Pay 跨境支付支持

万事达卡于 4 月 16 日宣布,其与中国境内银行卡清算机构万事网联联合推进的支付服务已取得进展:中国境内发行的万事达卡品牌银行卡,现已支持通过 Apple Pay 进行跨境交易支付。

目前,中国银行、农业银行、中信银行以及浦发银行发行的万事达卡单标或双标信用卡,以及中信银行发行的万事达卡借记卡,均已支持绑定 Apple Pay 使用。在使用方式上,用户可通过各银行最新版 App 将银行卡添加至 Apple 钱包(Apple Pay),也可直接在 iPhone 钱包 App 中点击「+」并选择信用卡直接完成绑定。完成添加后,用户即可在 iPhone、Apple Watch 或 iPad 上使用 Apple Pay 进行支付。来源


Apple 钱包支持用支付宝开通 NFC 交通卡

支付宝于 4 月 14 日宣布,Apple 钱包现已支持通过支付宝开通 NFC 交通卡,覆盖北京、上海、南京、长沙、厦门、苏州、昆明、青岛、石家庄、天津等城市。用户只需在 Apple 钱包中点击 「+」 添加交通卡,选择 「交通卡」-「支付宝」,确认打开 「支付宝」 并完成卡片添加,即可在 Apple 钱包中查看对应城市的交通卡。来源


看看就行的其他消息

  • Google Quick Share 跨平台传输近期接连曝出问题。
    • 部分 Pixel 10 用户称,在打开 Quick Share 分享界面后,设备会立刻断开 Wi-Fi 连接,无法正常显示可用的网络列表。根据用户反馈,卸载相关扩展更新后,该问题可暂时缓解。目前,这一问题也已出现在 Google Issue Tracker 上,但相关条目很快被关闭,用户随后被建议前往官方支持论坛继续反馈。但截至目前,尚未公布明确的修复时间表。来源
    • 三星 Galaxy 用称,通过 Quick Share 向 iPhone 传输照片后,图片文件中的地理位置等 EXIF 元数据不会被完整保留。对此,三星论坛版主已确认问题存在,并表示公司正在开发修复方案,预计将在后续软件更新中解决。来源
  • 佳能推出电影伺服镜头系列新品 CN30×40 IAS J/R1 和 CN30×40 IAS J/P1,分别配备 RF 卡口和 PL 卡口。两款镜头在保持便携性的同时,实现该系列最长的 1200 mm 超远摄焦距和最高 30 倍光学变焦能力,覆盖 40 mm 至 1200 mm 焦段。启用内置 1.5 倍增距镜后,焦距可扩展至 1800 mm,并支持搭载 35 mm 全画幅图像传感器的摄影机。在功能方面,RF 卡口版本支持全像素双核 CMOS 自动对焦与对焦向导功能,可降低拍摄操作复杂度;与 EOS C400 摄影机搭配时,还支持自动曝光渐变补偿,减少变焦过程中的亮度变化。此外,新镜头支持对焦呼吸校正及虚拟制作系统,适用于多种专业影视制作场景。两款镜头均采用新开发的驱动单元,并配备多功能 USB Type-C 接口,以提升控制与扩展能力。新品计划于 2026 年 9 月下旬上市。来源


少数派的近期动态

你可能错过的好文章

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

    本文适合:正在评估 AI 原型工具、希望压缩设计出稿周期的产品经理,需要在早期以最低成本完成产品验证的初创团队,以及希望了解当前 AI 自动生成 APP 原型工具核心能力边界的 UI/UX 设计师和研发负责人。
    能自动生成 APP 原型的 AI 工具,核心能力差距集中在三点:能否一次性生成完整多页面结构、生成结果是否支持真实页面跳转的可交互原型、是否具备从原型直接导出可用前端代码的能力。UXbot是目前国内唯一同时满足这三个条件的 AI 工具——支持从需求描述到完整多页面可交互 App 界面和可交付前端代码的全链路生成,内置流程画布、实时模拟器、精准编辑器,并支持导出 Android Kotlin、iOS Swift 原生代码及 Web 端 Vue.js 代码。
    核心要点

    • 产品团队在选型 AI 原型工具时,核心评估维度是:多页面生成完整性、交互原型真实度、多端代码导出能力、结构规划支持和精细编辑能力
    • UXbot是目前国内唯一支持从需求描述到完整多页面可交互 App 界面和可交付前端代码的 AI 工具,5 步流程在单一平台内全程完成
    • UXbot 内置流程画布是市场上唯一将产品结构规划内置为生成前置步骤的 AI 原型工具,显著降低多页面生成后的结构性返工概率
    • 生成结果支持真实页面跳转的可交互原型,可直接用于用户测试、内部评审和投资人路演,无需额外工具转换
    • UXbot 是国内唯一支持 Android Kotlin + iOS Swift 原生移动端前端代码导出的 AI 工具,其他主流 AI 工具均无法输出原生移动端代码
    • Android 项目支持直接导出 APK,安装至真机演示;Web 应用支持云端部署,生成可分享的在线访问链接

    一、产品团队选型 AI 原型工具的 5 个核心评估维度

    在评估任何一款 AI 自动生成 APP 原型的工具之前,产品团队需要先明确自己的核心需求落在哪里。以下 5 个维度是区分 AI 原型工具实际能力的关键指标。

    维度一:多页面生成完整性

    一个真实的 APP 通常包含 8 到 15 个核心页面。工具能否在单次生成中覆盖所有核心页面,还是只能逐页追加,直接决定了原型制作的效率和结构连贯性。
    逐页追加的模式存在一个隐性问题:每次生成都基于对上一次的理解,多次生成后各页面之间的视觉风格和交互逻辑容易出现不一致,后期统一修改的成本极高。一次性生成完整多页面结构,才能保证原型在视觉和交互上的整体一致性。

    维度二:交互原型真实度

    工具生成的是「可以点击操作的真实交互原型」还是「静态界面截图」,是两类完全不同的产品。静态截图只能用于单页面视觉评审;可交互原型才能用于用户测试、演示完整用户旅程、进行投资人路演。
    判断一个 AI 工具的输出是否是真正的交互原型,核心标准是:能否在工具内直接点击操作,完成从首页到核心功能页面的完整用户旅程,不依赖外部工具辅助。

    维度三:生成前的结构规划支持

    直接从文字描述跳到多页面生成,和先在可视化画布上规划产品结构再触发生成,结果质量差距显著。前者依赖 AI 对需求的完整理解,复杂产品的结构缺失和逻辑断层概率高;后者让产品团队在生成前确认页面节点和跳转路径,生成结果的覆盖度和完整性有保障。
    支持结构规划前置的工具,适合页面数量多、用户旅程分支复杂的产品;不支持结构规划的工具,适合简单的单旅程小型应用。

    维度四:多端代码导出能力

    如果产品团队的目标是将 AI 生成的原型推进到开发阶段,代码导出能力是一个不能忽视的评估项。
    核心差异在于:工具导出的是 Web 端代码(HTML/Vue.js),还是原生移动端代码(Android Kotlin / iOS Swift)。Web 代码可以作为 Web 应用的开发起点,但无法直接用于 Android 或 iOS 原生 App 开发。需要上线 App Store 或 Google Play 的团队,必须评估工具是否支持原生移动端代码输出。

    维度五:精细调整能力

    AI 生成的初版原型不可能 100% 符合预期,调整和迭代是必然的。工具的精细调整能力决定了迭代效率:是支持对任意元素进行定点修改,还是每次调整都需要重新生成整个页面?
    定点修改能力越强,迭代成本越低,工具在实际使用中的粘性越高。

    二、UXbot:产品团队 APP 原型生成的完整解决方案

    第一步:输入需求描述

    在 UXbot 的需求输入框中,用自然语言描述你想搭建的 APP。有效的需求描述包含 4 个要素:产品方向(这是什么类型的应用)、目标用户(谁会使用)、核心功能(用户要完成什么任务)、视觉风格(简洁轻量、深色沉浸、高饱和活跃等)。
    UXbot 支持口语化的中文需求描述,不需要规范的 PRD 格式。描述越具体,生成结果越接近预期,但即使是一句简短的描述,UXbot 也能生成结构完整的多页面界面。
    image1.png

    第二步:确认流程画布,规划产品结构

    需求输入后,UXbot 自动生成一个基于需求的初始流程画布——这是 UXbot 在所有 AI 原型工具中最核心的差异化功能。
    流程画布以可视化节点图的形式呈现 APP 的完整页面结构和跳转路径。产品团队可以在画布上进行调整:增加或删除页面节点、修改跳转路径、调整用户旅程的分支逻辑。确认画布后,AI 生成的界面将严格遵循这个结构。
    这一步解决的核心问题是:让产品团队在生成界面之前就完成产品结构的确认,而不是在生成完成后才发现结构遗漏。对于页面数量超过 6 个、有多条用户旅程的 APP,流程画布规划能显著降低生成后大规模返工的概率。

    画布确认内容说明
    页面节点完整性所有核心旅程涉及的页面是否都已包含
    主路径可达性从入口页面能否走通所有核心任务
    分支路径逻辑登录/注册、空状态、错误提示等节点是否需要纳入
    跳转方向正确性每个节点的目标页面是否符合产品逻辑

    image2.png

    第三步:生成原型,预览验证

    流程画布确认后,UXbot 一次性生成覆盖所有节点的完整多页面界面。生成完成后,在内置的实时模拟器中验证原型。
    UXbot 生成的多页面界面支持真实的页面跳转和交互流程——不是静态截图,而是可以完整操作的可交互原型。内置模拟器支持在工具内直接预览 Web 端和移动端(Android/iOS)两种视图,无需导出文件或借助外部设备。
    产品团队在模拟器中需要完成以下验证:

    • 走通主要用户旅程,确认所有核心页面间的跳转正确
    • 检查是否存在跳转死端(点击某个按钮后没有对应页面)
    • 确认各页面的信息层级是否清晰(用户能否在 3 秒内理解当前页面的核心操作)
    • 检查 Web 端和移动端两种视图下的关键页面展示效果

    验证通过的原型可以直接分享给用户测试参与者或投资人——生成的原型链接无需安装任何软件,对方用浏览器即可访问和操作。
    image3.gif

    第四步:精准局部编辑

    模拟器验证发现需要调整的问题后,使用 UXbot 的精准编辑器和 AI 助手进行定点修改。
    精准编辑器的核心逻辑是「选中即编辑」:鼠标点击页面上任意元素,右侧面板立即展示该元素的所有可调整属性——颜色、字体、字号、间距、圆角、图标、跳转路径等。修改只作用于被选中的元素,不影响其他元素和页面,无需重新生成整个原型。
    调整优先级建议:

    1. 跳转死端修复(优先级最高):直接影响用户测试和路演演示能否顺畅进行
    2. 内容替换:将占位文字和默认图片替换为针对产品方向的真实感内容,显著提升用户测试反馈的准确性
    3. 核心页面视觉优化:调整首页、详情页等高频展示页面的视觉权重和信息层级
    4. 细节打磨:颜色、间距、图标等视觉细节的精细调整

    对于需要大范围重构某个页面布局的情况,可以对单个页面单独触发 AI 重新生成,而不影响其他已完成的页面。
    image4.png

    第五步:导出代码,云端运行

    原型确认后,UXbot 支持一键导出多格式前端代码和云端部署。
    代码导出能力:

    平台导出格式说明
    Web 端HTML / Vue.js可作为 Web 应用前端工程起点
    AndroidKotlin 原生代码原生 Android 前端 UI 框架,可直接导出 APK 安装至手机
    iOSSwift 原生代码原生 iOS 前端 UI 框架,作为 Xcode 工程起点
    设计稿Sketch 文件供设计师在标准设计工具中进一步深化

    UXbot 是目前国内唯一支持 Android Kotlin 和 iOS Swift 原生前端代码导出的 AI 原型工具。主流 AI 竞品(Lovable、Bolt、Base44 等)仅支持 Web 端或跨平台代码,不具备原生移动端代码输出能力。对于计划上架 App Store 或 Google Play 的产品团队,这是不可替代的核心优势。
    云端运行:UXbot 支持将生成的 Web 应用直接在云端部署,生成可访问的在线 URL,无需本地环境配置,可即时分享给团队、用户或投资人进行在线演示。Android 项目支持直接导出 APK 安装包,安装至真机后进行完整的移动端体验演示。
    开发团队收到导出代码后,将其作为 UI 层工程起点,专注于接入后端业务逻辑,无需从零重写界面层。
    image5.png

    三、不同产品团队的 UXbot 使用场景

    初创团队:用原型替代文字描述,在开发前锁定产品方向

    初创团队最容易陷入的误区是用文字需求文档做产品对齐——投资人、早期用户和团队成员都无法从文字中真正感知产品体验。UXbot 帮助初创团队在没有设计师的情况下,用半天时间完成一个覆盖完整用户旅程的可交互原型,用真实可操作的演示替代口头描述。
    典型场景:种子轮融资路演前制作 Demo、内部团队需求对齐、早期用户访谈前的原型准备。

    产品经理:独立完成从需求到原型的全流程,减少对设计师的依赖

    产品经理可以用 UXbot 将 PRD 中的需求描述直接转化为可演示原型,在评审会议前独立完成原型制作,无需排设计师档期。流程画布功能尤其适合产品经理使用——在生成界面前先完成用户旅程的可视化梳理,本身也是产品需求整理的高效手段。
    典型场景:新需求评审前的快速原型准备、A/B 方案的并行原型对比、用户测试前的原型制作。

    设计团队:将概念验证和方向探索的成本降到最低

    在正式进入精细设计出稿之前,设计团队可以用 UXbot 快速生成多个方向的高保真原型,在早期阶段完成方向筛选,将精力集中在已经验证的方向上。
    典型场景:多设计方向并行探索、客户提案前的快速原型、需要向研发团队传达交互逻辑的设计方案演示。

    研发团队:获取 UI 层工程起点,专注业务逻辑实现

    研发团队可以将 UXbot 生成的前端代码直接作为 UI 层框架,省去从零搭建界面层的工作量。尤其对于独立开发者和小型研发团队,UXbot 补齐了 UI/UX 设计能力短板,使其能够在不依赖设计师的情况下完成专业质量的前端界面。
    典型场景:MVP 开发前的 UI 框架搭建、独立开发者的全栈项目启动、外包项目的快速界面原型交付。

    四、常见问题解答(FAQ)

    Q1:UXbot 能生成多少页面?有页面数量上限吗?

    UXbot 支持一次性生成完整多页面应用,适合处理 8 到 20 个页面量级的复杂产品结构。更大规模的产品可以分模块分批生成,再通过流程画布将各模块的跳转路径衔接起来。

    Q2:非技术背景的产品经理能独立使用 UXbot 吗?

    可以独立使用。UXbot 的操作逻辑以自然语言输入和可视化拖拽为主,不涉及任何代码操作和设计软件技能。唯一需要投入的准备工作是对产品方向的清晰思考——核心用户是谁、需要完成什么任务、有哪些核心页面。这些判断本来就是产品经理的核心工作。

    Q3:UXbot 生成的原型可以直接发给用户做测试吗?

    可以直接使用。UXbot 生成的多页面界面支持真实的页面跳转和交互,测试参与者可以在原型链接中自行点击操作,无需主持人全程引导。建议在正式发送前先在内部完整走通所有演示路径,确认无跳转死端后再交给外部用户。

    Q4:导出的前端代码需要开发团队做多大的改动才能上线?

    导出的前端代码是 UI 界面层框架,覆盖所有页面的视觉结构、组件排列和页面跳转关系。开发团队需要在此基础上接入后端服务(用户认证、数据存储、业务接口)、完善边缘状态处理和错误提示,以及进行设备兼容性测试。UI 层的从零重写工作 UXbot 已完成,开发团队只需聚焦在业务逻辑的实现上。

    Q5:UXbot 和传统原型工具(如墨刀、Axure)的本质区别是什么?

    传统原型工具是「你设计什么就呈现什么」的工具,设计师需要手动搭建每一个页面的元素和交互。UXbot 是「你描述什么就生成什么」的工具,从需求描述出发,AI 自动生成完整的多页面界面结构和交互逻辑。UXbot 额外具备代码导出能力,能将生成的原型直接转化为可用的前端工程代码,传统原型工具不具备这个能力。

    五、开始你的 APP 原型生成

    选型工具的最终标准只有一个:能否在你的实际工作流中稳定产出结果,帮助团队更快做出更好的产品决策。

    大家好,分享一下最新做的网站:

    https://faceswapvideo.net/

    这是一个在线换脸 AI 网站,主打图片换脸和换脸视频,打开浏览器就能直接使用。

    目前支持的功能

    1. 图片换脸

    优势: 处理速度快,成图质量更高。
    适用场景: 头像、写真、职业照、大头照、旅游照片等。

    2. 视频换脸

    优势: 支持最高 2 分钟视频换脸,这一点在市面上的同类产品里相对少见。
    功能说明: 支持上传视频和目标人脸照片,自动生成换脸视频,整体流程比较简单。

    注意

    目前实测下来,搞不了 HS ,但是抖音小视频,或者图片那些没有问题。

    网站还在持续迭代中,后面会继续补更多模板、GIF 场景,以及更长视频的处理能力。

    欢迎大家体验,也欢迎直接提建议和吐槽,我会继续优化。

    最近 claude 很火爆,我也自己测试了下,用 claude 做了一个校友会的 Demo ,没怎么用提示词,也没去看技巧,就列出了功能,结果里面都很详细,考虑的很周到,不需要我重新再输入什么提示词,完完全全是全自动。
    所以在想能不能从 0 开发一个校友会系统,慢慢的开发,碰到问题再发代码给 claude 进行分析修改,问下 v 友什么经验分享的,或者技巧之类的,非常感谢!!

    在深圳 12 个年头大概搬了 5 次,其实搬家都很劳累。
    所以这次不出意外算是最后一次搬家了,这次搬家感觉挺幸运。
    那天阳光明媚,然后就跟着中介去看房,没看上中介介绍的房子,自个就在村落里转悠找房子,
    阴差阳错的找到了本地一手房东,然后看了下房子,房间内光照时长很不错大概下午 3-5 点时间都有阳光照进房间。
    客厅整体光线亮度也可以,目前已经租住一个月整体感觉都不错,楼下周边也没有什么餐饮大排档,晚上睡觉能深度睡眠,保证睡眠质量。
    租的两居室房租 2600 ,没有其他任何费用,民水民电,房东还给置办了新的床和床垫,空调也是新的还是 1 级能效。
    希望在外奋斗的 V 友们也能租到一个满意的房子,如何可以的话顺便也祝福一下。

    告别收藏夹吃灰,欢迎来到「产品派」—— 一个发现与分享优质产品的创意社区

    你是否也有过这样的困扰?平时收藏了太多的链接、网站、工具、产品和灵感,收藏夹起初是“知识宝库”,后来却变成了“数字废墟”。东西越积越多,分类越来越乱,真正想回头找的时候,经常翻半天都找不到。许多当时令人眼前一亮的产品,被塞进收藏夹后就再未打开;许多本值得认真分享、讨论的创意,也慢慢淹没在信息的洪流中。

    为了解决这个痛点,我从 2025 年 8 月开始构思,并在 10 月初正式启动开发。经过多轮迭代与测试,今天,我很高兴地向大家宣布:「产品派」 正式上线了!

    「产品派」是一个发现和分享优质产品的创意社区。 无论你是热衷探索新奇产品的用户,还是正在打磨产品的独立开发者或创业者,都可以在这里更方便地找到好产品、分享好产品,同时也让自己的作品被更多人看见。


    🎯 社区核心玩法

    目前,产品派已开放以下核心功能:

    1. 产品发布与展示


      • 你可以提交自己的产品,完善介绍、分类、标签等信息,构建一个精美的展示页,让他人快速了解其价值。
    2. 产品发现与榜单


      • 浏览最新产品热门产品产品榜单,通过社区的力量高效筛选,不错过任何值得关注的新鲜事物。
    3. 丰富的社区互动


      • 这里不只是普通的发帖讨论,还支持多种趣味互动功能,让交流更有深度和乐趣:
        • 投票:适合发起选择题,快速收集用户意见与产品反馈。
        • 抽奖:支持定时开奖与自动派发奖品,是举办互动活动的利器。
        • 优惠码:非常适合分发邀请码、限时福利或专属折扣。
        • 盲盒:与抽奖不同,这是即时开奖,惊喜(或“空盒”)即刻揭晓。


    🎁 上线专属福利,诚邀第一批种子用户

    为感谢早期支持者,我们准备了专属身份和限时活动:

    • 种子用户勋章:在 2026 年 4 月 17 日至 7 月 17 日 期间注册的用户,将永久获得 「种子用户」 专属勋章,铭记您与社区共同的起点。

    • 开站抽奖活动:为庆祝上线,我们特地通过社区的“抽奖功能”发起了一个活动:


      • 活动时间2026 年 4 月 17 日 10:00 至 4 月 19 日 20:00
      • 活动奖励:我们将抽出 10 位 幸运用户,每人赠送 18.88 元 支付宝现金红包。


    ✨ 如何加入我们?

    如果你平时喜欢发现新产品,如果你正在精心打磨自己的产品,亦或你单纯喜欢交流、结识新朋友,「产品派」 都欢迎你的到来。

    立即访问社区,发现更多可能:
    👉 https://chanpinpai.com

    让我们在这里,重新点燃对每一个好产品的好奇与热情。期待在社区与你相遇!


    —— 一个同样受困于收藏夹,并希望做出改变的产品爱好者

    一直想试 claude ,但苦于众所周知的原因没法订阅。
    现在用的 gpt plus 套餐,没了双倍用量之后消耗的速度太快了,一周的用量一天就能用完。
    这周订阅到期,想问大家从“实际开发效果”和“折腾性价比”的角度来说,有必要尝试从 codex 切换到 claude 吗?

    「现代 AI 最让我着迷的一点是,它让我们得以用数学和哲学的方式,去触碰那些隐藏在人类互动背后的无形变量:AI 让『vibes』(氛围/感觉)变得可读、可理解。」

    ——Vitalik Buterin,以太坊创始人

    4 月 25 日(周六)下午,RTE Meetup 落地杭州。

    如果一个 Agent 不仅能看清眼前画面,更能瞬间捕捉你忽略的周边细节与上下文,会发生什么?

    从桌面端的屏幕理解到可穿戴设备,能够 Always on 且实时捕获环境数据的 Visual Agent (视觉智能体) 正成为人机共同体感知物理世界的关键。

    随着多模态模型的发展,获取真实世界的 Context(如视觉、音频或意图)已不再是技术瓶颈。

    但拿到海量 Context 之后呢?

    多模态感知不等于真实需求。 如何让 Context 与产品和市场真正契合?在哪些场景下,看懂 Vibes 才是不可替代的刚需?这才是决定下一代交互成败的必答题。

    我们邀请了 蚂蚁百灵大模型、声网、Chance AI、声绘未来、湃启科技、Rokid 与 Cerul.ai 的技术专家及创始人,一起聊聊当 Agent 看得见 Vibes 时,Context Awareness 的畅想与现实。

    关于 Physical AI Camp·超音速计划 2026

    本次 RTE Meetup 也是「Physical AI Camp·超音速计划 2026」杭州站。

    我们的创业营已经正式开启报名,目前正在招募 Voice Agent、Physical AI 和实时多模态 AI 领域的创业团队。营期内,我们将为入营项目提供技术资源支持、投融资对接,以及行业头部展会的展位资源。更重要的是,在这里你将和一群志同道合的伙伴共同探索。

    RTE Meetup 议程

    • 13:30 - 14:00 丨 签到与自由交流
    • 14:00 - 14:10 丨 Intro:超音速计划 2026·Physical AI Camp 介绍
    • 14:10 - 15:10 丨 Keynote 分享

      • Visual Agent:从看得见到看得懂,还差什么?

    吴晓凡,Chance AI CTO

    • 让 Agent 走出象牙塔,做那些用户觉得「很简单」的事

    孙思宁,声绘未来 & 浙江湃启科技联合创始人

    • 迈向人机共生的交互终端

    杨天翼,Rokid AI 产品经理

    • Teach Your AI Agents to See

    Jiaxi Cui(Panda),Cerul.ai Founder

    • 15:10 - 15:40 丨 圆桌讨论一:Building the Context ——Agent 视觉与感知技术底座
    • 嘉宾

      • 彭晗,蚂蚁集团高级算法专家,百灵多模态大模型后训练算法负责人
      • 张乾泽,Agora Agent Platform Lead
      • 孙思宁,声绘未来 & 浙江湃启科技联合创始人
    • 主持人: 杨慧 Cynthia Yang,RTE 开发者社区发起人
    • 15:40 - 16:10 丨 圆桌讨论二:Context-Product Fit —— 寻找多模态交互的真实场景

      • 嘉宾

        • 吴晓凡,Chance AI CTO
        • 杨天翼,Rokid AI 产品经理
        • Jiaxi Cui(Panda),Cerul.ai Founder
      • 主持人: 傅丰元,RTE 开发者社区负责人
    • 16:10 - 16:30 丨 Lightning Demo,带上你的软/硬件现场展示介绍
    • 16:30丨 自由交流

    活动信息

    • 活动时间: 2026 年 4 月 25 日(周六) 14:00 - 16:30(13:30 开始签到)
    • 活动地点: 杭州西湖区灯彩街云谷中心
    • 参与方式: 扫描二维码,或点击下方链接报名

    https://www.rtecommunity.dev/t/t_AX7NzQwHnX6p2C

    主办方: RTE 开发者社区、超音速计划

    合作伙伴: 魔搭社区、云谷中心

    社区伙伴: S 创、脑放电波、Bonjour!、Research AI+、小红书科技、WAIC UP!、启师傅 AI 客厅、分子分母、机智流

    💡 我们也新开了一个「Physical AI+多模态」微信群,欢迎关注 AI 硬件、跨平台开发、语音交互、视觉理解等方向的伙伴申请加入!

    加微信 Creators2022,备注身份和来意(公司/项目+职位/技术栈+加 Physical AI 群),备注完整者优先入群。

    阅读更多 Voice Agent 学习笔记:了解最懂 AI 语音的头脑都在思考什么

    先说事情起因,我几个月前开发了一个分析聊天记录的软件,当时是在自己的 github 账户下的,也就是 hellodigua/chatlab,结果没想到发出去以后有很多用户有这个需求,在不断维护下,Star 到现在也涨到 5700 了。

    于是就想到,这个项目要继续发展下去的话,应该把项目转到组织下更合适一些,不出意外,ChatLab 的组织已经被一个葡萄牙的开发者给注册了,但是它的项目已经 5 年多没有更新了。

    于是尝试给那个开发者的项目下发了一个 issue ,说明了我的项目现状,希望能获取到这个组织。

    发完之后一个月都没动静,我基本已经死心了,打算迁移到另一个组织下,结果昨天开发者大佬居然回复了!!!让我加 Discord 联系他!

    我们两个在 Discord 上聊了一下,还没聊几句,在我还没反应过来的时候,他就直接把自己的组织重命名了。

    然后发了一句:done

    此时我甚至还没来得及震惊,这么爽快的吗?

    实际上我心里预期是他可能会提出一些要求,我也做好了可能要付出代价的准备,如果是小额的还可以,如果是大额的那真心付不起,就只能用另一个组织名。

    主要大佬这么爽快真让我有点措手不及,是我以小人之心度君子之腹了。

    可能是真的没想到,所以又震惊又开心又感动。

    本来最近几年,我已经习惯了在国内互联网上,一切资源都需要付费,任何有价值的域名、名字都会被抢注,甚至是开源软件都会被打包后标一个价格在各种渠道售出,然而这个葡萄牙的大佬没有任何要求,直接转让给了我。

    甚至还主动提到两次:“如果你在后续开发中需要帮助,尽管开口。”

    我想这就是我喜欢开源的一部分原因:即便在 2026 年,互联网精神依然广泛存在🥹

    Azure DevOps Server 25H2 - 企业级本地 DevOps 协作与持续交付平台 (2026 年 4 月更新)

    On-premises collaborative software tools for teams of all sizes

    请访问原文链接:https://sysin.org/blog/azure-devops-server/ 查看最新版。原创作品,转载请保留出处。

    作者主页:sysin.org


    Azure DevOps Server

    使用本地托管的集成式软件交付工具共享代码、跟踪工作和交付软件

    使用 Azure DevOps Server,可以自行托管 Azure DevOps 中提供的相同新式开发服务,包括 Boards(规划和跟踪)、流水线(CI/CD)、存储库(Git 存储库和集中式版本控制)、测试计划(手动和探索性测试)、工件(包管理和流水线工件)。

    Azure DevOps Server Express 是免费的,易于在客户端和服务器操作系统上设置,并支持与 Azure DevOps Server 相同的所有功能 (sysin)。唯一的区别在于,它被限制为五个或更少的活跃用户,这受制于许可协议。

    面向各种规模团队的本地协作软件工具

    概述

    什么是 Azure DevOps Server

    Azure DevOps Server是一组在本地托管,且面向整个团队的协作软件开发工具。Azure DevOps Server 与现有 IDE 或编辑器集成,可帮助跨职能团队有效处理各种规模的项目。

    关系图显示了柔和渐变背景中由虚线连接的一系列图标,用于表示不同的操作系统和技术。

    开放且可扩展

    使用表述性状态转移 (REST) API 和 OAuth 2.0 等开放标准将自定义工具或第三方服务与 Azure DevOps Server 集成 (sysin)。将你喜欢的工具和服务与来自 Azure DevOps 市场的扩展集成。

    渐变背景上带有彩色节点和虚线的抽象网络图。

    Azure DevOps Server Express

    面向个人或小型团队的免费版本。个人开发者或不超过五名成员的小型团队可免费使用 Azure DevOps Server Express。在个人台式电脑或笔记本电脑上轻松安装,无需专用服务器。当团队扩展到五位团队成员以上时,升级到 Azure DevOps Server 并享有完整的历史记录。

    抽象关系图显示了用户图标、移动设备和云符号之间的网络连接,用于表示数字通信或云计算。

    相关服务

    使用全部 Azure DevOps Services,或仅使用所需内容来补充现有工作流

    sysin

    ☁️ Azure Boards

    使用支持跨团队规划、跟踪和讨论工作的成熟敏捷工具,更快地为用户提供价值。

    了解详细信息:https://azure.microsoft.com/zh-cn/products/devops/boards/

    sysin

    ☁️ Azure Pipelines

    使用适用于任何语言、平台或云(包括 GitHub 或任何其他 Git 提供商)的持续集成和持续交付 (CI/CD) 生成、测试和部署。

    了解详细信息:https://azure.microsoft.com/zh-cn/products/devops/pipelines/

    sysin

    ☁️ Azure Repos

    获取无限制云托管专用 Git 存储库,并通过拉取请求和高级文件管理进行协作,以生成更好的代码。

    了解详细信息:https://azure.microsoft.com/zh-cn/products/devops/repos/

    sysin

    ☁️ Azure Test Plans

    使用手动和探索测试工具自信地测试并交付。

    了解详细信息:https://azure.microsoft.com/zh-cn/products/devops/test-plans/

    sysin

    ☁️ Azure Artifacts

    与团队一起创建、托管和共享包,并且只需单击一下即可将项目添加到 CI/CD 管道中。

    了解详细信息:https://azure.microsoft.com/zh-cn/products/devops/artifacts/

    sysin

    ☁️ 扩展商城

    访问从 Slack 到 SonarCloud 的一系列扩展,以及由社区生成的 1,000 个其他应用和服务。

    了解详细信息:https://go.microsoft.com/fwlink/?linkid=2215919&clcid=0x804

    下载地址

    Azure DevOps Server 25H2 for Windows x64 (2026 年 4 月更新)

    Azure DevOps Server Express 25H2 for Windows x64 (2026 年 4 月更新)


    Azure DevOps Server Patch 3

    发布日期:2026 年 4 月 14 日
    下载地址:https://aka.ms/devopsserverpatch3

    发布 Patch 3,更新以下内容:

    • 修复了在工作项自动完成期间,由于空引用异常,完成拉取请求可能会失败的问题。
    • 改进了注销期间的验证,以防止潜在的恶意重定向。
    • 修复了创建与 GitHub Enterprise Server 的 PAT 连接。

    更多:Windows 下载汇总

    不是新浪潮的开始,而是旧范式的收尾

    一、引子:三篇文章,一个问题

    最近读到三篇文章,单独看各有意思,串起来读更有意思。

    第一篇来自前端开发者 Adam Argyle,标题直白:《AI 为什么在前端表现糟糕》。第二篇是宾夕法尼亚大学和波士顿大学两位学者发在 arXiv 上的论文:《AI 裁员陷阱》,用博弈论分析 AI 驱动的裁员潮为什么停不下来。第三篇来自未来研究者 Andrew Curry,标题更大胆:《AI 可能是这波数字浪潮的终结,而不是下一个重大事件》

    三篇文章的作者背景各不相同,关注的问题也不一样,但放在一起,它们拼出了同一幅图景——AI 或许不是我们以为的那个故事。

    本文不讨论 AI 能不能、好不好,而是借这三篇文章尝试回答一个更基础的问题:在历史的坐标上,AI 到底处于什么位置?

    二、AI 做不好的事,暴露了它的本质

    Adam Argyle 的 文章 写的是前端,但他列出的那些问题,后端开发者读起来会觉得分外熟悉。

    AI 很擅长脚手架、样板代码、token 迁移这类“高度重复、模式清晰”的工作。但一旦你走出这条铺好的路——想要一个定制交互、一套贴合业务的架构决策、一段真正考虑边界条件的逻辑——它就开始胡说了。越复杂,越糟糕。

    Argyle 总结了四个根本原因:训练数据太旧、不会真正“看”、不知道“为什么”、以及零环境控制。这四条放到后端同样成立,甚至更严重。微服务拆分的边界、分布式系统的一致性权衡、幂等性设计……这些“为什么”恰恰是工程里最有价值的部分,也是 AI 最无能为力的地方。

    训练数据旧这个问题,还有一个更隐蔽的维度——不只是数据“旧”,而是几乎没有。最新发布的 Kubernetes API、刚合并的特性、刚废弃的字段……这些信息在模型训练截止日之后才存在,LLM 原生不知道,只能靠 web search 打补丁。而这种情况会出现在每一个快速演进的技术栈里,不只是 Kubernetes。每一个“角落”都是一个盲区,盲区叠加盲区,最终的不确定性远比表面看起来大得多。

    这引出了一个值得认真对待的问题:一个只能优化已知模式、无法理解“为什么”、对新事物天然滞后的技术,能开创一个新时代吗?

    三、即使知道悬崖在哪,也会一起冲下去

    如果说前一个问题是“AI 能不能”,这篇论文问的是另一个更残酷的问题:就算 AI 正在造成伤害,企业能停下来吗?

    答案是:不能。

    宾大和波士顿大学的两位学者在 这篇论文 里建了一个博弈论模型,核心逻辑并不复杂:一家公司用 AI 裁员,节省的成本全归自己;但被裁的工人也是消费者,他们失去收入后减少的消费,由整个行业承担。每一轮裁员都在侵蚀所有公司赖以生存的需求基础,但没有任何一家公司会为此买单。

    这是一个教科书式的外部性问题,也是一个囚徒困境:每家公司的最优策略都是“比竞争对手自动化更快”,哪怕所有人都清楚前方是悬崖。竞争越激烈、AI 越强大,这个扭曲就越深。

    论文评估了数种政策干预手段:员工持股、全民基本收入、职业再培训、资本利得税、企业自愿协议……全部无效。唯一能纠正这个扭曲的,是对自动化直接征税,把外部性内部化(让造成伤害的人为此买单)。

    但政策能解决的是游戏规则问题。有一个更底层的结构性矛盾值得关注:生产与消费本是一个飞轮。 有人生产、有人有钱消费,飞轮才能转。历史上每一次技术革命,之所以能持续,是因为它在提升生产效率的同时,也创造了新的就业、新的购买力、新的消费需求——飞轮不但没停,反而转得更快。

    但 AI 这次的逻辑不同。它提升的是“用更少的人做更多的事”的效率,而不是“创造更多需要人去做的新事”。如果这个趋势持续,飞轮的消费端会持续失血,生产端再高效也没有意义。不是技术不够强,而是飞轮的转动逻辑变了。

    这不像是一个正在创造新世界的技术该有的样子。倒更像是,一个旧系统在走向终点时,把自己榨干的最后动作。

    四、历史给了我们一个框架

    前几节的问题是“AI 怎么了”,这一节要回答的是:这一切,在历史上见过吗?

    技术经济学家 Carlota Perez 研究了从蒸汽机到互联网的五次技术浪潮,发现它们都遵循同一个模式:安装期 → 金融危机 → 部署期 → 成熟饱和。新技术先建基础设施,钱烧完之后泡沫破裂,然后真正落地生根、改变生活的应用才大规模涌现,最后趋于饱和,资本开始寻找下一个浪潮。

    博主 Andrew Curry 在 这篇文章 里引用了科技投资人兼作家 Nicolas Colin 的分析,指出三个信号说明我们已经处于当前这波数字浪潮的晚周期

    2022 年的创业融资崩塌是结构性的,不是周期性的。 当好的创业想法对所有人(包括财力雄厚的大公司)都变得显而易见,初创公司赖以生存的“不确定性优势”就消失了。市场不是在等待下一个风口,而是在走向饱和。

    ChatGPT 不是从车库里冒出来的。 真正开创新浪潮的技术,往往在早期是隐秘的、被低估的——晶体管、互联网……没有人知道那是一个时代的开始。但 ChatGPT 的突破来自微软的巨额算力投入,谷歌、Meta、亚马逊随即跟上千亿美金。这种“大资本集中火力打已知问题”的模式,正是晚周期的典型特征。

    平台饱和基本完成。 还没有被数字化的领域——医疗、教育、建筑、政府服务——并不是 AI 的新市场,而恰恰是数字范式的天然边界,是它啃不动的地方。

    Colin 的结论是:AI 更像 70 年代精益生产之于大规模制造——它优化了现有系统,却没有开创新系统。 精益生产让工厂跑得更高效,但它没有开启一个新的工业时代;它是汽车时代成熟期的产物,不是下一个时代的起点。

    历史上每一次真正的新浪潮,在它开始的时候,没有人知道它来了。没有发布会,没有万亿估值,没有全球 CEO 竞相表态。有的只是一个新的成本结构悄悄改变了某个角落的可能性边界。

    AI 的到来,太显眼了。

    五、那下一个浪潮在哪?

    这是读完前面所有内容之后,最自然会冒出来的问题。可惜,这也是最难回答的一个。

    按照 Perez 的模型,每次新浪潮的开始,都埋在当时主流视野的盲区里。蒸汽机时代没有人预见铁路会重塑整个社会结构;电气化时代没有人预见汽车会成为 20 世纪的核心产品;互联网的第一个十年,大多数人觉得它是学术玩具。

    所以真正的问题不是“下一个是什么”,而是:在哪些地方,现有范式明显不够用、而新的可能性正在悄悄积累?

    Curry 的文章里给了一些方向:医疗、教育、建筑、能源、政府服务——这些都是数字化“啃不动”的领域。不是因为它们不重要,而是因为它们的核心问题不是信息处理,而是物理世界、人际信任、制度结构。AI 在这些地方的局限,恰恰说明它们可能需要一套全新的范式来解锁,而不是现有工具的延伸。

    当然,这只是一种可能的推断。历史上没有人能精准预测下一个浪潮从哪里发端。

    能确定的只有一件事:当下一个真正的浪潮到来时,它不会有发布会,不会有万亿估值的公司为它站台,不会有全球 CEO 争相表态自己已经押注。 它会安静地改变某个角落的成本结构,然后慢慢蔓延,直到有一天,所有人都突然意识到世界已经不一样了。

    到那时候,大家才会回头看,说:哦,原来从那时候就开始了。

    六、结语:效率压榨的终点

    三篇文章,三个维度,指向同一个结论。

    AI 做不好真正复杂的事,因为它是模式的压缩器,不是问题的理解者。AI 驱动的裁员停不下来,因为理性在错误的游戏规则下只会加速集体自毁,把生产与消费的飞轮越转越慢。AI 的资本热潮是大公司在存量市场里的军备竞赛,是内卷,不是开疆——红皇后效应(Red Queen Effect)——跑得越快,相对位置越没变,只是把整体扭曲推得更深。

    把这三点放在 Perez 的历史框架里,画面就清晰了:我们正处于数字浪潮的晚周期。 AI 是这个时代最后一次大规模的效率压榨,是旧范式在走向终点前,把自己能榨的都榨干的动作。它有用,有时候非常有用,但它的方向是优化,不是创造。

    这不是悲观,而是定位。

    理解 AI 在历史上的真实位置,不是为了否定它的价值,而是为了不被它的叙事带跑。过去几年,太多的资源、注意力、人才,涌进了“优化旧世界”的方向,而真正值得押注的问题——那些需要全新范式才能解锁的角落——反而没人看。

    下一个浪潮不会从聚光灯下走出来。它会在某个此刻还显得偏僻、冷门、“不够性感”的地方悄悄生根。

    我们现在能做的,或许是在这场喧嚣里,保留一部分清醒,留意那些安静的角落。

    简介

    .NET 异步里,如果你顺着这条线往下学:

    • Task
    • ValueTask
    • IValueTaskSource

    会发现难度是明显跳跃的。

    Task 还是大多数业务代码的默认答案。
    ValueTask 已经开始涉及“减少分配、减少状态对象”的优化。
    到了 ValueTaskSource,就基本进入了 .NET 异步底层设施这一层。

    这个知识点最容易被写得很玄:

    • “零分配异步”
    • “高性能神器”
    • “Kestrel 同款”

    这些说法不算错,但如果只停在这里,其实没什么用。

    这篇文章更想把几件真正重要的事讲清楚:

    • ValueTaskSource 到底是什么;
    • 它为什么会出现;
    • 它和 TaskValueTask 是什么关系;
    • 怎么自己写一个最小 demo 跑起来;
    • ManualResetValueTaskSourceCore<T> 到底解决什么问题;
    • 为什么普通业务代码通常不该直接使用它。

    一句话先给结论:

    IValueTaskSourceValueTask 异步路径上的低层承载接口,核心价值是让异步操作的状态对象可以复用,从而减少甚至避免额外分配。

    为什么会有 ValueTaskSource

    先从 Task 说起。

    大多数异步 API 最开始都是这样:

    Task<int> ReadAsync(...)

    这类 API 最大的优点是简单、通用、心智负担低。

    但它有一个很现实的问题:

    • Task 是引用类型
    • 一旦异步操作不能直接同步完成,通常就要有一个状态对象来承载这次操作

    在普通业务里,这点成本通常完全可以接受。

    但在这些场景里,问题会变得明显:

    • 高吞吐网络库
    • Socket
    • Pipelines
    • Kestrel
    • 高频 I/O 循环

    因为这里的异步操作不是偶发,而是每秒几十万、上百万次地发生。

    这时,光是“为每次异步操作分配一个状态对象”,就可能成为热点成本。

    于是有了第一步优化:

    ValueTask<int>

    ValueTask<T> 的价值在于:

    • 如果结果已经同步可得,可以直接把结果放进值类型里
    • 不一定每次都需要分配一个 Task<T>

    但问题并没有完全结束。

    因为一旦操作真的异步挂起,后面还是得有一个对象来保存:

    • 当前状态
    • continuation
    • 完成结果
    • 异常或取消

    IValueTaskSource 就是在这里出现的。

    它解决的是更深一层的问题:

    异步路径上的状态对象,能不能不是“一次性 Task”,而是一个可复用的承载体?

    ValueTaskSource 到底是什么?

    更准确地说,这里说的通常是:

    IValueTaskSource
    IValueTaskSource<TResult>

    它们位于:

    System.Threading.Tasks.Sources

    接口成员看起来不多,但都很底层:

    public interface IValueTaskSource<out TResult>
    {
        ValueTaskSourceStatus GetStatus(short token);
        void OnCompleted(Action<object?> continuation, object? state, short token, ValueTaskSourceOnCompletedFlags flags);
        TResult GetResult(short token);
    }

    这几个方法如果只看名字,很容易觉得抽象。

    把它翻成人话,大概就是:

    • GetStatus:这次异步操作现在完成没?
    • OnCompleted:如果还没完成,把 continuation 挂进来
    • GetResult:完成后把结果、异常或取消状态取出来

    所以它本质上是在做这件事:

    提供一个可以被 ValueTask 包装的“异步结果来源”。

    它和 TaskValueTask 的关系怎么理解?

    这几个类型最好分层理解。

    1. Task

    • 最通用
    • 最容易用
    • 一次异步操作通常对应一个独立的任务对象

    2. ValueTask

    • 是一个结构体
    • 可以直接承载同步结果
    • 也可以包一个 Task
    • 还可以包一个 IValueTaskSource

    所以 ValueTask 不是 Task 的简单替代品,而更像是:

    • 一个更灵活的异步返回壳

    3. IValueTaskSource

    它不是给业务方直接 await 用的“常规 API 类型”,而是:

    • 给框架、基础设施、高性能组件用来承载 ValueTask 异步状态的底层接口

    更直白一点说:

    • Task 更像“现成成品”
    • ValueTask 更像“包装壳”
    • IValueTaskSource 更像“你自己提供的底层发动机”

    安装

    这个点和很多库不太一样。

    如果你用的是现代 .NET,例如:

    • .NET 6
    • .NET 8
    • .NET 9

    通常不需要额外安装专门的 NuGet 包,命名空间就在运行时库里:

    using System.Threading.Tasks.Sources;

    如果你是较老的目标框架,或者做一些兼容性场景,文档里会看到这些类型也出现在:

    Microsoft.Bcl.AsyncInterfaces

    但如果你只是想在当前主流 .NET 版本里写 demo,通常直接可用,不需要额外加包。

    怎么自己建一个最小 demo 跑起来?

    先建一个控制台项目:

    dotnet new console -n ValueTaskSourceDemo
    cd ValueTaskSourceDemo

    然后把 Program.cs 改成下面这样。

    先准备一个最小的 IValueTaskSource<int> 实现:

    using System.Threading.Tasks.Sources;
    
    public sealed class SimpleValueTaskSource : IValueTaskSource<int>
    {
        private ManualResetValueTaskSourceCore<int> _core;
    
        public SimpleValueTaskSource()
        {
            _core.RunContinuationsAsynchronously = true;
        }
    
        public ValueTask<int> StartAsync()
        {
            _core.Reset();
    
            _ = Task.Run(async () =>
            {
                await Task.Delay(100);
                _core.SetResult(42);
            });
    
            return new ValueTask<int>(this, _core.Version);
        }
    
        public int GetResult(short token) => _core.GetResult(token);
    
        public ValueTaskSourceStatus GetStatus(short token) => _core.GetStatus(token);
    
        public void OnCompleted(
            Action<object?> continuation,
            object? state,
            short token,
            ValueTaskSourceOnCompletedFlags flags)
            => _core.OnCompleted(continuation, state, token, flags);
    }

    再在 Main 里这样调用:

    var source = new SimpleValueTaskSource();
    var result = await source.StartAsync();
    
    Console.WriteLine(result);

    最后执行:

    dotnet run

    如果终端输出:

    42

    就说明这个最小链路已经跑通了。

    这个 demo 不复杂,但已经能说明最关键的一点:

    • ValueTask<int> 的底层不一定是 Task<int>
    • 它也可以包装你自己的 IValueTaskSource<int>

    为什么示例里几乎都要配 ManualResetValueTaskSourceCore<T>

    因为手写 IValueTaskSource<T> 的成本其实不低。

    你真正要自己处理的东西包括:

    • 状态流转
    • continuation 注册
    • 结果设置
    • 异常设置
    • 取消处理
    • 版本控制
    • 并发竞态

    这已经不是“写三个接口方法”那么简单了。

    官方给出的务实做法就是:

    ManualResetValueTaskSourceCore<T>

    它可以理解成:

    一个帮你实现大部分 IValueTaskSource<T> 生命周期管理逻辑的核心组件。

    所以真实使用里,更常见的模式是:

    • 你自己实现 IValueTaskSource<T>
    • 但真正的底层逻辑委托给 _core

    也就是示例里这种写法:

    private ManualResetValueTaskSourceCore<int> _core;

    ManualResetValueTaskSourceCore<T> 到底帮你做了什么?

    最核心的是三件事:

    1. 管状态

    异步操作至少会经历这些状态:

    • Pending
    • Succeeded
    • Faulted
    • Canceled

    这部分它已经帮你管理好了。

    2. 管 continuation

    await 的本质并不是魔法,而是:

    • 如果没完成,就注册 continuation
    • 等完成时再把 continuation 调起来

    OnCompleted 这一整套逻辑,_core 也帮你处理了。

    3. 管版本号

    这点特别关键。

    token / Version 是干什么的?

    你会看到示例里有这句:

    return new ValueTask<int>(this, _core.Version);

    这里的 Version 不是装饰字段,而是很重要的保护机制。

    因为 IValueTaskSource 这套东西经常会和“复用对象”一起出现。

    也就是说,同一个 source 实例,未来可能会承载:

    • 第一次异步操作
    • 第二次异步操作
    • 第三次异步操作

    这时候如果没有版本号,调用方就可能把:

    • 上一次操作的 await
    • 和这一次操作的状态

    混在一起。

    所以 token / Version 的作用就是:

    • 区分“这是第几次操作”
    • 防止错误复用
    • 防止旧 await 读取到新状态

    这也是为什么 GetStatusOnCompletedGetResult 都要带 token

    GetStatus / OnCompleted / GetResult 的调用链到底是什么?

    如果只背接口定义,这三个方法会很抽象。

    但一旦放回 await 的真实流程里,它们就顺了很多。

    你可以把一次典型调用粗略理解成这条链:

    调用方拿到 ValueTask
    -> await 开始检查它是否已完成
    -> ValueTask 去问 IValueTaskSource.GetStatus(token)
    -> 如果还没完成,就调用 OnCompleted(...) 注册 continuation
    -> 异步操作真正完成时,source 内部执行 SetResult / SetException / SetCanceled
    -> continuation 被调起
    -> await 恢复执行
    -> ValueTask 再调用 GetResult(token) 取结果或抛异常

    这里最关键的是角色分工:

    • GetStatus:告诉 await 当前是不是还在 Pending
    • OnCompleted:把“后续恢复逻辑”挂进去
    • GetResult:在完成后统一取结果

    所以不要把这三个方法看成三个孤立 API。

    它们其实是在共同完成一件事:

    • ValueTask 能像等待 Task 一样去等待你这个自定义异步源

    为什么 GetResult 不只是“返回结果”?

    这一点很容易低估。

    GetResult(token) 不只是负责:

    • 成功时把 TResult 返回出来

    它还负责:

    • 如果这次操作失败,就在这里重新抛出异常
    • 如果这次操作被取消,就在这里把取消语义抛出来

    也就是说,从 await 调用者角度看:

    • 成功、异常、取消

    最后都会统一落到 GetResult 这一步来收口。

    这也是为什么很多最小 demo 看起来只像“return 结果”,但真实实现里这一步其实承担了更完整的语义边界。

    OnCompleted 里的 flags 到底在控制什么?

    这也是面试和源码阅读里很容易被问到的一点。

    OnCompleted 的第四个参数是:

    ValueTaskSourceOnCompletedFlags

    它的价值不在于“多了一个枚举”,而在于:

    • await 在注册 continuation 时,不只是把一个委托交给你
    • 还会把“这个 continuation 应该怎么跑”的一部分上下文要求带过来

    最值得关心的通常是两类语义:

    • ExecutionContext
    • SynchronizationContext

    ExecutionContextSynchronizationContext 分别是什么语境?

    这两个词经常一起出现,但不是一个东西。

    1. ExecutionContext

    它更偏逻辑执行上下文,比如:

    • AsyncLocal
    • 安全上下文
    • 某些环境数据流转

    当 continuation 需要捕获和恢复这类上下文时,相关 flag 会体现在 OnCompleted 调用里。

    2. SynchronizationContext

    它更偏“恢复到哪个调度环境”,最典型的语境是:

    • UI 线程
    • 某些特定同步上下文

    也就是说,一个 continuation 不只是要不要执行,还涉及:

    • 在哪里执行
    • 带不带原来的逻辑上下文执行

    这就是这些 flags 存在的意义。

    为什么这类 flags 很重要?

    因为 IValueTaskSource 已经不是纯业务 API,它在和编译器 / awaiter 协议直接打交道。

    如果这一层处理不对,影响的不是一两个字段,而是:

    • continuation 恢复位置不对
    • 上下文流动不符合预期
    • 某些 AsyncLocal 数据丢失
    • 某些回调调度时机异常

    所以更稳妥的做法通常不是自己重写一套 continuation 机制,而是:

    • 尽量把这部分交给 ManualResetValueTaskSourceCore<T> 处理

    也就是前面示例里的:

    _core.OnCompleted(continuation, state, token, flags);

    这不是偷懒,而是减少自己踩协议细节坑的概率。

    对象池复用模型到底该怎么理解?

    前面提到它通常和对象池一起出现,但这里要再讲透一点。

    比较典型的复用模型通常是这样:

    从池中取出一个 source 对象
    -> Reset,准备承载这一次异步操作
    -> 返回一个包装了该 source + version 的 ValueTask
    -> 异步操作完成
    -> 调用方 await 结束,结果已消费
    -> source 解除本次状态绑定
    -> 归还到对象池

    这里最重要的不是“用了池”,而是:

    • 同一个 source 在任意时刻只能归属于一次正在进行的操作

    也就是说,真正的关键约束是:

    • 借出前必须是空闲的
    • 归还前必须确认本次操作已经彻底结束

    这也是为什么复用模型如果写错,会比普通 Task 更难排查。

    因为出错后常见现象不是直接编译报错,而是:

    • continuation 串了
    • 旧 token 访问到了新状态
    • 上一次异常污染了下一次操作

    一个更贴近真实实现的池化心智模型

    你可以把一个池化的 IValueTaskSource 实例想成:

    • 它本身不是“某次异步操作”
    • 它只是“某次异步操作的可复用承载槽位”

    所以真正的生命周期不是:

    • new -> await -> 丢掉

    而是:

    • 借出一个槽位
    • 绑定到这次操作
    • 完成并清理
    • 再让下一次操作复用这个槽位

    理解到这一层,就会更容易明白为什么:

    • Version 必须存在
    • Reset 必须小心
    • 并发复用绝对危险

    它和编译器生成的 async ValueTask 状态机边界是什么?

    这是另一个很容易混的点。

    很多人会想:

    • 既然 async ValueTask 也返回 ValueTask
    • 那它是不是天然就等于 IValueTaskSource

    答案通常是否定的。

    这里要把两层东西拆开:

    1. 语言层的 async ValueTask

    如果你写:

    public async ValueTask<int> GetAsync()
    {
        await Task.Delay(100);
        return 42;
    }

    编译器会为这个方法生成:

    • 状态机
    • builder
    • continuation 恢复逻辑

    也就是说,编译器已经替你把异步状态机搭好了。

    2. IValueTaskSource

    它解决的是:

    • 当你不想让异步路径每次都走一次性状态对象时
    • 怎么自己提供一个低层可复用的异步结果来源

    所以两者的边界可以这样记:

    • async ValueTask:编译器帮你生成状态机
    • IValueTaskSource:你自己提供状态承载体给 ValueTask

    为什么说它们不是一回事?

    因为“返回类型一样”不代表“底层实现一样”。

    ValueTask<T> 只是一个外壳,它底层可能来自:

    • 直接结果
    • Task<T>
    • IValueTaskSource<T>

    编译器生成的 async ValueTask<T> 更多是在处理:

    • 方法如何挂起
    • 如何恢复
    • 如何组织状态机

    IValueTaskSource<T> 更偏:

    • 某次异步操作的结果载体和 continuation 协议怎么承载

    这就是它们的边界。

    什么时候该优先看 async ValueTask,什么时候才该看 IValueTaskSource

    如果你的问题还是这些:

    • 一个异步方法该怎么写
    • 返回 Task 还是 ValueTask
    • await 为什么会恢复

    那重点应该还在:

    • 编译器生成的异步状态机

    只有当你的问题已经进一步变成:

    • 异步路径上的状态对象能不能复用
    • continuation 承载开销能不能继续压
    • 高吞吐基础设施还能不能再少一点分配

    这时 IValueTaskSource 才会成为主角。

    为什么它通常和对象池一起出现?

    如果 IValueTaskSource 每次都 new 一个新的 source 对象,那它的价值就会打折。

    因为它真正想优化的是:

    • 同步路径不分配
    • 异步路径上的状态对象也尽量复用

    所以在真实高性能组件里,常见模式通常是:

    • 从对象池里取出一个 source 对象
    • 发起一次异步操作
    • 完成后把对象重置
    • 再还回池中

    也就是说,它和 ObjectPool 常常不是偶然搭配,而是天然能配起来的一组工具。

    它和 TaskCompletionSource<T> 是什么关系?

    这个对比很值得看。

    TaskCompletionSource<T>

    它的定位是:

    • 手动控制一个 Task<T> 的完成

    比如:

    • SetResult
    • SetException
    • SetCanceled

    这套模型很好理解,也很常用。

    但它的底层结果仍然是:

    • 你会得到一个 Task<T>

    IValueTaskSource<T>

    它更进一步,解决的是:

    • 手动控制异步完成
    • 但不想每次都落回一次性的 Task<T> 对象

    所以如果只用一句话区分:

    • TaskCompletionSource<T>:给你一个手动完成的 Task<T>
    • IValueTaskSource<T>:给你一个可被 ValueTask<T> 包装、且更适合复用的低层异步来源

    一个更贴近实际的例子:成功、异常、取消

    前面的 demo 只演示了成功路径。

    但真实实现里,通常至少还要考虑异常路径。

    例如:

    public ValueTask<int> StartAsync(bool fail)
    {
        _core.Reset();
    
        _ = Task.Run(async () =>
        {
            await Task.Delay(100);
    
            if (fail)
            {
                _core.SetException(new InvalidOperationException("failed"));
                return;
            }
    
            _core.SetResult(42);
        });
    
        return new ValueTask<int>(this, _core.Version);
    }

    调用:

    try
    {
        var result = await source.StartAsync(fail: true);
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.Message);
    }

    这说明它在能力上和 Task 一样,也要完整承载:

    • 成功
    • 异常
    • 取消

    只不过承载方式更底层。

    使用它时最容易踩的坑

    这部分比 demo 更重要。

    1. 同一个 ValueTask 被多次 await

    普通 Task 通常可以被多次 await。

    ValueTask 尤其是背后挂了 IValueTaskSource 时,语义没有这么宽松。

    如果你把它当成普通 Task 那样随便重复消费,很容易出问题。

    所以要先记住一个工程化原则:

    来自 IValueTaskSourceValueTask,默认按“一次性消费”来理解更安全。

    2. 在上一次操作没结束时就 Reset

    这个错误很致命。

    因为 Reset() 的含义是:

    • 我要开始下一次操作了

    如果上一次操作还没彻底结束,你就 reset 了,同一个 source 实例里的状态就会被覆盖。

    3. 并发复用同一个 source

    示例里的 SimpleValueTaskSource 其实就有一个默认前提:

    • 它不是并发安全的多次同时使用模型

    也就是说:

    • 一次只服务一个进行中的操作

    如果你想做真正的池化复用,就得保证:

    • 一个 source 同时只属于一次异步操作

    4. 忘记设置 RunContinuationsAsynchronously

    这不是绝对必须,但在很多场景里是非常值得显式设置的:

    _core.RunContinuationsAsynchronously = true;

    原因在于 continuation 是否同步内联执行,会影响:

    • 调度行为
    • 栈深度
    • 锁和回调之间的竞态风险

    对大多数手写 demo 和基础设施代码来说,把它设成 true 更稳妥。

    5. 把它用到普通业务代码里

    这是最常见的误用。

    很多人学完会本能地想:

    • 那以后是不是都该用 ValueTaskSource

    答案通常是否定的。

    因为你引入的复杂度非常真实:

    • 生命周期要自己管
    • 版本号要自己理解
    • 复用边界要自己保证
    • 竞态问题要自己扛

    如果你的场景不是明确的高频热点,这套复杂度大概率不值。

    它适合什么场景?

    • 自己在写底层高性能库
    • 每秒异步调用次数非常高
    • 分配已经被性能分析证明确实是瓶颈
    • 愿意接受更复杂的生命周期管理
    • 对象池化和复用模型已经设计清楚

    典型例子包括:

    • 网络栈
    • 自定义传输层
    • 高性能通道实现
    • 基础设施级组件

    它不适合什么场景?

    1. 普通 Web 业务代码

    绝大多数业务服务、控制器、应用层逻辑,没有必要手写这一层。

    2. 异步频率不高的场景

    如果吞吐量并没有高到让分配成为热点,那你只是把代码写复杂了。

    3. 团队还没把 ValueTask 用明白

    如果 ValueTask 自身的使用边界都还没形成稳定认知,就不该继续往下跳到 IValueTaskSource

    一个比较务实的学习顺序

    1. 先彻底理解 Taskasync/await
    2. 再理解 ValueTask 为什么存在
    3. 再理解 TaskCompletionSource<T> 的手动完成模型
    4. 最后再看 IValueTaskSource<T>ManualResetValueTaskSourceCore<T>

    因为它不是孤立知识点,而是站在前面这些东西之上的。

    总结

    ValueTaskSource 最值得理解的,不是接口长什么样,而是它为什么存在:

    • Task 很好用,但有分配成本
    • ValueTask 先优化了同步路径
    • IValueTaskSource 再把异步路径的状态对象复用问题也纳入优化范围

    所以它真正适合的是:

    • 高频
    • 底层
    • 对分配极敏感
    • 愿意承担复杂度

    一句话收尾:

    IValueTaskSource 不是“更高级的 Task”,而是给高性能基础设施准备的异步状态承载接口。

    目前已有订阅:智谱 GLM Pro 120 元/月 + GPT Plus 125 元/月( GooglePay )

    情况:智谱 Pro 用量周用量蹬完+codex 周用完差不多,如果用量不虚标的话大概一周在 20x Claude Pro 额度?目前 GLM 下午 3 倍用量用不起,GPT Plus 也砍了 5h 额度

    使用方式:Claude code (目前配置的 GLM5.1 )+ codex cli + openclaw (少,定时任务),常用时间工作日 19-24 点,周末全天随机,个人兴趣开发,没有转化收入,纯兴趣发电

    需求:要求覆盖用量,最好保留 GPT 的订阅,接受的订阅预算在 500 元左右,有 GooglePay ,不接受中转站,不考虑 claude (不是不想用,封号实在受不了不想折腾了)

    已做的考虑:

    1. 升级 GLM Max
      顾虑在于智谱最近风评太差,主要是卡顿、退款和封禁。我目前个人 Pro 周周用完,使用时间刚好基本错开高峰期,没有被封号过,升级到 Max 后用量充足,抛开卡顿和封号问题应该可以

    2. 取消 GLM ,换为阿里 Coding Plan
      阿里 Coding Plan 量大管饱,价格也可以,Pro 加上也在预算内,但问题是抢不到,抢了几天均失败

    3. 保持 GLM Pro ,增加 Github Copilot
      看到 Copilot 的 39 刀套餐用量是按次计算的,因为计算方式不同所以不知道够不够使用,作为补充套餐应该用量上没问题,但看新闻好像砍了模型的使用?而且好像上下文有阉割,麻烦的是得做 sub2api 这类的聚合,不然得用三个 cli 有点麻烦

    4. GPT 5x Pro
      100 刀对于无转化收入的开发来说可能有点贵了,但都这个价位了量确实应该够了

    5. cursor
      最早开始 vibe coding 使用的 Cursor ,那时候只是代码补全,现在看除了几个订阅,和 Copilot 对标,但好像不如 Copilot ?(我不确定,没仔细研究,可能不对)

    6. 其他方案
      Minimax ,订阅过一个月低档的,速度很快,跑跑 openclaw 玩玩可以,但编程场景还是算了; Kimi ,也是订阅过一个月,用量太小,不知道高档套餐如何,但就低档这个用量我估计高档也不够用;火山腾讯千帆之类的可能问题都很多,不在考虑范围了

    希望能寻求一个折中的方案,个人为兴趣爱好发电,想在模型质量与价格之间寻求一个平衡,希望大佬们友好讨论,从个人角度给点意见,谢谢🙏

    我想手搓一个宝宝监护器,现在卡在摄像头选择上了,求大佬给点建议
    要求

    1. 因为涉及多个房间因此需要支持无线 rtsp 推流 。
    2. 由于是漆黑环境需要红外补光、波长 940 无红曝。
    3. 需要有麦克风收音。
    4. 最好是摄像头模块,如果是成品的话后期需要改造云台可能比较麻烦。

    目前了解到的方案有

    1. esp32-cam + ov2xxx 摄像头 ,(看起来画质很差、无红外、无收音)
    2. kuckfox + SC3336(无红外、无收音)
    3. imx219 + pi zero (无红外、无收音)